diff --git a/src/assets/gif/ticket_alt.gif b/src/assets/gif/ticket_alt.gif new file mode 100644 index 0000000..ee40cbe Binary files /dev/null and b/src/assets/gif/ticket_alt.gif differ diff --git a/src/assets/index.tsx b/src/assets/index.tsx index 015da6e..7b93693 100644 --- a/src/assets/index.tsx +++ b/src/assets/index.tsx @@ -33,6 +33,7 @@ import HeaderLogo from '@/assets/icons/header_logo.svg?react'; import GearIcon from '@/assets/icons/icon_gear.svg?react'; import DefaultProfile from '@/assets/icons/default_profile.svg?react'; import CheckIcon from '@/assets/icons/check.svg?react'; +import TicketAlt from '@/assets/gif/ticket_alt.gif'; export { MoreVerticalIcon, @@ -70,4 +71,5 @@ export { GearIcon, DefaultProfile, CheckIcon, + TicketAlt, }; diff --git a/src/components/review/ReviewLayout.tsx b/src/components/review/ReviewLayout.tsx index 9b6f3cd..c4000cf 100644 --- a/src/components/review/ReviewLayout.tsx +++ b/src/components/review/ReviewLayout.tsx @@ -4,6 +4,7 @@ import { Button, Header } from '@/components'; interface ReviewStepLayoutProps { title?: string; + description?: string; children: ReactNode; onClickNext: () => void; onClickBack: () => void; @@ -13,6 +14,7 @@ interface ReviewStepLayoutProps { export default function ReviewStepLayout({ title, + description, children, onClickNext, onClickBack, @@ -25,10 +27,11 @@ export default function ReviewStepLayout({
-
+
{title && (

{title}

+ {description &&

{description}

}
)} diff --git a/src/components/review/TagSection.tsx b/src/components/review/TagSection.tsx index 3270513..5d10364 100644 --- a/src/components/review/TagSection.tsx +++ b/src/components/review/TagSection.tsx @@ -18,7 +18,7 @@ export default function TagSection({ return (

- {title} {required && *} + {title} {required && *}

{options.map((option) => ( @@ -27,7 +27,7 @@ export default function TagSection({ onClick={() => onChange(option)} variant="secondary-assistive" color="gray" - size="sm" + size="xs" rounded="md" selected={selected.includes(option)} > diff --git a/src/constants/reviewTags.ts b/src/constants/reviewTags.ts index eda0575..39399e0 100644 --- a/src/constants/reviewTags.ts +++ b/src/constants/reviewTags.ts @@ -12,13 +12,20 @@ export const tagSections: TagSectionConfig[] = [ key: 'sound', title: '음향', required: true, - options: ['#음향최고', '#음향아쉬움', '#소리선명', '#음질만족', '#돌비사운드굿', '#잡음있음'], + options: ['#음향최고', '#음질깨끗', '#몰입감좋음', '#서라운드좋음', '#소리선명', '#현장감있음'], }, { key: 'environment', title: '관람 환경', required: true, - options: ['#좌석편함', '#시야좋음', '#청결상태굿', '#주변산만', '#출입구근처', '#조용함'], + options: [ + '#좌석편함', + '#시야탁트임', + '#쾌적한환경', + '#입출입편리', + '#청결유지잘됨', + '#분위기좋음', + ], }, { key: 'companion', diff --git a/src/pages/review/MovieInfoStep.tsx b/src/pages/review/MovieInfoStep.tsx index 5240630..6a61c64 100644 --- a/src/pages/review/MovieInfoStep.tsx +++ b/src/pages/review/MovieInfoStep.tsx @@ -68,7 +68,8 @@ export default function MovieInfoForm() { placeholder="관람하신 영화관을 선택해주세요" onClickPlus={() => navigate('/review/info/cinema')} /> - +
+
{/*추후 좌석 페이지 연결 시 readOnly 속성 추가*/} = MIN_TEXT_LENGTH; + const isValid = reviewTitle.trim().length > 0 && text.trim().length >= MIN_TEXT_LENGTH; const { openModal } = useModalStore(); const handleSubmit = () => { if (!text.trim()) return; @@ -26,9 +27,6 @@ export default function ReviewTextForm() { }, }); }; - const { isInitialized } = useReviewStore(); - const navigate = useNavigate(); - useEffect(() => { if (!isInitialized) { navigate('/review'); @@ -71,9 +69,20 @@ export default function ReviewTextForm() {
{/* 텍스트 입력 */} -
+
+ { + if (value.length <= 20) setReviewTitle(value); + }} + /> +
+ 후기 내용 * +