Skip to content

Commit f1e530b

Browse files
Merge pull request #378 from uvarov-frontend/fix/add_displayClosestValidDate
fix: Add displayClosestValidDate
2 parents b65d0d4 + a944b90 commit f1e530b

3 files changed

Lines changed: 41 additions & 8 deletions

File tree

package/src/scripts/utils/initVariables/initRange.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
import getDate from '@scripts/utils/getDate';
2-
import getLocalDate from '@scripts/utils/getLocalDate';
32
import parseDates from '@scripts/utils/parseDates';
3+
import resolveDate from '@scripts/utils/resolveDate';
44
import setContext from '@scripts/utils/setContext';
5-
import type { Calendar, DateAny, FormatDateString } from '@src/index';
6-
7-
const resolveDate = (date: 'today' | Date | number | string | undefined, defaultDate: DateAny): FormatDateString => {
8-
if (date === 'today') return getLocalDate();
9-
if (date instanceof Date || typeof date === 'number' || typeof date === 'string') return parseDates([date])[0];
10-
return defaultDate as FormatDateString;
11-
};
5+
import type { Calendar } from '@src/index';
126

137
const initRange = (self: Calendar) => {
148
// set self.context.displayDateMin, self.context.displayDateMax

package/src/scripts/utils/initVariables/initSelectedMonthYear.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,31 @@ import getDate from '@scripts/utils/getDate';
22
import parseDates from '@scripts/utils/parseDates';
33
import setContext from '@scripts/utils/setContext';
44
import type { Calendar, Range } from '@src/index';
5+
import resolveDate from '@src/scripts/utils/resolveDate';
6+
7+
const displayClosestValidDate = (self: Calendar) => {
8+
const isBefore = (date1: string | Date, date2: Date) => new Date(date1).getTime() < date2.getTime();
9+
const isAfter = (date1: string | Date, date2: Date) => new Date(date1).getTime() > date2.getTime();
10+
11+
const gotoMonthYear = (dateOrStr: Date) => {
12+
const gotoDate = new Date(dateOrStr);
13+
setInitialContext(self, gotoDate.getMonth() as Range<12>, gotoDate.getFullYear());
14+
};
15+
16+
if (self.displayDateMin && self.displayDateMin !== 'today' && isAfter(self.displayDateMin as string, new Date())) {
17+
const parsedDate = self.selectedDates.length && self.selectedDates[0] ? parseDates(self.selectedDates)[0] : self.displayDateMin;
18+
gotoMonthYear(getDate(resolveDate(parsedDate, self.displayDateMin)));
19+
return true;
20+
}
21+
22+
if (self.displayDateMax && self.displayDateMax !== 'today' && isBefore(self.displayDateMax as string, new Date())) {
23+
const parsedDate = self.selectedDates.length && self.selectedDates[0] ? parseDates(self.selectedDates)[0] : self.displayDateMax;
24+
gotoMonthYear(getDate(resolveDate(parsedDate, self.displayDateMax)));
25+
return true;
26+
}
27+
28+
return false;
29+
};
530

631
const setInitialContext = (self: Calendar, month: Range<12>, year: number) => {
732
setContext(self, 'selectedMonth', month);
@@ -18,8 +43,11 @@ const initSelectedMonthYear = (self: Calendar) => {
1843
return;
1944
}
2045

46+
if (displayClosestValidDate(self)) return;
47+
2148
const isValidMonth = self.selectedMonth !== undefined && Number(self.selectedMonth) >= 0 && Number(self.selectedMonth) < 12;
2249
const isValidYear = self.selectedYear !== undefined && Number(self.selectedYear) >= 0 && Number(self.selectedYear) <= 9999;
50+
2351
setInitialContext(
2452
self,
2553
(isValidMonth ? Number(self.selectedMonth) : getDate(self.context.dateToday).getMonth()) as Range<12>,
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import getLocalDate from '@scripts/utils/getLocalDate';
2+
import parseDates from '@scripts/utils/parseDates';
3+
import type { DateAny, FormatDateString } from '@src/index';
4+
5+
const resolveDate = (date: 'today' | Date | number | string | undefined, defaultDate: DateAny): FormatDateString => {
6+
if (date === 'today') return getLocalDate();
7+
if (date instanceof Date || typeof date === 'number' || typeof date === 'string') return parseDates([date])[0];
8+
return defaultDate as FormatDateString;
9+
};
10+
11+
export default resolveDate;

0 commit comments

Comments
 (0)