@activecollab/components 2.0.212 → 2.0.213

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/cjs/components/DatePicker/DatePicker.js +678 -301
  2. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  3. package/dist/cjs/components/DatePicker/Styles.js +91 -37
  4. package/dist/cjs/components/DatePicker/Styles.js.map +1 -1
  5. package/dist/cjs/components/DatePicker/index.js +0 -11
  6. package/dist/cjs/components/DatePicker/index.js.map +1 -1
  7. package/dist/cjs/components/SelectDate/SelectDate.js +126 -280
  8. package/dist/cjs/components/SelectDate/SelectDate.js.map +1 -1
  9. package/dist/cjs/components/SelectDate/index.js +0 -11
  10. package/dist/cjs/components/SelectDate/index.js.map +1 -1
  11. package/dist/cjs/components/Steppers/DateStepper/DateStepper.js +94 -100
  12. package/dist/cjs/components/Steppers/DateStepper/DateStepper.js.map +1 -1
  13. package/dist/cjs/components/Steppers/DateStepper/index.js +0 -11
  14. package/dist/cjs/components/Steppers/DateStepper/index.js.map +1 -1
  15. package/dist/cjs/components/index.js +0 -11
  16. package/dist/cjs/components/index.js.map +1 -1
  17. package/dist/esm/components/DatePicker/DatePicker.d.ts +64 -26
  18. package/dist/esm/components/DatePicker/DatePicker.d.ts.map +1 -1
  19. package/dist/esm/components/DatePicker/DatePicker.js +619 -278
  20. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  21. package/dist/esm/components/DatePicker/Styles.d.ts +21 -9
  22. package/dist/esm/components/DatePicker/Styles.d.ts.map +1 -1
  23. package/dist/esm/components/DatePicker/Styles.js +89 -30
  24. package/dist/esm/components/DatePicker/Styles.js.map +1 -1
  25. package/dist/esm/components/DatePicker/index.d.ts +0 -1
  26. package/dist/esm/components/DatePicker/index.d.ts.map +1 -1
  27. package/dist/esm/components/DatePicker/index.js +0 -1
  28. package/dist/esm/components/DatePicker/index.js.map +1 -1
  29. package/dist/esm/components/SelectDate/SelectDate.d.ts +20 -19
  30. package/dist/esm/components/SelectDate/SelectDate.d.ts.map +1 -1
  31. package/dist/esm/components/SelectDate/SelectDate.js +124 -246
  32. package/dist/esm/components/SelectDate/SelectDate.js.map +1 -1
  33. package/dist/esm/components/SelectDate/index.d.ts +0 -1
  34. package/dist/esm/components/SelectDate/index.d.ts.map +1 -1
  35. package/dist/esm/components/SelectDate/index.js +0 -1
  36. package/dist/esm/components/SelectDate/index.js.map +1 -1
  37. package/dist/esm/components/Steppers/DateStepper/DateStepper.d.ts +10 -7
  38. package/dist/esm/components/Steppers/DateStepper/DateStepper.d.ts.map +1 -1
  39. package/dist/esm/components/Steppers/DateStepper/DateStepper.js +88 -97
  40. package/dist/esm/components/Steppers/DateStepper/DateStepper.js.map +1 -1
  41. package/dist/esm/components/Steppers/DateStepper/index.d.ts +0 -1
  42. package/dist/esm/components/Steppers/DateStepper/index.d.ts.map +1 -1
  43. package/dist/esm/components/Steppers/DateStepper/index.js +0 -1
  44. package/dist/esm/components/Steppers/DateStepper/index.js.map +1 -1
  45. package/dist/esm/components/index.d.ts +0 -1
  46. package/dist/esm/components/index.d.ts.map +1 -1
  47. package/dist/esm/components/index.js +0 -1
  48. package/dist/esm/components/index.js.map +1 -1
  49. package/dist/index.js +214 -1563
  50. package/dist/index.js.map +1 -1
  51. package/dist/index.min.js +1 -1
  52. package/dist/index.min.js.map +1 -1
  53. package/package.json +1 -3
  54. package/dist/cjs/components/DatePicker/CustomNavBarElement.js +0 -41
  55. package/dist/cjs/components/DatePicker/CustomNavBarElement.js.map +0 -1
  56. package/dist/cjs/components/DatePicker/DatePickerV2.js +0 -734
  57. package/dist/cjs/components/DatePicker/DatePickerV2.js.map +0 -1
  58. package/dist/cjs/components/DatePicker/StylesV2.js +0 -100
  59. package/dist/cjs/components/DatePicker/StylesV2.js.map +0 -1
  60. package/dist/cjs/components/Pickers/NavBarElement.js +0 -52
  61. package/dist/cjs/components/Pickers/NavBarElement.js.map +0 -1
  62. package/dist/cjs/components/Pickers/Styles.js +0 -76
  63. package/dist/cjs/components/Pickers/Styles.js.map +0 -1
  64. package/dist/cjs/components/Pickers/YearMonthPicker.js +0 -80
  65. package/dist/cjs/components/Pickers/YearMonthPicker.js.map +0 -1
  66. package/dist/cjs/components/Pickers/index.js +0 -28
  67. package/dist/cjs/components/Pickers/index.js.map +0 -1
  68. package/dist/cjs/components/SelectDate/DatePickerForm.js +0 -94
  69. package/dist/cjs/components/SelectDate/DatePickerForm.js.map +0 -1
  70. package/dist/cjs/components/SelectDate/SelectDateV2.js +0 -263
  71. package/dist/cjs/components/SelectDate/SelectDateV2.js.map +0 -1
  72. package/dist/cjs/components/Steppers/DateStepper/DateStepperV2.js +0 -276
  73. package/dist/cjs/components/Steppers/DateStepper/DateStepperV2.js.map +0 -1
  74. package/dist/esm/components/DatePicker/CustomNavBarElement.d.ts +0 -12
  75. package/dist/esm/components/DatePicker/CustomNavBarElement.d.ts.map +0 -1
  76. package/dist/esm/components/DatePicker/CustomNavBarElement.js +0 -34
  77. package/dist/esm/components/DatePicker/CustomNavBarElement.js.map +0 -1
  78. package/dist/esm/components/DatePicker/DatePickerV2.d.ts +0 -68
  79. package/dist/esm/components/DatePicker/DatePickerV2.d.ts.map +0 -1
  80. package/dist/esm/components/DatePicker/DatePickerV2.js +0 -649
  81. package/dist/esm/components/DatePicker/DatePickerV2.js.map +0 -1
  82. package/dist/esm/components/DatePicker/StylesV2.d.ts +0 -22
  83. package/dist/esm/components/DatePicker/StylesV2.d.ts.map +0 -1
  84. package/dist/esm/components/DatePicker/StylesV2.js +0 -93
  85. package/dist/esm/components/DatePicker/StylesV2.js.map +0 -1
  86. package/dist/esm/components/Pickers/NavBarElement.d.ts +0 -9
  87. package/dist/esm/components/Pickers/NavBarElement.d.ts.map +0 -1
  88. package/dist/esm/components/Pickers/NavBarElement.js +0 -45
  89. package/dist/esm/components/Pickers/NavBarElement.js.map +0 -1
  90. package/dist/esm/components/Pickers/Styles.d.ts +0 -18
  91. package/dist/esm/components/Pickers/Styles.d.ts.map +0 -1
  92. package/dist/esm/components/Pickers/Styles.js +0 -56
  93. package/dist/esm/components/Pickers/Styles.js.map +0 -1
  94. package/dist/esm/components/Pickers/YearMonthPicker.d.ts +0 -17
  95. package/dist/esm/components/Pickers/YearMonthPicker.d.ts.map +0 -1
  96. package/dist/esm/components/Pickers/YearMonthPicker.js +0 -59
  97. package/dist/esm/components/Pickers/YearMonthPicker.js.map +0 -1
  98. package/dist/esm/components/Pickers/index.d.ts +0 -3
  99. package/dist/esm/components/Pickers/index.d.ts.map +0 -1
  100. package/dist/esm/components/Pickers/index.js +0 -3
  101. package/dist/esm/components/Pickers/index.js.map +0 -1
  102. package/dist/esm/components/SelectDate/DatePickerForm.d.ts +0 -39
  103. package/dist/esm/components/SelectDate/DatePickerForm.d.ts.map +0 -1
  104. package/dist/esm/components/SelectDate/DatePickerForm.js +0 -80
  105. package/dist/esm/components/SelectDate/DatePickerForm.js.map +0 -1
  106. package/dist/esm/components/SelectDate/SelectDateV2.d.ts +0 -102
  107. package/dist/esm/components/SelectDate/SelectDateV2.d.ts.map +0 -1
  108. package/dist/esm/components/SelectDate/SelectDateV2.js +0 -223
  109. package/dist/esm/components/SelectDate/SelectDateV2.js.map +0 -1
  110. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.d.ts +0 -45
  111. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.d.ts.map +0 -1
  112. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.js +0 -241
  113. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.js.map +0 -1
