UNPKG

2.14 kBJavaScriptView Raw
1import { toUTCDate } from 'nodemod/dist/calendar/helpers/to-utc-date.js';
2import { navigationKeySetDayNext, navigationKeySetDayPrevious } from '../constants.js';
3import { toDayDiffInclusive } from './to-day-diff-inclusive.js';
4export function toNextSelectableDate({ date, disabledDatesSet, disabledDaysSet, key, maxTime, minTime, }) {
5 if (toDayDiffInclusive(minTime, maxTime) <= 1)
6 return date;
7 const focusedDateTime = +date;
8 let isBeforeMinTime = focusedDateTime < minTime;
9 let iaAfterMaxTime = focusedDateTime > maxTime;
10 let isDisabledDay = isBeforeMinTime ||
11 iaAfterMaxTime ||
12 disabledDaysSet.has(date.getUTCDay()) ||
13 disabledDatesSet.has(focusedDateTime);
14 if (!isDisabledDay)
15 return date;
16 let newSelectableDate = isBeforeMinTime === iaAfterMaxTime ?
17 date : new Date(isBeforeMinTime ? minTime - 864e5 : 864e5 + maxTime);
18 let newSelectableDateTime = +newSelectableDate;
19 const fy = newSelectableDate.getUTCFullYear();
20 const m = newSelectableDate.getUTCMonth();
21 let d = newSelectableDate.getUTCDate();
22 while (isDisabledDay) {
23 if (isBeforeMinTime || (!iaAfterMaxTime && navigationKeySetDayNext.has(key)))
24 d += 1;
25 if (iaAfterMaxTime || (!isBeforeMinTime && navigationKeySetDayPrevious.has(key)))
26 d -= 1;
27 newSelectableDate = toUTCDate(fy, m, d);
28 newSelectableDateTime = +newSelectableDate;
29 if (!isBeforeMinTime) {
30 isBeforeMinTime = newSelectableDateTime < minTime;
31 if (isBeforeMinTime) {
32 newSelectableDate = new Date(minTime);
33 d = newSelectableDate.getUTCDate();
34 }
35 }
36 if (!iaAfterMaxTime) {
37 iaAfterMaxTime = newSelectableDateTime > maxTime;
38 if (iaAfterMaxTime) {
39 newSelectableDate = new Date(maxTime);
40 d = newSelectableDate.getUTCDate();
41 }
42 }
43 isDisabledDay =
44 disabledDaysSet.has(newSelectableDate.getUTCDay()) ||
45 disabledDatesSet.has(+newSelectableDate);
46 }
47 return newSelectableDate;
48}