@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,649 +0,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 "./StylesV2";
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
- };
19
- export const DatePickerV2 = _ref => {
20
- let {
21
- selected: defaultSelected,
22
- onChange,
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,
37
- firstDayOfWeek = 0,
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
57
- } = _ref;
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
- };
91
- });
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]);
134
- useEffect(() => {
135
- if (defaultSelected && defaultSelected.from) {
136
- setSelected({
137
- from: toMoment(defaultSelected.from),
138
- to: defaultSelected.to ? toMoment(defaultSelected.to) : null
139
- });
140
- setCurrentDate(toMoment(defaultSelected.from) || moment.utc());
141
- setTargetDate(toMoment(defaultSelected.from) || moment.utc());
142
- } else {
143
- setSelected(null);
144
- }
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);
155
- }
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);
168
- }
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);
179
- }
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);
194
- }
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
205
- });
206
- return;
207
- }
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
241
- });
242
- }
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)
251
- });
252
- }
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()
257
- });
258
- } else {
259
- if (!required) {
260
- onSave(undefined);
261
- setCurrentDate(moment.utc());
262
- setTargetDate(moment.utc());
263
- }
264
- }
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"));
278
- }
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;
285
- });
286
- if (disableAnimations) {
287
- setCurrentDate(prevDate => direction === "prev" ? prevDate.clone().subtract(1, "month") : prevDate.clone().add(1, "month"));
288
- }
289
- }
290
- }, [disableAnimations, isMonthSelectOpen]);
291
- const onAnimationEnd = () => {
292
- if (targetDate) {
293
- setCurrentDate(targetDate);
294
- setMonthTransitionDirection(null);
295
- }
296
- };
297
- const handleYearSelect = year => {
298
- setCurrentDate(currentDate.clone().year(year));
299
- setTargetDate(currentDate.clone().year(year));
300
- setIsYearSelectOpen(false);
301
- setIsMonthSelectOpen(true);
302
- };
303
- const handleMonthSelect = month => {
304
- const newDate = currentDate.clone().utc().month(month);
305
- setCurrentDate(newDate);
306
- setTargetDate(newDate);
307
- if (mode === "monthly") {
308
- var _selected$to;
309
- const range = {
310
- from: newDate.clone().startOf("month"),
311
- to: newDate.clone().endOf("month").startOf("day")
312
- };
313
- 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"));
314
- if (isSameMonth) {
315
- if (!required) {
316
- handleSelection(undefined);
317
- if (instant && onSave) {
318
- setCurrentDate(moment.utc());
319
- setTargetDate(moment.utc());
320
- }
321
- }
322
- } else {
323
- handleSelection(range);
324
- }
325
- }
326
- if (mode === "quarterly") {
327
- var _selected$to2;
328
- const quarterRange = {
329
- from: newDate.clone().startOf("quarter"),
330
- to: newDate.clone().endOf("quarter").startOf("day")
331
- };
332
- 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"));
333
- if (isSameQuarter) {
334
- if (!required) {
335
- handleSelection(undefined);
336
- if (instant && onSave) {
337
- setCurrentDate(moment.utc());
338
- setTargetDate(moment.utc());
339
- }
340
- }
341
- } else {
342
- handleSelection(quarterRange);
343
- }
344
- }
345
- if (mode !== "monthly" && mode !== "quarterly") {
346
- setIsMonthSelectOpen(false);
347
- }
348
- if (instant && (mode === "monthly" || mode === "quarterly") && forceClose) toggleCalendar();
349
- };
350
- useEffect(() => {
351
- if (isYearSelectOpen && selectedYearRef.current) {
352
- var _selectedYearRef$curr;
353
- selectedYearRef == null || (_selectedYearRef$curr = selectedYearRef.current) == null || _selectedYearRef$curr.scrollIntoView({
354
- behavior: "smooth",
355
- block: "center"
356
- });
357
- }
358
- }, [isYearSelectOpen]);
359
- const renderDaysOfWeek = () => {
360
- const daysOfWeek = moment.weekdaysShort();
361
- const orderedDays = [...daysOfWeek.slice(firstDayOfWeek), ...daysOfWeek.slice(0, firstDayOfWeek)];
362
- return orderedDays.map(day => /*#__PURE__*/React.createElement(StyledDayName, {
363
- key: day
364
- }, day[0]));
365
- };
366
- const animationClass = useMemo(() => {
367
- return monthTransitionDirection && !disableAnimations ? monthTransitionDirection === "next" ? "slide-down" : "slide-up" : "";
368
- }, [disableAnimations, monthTransitionDirection]);
369
- const handleDayClick = (day, modifiers) => {
370
- if (modifiers.some(mod => mod === "day_disabled")) {
371
- return;
372
- }
373
- if (onDayClick) onDayClick(day, modifiers);
374
- handleDateSelect(day);
375
- };
376
- const getHoverRange = () => {
377
- if (!hoveredDate) return null;
378
- if (mode === "quarterly") {
379
- const startMonth = hoveredDate.clone().startOf("quarter");
380
- const endMonth = hoveredDate.clone().endOf("quarter");
381
- return {
382
- from: startMonth,
383
- to: endMonth
384
- };
385
- }
386
- if (mode === "weekly") {
387
- const currentDayOfWeek = hoveredDate.day();
388
- const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7;
389
- const startOfWeek = hoveredDate.clone().subtract(daysToSubtract, "days").startOf("day");
390
- const endOfWeek = startOfWeek.clone().add(6, "days");
391
- return {
392
- from: startOfWeek,
393
- to: endOfWeek
394
- };
395
- }
396
- if (mode === "custom" && selected != null && selected.from && !(selected != null && selected.to)) {
397
- const from = selected.from.isBefore(hoveredDate) ? selected.from : hoveredDate;
398
- const to = selected.from.isAfter(hoveredDate) ? selected.from : hoveredDate;
399
- return {
400
- from,
401
- to
402
- };
403
- }
404
- return null;
405
- };
406
- const renderCalendarDates = () => {
407
- const startOfMonth = currentDate.clone().startOf("month");
408
- const startDate = startOfMonth.clone().isoWeekday(firstDayOfWeek);
409
- const endDate = startDate.clone().add(6, "weeks");
410
- const date = startDate.clone();
411
- const dates = [];
412
- const hoverRange = getHoverRange();
413
- while (date.isBefore(endDate)) {
414
- const clonedDate = date.clone();
415
- const isToday = clonedDate.isSame(today, "day");
416
- const isSelected = selected && (clonedDate.isBetween(selected.from, selected.to, "day", "[]") || clonedDate.isSame(selected.from, "day") || clonedDate.isSame(selected.to, "day"));
417
- const isHovered = hoverRange && (mode === "weekly" || mode === "custom") && clonedDate.isBetween(hoverRange.from, hoverRange.to, "day", "[]");
418
- const isDisabled = disabledDaysBefore && clonedDate.isBefore(disabledDaysBefore, "day") || disabledDaysAfter && clonedDate.isAfter(disabledDaysAfter, "day") || disabledDays.includes(clonedDate.day());
419
- const modifierClasses = [];
420
- const modifierTitles = [];
421
- let titles;
422
- if (modifiers) Object.keys(modifiers || {}).forEach(modifier => {
423
- const {
424
- matched,
425
- title
426
- } = modifiers[modifier](clonedDate);
427
- if (matched) {
428
- modifierClasses.push(modifier);
429
- if (title) modifierTitles.push(title);
430
- }
431
- });
432
- if (modifierTitles.length) {
433
- titles = /*#__PURE__*/React.createElement("div", {
434
- key: "title-wrapper-" + clonedDate.toString()
435
- }, modifierTitles.map((title, index) => /*#__PURE__*/React.createElement("div", {
436
- key: "title-text-" + index
437
- }, title)));
438
- }
439
- const isOutside = !clonedDate.isSame(currentDate, "month");
440
- dates.push( /*#__PURE__*/React.createElement(Tooltip, {
441
- title: titles,
442
- disable: !modifierTitles.length,
443
- key: clonedDate.toString(),
444
- popperTooltipClassName: popperTooltipClassName,
445
- popperTooltipStyle: popperTooltipStyle
446
- }, /*#__PURE__*/React.createElement(StyledCalendarDate, {
447
- className: (isSelected ? "selected" : "") + " " + (isToday ? "today-day" : "") + "\n " + (isDisabled ? "disabled" : "") + " " + (isHovered ? "hovered" : "") + " " + modifierClasses.join(" ") + "\n " + (isOutside ? "outside" : ""),
448
- onClick: () => handleDayClick(clonedDate, modifierClasses),
449
- onMouseEnter: mode === "weekly" || mode === "custom" ? () => setHoveredDate(clonedDate) : undefined,
450
- onMouseLeave: mode === "weekly" || mode === "custom" ? () => setHoveredDate(null) : undefined
451
- }, clonedDate.date())));
452
- date.add(1, "day");
453
- }
454
- return dates;
455
- };
456
- const renderYearSelect = () => {
457
- const years = Array.from({
458
- length: 200
459
- }, (_, i) => 1900 + i);
460
- return /*#__PURE__*/React.createElement(StyledYearSelect, null, years.map(year => {
461
- 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());
462
- const isDisabledYear = disabledDaysBefore && year < disabledDaysBefore.year() || disabledDaysAfter && year > disabledDaysAfter.year();
463
- return /*#__PURE__*/React.createElement(StyledYearOption, {
464
- key: year,
465
- ref: year === currentDate.year() ? selectedYearRef : null,
466
- className: (isSelected ? "selected" : "") + " " + (year === today.year() ? "today-year" : "") + " " + (isDisabledYear ? "disabled" : ""),
467
- onClick: () => handleYearSelect(year)
468
- }, year);
469
- }));
470
- };
471
- const renderMonthSelect = () => {
472
- const months = moment.months();
473
- const hoverRange = getHoverRange();
474
- return /*#__PURE__*/React.createElement(StyledMonthSelect, null, months.map((month, index) => {
475
- const monthDate = currentDate.clone().month(index);
476
- const isSelected = selected && (monthDate.isBetween(selected.from, selected.to, "month", "[]") || monthDate.isSame(selected.from, "month") || monthDate.isSame(selected.to, "month"));
477
- const isDisabledMonth = disabledDaysBefore && monthDate.isBefore(disabledDaysBefore, "month") || disabledDaysAfter && monthDate.isAfter(disabledDaysAfter, "month");
478
- const isHoveredQuarter = hoverRange && mode === "quarterly" && monthDate.isBetween(hoverRange.from, hoverRange.to, "month", "[]");
479
- return /*#__PURE__*/React.createElement(StyledMonthOption, {
480
- key: month,
481
- className: (isSelected ? "selected" : "") + " " + (index === today.month() && currentDate.year() === today.year() ? "today-month" : "") + " " + (isDisabledMonth ? "disabled" : "") + " " + (isHoveredQuarter ? "hovered" : ""),
482
- onClick: () => handleMonthSelect(index),
483
- onMouseEnter: mode === "quarterly" ? () => setHoveredDate(monthDate) : undefined,
484
- onMouseLeave: mode === "quarterly" ? () => setHoveredDate(null) : undefined
485
- }, month.substring(0, 3));
486
- }));
487
- };
488
- const captionText = useMemo(() => {
489
- const isCurrentYear = currentDate.isSame(today, "year");
490
- return !isMonthSelectOpen && !isYearSelectOpen ? "" + currentDate.format("MMMM") + (isCurrentYear ? "" : " " + currentDate.format("YYYY")) : currentDate.format("YYYY");
491
- }, [currentDate, isMonthSelectOpen, isYearSelectOpen, today]);
492
- const handleClear = useCallback(() => {
493
- if (typeof onClear === "function") onClear();
494
- handleSelection(undefined);
495
- }, [handleSelection, onClear]);
496
- const handleClose = useCallback(() => {
497
- var _selected$to3;
498
- if (mode === "custom" && instant && selected) {
499
- setSelected({
500
- from: moment.utc(selected == null ? void 0 : selected.from),
501
- to: selected != null && selected.to ? moment.utc(selected == null ? void 0 : selected.to) : moment.utc(selected == null ? void 0 : selected.from)
502
- });
503
- }
504
- 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))))) {
505
- onSave({
506
- from: moment.utc(selected == null ? void 0 : selected.from).unix(),
507
- to: selected != null && selected.to ? moment.utc(selected == null ? void 0 : selected.to).unix() : moment.utc(selected == null ? void 0 : selected.from).unix()
508
- });
509
- }
510
- if (mode === "custom" && instant && !selected && onSave) {
511
- onSave(undefined);
512
- }
513
- setCurrentDate(defaultSelected != null && defaultSelected.from ? toMoment(defaultSelected.from) : month ? toMoment(month) : moment.utc());
514
- setTargetDate(defaultSelected != null && defaultSelected.from ? toMoment(defaultSelected.from) : month ? toMoment(month) : moment.utc());
515
- setSelected(defaultSelected != null && defaultSelected.from ? {
516
- from: toMoment(defaultSelected.from),
517
- to: defaultSelected.to ? toMoment(defaultSelected.to) : null
518
- } : null);
519
- toggleCalendar();
520
- setIsYearSelectOpen(false);
521
- setIsMonthSelectOpen(mode === "monthly" || mode === "quarterly");
522
- setMonthTransitionDirection(null);
523
- if (typeof onClose === "function") onClose();
524
- }, [defaultSelected, instant, mode, month, onClose, onSave, selected, toggleCalendar]);
525
- const handleBeforeClose = useCallback(() => {
526
- let shouldClose = true;
527
- if (!target || !enableConfirmModal || instant || required) {
528
- shouldClose = true;
529
- }
530
- 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)))) {
531
- shouldClose = false;
532
- setShowDiscardModal(true);
533
- }
534
- if (shouldClose) handleClose();
535
- return shouldClose;
536
- }, [defaultSelected, enableConfirmModal, handleClose, instant, required, selected, target]);
537
- const Wrapper = target ? Menu : "div";
538
- const handleCaptionClick = useCallback(() => {
539
- isMonthSelectOpen && !disableYearPicker ? toggleYearSelect() : toggleMonthSelect();
540
- }, [disableYearPicker, isMonthSelectOpen, toggleMonthSelect, toggleYearSelect]);
541
- const handleCloseDiscardModal = useCallback(() => {
542
- setShowDiscardModal(false);
543
- }, []);
544
- const handleSaveDiscardModal = useCallback(() => {
545
- setSelected(defaultSelected != null && defaultSelected.from ? {
546
- from: toMoment(defaultSelected.from),
547
- to: defaultSelected.to ? toMoment(defaultSelected.to) : null
548
- } : null);
549
- setShowDiscardModal(false);
550
- handleClose();
551
- }, [defaultSelected, handleClose]);
552
- const wrapperProps = target ? {
553
- className: "c-date-picker--calendar",
554
- target,
555
- onBeforeClose: handleBeforeClose,
556
- onClose: handleClose,
557
- open: isOpen,
558
- active: isOpen,
559
- onOpen: toggleCalendar,
560
- position,
561
- menuClassName,
562
- popperClassName,
563
- backgroundElementClass
564
- } : {
565
- className: "c-date-picker--calendar"
566
- };
567
- useEffect(() => {
568
- const handleKeyDown = event => {
569
- if (event.key === "ArrowRight") {
570
- handleMonthChange("next");
571
- } else if (event.key === "ArrowLeft") {
572
- handleMonthChange("prev");
573
- }
574
- };
575
- if (isOpen) {
576
- window.addEventListener("keydown", handleKeyDown);
577
- } else {
578
- window.removeEventListener("keydown", handleKeyDown);
579
- }
580
- return () => {
581
- window.removeEventListener("keydown", handleKeyDown);
582
- };
583
- }, [isOpen, handleMonthChange]);
584
- const saveIsDisabled = () => {
585
- if (!target) return false;
586
- if (!defaultSelected && !selected) {
587
- return true;
588
- }
589
- if (defaultSelected && selected && defaultSelected.from && selected.from.isSame(toMoment(defaultSelected.from)) && defaultSelected.to && selected.to && selected.to.isSame(toMoment(defaultSelected.to))) {
590
- return true;
591
- }
592
- return false;
593
- };
594
- return /*#__PURE__*/React.createElement(StyledDatePickerWrapper, {
595
- ref: datePickerRef
596
- }, /*#__PURE__*/React.createElement(Wrapper, wrapperProps, /*#__PURE__*/React.createElement(StyledDatePickerContainerInner, null, /*#__PURE__*/React.createElement(StyledCalendarHeader, null, isYearSelectOpen ? null : /*#__PURE__*/React.createElement(IconButton, {
597
- onClick: () => handleMonthChange("prev"),
598
- variant: "text gray",
599
- size: "small"
600
- }, /*#__PURE__*/React.createElement(ArrowLeftIcon, null)), /*#__PURE__*/React.createElement(StyledCaption, {
601
- className: animationClass + " " + (isYearSelectOpen ? "year-caption" : ""),
602
- key: isMonthSelectOpen ? currentDate.year() : currentDate.month(),
603
- onClick: handleCaptionClick,
604
- onAnimationEnd: onAnimationEnd
605
- }, captionText), isYearSelectOpen ? null : /*#__PURE__*/React.createElement(IconButton, {
606
- onClick: () => handleMonthChange("next"),
607
- variant: "text gray",
608
- size: "small"
609
- }, /*#__PURE__*/React.createElement(ArrowRightIcon, null))), /*#__PURE__*/React.createElement(StyledCalendarSelector, null, isYearSelectOpen ? renderYearSelect() : isMonthSelectOpen ? /*#__PURE__*/React.createElement(StyledMonthSelector, {
610
- className: animationClass,
611
- key: currentDate.year(),
612
- onAnimationEnd: onAnimationEnd
613
- }, renderMonthSelect()) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledDaysOfWeek, null, renderDaysOfWeek()), /*#__PURE__*/React.createElement(StyledCalendarDates, {
614
- className: animationClass,
615
- key: currentDate.month()
616
- }, renderCalendarDates()))), (target || showControls) && (!instant ? /*#__PURE__*/React.createElement(StyledControls, null, /*#__PURE__*/React.createElement(StyledControlsLeft, null, /*#__PURE__*/React.createElement(Button, {
617
- size: "small",
618
- variant: "primary",
619
- onClick: handleSave,
620
- disabled: saveIsDisabled()
621
- }, saveLabel), /*#__PURE__*/React.createElement(Tooltip, {
622
- title: cancelLabel,
623
- popperTooltipStyle: {
624
- zIndex: 1301
625
- }
626
- }, /*#__PURE__*/React.createElement(IconButton, {
627
- size: "small",
628
- variant: "text gray",
629
- onClick: handleBeforeClose
630
- }, /*#__PURE__*/React.createElement(CancelCrossIcon, null)))), !required ? /*#__PURE__*/React.createElement(Button, {
631
- size: "small",
632
- onClick: handleClear,
633
- variant: "text gray"
634
- }, clearLabel) : null) : !required ? /*#__PURE__*/React.createElement(StyledControls, null, /*#__PURE__*/React.createElement(StyledClearInstantButton, {
635
- size: "small",
636
- onClick: handleClear,
637
- variant: "text gray"
638
- }, clearLabel)) : null))), !instant && target && !required && enableConfirmModal ? /*#__PURE__*/React.createElement(StyledConfirmDialog, {
639
- className: "modal-select-date",
640
- open: showDiscardModal,
641
- onCancel: handleCloseDiscardModal,
642
- onConfirm: handleSaveDiscardModal,
643
- dialogTitle: modalHeaderText,
644
- dialogContent: modalDiscardMessage,
645
- cancelBtnText: modalCancelBtnText,
646
- confirmBtnText: modalDiscardBtnText
647
- }) : null);
648
- };
649
- //# sourceMappingURL=DatePickerV2.js.map