diff --git a/src/components/HomeNavigateConfirmModal/HomeNavigateConfirmModal.tsx b/src/components/HomeNavigateConfirmModal/HomeNavigateConfirmModal.tsx index f26fafb..20ad124 100644 --- a/src/components/HomeNavigateConfirmModal/HomeNavigateConfirmModal.tsx +++ b/src/components/HomeNavigateConfirmModal/HomeNavigateConfirmModal.tsx @@ -10,6 +10,10 @@ import Text from "@/components/ui/Text/Text"; import { useRoute } from "@/hooks/common/useRoute"; +import { useGenerateReviewStore } from "@/store/useGenerateReviewStore"; +import { useCreateReviewStore } from "@/store/useReviewStore"; +import { useScanDataStore } from "@/store/useScanDataStore"; + interface HomeNavigateConfirmModalProps { isOpen: boolean; handleClose: () => void; @@ -18,6 +22,10 @@ interface HomeNavigateConfirmModalProps { const HomeNavigateConfirmModal = ({ isOpen, handleClose }: HomeNavigateConfirmModalProps) => { const { navigateToHome } = useRoute(); + const { resetGenerateReviewData } = useGenerateReviewStore(); + const { resetCreateReviewData } = useCreateReviewStore(); + const { resetScanData } = useScanDataStore(); + // 이후 상태 초기값 재설정 const [isShowButtonChecked, setIsShowButtonChecked] = useState(false); @@ -27,6 +35,9 @@ const HomeNavigateConfirmModal = ({ isOpen, handleClose }: HomeNavigateConfirmMo const handleNavigateHome = () => { handleClose(); + resetGenerateReviewData(); + resetCreateReviewData(); + resetScanData(); navigateToHome(); }; diff --git a/src/components/ReceiptEdit/ReceiptEdit.tsx b/src/components/ReceiptEdit/ReceiptEdit.tsx index d7f863e..005b443 100644 --- a/src/components/ReceiptEdit/ReceiptEdit.tsx +++ b/src/components/ReceiptEdit/ReceiptEdit.tsx @@ -13,7 +13,7 @@ import { useScanDataStore } from "@/store/useScanDataStore"; const ReceiptEdit = () => { const { navigateToHome, navigateToSelectTag } = useRoute(); - const { scanData } = useScanDataStore(); + const { scanData, resetScanData } = useScanDataStore(); const { setOcrText } = useCreateReviewStore(); @@ -66,6 +66,11 @@ const ReceiptEdit = () => { navigateToSelectTag(); }; + const handleReScanClick = () => { + resetScanData(); + navigateToHome(); + }; + return (
@@ -114,7 +119,7 @@ const ReceiptEdit = () => { /> ) : ( <> -
- {reviewText} + {generateReviewData}
- send({ type: AppBridgeMessageType.COPY, payload: { review: reviewText } }) - } + onClick={() => { + send({ type: AppBridgeMessageType.COPY, payload: { review: generateReviewData } }); + + showToast(); + }} />
- {isToast && } + {isToast && }
- {IMG_STYLE_DATA.slice(1, 4).map((style) => ( + {IMG_STYLE_DATA.map((style) => (
(null); export function AppBridgeProvider({ children }: AppBridgeProviderProps) { const { setScanData } = useScanDataStore(); + const { setGenerateReviewData } = useGenerateReviewStore(); const userAgent = useUserAgent(); @@ -50,7 +52,7 @@ export function AppBridgeProvider({ children }: AppBridgeProviderProps) { receiveGeneratedReview: (jsonData: string) => { try { const data = JSON.parse(jsonData); - alert(`Generated Review: ${data.review}`); + setGenerateReviewData(data.result); } catch (error) { console.error("Invalid JSON data for generated review:", error); } diff --git a/src/components/provider/AppBridgeProvider/convertToNativeMessage.ts b/src/components/provider/AppBridgeProvider/convertToNativeMessage.ts index 4c5e8c4..4a229cc 100644 --- a/src/components/provider/AppBridgeProvider/convertToNativeMessage.ts +++ b/src/components/provider/AppBridgeProvider/convertToNativeMessage.ts @@ -8,10 +8,11 @@ const iosHandlers = { window.webkit?.messageHandlers.openGallery.postMessage(message), [AppBridgeMessageType.SHARE]: (message: string) => window.webkit?.messageHandlers.share.postMessage(message), - [AppBridgeMessageType.CREATE_REVIEW]: (message: { payload: { json: string } }) => - window.webkit?.messageHandlers.createReview.postMessage(message.payload.json), - [AppBridgeMessageType.COPY]: (message: { payload: { json: string } }) => - window.webkit?.messageHandlers.copy.postMessage(message.payload.json), + [AppBridgeMessageType.CREATE_REVIEW]: (message: { + payload: { ocrText: string; hashTag: string[]; reviewStyle: string }; + }) => window.webkit?.messageHandlers.createReview.postMessage(message.payload), + [AppBridgeMessageType.COPY]: (message: { payload: { review: string } }) => + window.webkit?.messageHandlers.copy.postMessage(message.payload), [AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: string } }) => window.response?.receiveScanResult(message.payload.result), [AppBridgeMessageType.RECEIVE_GENERATED_REVIEW]: (message: { payload: { result: string } }) => @@ -22,10 +23,11 @@ const androidHandlers = { [AppBridgeMessageType.OPEN_CAMERA]: () => window.AndroidBridge?.openCamera(), [AppBridgeMessageType.OPEN_GALLERY]: () => window.AndroidBridge?.openGallery(), [AppBridgeMessageType.SHARE]: () => window.AndroidBridge?.share(), - [AppBridgeMessageType.CREATE_REVIEW]: (message: { payload: { json: string } }) => - window.AndroidBridge?.createReview(message.payload.json), - [AppBridgeMessageType.COPY]: (message: { payload: { json: string } }) => - window.AndroidBridge?.copy(message.payload.json), + [AppBridgeMessageType.CREATE_REVIEW]: (message: { + payload: { ocrText: string; hashTag: string[]; reviewStyle: string }; + }) => window.AndroidBridge?.createReview(message.payload), + [AppBridgeMessageType.COPY]: (message: { payload: { review: string } }) => + window.AndroidBridge?.copy(message.payload), [AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: string } }) => window.response?.receiveScanResult(message.payload.result), [AppBridgeMessageType.RECEIVE_GENERATED_REVIEW]: (message: { payload: { result: string } }) => diff --git a/src/hooks/common/useRoute.ts b/src/hooks/common/useRoute.ts index 62ebe02..c5e6044 100644 --- a/src/hooks/common/useRoute.ts +++ b/src/hooks/common/useRoute.ts @@ -11,6 +11,7 @@ export const useRoute = () => { navigateToReceiptEdit: () => navigate(PATH.RECEIPT_EDIT), navigateToSelectStyle: () => navigate(PATH.SELECT_STYLE), navigateToSelectTag: () => navigate(PATH.SELECT_TAG), + navigateToReviewResult: () => navigate(PATH.REVIEW_RESULT), }; return routes; diff --git a/src/store/useGenerateReviewStore.ts b/src/store/useGenerateReviewStore.ts new file mode 100644 index 0000000..a070a61 --- /dev/null +++ b/src/store/useGenerateReviewStore.ts @@ -0,0 +1,13 @@ +import { create } from "zustand"; + +interface GenerateReviewStoreProps { + generateReviewData: string; + setGenerateReviewData: (review: string) => void; + resetGenerateReviewData: () => void; +} + +export const useGenerateReviewStore = create((set) => ({ + generateReviewData: "", + setGenerateReviewData: (review: string) => set({ generateReviewData: review }), + resetGenerateReviewData: () => set({ generateReviewData: "" }), +})); diff --git a/src/store/useReviewStore.ts b/src/store/useReviewStore.ts index 82197e9..85506ce 100644 --- a/src/store/useReviewStore.ts +++ b/src/store/useReviewStore.ts @@ -11,12 +11,13 @@ interface CreateReviewDataStore { setOcrText: (ocrText: string) => void; setHashTag: (hashTag: string[]) => void; setReviewStyle: (reviewStyle: string) => void; + resetCreateReviewData: () => void; } export const CREATE_REVIEW_DATA = { ocrText: "", hashTag: [], - reviewStyle: "", + reviewStyle: "FRIENDLY", }; export const useCreateReviewStore = create((set) => ({ @@ -33,4 +34,5 @@ export const useCreateReviewStore = create((set) => ({ set((state) => ({ createReviewData: { ...state.createReviewData, reviewStyle }, })), + resetCreateReviewData: () => set({ createReviewData: { ...CREATE_REVIEW_DATA } }), })); diff --git a/src/store/useScanDataStore.ts b/src/store/useScanDataStore.ts index 8751675..4df364a 100644 --- a/src/store/useScanDataStore.ts +++ b/src/store/useScanDataStore.ts @@ -5,9 +5,11 @@ import type { ScanResult } from "@/components/Home/Home"; interface ScanDataStoreProps { scanData: ScanResult[]; setScanData: (scanData: ScanResult[]) => void; + resetScanData: () => void; } export const useScanDataStore = create((set) => ({ scanData: [], setScanData: (scanData: ScanResult[]) => set({ scanData }), + resetScanData: () => set({ scanData: [] }), })); diff --git a/src/types/global.d.ts b/src/types/global.d.ts index b3924ce..1c9f6b3 100644 --- a/src/types/global.d.ts +++ b/src/types/global.d.ts @@ -10,6 +10,15 @@ type MessageHandler = { }; declare global { + interface CreateReviewPayload { + ocrText: string; + hashTag: string[]; + reviewStyle: string; + } + + interface CopyMessagePayload { + review: string; + } interface Window { response?: { receiveScanResult: (jsonData: string) => void; @@ -20,16 +29,16 @@ declare global { openCamera: MessageHandler; openGallery: MessageHandler; share: MessageHandler; - createReview: MessageHandler; - copy: MessageHandler; + createReview: MessageHandler; + copy: MessageHandler; }; }; AndroidBridge?: { openCamera: () => void; openGallery: () => void; share: () => void; - createReview: (json: string) => void; - copy: (json: string) => void; + createReview: (json: CreateReviewPayload) => void; + copy: (json: CopyMessagePayload) => void; }; } }