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 (
<>
-
+
+
+
+
+
+
-
+
{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월')}