diff --git a/src/components/ReceiptEdit/ReceiptEdit.tsx b/src/components/ReceiptEdit/ReceiptEdit.tsx index 5e05cf6..eedcd2b 100644 --- a/src/components/ReceiptEdit/ReceiptEdit.tsx +++ b/src/components/ReceiptEdit/ReceiptEdit.tsx @@ -10,44 +10,42 @@ import { useRoute } from "@/hooks/common/useRoute"; import { useCreateReviewStore } from "@/store/useReviewStore"; import { useScanDataStore } from "@/store/useScanDataStore"; -const useKeyboardAvoidance = () => { - const [keyboardVisible, setKeyboardVisible] = useState(false); - const [keyboardHeight, setKeyboardHeight] = useState(0); - - useEffect(() => { - const handleVisualViewportChange = () => { - const isKeyboardVisible = !!( - window.visualViewport && window.visualViewport.height < window.innerHeight - ); - setKeyboardVisible(isKeyboardVisible); - - if (isKeyboardVisible) { - setKeyboardHeight( - window.visualViewport ? window.innerHeight - window.visualViewport.height : 0, - ); - } else { - setKeyboardHeight(0); - } - }; - - if (window.visualViewport) { - window.visualViewport.addEventListener("resize", handleVisualViewportChange); - handleVisualViewportChange(); - } - - return () => { - if (window.visualViewport) { - window.visualViewport.removeEventListener("resize", handleVisualViewportChange); - } - }; - }, []); - - return { keyboardVisible, keyboardHeight }; -}; +// const useKeyboardAvoidance = () => { +// const [keyboardVisible, setKeyboardVisible] = useState(false); +// const [keyboardHeight, setKeyboardHeight] = useState(0); + +// useEffect(() => { +// const handleVisualViewportChange = () => { +// const isKeyboardVisible = !!( +// window.visualViewport && window.visualViewport.height < window.innerHeight +// ); +// setKeyboardVisible(isKeyboardVisible); + +// if (isKeyboardVisible) { +// setKeyboardHeight( +// window.visualViewport ? window.innerHeight - window.visualViewport.height : 0, +// ); +// } else { +// setKeyboardHeight(0); +// } +// }; + +// if (window.visualViewport) { +// window.visualViewport.addEventListener("resize", handleVisualViewportChange); +// handleVisualViewportChange(); +// } + +// return () => { +// if (window.visualViewport) { +// window.visualViewport.removeEventListener("resize", handleVisualViewportChange); +// } +// }; +// }, []); + +// return { keyboardVisible, keyboardHeight }; +// }; const ReceiptEdit = () => { - const { keyboardVisible, keyboardHeight } = useKeyboardAvoidance(); - const { navigateToHome, navigateToSelectTag } = useRoute(); const { scanData, resetScanData } = useScanDataStore(); @@ -84,9 +82,9 @@ const ReceiptEdit = () => { setFocusState((prevState) => ({ ...prevState, [key]: false })); }; - const handleInputChange = (key: string, value: string) => { + const handleInputChange = (index: number, value: string) => { setFormData((prevData) => - prevData.map((item) => (item.key === key ? { ...item, value } : item)), + prevData.map((item, idx) => (idx === index ? { ...item, value } : item)), ); }; @@ -129,39 +127,39 @@ const ReceiptEdit = () => {
{formData.map((data, index) => (
-
- - {data.key} - - handleFocus(data.key)} - onBlur={() => handleBlur(data.key)} - isFocus={focusState[data.key] || false} - onChange={(e) => handleInputChange(data.key, e.target.value)} - /> -
+ + {data.key} + + handleFocus(index.toString())} + onBlur={() => handleBlur(index.toString())} + isFocus={focusState[index.toString()] || false} + onChange={(e) => handleInputChange(index, e.target.value)} + />
))}
-
+
{Object.values(focusState).some((isFocus) => isFocus) ? (
+
+ + ); +}; + +export default ReceiptInputPage; diff --git a/src/pages/ReviewResultPage/ReviewResultPage.tsx b/src/pages/ReviewResultPage/ReviewResultPage.tsx index 61c8154..8070280 100644 --- a/src/pages/ReviewResultPage/ReviewResultPage.tsx +++ b/src/pages/ReviewResultPage/ReviewResultPage.tsx @@ -43,6 +43,8 @@ export default function ReviewResultPage() { }; useEffect(() => { + if (!generateReviewData) return; + if (generateReviewData === "error") { navigateToCreateReviewFail(); } else { diff --git a/src/router/AppRouter.tsx b/src/router/AppRouter.tsx index 25dca7c..485921a 100644 --- a/src/router/AppRouter.tsx +++ b/src/router/AppRouter.tsx @@ -8,6 +8,7 @@ import CreateReviewFailPage from "@/pages/CreateReviewFailPage/CreateReviewFailP import HomePage from "@/pages/HomePage"; import LoadingPage from "@/pages/LoadingPage/LoadingPage"; import ReceiptEditPage from "@/pages/ReceiptEditPage"; +import ReceiptInputPage from "@/pages/ReceiptInputPage/ReceiptInputPage"; import RecognitionFailPage from "@/pages/RecognitionFailPage"; import ReviewResultPage from "@/pages/ReviewResultPage/ReviewResultPage"; import SelectStylePage from "@/pages/SelectStylePage"; @@ -31,6 +32,10 @@ const AppRouter = () => { path: PATH.RECEIPT_EDIT, element: , }, + { + path: PATH.RECEIPT_INPUT, + element: , + }, { path: PATH.SELECT_TAG, element: , diff --git a/src/store/useReviewStore.ts b/src/store/useReviewStore.ts index 85506ce..70b2067 100644 --- a/src/store/useReviewStore.ts +++ b/src/store/useReviewStore.ts @@ -4,6 +4,7 @@ interface CreateReviewData { ocrText: string; hashTag: string[]; reviewStyle: string; + tagList: string[]; } interface CreateReviewDataStore { @@ -11,6 +12,7 @@ interface CreateReviewDataStore { setOcrText: (ocrText: string) => void; setHashTag: (hashTag: string[]) => void; setReviewStyle: (reviewStyle: string) => void; + setTagList: (tagList: string[]) => void; resetCreateReviewData: () => void; } @@ -18,6 +20,20 @@ export const CREATE_REVIEW_DATA = { ocrText: "", hashTag: [], reviewStyle: "FRIENDLY", + tagList: [ + // 초기 태그 리스트 + "음식이 맛있어요", + "양이 많아요", + "가성비가 좋아요", + "메뉴 구성이 알차요", + "매장이 넓어요", + "단체모임 하기 좋아요", + "뷰가 좋아요", + "아늑해요", + "분위기가 좋아요", + "친절해요", + "매장이 청결해요", + ], }; export const useCreateReviewStore = create((set) => ({ @@ -34,5 +50,9 @@ export const useCreateReviewStore = create((set) => ({ set((state) => ({ createReviewData: { ...state.createReviewData, reviewStyle }, })), + setTagList: (tagList: string[]) => + set((state) => ({ + createReviewData: { ...state.createReviewData, tagList }, + })), resetCreateReviewData: () => set({ createReviewData: { ...CREATE_REVIEW_DATA } }), }));