@@ -1,325 +1,666 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
- import React, { useState, useCallback, useMemo, useEffect } from "react";
3
- import { SwitchTransition } from "react-transition-group";
4
- import { addMonths, isAfter } from "date-fns";
5
- import moment from "moment";
6
- import { customClassNames, modifiersClassNames } from "./ClassNames";
7
- import { CustomNavBarElement } from "./CustomNavBarElement";
8
- import { StyledDatePicker, StyledDatePickerCSSTransition, StyledDayPicker } from "./Styles";
9
- import { YearMonthPicker } from "../Pickers/YearMonthPicker";
10
- const formatWeekdayName = str => moment(str).format("ddd").charAt(0);
1
+ import React, { useState, useRef, useEffect, useCallback, useMemo } from "react";
2
+ import moment from "moment-timezone";
3
+ import { StyledCalendarDate, StyledCalendarDates, StyledCalendarHeader, StyledCalendarSelector, StyledCaption, StyledClearInstantButton, StyledConfirmDialog, StyledControls, StyledControlsLeft, StyledDatePickerContainerInner, StyledDatePickerWrapper, StyledDayName, StyledDaysOfWeek, StyledMonthOption, StyledMonthSelect, StyledMonthSelector, StyledYearOption, StyledYearSelect } from "./Styles";
4
+ import { Button } from "../Button";
5
+ import { IconButton } from "../IconButton";
6
+ import { ArrowLeftIcon, ArrowRightIcon, CancelCrossIcon } from "../Icons";
7
+ import { Menu } from "../Menu";
8
+ import { Tooltip } from "../Tooltip";
9
+ export const toMoment = date => {
10
+ if (moment.isMoment(date)) {
11
+ return date;
12
+ } else if (typeof date === "number") {
13
+ return moment.utc(date * 1000);
14
+ } else if (typeof date === "string") {
15
+ return moment.utc(date);
16
+ }
17
+ return null;
18
+ };
11
19
  export const DatePicker = _ref => {
12
20
  let {
13
- className,
21
+ selected: defaultSelected,
14
22
  onChange,
15
- onDayClick,
16
- selectedDays,
17
- disabledDays,
18
- selectionMode = "daily",
19
- month = new Date(),
20
- onMonthChange = () => null,
21
- dateRequired = false,
23
+ onSave,
24
+ onClear,
25
+ onClose,
26
+ instant = true,
27
+ target,
28
+ mode = "daily",
29
+ saveLabel = "Save",
30
+ cancelLabel = "Cancel",
31
+ clearLabel = "Clear",
32
+ disabledDaysBefore,
33
+ disabledDaysAfter,
34
+ disabled: disabledDays = [],
35
+ modifiers,
36
+ disableAnimations,
22
37
  firstDayOfWeek = 0,
23
- fixedWeeks = true,
24
- modifiers: defaultModifiers,
25
- renderDay,
26
- ...rest
38
+ forceClose,
39
+ required,
40
+ month,
41
+ disableYearPicker,
42
+ position = "bottom-start",
43
+ menuClassName,
44
+ popperClassName,
45
+ enableConfirmModal = false,
46
+ modalHeaderText = "Discard changes?",
47
+ modalDiscardMessage = "All unsaved changes will be lost.",
48
+ modalDiscardBtnText = "OK",
49
+ modalCancelBtnText = "Cancel",
50
+ backgroundElementClass,
51
+ popperTooltipClassName,
52
+ popperTooltipStyle,
53
+ open,
54
+ onCalendarToggle,
55
+ onDayClick,
56
+ showControls
27
57
  } = _ref;
28
- const [enteredTo, setEnteredTo] = useState();
29
- const [enteredFrom, setEnteredFrom] = useState();
30
- const [stopScroll, setStopScroll] = useState();
31
- const [direction, setDirection] = useState(true);
32
- const [isPreselected, setIsPreselected] = useState(() => {
33
- return (selectedDays == null ? void 0 : selectedDays.from) instanceof Date && (selectedDays == null ? void 0 : selectedDays.to) instanceof Date;
58
+ const [isOpen, setIsOpen] = useState(open);
59
+ const [isYearSelectOpen, setIsYearSelectOpen] = useState(false);
60
+ const [showDiscardModal, setShowDiscardModal] = useState(false);
61
+ const [isMonthSelectOpen, setIsMonthSelectOpen] = useState(mode === "monthly" || mode === "quarterly");
62
+ const [monthTransitionDirection, setMonthTransitionDirection] = useState(null);
63
+ const [currentDate, setCurrentDate] = useState(() => {
64
+ if (defaultSelected && defaultSelected.from) {
65
+ return toMoment(defaultSelected.from);
66
+ }
67
+ if (month) {
68
+ return toMoment(month);
69
+ }
70
+ return moment.utc();
71
+ });
72
+ const [targetDate, setTargetDate] = useState(() => {
73
+ if (defaultSelected && defaultSelected.from) {
74
+ return toMoment(defaultSelected.from);
75
+ } else if (month) {
76
+ return toMoment(month);
77
+ }
78
+ return moment.utc();
79
+ });
80
+ const [selected, setSelected] = useState(() => {
81
+ if (!defaultSelected) {
82
+ return null;
83
+ }
84
+ if (!defaultSelected.from) {
85
+ return null;
86
+ }
87
+ return {
88
+ from: toMoment(defaultSelected.from),
89
+ to: defaultSelected.to ? toMoment(defaultSelected.to) : null
90
+ };
34
91
  });
35
- const [showMonthPicker, setShowMonthPicker] = useState(selectionMode === "quarterly" || selectionMode === "monthly");
36
- const [modifiers, setModifiers] = useState(defaultModifiers);
37
- const week = firstDayOfWeek === 0 ? "week" : "isoWeek";
92
+ const [hoveredDate, setHoveredDate] = useState(null);
93
+ const timezone = moment.defaultZone ? moment.defaultZone.name : moment.tz.guess();
94
+ const currentDateInTimezone = moment().tz(timezone).format("YYYY-MM-DD");
95
+ const today = moment.utc(currentDateInTimezone);
96
+ const selectedYearRef = useRef(null);
97
+ const datePickerRef = useRef(null);
98
+ const handleSelection = useCallback(range => {
99
+ if (!range) {
100
+ setSelected(null);
101
+ if (onChange) onChange(undefined);
102
+ if (instant && onSave) {
103
+ onSave(undefined);
104
+ }
105
+ } else {
106
+ setSelected(range);
107
+ if (onChange) onChange({
108
+ from: range.from.utc().unix(),
109
+ to: range != null && range.to ? moment(range.to).utc().unix() : null
110
+ });
111
+ if (instant && onSave) {
112
+ onSave({
113
+ from: range.from.utc().unix(),
114
+ to: range != null && range.to ? moment(range.to).utc().unix() : null
115
+ });
116
+ }
117
+ }
118
+ }, [onChange, onSave, instant]);
119
+ const toggleCalendar = useCallback(() => {
120
+ if (target) {
121
+ setIsOpen(!isOpen);
122
+ if (onCalendarToggle) onCalendarToggle(!isOpen);
123
+ }
124
+ }, [isOpen, onCalendarToggle, target]);
125
+ const toggleYearSelect = useCallback(() => {
126
+ setIsYearSelectOpen(!isYearSelectOpen);
127
+ setIsMonthSelectOpen(true);
128
+ }, [isYearSelectOpen]);
129
+ const toggleMonthSelect = useCallback(() => {
130
+ if (mode !== "monthly" && mode !== "quarterly") {
131
+ setIsMonthSelectOpen(!isMonthSelectOpen);
132
+ }
133
+ }, [isMonthSelectOpen, mode]);
38
134
  useEffect(() => {
39
- if (enteredFrom instanceof Date && enteredTo instanceof Date) {
40
- setModifiers(prev => {
41
- return {
42
- ...prev,
43
- hovered: {
44
- from: enteredFrom,
45
- to: enteredTo
46
- }
47
- };
135
+ if (defaultSelected && defaultSelected.from) {
136
+ setSelected({
137
+ from: toMoment(defaultSelected.from),
138
+ to: defaultSelected.to ? toMoment(defaultSelected.to) : null
48
139
  });
140
+ setCurrentDate(toMoment(defaultSelected.from) || moment.utc());
141
+ setTargetDate(toMoment(defaultSelected.from) || moment.utc());
49
142
  } else {
50
- setModifiers(defaultModifiers);
51
- }
52
- }, [enteredTo, enteredFrom, defaultModifiers]);
53
- const handleDayClick = useCallback((day, modifiers) => {
54
- if (onDayClick) {
55
- onDayClick(day, modifiers);
143
+ setSelected(null);
56
144
  }
57
- if (!onChange) {
58
- return;
145
+ }, [defaultSelected, month]);
146
+ const handleDateSelect = date => {
147
+ const isSameMonth = date.isSame(currentDate, "month");
148
+ if (isSameMonth || disableAnimations) {
149
+ setCurrentDate(date);
150
+ setTargetDate(date);
151
+ } else {
152
+ const direction = date.isBefore(currentDate, "month") ? "prev" : "next";
153
+ setTargetDate(date);
154
+ setMonthTransitionDirection(direction);
59
155
  }
60
- if (month.getMonth() !== day.getMonth()) {
61
- onMonthChange(day);
156
+ switch (mode) {
157
+ case "daily":
158
+ handleDailySelection(date);
159
+ break;
160
+ case "weekly":
161
+ handleWeeklySelection(date);
162
+ break;
163
+ case "custom":
164
+ handleCustomSelection(date);
165
+ break;
166
+ default:
167
+ console.warn("Unhandled mode: " + mode);
62
168
  }
63
- if (modifiers["day_disabled"] || selectionMode === "none") {
64
- return;
169
+ if (instant && mode !== "custom" && forceClose) toggleCalendar();
170
+ };
171
+ const handleDailySelection = date => {
172
+ if (!date.isSame(selected == null ? void 0 : selected.from)) {
173
+ handleSelection({
174
+ from: date,
175
+ to: date
176
+ });
177
+ } else if (!required) {
178
+ handleSelection(undefined);
65
179
  }
66
- // reset the selectedDays if the user clicks on the same day
67
- if (!dateRequired && (selectedDays != null && selectedDays.from && moment(day).isSame(moment(selectedDays.from), "day") || selectedDays != null && selectedDays.to && moment(day).isSame(moment(selectedDays.to), "day"))) {
68
- setEnteredTo(undefined);
69
- setEnteredFrom(undefined);
70
- return onChange(undefined);
180
+ };
181
+ const handleWeeklySelection = date => {
182
+ var _selected$from;
183
+ const currentDayOfWeek = date.day();
184
+ const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7;
185
+ const startOfWeek = date.clone().subtract(daysToSubtract, "days").startOf("day");
186
+ const endOfWeek = startOfWeek.clone().add(6, "days");
187
+ if (!startOfWeek.isSame(selected == null || (_selected$from = selected.from) == null ? void 0 : _selected$from.startOf("day"))) {
188
+ handleSelection({
189
+ from: startOfWeek,
190
+ to: endOfWeek
191
+ });
192
+ } else if (!required) {
193
+ handleSelection(undefined);
71
194
  }
72
- if (selectionMode === "daily") {
73
- return onChange({
74
- from: day,
75
- to: day
195
+ };
196
+ const handleCustomSelection = date => {
197
+ if (!selected || (selected == null ? void 0 : selected.from) === moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.from) * 1000)) {
198
+ setSelected({
199
+ from: date.utc(),
200
+ to: null
201
+ });
202
+ handleSelection({
203
+ from: date,
204
+ to: null
76
205
  });
206
+ return;
77
207
  }
78
- if (selectionMode === "weekly") {
79
- if (!dateRequired && selectedDays != null && selectedDays.from && moment(day).isSame(moment(selectedDays.from), week)) {
80
- return onChange(undefined);
81
- }
82
- return onChange({
83
- from: moment(day).startOf(week).toDate(),
84
- to: moment(day).endOf(week).toDate()
208
+ if (moment.isMoment(selected == null ? void 0 : selected.from) && !(selected != null && selected.to) && !(selected != null && selected.from.isSame(date.utc(), "day"))) {
209
+ const newSelection = selected != null && selected.from.isBefore(date) ? {
210
+ from: selected.from,
211
+ to: date.utc()
212
+ } : {
213
+ from: date.utc(),
214
+ to: selected.from
215
+ };
216
+ setSelected(newSelection);
217
+ handleSelection({
218
+ from: newSelection.from,
219
+ to: newSelection.to
220
+ });
221
+ } else if (moment.isMoment(selected == null ? void 0 : selected.from) && moment.isMoment(selected == null ? void 0 : selected.to)) {
222
+ setSelected({
223
+ from: date,
224
+ to: null
225
+ });
226
+ handleSelection({
227
+ from: date,
228
+ to: null
229
+ });
230
+ } else if (moment.isMoment(selected == null ? void 0 : selected.from) && selected != null && selected.from.isSame(date.utc(), "day") && !required) {
231
+ setSelected(null);
232
+ handleSelection(undefined);
233
+ } else if (selected.from === null && selected.to === null) {
234
+ setSelected({
235
+ from: date.utc(),
236
+ to: null
237
+ });
238
+ handleSelection({
239
+ from: date,
240
+ to: date
85
241
  });
86
242
  }
87
- if (selectionMode === "custom") {
88
- if (isPreselected) {
89
- setIsPreselected(false);
90
- return onChange({
91
- from: day,
92
- to: day
243
+ };
244
+ const handleSave = () => {
245
+ if (onSave) {
246
+ toggleCalendar();
247
+ if (mode === "custom" && !(selected != null && selected.to)) {
248
+ setSelected({
249
+ from: moment.utc(selected == null ? void 0 : selected.from),
250
+ to: moment.utc(selected == null ? void 0 : selected.from)
93
251
  });
94
252
  }
95
- if (!selectedDays || selectedDays != null && selectedDays.from && selectedDays != null && selectedDays.to && !moment(selectedDays.from).isSame(moment(selectedDays.to))) {
96
- if (!dateRequired && selectedDays != null && selectedDays.from && selectedDays != null && selectedDays.to && moment(day).isBetween(moment(selectedDays.from), moment(selectedDays.to))) {
97
- setEnteredTo(day);
98
- setEnteredFrom(day);
99
- return onChange(undefined);
100
- }
101
- setEnteredFrom(day);
102
- return onChange({
103
- from: day,
104
- to: day
105
- });
106
- }
107
- if (selectedDays != null && selectedDays.from && isAfter(day, selectedDays.from)) {
108
- setEnteredTo(undefined);
109
- setEnteredFrom(undefined);
110
- return onChange({
111
- from: selectedDays.from,
112
- to: day
253
+ if (selected) {
254
+ onSave({
255
+ from: moment.utc(selected == null ? void 0 : selected.from).unix(),
256
+ to: selected != null && selected.to ? moment.utc(selected == null ? void 0 : selected.to).unix() : moment.utc(selected == null ? void 0 : selected.from).unix()
113
257
  });
258
+ } else {
259
+ if (!required) {
260
+ onSave(undefined);
261
+ setCurrentDate(moment.utc());
262
+ setTargetDate(moment.utc());
263
+ }
114
264
  }
115
- if (selectedDays != null && selectedDays.to) {
116
- setEnteredTo(undefined);
117
- setEnteredFrom(undefined);
118
- return onChange({
119
- from: day,
120
- to: selectedDays.to
121
- });
265
+ }
266
+ };
267
+ const handleMonthChange = useCallback(direction => {
268
+ setMonthTransitionDirection(direction);
269
+ if (isMonthSelectOpen) {
270
+ setTargetDate(prevDate => {
271
+ if (prevDate) {
272
+ return direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year");
273
+ }
274
+ return prevDate;
275
+ });
276
+ if (disableAnimations) {
277
+ setCurrentDate(prevDate => direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year"));
122
278
  }
123
- return onChange({
124
- from: day,
125
- to: day
279
+ } else {
280
+ setTargetDate(prevDate => {
281
+ if (prevDate) {
282
+ return direction === "prev" ? prevDate.clone().subtract(1, "month") : prevDate.clone().add(1, "month");
283
+ }
284
+ return prevDate;
126
285
  });
286
+ if (disableAnimations) {
287
+ setCurrentDate(prevDate => direction === "prev" ? prevDate.clone().subtract(1, "month") : prevDate.clone().add(1, "month"));
288
+ }
127
289
  }
128
- }, [onDayClick, onChange, month, selectionMode, dateRequired, selectedDays, onMonthChange, week, isPreselected]);
129
- const isSelectedFirstDay = useCallback(() => {
130
- if (selectionMode !== "custom") {
131
- return false;
290
+ }, [disableAnimations, isMonthSelectOpen]);
291
+ const handleYearChange = useCallback(direction => {
292
+ if (isMonthSelectOpen && !disableAnimations) {
293
+ setMonthTransitionDirection(direction);
294
+ } else {
295
+ setCurrentDate(prevDate => direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year"));
132
296
  }
133
- if (selectedDays != null && selectedDays.from && selectedDays != null && selectedDays.to) {
134
- return moment(selectedDays.from).isSame(selectedDays.to);
297
+ setTargetDate(prevDate => {
298
+ if (prevDate) {
299
+ return direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year");
300
+ }
301
+ return prevDate;
302
+ });
303
+ }, [disableAnimations, isMonthSelectOpen]);
304
+ const onAnimationEnd = () => {
305
+ if (targetDate) {
306
+ setCurrentDate(targetDate);
307
+ setMonthTransitionDirection(null);
135
308
  }
136
- }, [selectionMode, selectedDays]);
137
- const handleDayMouseEnter = useCallback(day => {
138
- if (isPreselected && selectionMode !== "weekly") {
139
- setEnteredTo(day);
140
- setEnteredFrom(day);
141
- return;
309
+ };
310
+ const handleYearSelect = year => {
311
+ setCurrentDate(currentDate.clone().year(year));
312
+ setTargetDate(currentDate.clone().year(year));
313
+ setIsYearSelectOpen(false);
314
+ setIsMonthSelectOpen(true);
315
+ };
316
+ const handleMonthSelect = month => {
317
+ const newDate = currentDate.clone().utc().month(month);
318
+ setCurrentDate(newDate);
319
+ setTargetDate(newDate);
320
+ if (mode === "monthly") {
321
+ var _selected$to;
322
+ const range = {
323
+ from: newDate.clone().startOf("month"),
324
+ to: newDate.clone().endOf("month").startOf("day")
325
+ };
326
+ const isSameMonth = (selected == null ? void 0 : selected.from.isSame(range.from, "month")) && (selected == null || (_selected$to = selected.to) == null ? void 0 : _selected$to.isSame(range.to, "month"));
327
+ if (isSameMonth) {
328
+ if (!required) {
329
+ handleSelection(undefined);
330
+ if (instant && onSave) {
331
+ setCurrentDate(moment.utc());
332
+ setTargetDate(moment.utc());
333
+ }
334
+ }
335
+ } else {
336
+ handleSelection(range);
337
+ }
142
338
  }
143
- if (selectionMode === "daily") {
144
- setEnteredTo(day);
145
- setEnteredFrom(day);
339
+ if (mode === "quarterly") {
340
+ var _selected$to2;
341
+ const quarterRange = {
342
+ from: newDate.clone().startOf("quarter"),
343
+ to: newDate.clone().endOf("quarter").startOf("day")
344
+ };
345
+ const isSameQuarter = (selected == null ? void 0 : selected.from.isSame(quarterRange.from, "quarter")) && (selected == null || (_selected$to2 = selected.to) == null ? void 0 : _selected$to2.isSame(quarterRange.to, "quarter"));
346
+ if (isSameQuarter) {
347
+ if (!required) {
348
+ handleSelection(undefined);
349
+ if (instant && onSave) {
350
+ setCurrentDate(moment.utc());
351
+ setTargetDate(moment.utc());
352
+ }
353
+ }
354
+ } else {
355
+ handleSelection(quarterRange);
356
+ }
146
357
  }
147
- if (selectionMode === "weekly") {
148
- setEnteredFrom(moment(day).startOf(week).toDate());
149
- setEnteredTo(moment(day).endOf(week).toDate());
358
+ if (mode !== "monthly" && mode !== "quarterly") {
359
+ setIsMonthSelectOpen(false);
150
360
  }
151
- if (selectionMode !== "weekly" && (!selectedDays || selectedDays != null && selectedDays.from && selectedDays != null && selectedDays.to && !moment(selectedDays.from).isSame(moment(selectedDays.to)))) {
152
- setEnteredTo(day);
153
- setEnteredFrom(day);
361
+ if (instant && (mode === "monthly" || mode === "quarterly") && forceClose) toggleCalendar();
362
+ };
363
+ useEffect(() => {
364
+ if (isYearSelectOpen && selectedYearRef.current) {
365
+ var _selectedYearRef$curr;
366
+ selectedYearRef == null || (_selectedYearRef$curr = selectedYearRef.current) == null || _selectedYearRef$curr.scrollIntoView({
367
+ behavior: "smooth",
368
+ block: "center"
369
+ });
154
370
  }
155
- if (isSelectedFirstDay() && selectedDays != null && selectedDays.from) {
156
- setEnteredFrom(selectedDays.from);
157
- setEnteredTo(day);
371
+ }, [isYearSelectOpen]);
372
+ const renderDaysOfWeek = () => {
373
+ const daysOfWeek = moment.weekdaysShort();
374
+ const orderedDays = [...daysOfWeek.slice(firstDayOfWeek), ...daysOfWeek.slice(0, firstDayOfWeek)];
375
+ return orderedDays.map(day => /*#__PURE__*/React.createElement(StyledDayName, {
376
+ key: day
377
+ }, day[0]));
378
+ };
379
+ const animationClass = useMemo(() => {
380
+ return monthTransitionDirection && !disableAnimations ? monthTransitionDirection === "next" ? "slide-down" : "slide-up" : "";
381
+ }, [disableAnimations, monthTransitionDirection]);
382
+ const handleDayClick = (day, modifiers) => {
383
+ if (modifiers.some(mod => mod === "day_disabled")) {
384
+ return;
158
385
  }
159
- }, [selectionMode, isSelectedFirstDay, selectedDays, week, isPreselected]);
160
- const onDayMouseLeave = useCallback(() => {
161
- if (selectionMode === "weekly" || selectionMode === "daily" || selectionMode === "custom") {
162
- setEnteredFrom(undefined);
163
- setEnteredTo(undefined);
386
+ if (onDayClick) onDayClick(day, modifiers);
387
+ handleDateSelect(day);
388
+ };
389
+ const getHoverRange = () => {
390
+ if (!hoveredDate) return null;
391
+ if (mode === "quarterly") {
392
+ const startMonth = hoveredDate.clone().startOf("quarter");
393
+ const endMonth = hoveredDate.clone().endOf("quarter");
394
+ return {
395
+ from: startMonth,
396
+ to: endMonth
397
+ };
164
398
  }
165
- }, [setEnteredFrom, setEnteredTo, selectionMode]);
166
- const onWheel = useCallback(e => {
167
- if (stopScroll && (new Date().getTime() - stopScroll.getTime()) / 1000 < 0.9) {
168
- return;
399
+ if (mode === "weekly") {
400
+ const currentDayOfWeek = hoveredDate.day();
401
+ const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7;
402
+ const startOfWeek = hoveredDate.clone().subtract(daysToSubtract, "days").startOf("day");
403
+ const endOfWeek = startOfWeek.clone().add(6, "days");
404
+ return {
405
+ from: startOfWeek,
406
+ to: endOfWeek
407
+ };
169
408
  }
170
- const nextMonth = showMonthPicker ? addMonths(month, 12) : addMonths(month, 1);
171
- const previousMonth = showMonthPicker ? addMonths(month, -12) : addMonths(month, -1);
172
- if (e.deltaY > 0.9) {
173
- setDirection(true);
174
- onMonthChange(nextMonth);
175
- setStopScroll(new Date());
176
- }
177
- if (e.deltaY < -0.9) {
178
- setDirection(false);
179
- onMonthChange(previousMonth);
180
- setStopScroll(new Date());
181
- }
182
- }, [stopScroll, showMonthPicker, month, onMonthChange]);
183
- const togglePicker = useCallback(() => {
184
- if (selectionMode !== "monthly" && selectionMode !== "quarterly") {
185
- return setShowMonthPicker(!showMonthPicker);
186
- }
187
- setShowMonthPicker(true);
188
- }, [showMonthPicker, selectionMode]);
189
- const handleYearMonthChange = useCallback(m => {
190
- if (onChange) {
191
- if (selectionMode === "monthly") {
192
- if (!dateRequired && selectedDays != null && selectedDays.from && moment(m).isSame(moment(selectedDays.from), "month")) {
193
- return onChange(undefined);
194
- }
195
- onChange({
196
- from: moment(m).startOf("month").toDate(),
197
- to: moment(m).endOf("month").toDate()
198
- });
199
- }
200
- if (selectionMode === "quarterly") {
201
- if (!dateRequired && selectedDays != null && selectedDays.from && moment(m).isSame(moment(selectedDays.from).startOf("quarter"), "quarter")) {
202
- return onChange(undefined);
409
+ if (mode === "custom" && selected != null && selected.from && !(selected != null && selected.to)) {
410
+ const from = selected.from.isBefore(hoveredDate) ? selected.from : hoveredDate;
411
+ const to = selected.from.isAfter(hoveredDate) ? selected.from : hoveredDate;
412
+ return {
413
+ from,
414
+ to
415
+ };
416
+ }
417
+ return null;
418
+ };
419
+ const renderCalendarDates = () => {
420
+ const startOfMonth = currentDate.clone().startOf("month");
421
+ const startDate = startOfMonth.clone().isoWeekday(firstDayOfWeek);
422
+ const endDate = startDate.clone().add(6, "weeks");
423
+ const date = startDate.clone();
424
+ const dates = [];
425
+ const hoverRange = getHoverRange();
426
+ while (date.isBefore(endDate)) {
427
+ const clonedDate = date.clone();
428
+ const isToday = clonedDate.isSame(today, "day");
429
+ const isSelected = selected && (clonedDate.isBetween(selected.from, selected.to, "day", "[]") || clonedDate.isSame(selected.from, "day") || clonedDate.isSame(selected.to, "day"));
430
+ const isHovered = hoverRange && (mode === "weekly" || mode === "custom") && clonedDate.isBetween(hoverRange.from, hoverRange.to, "day", "[]");
431
+ const isDisabled = disabledDaysBefore && clonedDate.isBefore(disabledDaysBefore, "day") || disabledDaysAfter && clonedDate.isAfter(disabledDaysAfter, "day") || disabledDays.includes(clonedDate.day());
432
+ const modifierClasses = [];
433
+ const modifierTitles = [];
434
+ let titles;
435
+ if (modifiers) Object.keys(modifiers || {}).forEach(modifier => {
436
+ const {
437
+ matched,
438
+ title
439
+ } = modifiers[modifier](clonedDate);
440
+ if (matched) {
441
+ modifierClasses.push(modifier);
442
+ if (title) modifierTitles.push(title);
203
443
  }
204
- onChange({
205
- from: moment(m).startOf("quarter").toDate(),
206
- to: moment(m).endOf("quarter").toDate()
207
- });
444
+ });
445
+ if (modifierTitles.length) {
446
+ titles = /*#__PURE__*/React.createElement("div", {
447
+ key: "title-wrapper-" + clonedDate.toString()
448
+ }, modifierTitles.map((title, index) => /*#__PURE__*/React.createElement("div", {
449
+ key: "title-text-" + index
450
+ }, title)));
208
451
  }
452
+ const isOutside = !clonedDate.isSame(currentDate, "month");
453
+ dates.push( /*#__PURE__*/React.createElement(Tooltip, {
454
+ title: titles,
455
+ disable: !modifierTitles.length,
456
+ key: clonedDate.toString(),
457
+ popperTooltipClassName: popperTooltipClassName,
458
+ popperTooltipStyle: popperTooltipStyle
459
+ }, /*#__PURE__*/React.createElement(StyledCalendarDate, {
460
+ className: (isSelected ? "selected" : "") + " " + (isToday ? "today-day" : "") + "\n " + (isDisabled ? "disabled" : "") + " " + (isHovered ? "hovered" : "") + " " + modifierClasses.join(" ") + "\n " + (isOutside ? "outside" : ""),
461
+ onClick: () => handleDayClick(clonedDate, modifierClasses),
462
+ onMouseEnter: mode === "weekly" || mode === "custom" ? () => setHoveredDate(clonedDate) : undefined,
463
+ onMouseLeave: mode === "weekly" || mode === "custom" ? () => setHoveredDate(null) : undefined
464
+ }, clonedDate.date())));
465
+ date.add(1, "day");
209
466
  }
210
- onMonthChange(m);
211
- }, [onMonthChange, onChange, selectedDays, selectionMode, dateRequired]);
212
- const text = useMemo(() => {
213
- if (showMonthPicker) {
214
- return "" + month.getFullYear();
215
- }
216
- return moment(month).format("MMMM") + " " + (moment(month).isSame(moment(), "year") ? "" : month.getFullYear());
217
- }, [showMonthPicker, month]);
218
- const customNavBarElement = useCallback(props => {
219
- return /*#__PURE__*/React.createElement("div", {
220
- className: "c-DayPicker-wrapper"
221
- }, /*#__PURE__*/React.createElement(CustomNavBarElement, _extends({}, props, {
222
- showMonthPicker: showMonthPicker,
223
- month: month,
224
- onChangeDirection: setDirection,
225
- onMonthChange: onMonthChange,
226
- onClick: togglePicker
227
- })), /*#__PURE__*/React.createElement(YearMonthPicker, _extends({}, props, {
228
- text: text,
229
- onClick: togglePicker,
230
- month: month,
231
- selectedDays: selectedDays,
232
- onChange: handleYearMonthChange,
233
- isShown: showMonthPicker,
234
- selectionMode: selectionMode
235
- })));
236
- }, [showMonthPicker, month, onMonthChange, togglePicker, text, selectedDays, handleYearMonthChange, selectionMode]);
237
- const onKeyDownCallback = useCallback(e => {
238
- // Right Arrow
239
- if (e.key === "ArrowRight") {
240
- setDirection(true);
241
- if (showMonthPicker) {
242
- onMonthChange(new Date(month.getFullYear() + 1, month.getMonth()));
243
- } else {
244
- onMonthChange(new Date(month.getFullYear(), month.getMonth() + 1));
245
- }
467
+ return dates;
468
+ };
469
+ const renderYearSelect = () => {
470
+ const years = Array.from({
471
+ length: 200
472
+ }, (_, i) => 1900 + i);
473
+ return /*#__PURE__*/React.createElement(StyledYearSelect, null, years.map(year => {
474
+ const isSelected = selected && ((selected == null ? void 0 : selected.to) && year >= selected.from.year() && year <= selected.to.year() || year === selected.from.year() || (selected == null ? void 0 : selected.to) && year === selected.to.year());
475
+ const isDisabledYear = disabledDaysBefore && year < disabledDaysBefore.year() || disabledDaysAfter && year > disabledDaysAfter.year();
476
+ return /*#__PURE__*/React.createElement(StyledYearOption, {
477
+ key: year,
478
+ ref: year === currentDate.year() ? selectedYearRef : null,
479
+ className: (isSelected ? "selected" : "") + " " + (year === today.year() ? "today-year" : "") + " " + (isDisabledYear ? "disabled" : ""),
480
+ onClick: () => handleYearSelect(year)
481
+ }, year);
482
+ }));
483
+ };
484
+ const renderMonthSelect = () => {
485
+ const months = moment.months();
486
+ const hoverRange = getHoverRange();
487
+ return /*#__PURE__*/React.createElement(StyledMonthSelect, null, months.map((month, index) => {
488
+ const monthDate = currentDate.clone().month(index);
489
+ const isSelected = selected && (monthDate.isBetween(selected.from, selected.to, "month", "[]") || monthDate.isSame(selected.from, "month") || monthDate.isSame(selected.to, "month"));
490
+ const isDisabledMonth = disabledDaysBefore && monthDate.isBefore(disabledDaysBefore, "month") || disabledDaysAfter && monthDate.isAfter(disabledDaysAfter, "month");
491
+ const isHoveredQuarter = hoverRange && mode === "quarterly" && monthDate.isBetween(hoverRange.from, hoverRange.to, "month", "[]");
492
+ return /*#__PURE__*/React.createElement(StyledMonthOption, {
493
+ key: month,
494
+ className: (isSelected ? "selected" : "") + " " + (index === today.month() && currentDate.year() === today.year() ? "today-month" : "") + " " + (isDisabledMonth ? "disabled" : "") + " " + (isHoveredQuarter ? "hovered" : ""),
495
+ onClick: () => handleMonthSelect(index),
496
+ onMouseEnter: mode === "quarterly" ? () => setHoveredDate(monthDate) : undefined,
497
+ onMouseLeave: mode === "quarterly" ? () => setHoveredDate(null) : undefined
498
+ }, month.substring(0, 3));
499
+ }));
500
+ };
501
+ const captionText = useMemo(() => {
502
+ const isCurrentYear = currentDate.isSame(today, "year");
503
+ return !isMonthSelectOpen && !isYearSelectOpen ? "" + currentDate.format("MMMM") + (isCurrentYear ? "" : " " + currentDate.format("YYYY")) : currentDate.format("YYYY");
504
+ }, [currentDate, isMonthSelectOpen, isYearSelectOpen, today]);
505
+ const handleClear = useCallback(() => {
506
+ if (typeof onClear === "function") onClear();
507
+ handleSelection(undefined);
508
+ }, [handleSelection, onClear]);
509
+ const handleClose = useCallback(() => {
510
+ var _selected$to3;
511
+ if (mode === "custom" && instant && selected) {
512
+ setSelected({
513
+ from: moment.utc(selected == null ? void 0 : selected.from),
514
+ to: selected != null && selected.to ? moment.utc(selected == null ? void 0 : selected.to) : moment.utc(selected == null ? void 0 : selected.from)
515
+ });
246
516
  }
247
- // Left Arrow
248
- if (e.key === "ArrowLeft") {
249
- setDirection(false);
250
- if (showMonthPicker) {
251
- onMonthChange(new Date(month.getFullYear() - 1, month.getMonth()));
252
- } else {
253
- onMonthChange(new Date(month.getFullYear(), month.getMonth() - 1));
254
- }
517
+ if (instant && onSave && mode === "custom" && selected && (!(selected != null && selected.from.isSame(moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.from) * 1000))) || !(selected != null && (_selected$to3 = selected.to) != null && _selected$to3.isSame(moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.to) * 1000))))) {
518
+ onSave({
519
+ from: moment.utc(selected == null ? void 0 : selected.from).unix(),
520
+ to: selected != null && selected.to ? moment.utc(selected == null ? void 0 : selected.to).unix() : moment.utc(selected == null ? void 0 : selected.from).unix()
521
+ });
522
+ }
523
+ if (mode === "custom" && instant && !selected && onSave) {
524
+ onSave(undefined);
255
525
  }
256
- // Up Arrow
257
- if (e.key === "ArrowUp") {
258
- setDirection(true);
259
- onMonthChange(new Date(month.getFullYear() + 1, month.getMonth()));
526
+ setCurrentDate(defaultSelected != null && defaultSelected.from ? toMoment(defaultSelected.from) : month ? toMoment(month) : moment.utc());
527
+ setTargetDate(defaultSelected != null && defaultSelected.from ? toMoment(defaultSelected.from) : month ? toMoment(month) : moment.utc());
528
+ setSelected(defaultSelected != null && defaultSelected.from ? {
529
+ from: toMoment(defaultSelected.from),
530
+ to: defaultSelected.to ? toMoment(defaultSelected.to) : null
531
+ } : null);
532
+ toggleCalendar();
533
+ setIsYearSelectOpen(false);
534
+ setIsMonthSelectOpen(mode === "monthly" || mode === "quarterly");
535
+ setMonthTransitionDirection(null);
536
+ if (typeof onClose === "function") onClose();
537
+ }, [defaultSelected, instant, mode, month, onClose, onSave, selected, toggleCalendar]);
538
+ const handleBeforeClose = useCallback(() => {
539
+ let shouldClose = true;
540
+ if (!target || !enableConfirmModal || instant || required) {
541
+ shouldClose = true;
260
542
  }
261
- // Down Arrow
262
- if (e.key === "ArrowDown") {
263
- setDirection(false);
264
- onMonthChange(new Date(month.getFullYear() - 1, month.getMonth()));
543
+ if (target && enableConfirmModal && !instant && !required && (selected && !defaultSelected || !selected && defaultSelected || selected != null && selected.from && defaultSelected != null && defaultSelected.from && !selected.from.isSame(toMoment(defaultSelected.from)) || selected != null && selected.to && defaultSelected != null && defaultSelected.to && !selected.to.isSame(toMoment(defaultSelected.to)))) {
544
+ shouldClose = false;
545
+ setShowDiscardModal(true);
265
546
  }
266
- }, [showMonthPicker, onMonthChange, month]);
547
+ if (shouldClose) handleClose();
548
+ return shouldClose;
549
+ }, [defaultSelected, enableConfirmModal, handleClose, instant, required, selected, target]);
550
+ const Wrapper = target ? Menu : "div";
551
+ const handleCaptionClick = useCallback(() => {
552
+ isMonthSelectOpen && !disableYearPicker ? toggleYearSelect() : toggleMonthSelect();
553
+ }, [disableYearPicker, isMonthSelectOpen, toggleMonthSelect, toggleYearSelect]);
554
+ const handleCloseDiscardModal = useCallback(() => {
555
+ setShowDiscardModal(false);
556
+ }, []);
557
+ const handleSaveDiscardModal = useCallback(() => {
558
+ setSelected(defaultSelected != null && defaultSelected.from ? {
559
+ from: toMoment(defaultSelected.from),
560
+ to: defaultSelected.to ? toMoment(defaultSelected.to) : null
561
+ } : null);
562
+ setShowDiscardModal(false);
563
+ handleClose();
564
+ }, [defaultSelected, handleClose]);
565
+ const wrapperProps = target ? {
566
+ className: "c-date-picker--calendar",
567
+ target,
568
+ onBeforeClose: handleBeforeClose,
569
+ onClose: handleClose,
570
+ open: isOpen,
571
+ active: isOpen,
572
+ onOpen: toggleCalendar,
573
+ position,
574
+ menuClassName,
575
+ popperClassName,
576
+ backgroundElementClass
577
+ } : {
578
+ className: "c-date-picker--calendar"
579
+ };
267
580
  useEffect(() => {
268
- document.addEventListener("keydown", onKeyDownCallback);
581
+ const handleKeyDown = event => {
582
+ if (event.key === "ArrowRight") {
583
+ handleMonthChange("next");
584
+ } else if (event.key === "ArrowLeft") {
585
+ handleMonthChange("prev");
586
+ } else if (event.key === "ArrowUp") {
587
+ handleYearChange("next");
588
+ } else if (event.key === "ArrowDown") {
589
+ handleYearChange("prev");
590
+ }
591
+ };
592
+ if (isOpen) {
593
+ window.addEventListener("keydown", handleKeyDown);
594
+ } else {
595
+ window.removeEventListener("keydown", handleKeyDown);
596
+ }
269
597
  return () => {
270
- document.removeEventListener("keydown", onKeyDownCallback);
598
+ window.removeEventListener("keydown", handleKeyDown);
271
599
  };
272
- }, [month, onMonthChange, showMonthPicker, onKeyDownCallback]);
273
- const selected = useMemo(() => {
274
- const dates = [];
275
- if (!(selectedDays != null && selectedDays.from)) return [];
276
-
277
- // If from and to dates are the same, return an array with one item
278
- if (moment(selectedDays == null ? void 0 : selectedDays.from).isSame(selectedDays == null ? void 0 : selectedDays.to, "day")) {
279
- dates.push(selectedDays == null ? void 0 : selectedDays.from);
280
- return dates;
281
- }
282
- let currentDate = moment(selectedDays == null ? void 0 : selectedDays.from);
283
- while (currentDate.isSameOrBefore(selectedDays == null ? void 0 : selectedDays.to, "day")) {
284
- dates.push(currentDate.toDate());
285
- currentDate = currentDate.add(1, "days");
600
+ }, [isOpen, handleMonthChange, handleYearChange]);
601
+ const saveIsDisabled = () => {
602
+ if (!target) return false;
603
+ if (!defaultSelected && !selected) {
604
+ return true;
286
605
  }
287
- return dates;
288
- }, [selectedDays == null ? void 0 : selectedDays.from, selectedDays == null ? void 0 : selectedDays.to]);
289
- return /*#__PURE__*/React.createElement(StyledDatePicker, {
290
- className: "c-date-picker-wrapper",
291
- onWheel: onWheel
292
- }, /*#__PURE__*/React.createElement(SwitchTransition, {
293
- mode: "out-in"
294
- }, /*#__PURE__*/React.createElement(StyledDatePickerCSSTransition, {
295
- key: showMonthPicker ? month.getFullYear() : month.getMonth(),
296
- timeout: 300,
297
- classNames: "c-date-picker__animation",
298
- $direction: direction
299
- }, /*#__PURE__*/React.createElement(StyledDayPicker, _extends({}, rest, {
300
- mode: "multiple",
301
- showOutsideDays: true,
302
- disabled: disabledDays,
303
- selected: selected,
304
- onDayClick: handleDayClick,
305
- modifiers: modifiers,
306
- onDayMouseEnter: handleDayMouseEnter,
307
- onDayMouseLeave: onDayMouseLeave,
308
- className: className,
309
- $isYearlyView: showMonthPicker,
310
- month: month,
311
- components: {
312
- Caption: customNavBarElement,
313
- DayContent: renderDay
314
- },
315
- classNames: customClassNames,
316
- modifiersClassNames: modifiersClassNames,
317
- fixedWeeks: fixedWeeks,
318
- weekStartsOn: firstDayOfWeek,
319
- formatters: {
320
- formatWeekdayName: formatWeekdayName
321
- }
322
- })))));
606
+ if (defaultSelected && selected && defaultSelected.from && selected.from.isSame(toMoment(defaultSelected.from)) && defaultSelected.to && selected.to && selected.to.isSame(toMoment(defaultSelected.to))) {
607
+ return true;
608
+ }
609
+ return false;
610
+ };
611
+ return /*#__PURE__*/React.createElement(StyledDatePickerWrapper, {
612
+ ref: datePickerRef
613
+ }, /*#__PURE__*/React.createElement(Wrapper, wrapperProps, /*#__PURE__*/React.createElement(StyledDatePickerContainerInner, null, /*#__PURE__*/React.createElement(StyledCalendarHeader, null, isYearSelectOpen ? null : /*#__PURE__*/React.createElement(IconButton, {
614
+ onClick: () => handleMonthChange("prev"),
615
+ variant: "text gray",
616
+ size: "small"
617
+ }, /*#__PURE__*/React.createElement(ArrowLeftIcon, null)), /*#__PURE__*/React.createElement(StyledCaption, {
618
+ className: animationClass + " " + (isYearSelectOpen ? "year-caption" : ""),
619
+ key: isMonthSelectOpen ? currentDate.year() : currentDate.month(),
620
+ onClick: handleCaptionClick,
621
+ onAnimationEnd: onAnimationEnd
622
+ }, captionText), isYearSelectOpen ? null : /*#__PURE__*/React.createElement(IconButton, {
623
+ onClick: () => handleMonthChange("next"),
624
+ variant: "text gray",
625
+ size: "small"
626
+ }, /*#__PURE__*/React.createElement(ArrowRightIcon, null))), /*#__PURE__*/React.createElement(StyledCalendarSelector, null, isYearSelectOpen ? renderYearSelect() : isMonthSelectOpen ? /*#__PURE__*/React.createElement(StyledMonthSelector, {
627
+ className: animationClass,
628
+ key: currentDate.year(),
629
+ onAnimationEnd: onAnimationEnd
630
+ }, renderMonthSelect()) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledDaysOfWeek, null, renderDaysOfWeek()), /*#__PURE__*/React.createElement(StyledCalendarDates, {
631
+ className: animationClass,
632
+ key: currentDate.month()
633
+ }, renderCalendarDates()))), (target || showControls) && (!instant ? /*#__PURE__*/React.createElement(StyledControls, null, /*#__PURE__*/React.createElement(StyledControlsLeft, null, /*#__PURE__*/React.createElement(Button, {
634
+ size: "small",
635
+ variant: "primary",
636
+ onClick: handleSave,
637
+ disabled: saveIsDisabled()
638
+ }, saveLabel), /*#__PURE__*/React.createElement(Tooltip, {
639
+ title: cancelLabel,
640
+ popperTooltipStyle: {
641
+ zIndex: 1301
642
+ }
643
+ }, /*#__PURE__*/React.createElement(IconButton, {
644
+ size: "small",
645
+ variant: "text gray",
646
+ onClick: handleBeforeClose
647
+ }, /*#__PURE__*/React.createElement(CancelCrossIcon, null)))), !required ? /*#__PURE__*/React.createElement(Button, {
648
+ size: "small",
649
+ onClick: handleClear,
650
+ variant: "text gray"
651
+ }, clearLabel) : null) : !required ? /*#__PURE__*/React.createElement(StyledControls, null, /*#__PURE__*/React.createElement(StyledClearInstantButton, {
652
+ size: "small",
653
+ onClick: handleClear,
654
+ variant: "text gray"
655
+ }, clearLabel)) : null))), !instant && target && !required && enableConfirmModal ? /*#__PURE__*/React.createElement(StyledConfirmDialog, {
656
+ className: "modal-select-date",
657
+ open: showDiscardModal,
658
+ onCancel: handleCloseDiscardModal,
659
+ onConfirm: handleSaveDiscardModal,
660
+ dialogTitle: modalHeaderText,
661
+ dialogContent: modalDiscardMessage,
662
+ cancelBtnText: modalCancelBtnText,
663
+ confirmBtnText: modalDiscardBtnText
664
+ }) : null);
323
665
  };
324
- DatePicker.displayName = "DatePicker";
325
666
  //# sourceMappingURL=DatePicker.js.map