diff --git a/src/shared/ui/calendar/nice-calendar.tsx b/src/shared/ui/calendar/nice-calendar.tsx index 532b846..d7f5188 100644 --- a/src/shared/ui/calendar/nice-calendar.tsx +++ b/src/shared/ui/calendar/nice-calendar.tsx @@ -15,7 +15,7 @@ interface NiceCalendarProps { endDate?: string; singleDate?: string; calendarType: CalendarType; - setNewDate: (date: string) => void; + setNewDate: (date: string, calendarType: CalendarType) => void; minDate?: Date; maxDate?: Date; searchPeriod?: number; @@ -47,8 +47,28 @@ const NiceCalendar = ({ const [valueDate, setValueDate] = useState(); const [minDate, setMinDate] = useState(); const [maxDate, setMaxDate] = useState(); + + const [calendarSearchPeriod, setCalendatSearchPeriod] = useState(searchPeriod || 3); + const [calendarPeriodType, setCalendarPeriodType] = useState<'year' | 'month' | 'day'>(periodType || 'month'); + const onchangeToDate = (selectedDate: any) => { - setNewDate(moment(selectedDate).format('YYYY.MM.DD')); + if(calendarType === CalendarType.Start){ + if(endDate){ + let newEndDateLimit = moment(selectedDate).add(calendarSearchPeriod, calendarPeriodType).format('YYYYMMDD'); + if(moment(endDate).format('YYYYMMDD') > newEndDateLimit){ + setNewDate(moment(newEndDateLimit).format('YYYY.MM.DD'), CalendarType.End); + } + } + } + else if(calendarType === CalendarType.End){ + if(startDate){ + let newStartDateLimit = moment(selectedDate).subtract(calendarSearchPeriod, calendarPeriodType).format('YYYYMMDD'); + if(moment(startDate).format('YYYYMMDD') < newStartDateLimit){ + setNewDate(moment(newStartDateLimit).format('YYYY.MM.DD'), CalendarType.Start); + } + } + } + setNewDate(moment(selectedDate).format('YYYY.MM.DD'), calendarType); setCalendarOpen(false); }; @@ -57,24 +77,15 @@ const NiceCalendar = ({ }; const setMinMaxValueDate = () => { if(calendarType === CalendarType.Start){ - if(!searchPeriod){ - searchPeriod = 3; - } - if(!periodType){ - periodType = 'month'; - } - if(periodType && searchPeriod && searchPeriod > 0){ - setMinDate(propMinDate || moment(endDate, 'YYYY.MM.DD').subtract(searchPeriod, periodType).toDate()); - } - // setMinDate(propMinDate || undefined); + setMinDate(propMinDate || undefined); if(!!endDate){ - setMaxDate(moment(endDate, 'YYYY.MM.DD').toDate()); + setMaxDate(propMaxDate || moment(endDate, 'YYYY.MM.DD').toDate()); } setValueDate(startDate ? moment(startDate, 'YYYY.MM.DD').toDate() : undefined); } else if(calendarType === CalendarType.End){ if(!!startDate){ - setMinDate(moment(startDate, 'YYYY.MM.DD').toDate()); + setMinDate(propMinDate || moment(startDate, 'YYYY.MM.DD').toDate()); } setMaxDate(propMaxDate || new Date()); setValueDate(endDate ? moment(endDate, 'YYYY.MM.DD').toDate() : undefined); diff --git a/src/shared/ui/filter/calendar.tsx b/src/shared/ui/filter/calendar.tsx index 79e03cf..c694e4d 100644 --- a/src/shared/ui/filter/calendar.tsx +++ b/src/shared/ui/filter/calendar.tsx @@ -74,7 +74,7 @@ export const FilterCalendar = ({ } }; - const setNewDate = (date: string) => { + const setNewDate = (date: string, calendarType: CalendarType) => { if(calendarType === CalendarType.Start){ setStartDate(moment(date, 'YYYY.MM.DD').format('YYYYMMDD')); setNewStartDate(moment(date, 'YYYY.MM.DD').format('YYYY.MM.DD')); @@ -84,7 +84,7 @@ export const FilterCalendar = ({ setNewEndDate(moment(date, 'YYYY.MM.DD').format('YYYY.MM.DD')); } setCalendarOpen(false); - } + }; useEffect(() => { if(startDate && startDate.length === 8){