From 9ca727317e7faa510d9a37894538253c33a357d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=9B=85?= Date: Mon, 20 Jul 2026 17:30:56 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[Fix]=20=EC=BA=98=EB=A6=B0=EB=8D=94=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B8=B0=EB=B3=B8=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=20=EB=82=A0=EC=A7=9C=20=EB=B0=8F=20=EC=8A=A4=ED=83=80?= =?UTF-8?q?=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/manage-calendar/model/calendar-utils.ts | 9 +++++++-- src/features/manage-calendar/ui/CalendarView.tsx | 5 +++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/features/manage-calendar/model/calendar-utils.ts b/src/features/manage-calendar/model/calendar-utils.ts index 5bd02e2..531fc7f 100644 --- a/src/features/manage-calendar/model/calendar-utils.ts +++ b/src/features/manage-calendar/model/calendar-utils.ts @@ -4,7 +4,7 @@ export interface CalendarDayCell { isCurrentMonth: boolean; } -function formatIsoDate(date: Date) { +export function formatIsoDate(date: Date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); @@ -36,5 +36,10 @@ export function createCalendarMonthGrid(currentMonth: Date): CalendarDayCell[] { } export function getInitialCalendarDate() { - return new Date(2025, 6, 1); + const now = new Date(); + return new Date(now.getFullYear(), now.getMonth(), 1); +} + +export function getInitialSelectedCalendarDate() { + return formatIsoDate(new Date()); } diff --git a/src/features/manage-calendar/ui/CalendarView.tsx b/src/features/manage-calendar/ui/CalendarView.tsx index 240f94a..3de13e9 100644 --- a/src/features/manage-calendar/ui/CalendarView.tsx +++ b/src/features/manage-calendar/ui/CalendarView.tsx @@ -18,6 +18,7 @@ import { createCalendarMonthGrid, createCalendarMonthLabel, getInitialCalendarDate, + getInitialSelectedCalendarDate, } from '../model/calendar-utils'; interface CalendarViewProps { @@ -73,7 +74,7 @@ export function CalendarView({ workspaceId }: CalendarViewProps) { const updateCalendarEventMutation = useUpdateCalendarEvent(workspaceId); const calendarEvents = calendarEventsQuery.data ?? []; const [currentMonth, setCurrentMonth] = useState(getInitialCalendarDate); - const [selectedDate, setSelectedDate] = useState('2025-07-30'); + const [selectedDate, setSelectedDate] = useState(getInitialSelectedCalendarDate); const [isAddEventOpen, setIsAddEventOpen] = useState(false); const [formValues, setFormValues] = useState(defaultFormValues); const [hasSubmitted, setHasSubmitted] = useState(false); @@ -227,7 +228,7 @@ export function CalendarView({ workspaceId }: CalendarViewProps) { onClick={() => setSelectedDate(cell.isoDate)} className={`hover:bg-brand-soft/30 relative min-h-[98px] border-r border-b border-[rgba(91,78,232,0.1)] px-[8px] pt-[5px] pb-[8px] text-left align-top transition sm:min-h-[108px] ${ (index + 1) % 7 === 0 ? 'border-r-0' : '' - } ${isSelected ? 'bg-[rgba(238,240,251,0.6)]' : ''}`} + } ${isSelected ? 'bg-[rgba(91,78,232,0.12)]' : ''}`} >
Date: Mon, 20 Jul 2026 17:41:50 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[Refactor]=20=EC=BA=98=EB=A6=B0=EB=8D=94=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=20=EB=B0=B0=EA=B2=BD=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EB=93=9C=20=ED=86=A0=ED=81=B0=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/manage-calendar/ui/CalendarView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/manage-calendar/ui/CalendarView.tsx b/src/features/manage-calendar/ui/CalendarView.tsx index 3de13e9..e2a5095 100644 --- a/src/features/manage-calendar/ui/CalendarView.tsx +++ b/src/features/manage-calendar/ui/CalendarView.tsx @@ -228,7 +228,7 @@ export function CalendarView({ workspaceId }: CalendarViewProps) { onClick={() => setSelectedDate(cell.isoDate)} className={`hover:bg-brand-soft/30 relative min-h-[98px] border-r border-b border-[rgba(91,78,232,0.1)] px-[8px] pt-[5px] pb-[8px] text-left align-top transition sm:min-h-[108px] ${ (index + 1) % 7 === 0 ? 'border-r-0' : '' - } ${isSelected ? 'bg-[rgba(91,78,232,0.12)]' : ''}`} + } ${isSelected ? 'bg-brand/12' : ''}`} >
Date: Tue, 21 Jul 2026 14:08:03 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[Fix]=20=EC=BA=98=EB=A6=B0=EB=8D=94=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EB=82=A0=EC=A7=9C=20hydration=20=EB=B6=88?= =?UTF-8?q?=EC=9D=BC=EC=B9=98=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspaces/[workspaceId]/calendar/page.tsx | 18 +++++++++++++++++- .../manage-calendar/model/calendar-utils.ts | 14 +++++--------- .../manage-calendar/ui/CalendarView.tsx | 12 +++++++----- src/views/calendar/ui/CalendarPage.tsx | 5 +++-- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/app/workspaces/[workspaceId]/calendar/page.tsx b/src/app/workspaces/[workspaceId]/calendar/page.tsx index f2b8bdf..a46e435 100644 --- a/src/app/workspaces/[workspaceId]/calendar/page.tsx +++ b/src/app/workspaces/[workspaceId]/calendar/page.tsx @@ -6,8 +6,24 @@ interface WorkspaceCalendarPageProps { }>; } +function getSeoulTodayIsoDate() { + const formatter = new Intl.DateTimeFormat('en-CA', { + timeZone: 'Asia/Seoul', + year: 'numeric', + month: '2-digit', + day: '2-digit', + }); + const parts = formatter.formatToParts(new Date()); + const year = parts.find((part) => part.type === 'year')?.value; + const month = parts.find((part) => part.type === 'month')?.value; + const day = parts.find((part) => part.type === 'day')?.value; + + return `${year}-${month}-${day}`; +} + export default async function WorkspaceCalendarPage({ params }: WorkspaceCalendarPageProps) { const { workspaceId } = await params; + const initialSelectedDate = getSeoulTodayIsoDate(); - return ; + return ; } diff --git a/src/features/manage-calendar/model/calendar-utils.ts b/src/features/manage-calendar/model/calendar-utils.ts index 531fc7f..05ebde8 100644 --- a/src/features/manage-calendar/model/calendar-utils.ts +++ b/src/features/manage-calendar/model/calendar-utils.ts @@ -16,6 +16,11 @@ export function createCalendarMonthLabel(currentMonth: Date) { return `${currentMonth.getFullYear()}년 ${currentMonth.getMonth() + 1}월`; } +export function createCalendarMonthStart(isoDate: string) { + const [year, month] = isoDate.split('-').map(Number); + return new Date(year, month - 1, 1); +} + export function createCalendarMonthGrid(currentMonth: Date): CalendarDayCell[] { const year = currentMonth.getFullYear(); const monthIndex = currentMonth.getMonth(); @@ -34,12 +39,3 @@ export function createCalendarMonthGrid(currentMonth: Date): CalendarDayCell[] { }; }); } - -export function getInitialCalendarDate() { - const now = new Date(); - return new Date(now.getFullYear(), now.getMonth(), 1); -} - -export function getInitialSelectedCalendarDate() { - return formatIsoDate(new Date()); -} diff --git a/src/features/manage-calendar/ui/CalendarView.tsx b/src/features/manage-calendar/ui/CalendarView.tsx index e2a5095..a85a5b3 100644 --- a/src/features/manage-calendar/ui/CalendarView.tsx +++ b/src/features/manage-calendar/ui/CalendarView.tsx @@ -15,14 +15,14 @@ import { } from '@/entities/calendar-event'; import { plusJakartaSans } from '@/shared/lib/fonts'; import { + createCalendarMonthStart, createCalendarMonthGrid, createCalendarMonthLabel, - getInitialCalendarDate, - getInitialSelectedCalendarDate, } from '../model/calendar-utils'; interface CalendarViewProps { workspaceId: string; + initialSelectedDate: string; } const weekdayLabels = ['일', '월', '화', '수', '목', '금', '토'] as const; @@ -67,14 +67,16 @@ function formatSelectedDateLabel(isoDate: string) { return `${year}년 ${Number(month)}월 ${Number(day)}일`; } -export function CalendarView({ workspaceId }: CalendarViewProps) { +export function CalendarView({ workspaceId, initialSelectedDate }: CalendarViewProps) { const calendarEventsQuery = useCalendarEventsByWorkspaceId(workspaceId); const createCalendarEventMutation = useCreateCalendarEvent(workspaceId); const deleteCalendarEventMutation = useDeleteCalendarEvent(workspaceId); const updateCalendarEventMutation = useUpdateCalendarEvent(workspaceId); const calendarEvents = calendarEventsQuery.data ?? []; - const [currentMonth, setCurrentMonth] = useState(getInitialCalendarDate); - const [selectedDate, setSelectedDate] = useState(getInitialSelectedCalendarDate); + const [currentMonth, setCurrentMonth] = useState(() => + createCalendarMonthStart(initialSelectedDate), + ); + const [selectedDate, setSelectedDate] = useState(initialSelectedDate); const [isAddEventOpen, setIsAddEventOpen] = useState(false); const [formValues, setFormValues] = useState(defaultFormValues); const [hasSubmitted, setHasSubmitted] = useState(false); diff --git a/src/views/calendar/ui/CalendarPage.tsx b/src/views/calendar/ui/CalendarPage.tsx index 3a7d5aa..7f9bee1 100644 --- a/src/views/calendar/ui/CalendarPage.tsx +++ b/src/views/calendar/ui/CalendarPage.tsx @@ -2,8 +2,9 @@ import { CalendarView } from '@/features/manage-calendar'; interface CalendarPageProps { workspaceId: string; + initialSelectedDate: string; } -export default function CalendarPage({ workspaceId }: CalendarPageProps) { - return ; +export default function CalendarPage({ workspaceId, initialSelectedDate }: CalendarPageProps) { + return ; }