From 2abf0ebab480eb190b592bf4c6b88c9f617e9450 Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Wed, 12 Nov 2025 18:16:19 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8B=AC=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/calendar/nice-calendar-month.tsx | 49 ++++++++++++------- src/shared/ui/filter/calendar-month.tsx | 4 +- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/shared/ui/calendar/nice-calendar-month.tsx b/src/shared/ui/calendar/nice-calendar-month.tsx index b4e790f..5ecad1d 100644 --- a/src/shared/ui/calendar/nice-calendar-month.tsx +++ b/src/shared/ui/calendar/nice-calendar-month.tsx @@ -15,7 +15,7 @@ interface NiceCalendarProps { endMonth?: string; singleMonth?: string; calendarType: CalendarType; - setNewMonth: (month: string) => void; + setNewMonth: (month: string, calendarType: CalendarType) => void; searchPeriod?: number; periodType?: 'year' | 'month'; }; @@ -37,8 +37,28 @@ const NiceCalendarMonth = ({ const [valueMonth, setValueMonth] = useState(); const [minMonth, setMinMonth] = useState(); const [maxMonth, setMaxMonth] = useState(); + + const [calendarSearchPeriod, setCalendatSearchPeriod] = useState(searchPeriod || 2); + const [calendarPeriodType, setCalendarPeriodType] = useState<'year' | 'month'>(periodType || 'year'); + const onChangeToMonth = (selectedMonth: any) => { - setNewMonth(moment(selectedMonth).format('YYYY.MM')); + if(calendarType === CalendarType.Start){ + if(endMonth){ + let newEndDateLimit = moment(selectedMonth).add(calendarSearchPeriod, calendarPeriodType).format('YYYYMM'); + if(moment(endMonth).format('YYYYMM') > newEndDateLimit){ + setNewMonth(moment(newEndDateLimit).format('YYYY.MM'), CalendarType.End); + } + } + } + else if(calendarType === CalendarType.End){ + if(startMonth){ + let newStartDateLimit = moment(selectedMonth).subtract(calendarSearchPeriod, calendarPeriodType).format('YYYYMM'); + if(moment(startMonth).format('YYYYMM') < newStartDateLimit){ + setNewMonth(moment(newStartDateLimit).format('YYYY.MM'), CalendarType.Start); + } + } + } + setNewMonth(moment(selectedMonth).format('YYYY.MM'), calendarType); setCalendarOpen(false); }; @@ -47,30 +67,20 @@ const NiceCalendarMonth = ({ }; const setMinMaxValueDate = () => { if(calendarType === CalendarType.Start){ - if(!searchPeriod){ - searchPeriod = 3; - } - if(!periodType){ - periodType = 'year'; - } - if(periodType && searchPeriod && searchPeriod > 0){ - const endDate = moment(endMonth, ['YYYY.MM', 'YYYYMM'], true); - setMinMonth(moment(endDate, 'YYYY.MM.DD').subtract(searchPeriod, periodType).toDate()); - } - // setMinMonth(undefined); + setMinMonth(undefined); if(!!endMonth){ - // Parse endMonth with moment, handling both YYYY.MM and YYYYMM formats const endDate = moment(endMonth, ['YYYY.MM', 'YYYYMM'], true); - if (endDate.isValid()) { + if(endDate.isValid()){ setMaxMonth(endDate.toDate()); } } - if (startMonth) { + if(startMonth){ const startDate = moment(startMonth, ['YYYY.MM', 'YYYYMM'], true); if (startDate.isValid()) { setValueMonth(startDate.toDate()); } - } else { + } + else{ setValueMonth(undefined); } } @@ -85,10 +95,11 @@ const NiceCalendarMonth = ({ setMaxMonth(new Date()); if (endMonth) { const endDate = moment(endMonth, ['YYYY.MM', 'YYYYMM'], true); - if (endDate.isValid()) { + if(endDate.isValid()){ setValueMonth(endDate.toDate()); } - } else { + } + else{ setValueMonth(undefined); } } diff --git a/src/shared/ui/filter/calendar-month.tsx b/src/shared/ui/filter/calendar-month.tsx index a98f3ae..8fa6c8c 100644 --- a/src/shared/ui/filter/calendar-month.tsx +++ b/src/shared/ui/filter/calendar-month.tsx @@ -65,9 +65,7 @@ export const FilterCalendarMonth = ({ } }; - const setNewMonth = (month: string) => { - console.log(month) - // month is already in 'YYYY.MM' format from NiceCalendarMonth + const setNewMonth = (month: string, calendarType: CalendarType) => { const parsedMonth = moment(month, 'YYYY.MM', true); if (parsedMonth.isValid()) { if(calendarType === CalendarType.Start){