diff --git a/frontend/src/hooks/useAlertModal.ts b/frontend/src/hooks/useAlertModal.ts deleted file mode 100644 index aaa276031..000000000 --- a/frontend/src/hooks/useAlertModal.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { useState } from 'react'; - -const useAlertModal = () => { - const [isAlertModalOpen, setIsAlertModalOpen] = useState(false); - - const openAlertModal = () => setIsAlertModalOpen(true); - const closeAlertModal = () => setIsAlertModalOpen(false); - - return { - isAlertModalOpen, - openAlertModal, - closeAlertModal, - }; -}; - -export default useAlertModal; diff --git a/frontend/src/hooks/useConfirmModal.ts b/frontend/src/hooks/useConfirmModal.ts deleted file mode 100644 index 172b337e3..000000000 --- a/frontend/src/hooks/useConfirmModal.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { useState } from 'react'; - -const useConfirmModal = () => { - const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false); - - const openConfirmModal = () => setIsConfirmModalOpen(true); - const closeConfirmModal = () => setIsConfirmModalOpen(false); - - return { - isConfirmModalOpen, - openConfirmModal, - closeConfirmModal, - }; -}; - -export default useConfirmModal; diff --git a/frontend/src/hooks/useErrorModal.ts b/frontend/src/hooks/useErrorModal.ts deleted file mode 100644 index 84d1e9aac..000000000 --- a/frontend/src/hooks/useErrorModal.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { useState } from 'react'; - -const useErrorModal = () => { - const [isErrorModalOpen, setIsErrorModalOpen] = useState(false); - const [errorMessage, setErrorMessage] = useState(''); - - const openErrorModal = (errorMessage: string) => { - setErrorMessage(errorMessage); - setIsErrorModalOpen(true); - }; - - const closeErrorModal = () => { - setErrorMessage(''); - setIsErrorModalOpen(false); - }; - - return { - isErrorModalOpen, - errorMessage, - openErrorModal, - closeErrorModal, - }; -}; - -export default useErrorModal; diff --git a/frontend/src/hooks/useReviewForm.ts b/frontend/src/hooks/useReviewForm.ts index 3c3cd36e6..165c77ccc 100644 --- a/frontend/src/hooks/useReviewForm.ts +++ b/frontend/src/hooks/useReviewForm.ts @@ -5,14 +5,14 @@ import { Keyword, Question, ReviewContent, WritingReviewInfoData } from '@/types interface UseReviewFormProps { dataToWrite: WritingReviewInfoData; - openErrorModal: (errorMessage: string) => void; } -const useReviewForm = ({ dataToWrite, openErrorModal }: UseReviewFormProps) => { +const useReviewForm = ({ dataToWrite }: UseReviewFormProps) => { const [answers, setAnswers] = useState( dataToWrite.questions.map((question: Question) => ({ questionId: question.id, answer: '' })) || [], ); const [selectedKeywords, setSelectedKeywords] = useState([]); + const [errorMessage, setErrorMessage] = useState(''); const isValidAnswersLength = !answers.some((id) => id.answer.length < REVIEW.answerMinLength); const isValidKeywordSelection = @@ -27,8 +27,7 @@ const useReviewForm = ({ dataToWrite, openErrorModal }: UseReviewFormProps) => { const handleKeywordButtonClick = (keyword: Keyword) => { if (selectedKeywords.length === REVIEW.keywordMaxCount && !selectedKeywords.includes(keyword.id)) { - openErrorModal('키워드는 최대 5개까지 선택할 수 있어요.'); - return; + setErrorMessage('키워드는 최대 5개까지 선택할 수 있어요.'); } setSelectedKeywords((prev) => @@ -38,6 +37,7 @@ const useReviewForm = ({ dataToWrite, openErrorModal }: UseReviewFormProps) => { return { answers, + errorMessage, selectedKeywords, isValidForm, handleAnswerChange, diff --git a/frontend/src/pages/ReviewWriting/components/ReviewWritingContents/index.tsx b/frontend/src/pages/ReviewWriting/components/ReviewWritingContents/index.tsx index 85731fcd7..17e5520c0 100644 --- a/frontend/src/pages/ReviewWriting/components/ReviewWritingContents/index.tsx +++ b/frontend/src/pages/ReviewWriting/components/ReviewWritingContents/index.tsx @@ -7,8 +7,7 @@ import Button from '@/components/common/Button'; import LongReviewItem from '@/components/common/LongReviewItem'; import useGetDataToWrite from '@/hooks/review/useGetDataToWrite'; import useMutateReview from '@/hooks/review/useMutateReview'; -import useConfirmModal from '@/hooks/useConfirmModal'; -import useErrorModal from '@/hooks/useErrorModal'; +import useModals from '@/hooks/useModals'; import useReviewForm from '@/hooks/useReviewForm'; import useReviewRequestCode from '@/hooks/useReviewRequestCode'; import { ReviewData } from '@/types'; @@ -22,23 +21,27 @@ import * as S from './styles'; const SUBMIT_CONFIRM_MESSAGE = `리뷰를 제출할까요? 제출한 뒤에는 수정할 수 없어요.`; +const MODAL_KEYS = { + confirm: 'CONFIRM', + error: 'ERROR', +}; + const ReviewWritingContents = () => { const navigate = useNavigate(); const { reviewRequestCode } = useReviewRequestCode(); - const { isConfirmModalOpen, openConfirmModal, closeConfirmModal } = useConfirmModal(); - const { isErrorModalOpen, errorMessage, openErrorModal, closeErrorModal } = useErrorModal(); + const { isOpen, openModal, closeModal } = useModals(); const { postReview } = useMutateReview(); const { dataToWrite } = useGetDataToWrite({ reviewRequestCode }); - const { answers, selectedKeywords, isValidForm, handleAnswerChange, handleKeywordButtonClick } = useReviewForm({ - dataToWrite, - openErrorModal, - }); + const { answers, errorMessage, selectedKeywords, isValidForm, handleAnswerChange, handleKeywordButtonClick } = + useReviewForm({ + dataToWrite, + }); const handleClickSubmitButton = async (event: React.FormEvent) => { event.preventDefault(); - openConfirmModal(); + openModal(MODAL_KEYS.confirm); }; const handleSubmitReview = async () => { @@ -50,11 +53,11 @@ const ReviewWritingContents = () => { try { postReview({ reviewData }); - closeConfirmModal(); + closeModal(MODAL_KEYS.confirm); navigate('/user/review-writing-complete', { replace: true }); } catch (error) { - closeConfirmModal(); - openErrorModal('리뷰를 제출할 수 없어요.'); + closeModal(MODAL_KEYS.confirm); + openModal(MODAL_KEYS.error); } }; @@ -128,21 +131,21 @@ const ReviewWritingContents = () => { - {isConfirmModalOpen && ( + {isOpen(MODAL_KEYS.confirm) && ( closeModal(MODAL_KEYS.confirm) }} + handleClose={() => closeModal(MODAL_KEYS.confirm)} isClosableOnBackground={true} > {SUBMIT_CONFIRM_MESSAGE} )} - {isErrorModalOpen && ( + {isOpen(MODAL_KEYS.error) && ( closeModal(MODAL_KEYS.error) }} + handleClose={() => closeModal(MODAL_KEYS.error)} /> )}