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/app/meet/[meetingId]/ParticipantHeader.tsx b/src/app/meet/[meetingId]/ParticipantHeader.tsx index 96ef82d..cba04bc 100644 --- a/src/app/meet/[meetingId]/ParticipantHeader.tsx +++ b/src/app/meet/[meetingId]/ParticipantHeader.tsx @@ -1,6 +1,10 @@ 'use client'; + +import { useRouter } from 'next/navigation'; + import { useDisclosure } from '@/shared/hooks/useDisclosure'; import LinkShareBottomSheet from '@/shared/ui/bottom-sheet/LinkShareBottomSheet'; +import { Menu } from '@/shared/ui/menu'; import { TopBar } from '@/shared/ui/top-bar'; interface ParticipantHeaderProps { @@ -14,24 +18,35 @@ export default function ParticipantHeader({ url, className, }: ParticipantHeaderProps) { + const router = useRouter(); const { isOpen: isShareOpen, open: openShare, close: closeShare, } = useDisclosure(); - const handleRightClick = () => { - openShare(); - }; + const { + isOpen: isMenuOpen, + open: openMenu, + close: closeMenu, + } = useDisclosure(); return ( <> - +
+ + + + router.push('/')}>모임 생성하기 + +
+ - + {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/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); 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';