From dd47bd4e331be54f53d714e6ef08c60b48e2fc7e Mon Sep 17 00:00:00 2001 From: jaeml06 Date: Wed, 21 Jan 2026 14:59:35 +0900 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20=EC=BA=98=EB=A6=B0=EB=8D=94=EA=B0=80?= =?UTF-8?q?=20global=EC=97=90=EC=84=9C=20=EC=84=A4=EC=A0=95=ED=95=9C=20fon?= =?UTF-8?q?t=EB=A1=9C=20=EC=B6=9C=EB=A0=A5=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/globals.css | 9 ++++-- .../ui/ReactDatepickerAdapter.tsx | 6 ++-- .../ui/ReactDatepicker.tsx | 30 ++++++++++--------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/app/globals.css b/src/app/globals.css index 107225a..69a11bf 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -524,9 +524,14 @@ justify-content: space-between; width: 100% !important; } -.react-datepicker__day-name { +.react-datepicker__day-name, +.react-datepicker__day-name span { + font-family: var(--font-pretendard) !important; + font-weight: 500 !important; + font-size: 14px !important; + line-height: 20px !important; + letter-spacing: -0.02em !important; color: #64748b !important; - font-weight: 600 !important; flex: 1 !important; /* Distribute evenly */ width: auto !important; line-height: 2.5rem !important; /* Mobile friendly height */ diff --git a/src/features/host-range-selector/ui/ReactDatepickerAdapter.tsx b/src/features/host-range-selector/ui/ReactDatepickerAdapter.tsx index eb8e39f..97736c6 100644 --- a/src/features/host-range-selector/ui/ReactDatepickerAdapter.tsx +++ b/src/features/host-range-selector/ui/ReactDatepickerAdapter.tsx @@ -205,7 +205,7 @@ export function ReactDatepickerAdapter({ > - + {format(date, 'M월')} {showNextMonthTooltip && !nextMonthButtonDisabled ? ( @@ -266,7 +266,7 @@ export function ReactDatepickerAdapter({ textClass = 'text-slate-300'; } else if (isSelected) { bgClass = 'bg-gray-800'; - textClass = 'text-white font-bold'; + textClass = 'text-white'; } else if (isInDragRange) { bgClass = 'bg-slate-100'; textClass = 'text-slate-900'; @@ -290,7 +290,7 @@ export function ReactDatepickerAdapter({ style={{ touchAction: 'none' }} >
{day}
diff --git a/src/features/vote-results-calendar/ui/ReactDatepicker.tsx b/src/features/vote-results-calendar/ui/ReactDatepicker.tsx index a643032..e88feb4 100644 --- a/src/features/vote-results-calendar/ui/ReactDatepicker.tsx +++ b/src/features/vote-results-calendar/ui/ReactDatepicker.tsx @@ -99,13 +99,13 @@ export function ReactDatePickerVoteResultsCalendar({ if (votes > 0) { if (focusedParticipant) { bgClass = 'bg-gray-800'; - textClass = 'text-white font-bold'; + textClass = 'text-white'; } else if (rank && rank <= 3) { bgClass = 'bg-blue-100 shadow-sm'; - textClass = 'text-white font-bold'; + textClass = 'text-white'; } else { bgClass = 'bg-blue-30'; - textClass = 'text-blue-100 font-medium'; + textClass = 'text-blue-100'; } } else { bgClass = 'hover:bg-slate-100'; @@ -126,16 +126,18 @@ export function ReactDatePickerVoteResultsCalendar({ return (
{day} @@ -184,7 +186,7 @@ export function ReactDatePickerVoteResultsCalendar({ > - + {format(date, 'M월')} + ); +} + +// Menu를 위한 Divider 스타일 컴포넌트 +function MenuDivider() { + return
; +} + +export const Menu = Object.assign(MenuMain, { + Item: MenuItem, + Divider: MenuDivider, +}); diff --git a/src/shared/ui/menu/index.ts b/src/shared/ui/menu/index.ts new file mode 100644 index 0000000..81b9371 --- /dev/null +++ b/src/shared/ui/menu/index.ts @@ -0,0 +1 @@ +export { Menu } from './Menu'; From a7838000f0570c29eb50315efdb7add0eb0140c5 Mon Sep 17 00:00:00 2001 From: jaeml06 Date: Wed, 21 Jan 2026 15:41:35 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=ED=88=AC=ED=91=9C/=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=EC=97=90=20router.replace=20=EC=A0=81=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EB=92=A4=EB=A1=9C=EA=B0=80=EA=B8=B0=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/meet-create-date/model/useDateSelect.ts | 8 ++++---- src/features/meet-create/ui/MeetCreatePage.tsx | 2 +- .../participant-edit-date/model/useParticipantEditDate.ts | 8 ++++++-- .../participant-edit-name/model/useParticipantEditName.ts | 2 +- .../model/useParticipantRegisterDate.ts | 8 ++++++-- .../model/useParticipantRegisterName.ts | 2 +- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/features/meet-create-date/model/useDateSelect.ts b/src/features/meet-create-date/model/useDateSelect.ts index 2ca4e81..b4f8a14 100644 --- a/src/features/meet-create-date/model/useDateSelect.ts +++ b/src/features/meet-create-date/model/useDateSelect.ts @@ -17,7 +17,7 @@ export function useDateSelect(hostName: string, meetingName: string) { hostName, meetingName, }); - router.push(`/create?${params.toString()}`); + router.replace(`/create?${params.toString()}`); }; const handleNext = async (formattedDates: string[]) => { @@ -49,7 +49,7 @@ export function useDateSelect(hostName: string, meetingName: string) { const handleDirectVote = () => { if (createdMeetingId) { - router.push(`/meet/${createdMeetingId}`); + router.replace(`/meet/${createdMeetingId}`); } }; @@ -63,10 +63,10 @@ export function useDateSelect(hostName: string, meetingName: string) { }); console.log('주최자 투표 완료'); // 캐시 무효화를 위해 전체 페이지 새로고침으로 이동 - window.location.href = `/meet/${createdMeetingId}`; + router.replace(`/meet/${createdMeetingId}`); } catch (error) { console.error('투표 실패:', error); - window.location.href = `/meet/${createdMeetingId}`; + router.replace(`/meet/${createdMeetingId}`); } } }; diff --git a/src/features/meet-create/ui/MeetCreatePage.tsx b/src/features/meet-create/ui/MeetCreatePage.tsx index 5917fbe..951b2d2 100644 --- a/src/features/meet-create/ui/MeetCreatePage.tsx +++ b/src/features/meet-create/ui/MeetCreatePage.tsx @@ -41,7 +41,7 @@ export default function MeetCreatePage({ hostName: hostName.trim(), meetingName: finalMeetingName, }); - router.push(`/date?${params.toString()}`); + router.replace(`/date?${params.toString()}`); }; return ( diff --git a/src/features/participant-edit-date/model/useParticipantEditDate.ts b/src/features/participant-edit-date/model/useParticipantEditDate.ts index 7ae5f9a..1ae51b8 100644 --- a/src/features/participant-edit-date/model/useParticipantEditDate.ts +++ b/src/features/participant-edit-date/model/useParticipantEditDate.ts @@ -99,12 +99,16 @@ export function useParticipantEditDate(meetingId: string) { const successModal = useDisclosure(); const handleBack = () => { - router.back(); + const params = new URLSearchParams(); + if (participantName) { + params.set('name', participantName); + } + router.replace(`/meet/${meetingId}/edit?${params.toString()}`); }; const handleSuccessModalClose = () => { successModal.close(); - router.push(`/meet/${meetingId}`); + router.replace(`/meet/${meetingId}`); }; const handleSubmit = async () => { diff --git a/src/features/participant-edit-name/model/useParticipantEditName.ts b/src/features/participant-edit-name/model/useParticipantEditName.ts index 3cdfd94..8a8c128 100644 --- a/src/features/participant-edit-name/model/useParticipantEditName.ts +++ b/src/features/participant-edit-name/model/useParticipantEditName.ts @@ -89,7 +89,7 @@ export function useParticipantEditName(meetingId: string) { // 식별을 위해 encodedName을 쿼리로 넘기는 방식을 채택 (간단한 구현) const params = new URLSearchParams(); params.set('name', trimmedName); - router.push(`/meet/${meetingId}/edit/date?${params.toString()}`); + router.replace(`/meet/${meetingId}/edit/date?${params.toString()}`); } else { // 실패 케이스: 참여 이력 없음 setErrorDetails({ diff --git a/src/features/participant-register-date/model/useParticipantRegisterDate.ts b/src/features/participant-register-date/model/useParticipantRegisterDate.ts index c834c53..7726f93 100644 --- a/src/features/participant-register-date/model/useParticipantRegisterDate.ts +++ b/src/features/participant-register-date/model/useParticipantRegisterDate.ts @@ -89,12 +89,16 @@ export function useParticipantRegisterDate(meetingId: string) { const successModal = useDisclosure(); const handleBack = () => { - router.back(); + const params = new URLSearchParams(); + if (participantName) { + params.set('name', participantName); + } + router.replace(`/meet/${meetingId}/register?${params.toString()}`); }; const handleSuccessModalClose = () => { successModal.close(); - router.push(`/meet/${meetingId}`); + router.replace(`/meet/${meetingId}`); }; const handleSubmit = async () => { diff --git a/src/features/participant-register-name/model/useParticipantRegisterName.ts b/src/features/participant-register-name/model/useParticipantRegisterName.ts index c81c241..1b571c6 100644 --- a/src/features/participant-register-name/model/useParticipantRegisterName.ts +++ b/src/features/participant-register-name/model/useParticipantRegisterName.ts @@ -87,7 +87,7 @@ export function useParticipantRegisterName(meetingId: string) { const params = new URLSearchParams(); params.set('name', trimmedName); // [수정] 이동 경로: register/date - router.push(`/meet/${meetingId}/register/date?${params.toString()}`); + router.replace(`/meet/${meetingId}/register/date?${params.toString()}`); } } catch (error) { console.error('Failed to check participant existence:', error); From a41ac5061e339fb660dc69ec8219c71c1e42bdd5 Mon Sep 17 00:00:00 2001 From: jaeml06 Date: Wed, 21 Jan 2026 15:45:42 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20=ED=88=AC=ED=91=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=ED=95=98=EA=B8=B0=20->=20=EB=AA=A8=EC=9E=84=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=ED=95=98=EA=B8=B0=EB=A1=9C=20text=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/meet/[meetingId]/ParticipantHeader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/meet/[meetingId]/ParticipantHeader.tsx b/src/app/meet/[meetingId]/ParticipantHeader.tsx index 3743e33..cba04bc 100644 --- a/src/app/meet/[meetingId]/ParticipantHeader.tsx +++ b/src/app/meet/[meetingId]/ParticipantHeader.tsx @@ -43,7 +43,7 @@ export default function ParticipantHeader({ /> - router.push('/')}>투표 생성하기 + router.push('/')}>모임 생성하기
From bb658bda257ab7ed29e2aa58ad5f861f8412d590 Mon Sep 17 00:00:00 2001 From: jaeml06 Date: Thu, 22 Jan 2026 14:09:52 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=EB=AA=A8=EB=93=A0=20=EB=82=A0?= =?UTF-8?q?=EC=A7=9C=EC=97=90=20=EC=B0=B8=EC=97=AC=EA=B0=80=20=EC=96=B4?= =?UTF-8?q?=EB=A0=A4=EC=9B=8C=EC=9A=94=20=EC=B2=B4=ED=81=AC=EB=B0=95?= =?UTF-8?q?=EC=8A=A4=20=ED=81=B4=EB=A6=AD=20=ED=9B=84,=20=EB=82=A0?= =?UTF-8?q?=EC=A7=9C=20=EC=84=A0=ED=83=9D=20=EC=8B=9C=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=9D=98=20=EC=B2=B4=ED=81=AC=EB=B0=95=EC=8A=A4=20=ED=95=B4?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../participant-edit-date/model/useParticipantEditDate.ts | 7 ++++++- .../participant-edit-date/ui/ParticipantEditDatePage.tsx | 5 ----- .../model/useParticipantRegisterDate.ts | 7 ++++++- .../ui/ParticipantRegisterDatePage.tsx | 5 ----- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/features/participant-edit-date/model/useParticipantEditDate.ts b/src/features/participant-edit-date/model/useParticipantEditDate.ts index 1ae51b8..ba99916 100644 --- a/src/features/participant-edit-date/model/useParticipantEditDate.ts +++ b/src/features/participant-edit-date/model/useParticipantEditDate.ts @@ -147,7 +147,12 @@ export function useParticipantEditDate(meetingId: string) { isSubmitting, isCtaActive, handleAllImpossibleChange, - onDateClick: handleDateChange, // 어댑터용 (Date[] => void) + onDateClick: (dates: Date[]) => { + if (isAllImpossible) { + setIsAllImpossible(false); + } + handleDateChange(dates); + }, handleBack, handleSubmit, isSuccessModalOpen: successModal.isOpen, diff --git a/src/features/participant-edit-date/ui/ParticipantEditDatePage.tsx b/src/features/participant-edit-date/ui/ParticipantEditDatePage.tsx index 3310ada..97c55d7 100644 --- a/src/features/participant-edit-date/ui/ParticipantEditDatePage.tsx +++ b/src/features/participant-edit-date/ui/ParticipantEditDatePage.tsx @@ -62,11 +62,6 @@ export default function ParticipantEditDatePage({ availableDates={availableDates} showNextMonthTooltip={true} /> - - {/* 불참 체크 시 캘린더 비활성 (오버레이 처리) */} - {isAllImpossible && ( -
- )}
{/* 2-4. '모든 날짜에 참여가 어려워요' 체크박스 */} diff --git a/src/features/participant-register-date/model/useParticipantRegisterDate.ts b/src/features/participant-register-date/model/useParticipantRegisterDate.ts index 7726f93..390779e 100644 --- a/src/features/participant-register-date/model/useParticipantRegisterDate.ts +++ b/src/features/participant-register-date/model/useParticipantRegisterDate.ts @@ -138,7 +138,12 @@ export function useParticipantRegisterDate(meetingId: string) { isSubmitting, isCtaActive, handleAllImpossibleChange, - onDateClick: handleDateChange, + onDateClick: (dates: Date[]) => { + if (isAllImpossible) { + setIsAllImpossible(false); + } + handleDateChange(dates); + }, handleBack, handleSubmit, isSuccessModalOpen: successModal.isOpen, diff --git a/src/features/participant-register-date/ui/ParticipantRegisterDatePage.tsx b/src/features/participant-register-date/ui/ParticipantRegisterDatePage.tsx index 05ee7bf..9409c73 100644 --- a/src/features/participant-register-date/ui/ParticipantRegisterDatePage.tsx +++ b/src/features/participant-register-date/ui/ParticipantRegisterDatePage.tsx @@ -61,11 +61,6 @@ export default function ParticipantRegisterDatePage({ availableDates={availableDates} showNextMonthTooltip={true} /> - - {/* 불참 체크 시 캘린더 비활성 (오버레이 처리) */} - {isAllImpossible && ( -
- )}
{/* 2-4. '모든 날짜에 참여가 어려워요' 체크박스 */}