From 212f3bd28320dddfe46c144c28a8f14c68a8a395 Mon Sep 17 00:00:00 2001 From: cloud0406 Date: Sat, 4 Jan 2025 12:53:05 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E2=99=BB=EF=B8=8F[Refactor]=20=EB=A7=88?= =?UTF-8?q?=EA=B0=90=20=EB=82=A0=EC=A7=9C=20=EB=A7=8C=EB=82=98=EB=8A=94=20?= =?UTF-8?q?=EB=82=A0=20=EC=9D=B4=ED=9B=84=20=EC=84=A0=ED=83=9D=20=EB=AA=BB?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/club-create/container/DatePickerField.tsx | 4 ++++ src/features/club-create/container/FormContainer.tsx | 1 + 2 files changed, 5 insertions(+) diff --git a/src/features/club-create/container/DatePickerField.tsx b/src/features/club-create/container/DatePickerField.tsx index b8b48298..4020f9dd 100644 --- a/src/features/club-create/container/DatePickerField.tsx +++ b/src/features/club-create/container/DatePickerField.tsx @@ -18,6 +18,7 @@ interface DatePickerContainerProps { label: string; error?: string; placeholder: string; + targetDate?: Date; } function DatePickerContainer({ @@ -26,8 +27,10 @@ function DatePickerContainer({ label, error, placeholder, + targetDate, }: DatePickerContainerProps) { const minDate = useMemo(() => new Date(), []); + const maxDate = name === 'endDate' && targetDate ? targetDate : undefined; return ( @@ -39,6 +42,7 @@ function DatePickerContainer({ selected={field.value} onChange={field.onChange} minDate={minDate} + maxDate={maxDate} showTimeSelect timeIntervals={10} dateFormat="yyyy-MM-dd a HH:mm" diff --git a/src/features/club-create/container/FormContainer.tsx b/src/features/club-create/container/FormContainer.tsx index 4ce43927..5969b254 100644 --- a/src/features/club-create/container/FormContainer.tsx +++ b/src/features/club-create/container/FormContainer.tsx @@ -118,6 +118,7 @@ function FormContainer() { label="언제 모임을 마감할까요?" error={errors.endDate?.message} placeholder="모임의 모집 마감 날짜를 선택해 주세요!" + targetDate={watch('targetDate')} /> Date: Sat, 4 Jan 2025 15:06:37 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E2=99=BB=EF=B8=8F[Refactor]=20=ED=95=98?= =?UTF-8?q?=EB=A3=A8=20=EC=9D=B4=EC=A0=84=EA=B9=8C=EC=A7=80=EB=A7=8C=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/club-create/container/DatePickerField.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/features/club-create/container/DatePickerField.tsx b/src/features/club-create/container/DatePickerField.tsx index 4020f9dd..0676607c 100644 --- a/src/features/club-create/container/DatePickerField.tsx +++ b/src/features/club-create/container/DatePickerField.tsx @@ -30,7 +30,13 @@ function DatePickerContainer({ targetDate, }: DatePickerContainerProps) { const minDate = useMemo(() => new Date(), []); - const maxDate = name === 'endDate' && targetDate ? targetDate : undefined; + const maxDate = useMemo( + () => + name === 'endDate' && targetDate + ? new Date(targetDate.getTime() - 24 * 60 * 60 * 1000) + : undefined, + [name, targetDate], + ); return ( From a005b8c5808f4ce514c7780d1c9858b5599218fd Mon Sep 17 00:00:00 2001 From: cloud0406 Date: Sat, 4 Jan 2025 15:35:01 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E2=99=BB=EF=B8=8F[Refactor]=20=EB=AA=A8?= =?UTF-8?q?=EC=A7=91=20=EB=A7=88=EA=B0=90=20=EB=AA=A8=EC=9E=84=20=EB=82=A0?= =?UTF-8?q?=EC=A7=9C=20=EC=9D=B4=EC=A0=84=EC=9C=BC=EB=A1=9C=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EB=AC=B8=EA=B5=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/club-create/container/FormContainer.tsx | 5 ++--- src/features/club-create/hooks/useBookClubForm.ts | 2 ++ src/features/club-create/types/bookClubSchema.ts | 10 ++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/features/club-create/container/FormContainer.tsx b/src/features/club-create/container/FormContainer.tsx index 5969b254..681159a1 100644 --- a/src/features/club-create/container/FormContainer.tsx +++ b/src/features/club-create/container/FormContainer.tsx @@ -17,7 +17,6 @@ function FormContainer() { control, setValue, errors, - isValid, watch, onSubmit, isLoading, @@ -140,8 +139,8 @@ function FormContainer() { size="medium" fillType="solid" themeColor="green-normal-01" - disabled={!isValid || isLoading} - className={`h-14 ${!isValid || isLoading ? '' : 'hover-dim'}`} + disabled={isLoading} + className={`h-14 ${isLoading ? '' : 'hover-dim'}`} /> diff --git a/src/features/club-create/hooks/useBookClubForm.ts b/src/features/club-create/hooks/useBookClubForm.ts index 8494f5f0..3615a97a 100644 --- a/src/features/club-create/hooks/useBookClubForm.ts +++ b/src/features/club-create/hooks/useBookClubForm.ts @@ -14,6 +14,8 @@ export const useBookClubForm = () => { } = usePopup(); const form = useForm({ resolver: zodResolver(bookClubSchema), + mode: 'onChange', + reValidateMode: 'onChange', }); const onSubmit = form.handleSubmit(async (data: BookClubForm) => { diff --git a/src/features/club-create/types/bookClubSchema.ts b/src/features/club-create/types/bookClubSchema.ts index 008d5aa3..937a3db1 100644 --- a/src/features/club-create/types/bookClubSchema.ts +++ b/src/features/club-create/types/bookClubSchema.ts @@ -74,6 +74,16 @@ export const bookClubSchema = z }); } } + + if (data.endDate && data.targetDate) { + if (data.endDate >= data.targetDate) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: '모집 마감일은 모임 날짜보다 이전이어야 합니다', + path: ['endDate'], + }); + } + } }); export type BookClubForm = z.infer; From c662f3fa67a11db553fae500bf425ae426d37490 Mon Sep 17 00:00:00 2001 From: cloud0406 Date: Sat, 4 Jan 2025 16:28:49 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=E2=99=BB=EF=B8=8F[Refactor]=20=EB=B6=81?= =?UTF-8?q?=ED=81=B4=EB=9F=BD=20=EC=83=9D=EC=84=B1=EC=8B=9C=EC=97=90?= =?UTF-8?q?=EB=8A=94=20=ED=86=A0=EC=8A=A4=ED=8A=B8=20=EB=8C=80=EC=8B=A0=20?= =?UTF-8?q?=ED=8C=9D=EC=97=85=EB=A7=8C=20=EB=9D=84=EC=9A=B0=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/book-club/react-query/customHooks.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/api/book-club/react-query/customHooks.ts b/src/api/book-club/react-query/customHooks.ts index b3d66f67..defec8ef 100644 --- a/src/api/book-club/react-query/customHooks.ts +++ b/src/api/book-club/react-query/customHooks.ts @@ -22,11 +22,6 @@ export function useBookClubCreateMutation() { queryClient.invalidateQueries({ queryKey: bookClubs.my().queryKey, }); - - showToast({ - message: '북클럽이 성공적으로 생성되었습니다.', - type: 'success', - }); }, onError: () => { showToast({ message: '북클럽 생성에 실패했습니다.', type: 'error' });