pixelize-design-library 2.2.38 → 2.2.39
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.
|
@@ -55,7 +55,11 @@ function CustomDatePicker(props) {
|
|
|
55
55
|
var tomorrow = (0, date_fns_1.addDays)(today, 1);
|
|
56
56
|
var showDate = resolvedPickerType === "date" || resolvedPickerType === "datetime";
|
|
57
57
|
var showTime = resolvedPickerType === "time" || resolvedPickerType === "datetime";
|
|
58
|
+
var formatHasTime = dateFormat.toLowerCase().includes("hh") || dateFormat.toLowerCase().includes("mm") || dateFormat.toLowerCase().includes("ss");
|
|
58
59
|
var selectedDate = !isRange ? props.selectedDate : null;
|
|
60
|
+
// const [currentMonth, setCurrentMonth] = useState<Date>(
|
|
61
|
+
// isRange ? new Date() : selectedDate ?? new Date()
|
|
62
|
+
// );
|
|
59
63
|
var _g = (0, react_1.useState)(isRange ? new Date() :
|
|
60
64
|
selectedDate
|
|
61
65
|
? (disableToday && (0, date_fns_1.isSameDay)(selectedDate, today) ? tomorrow : selectedDate)
|
|
@@ -64,12 +68,30 @@ function CustomDatePicker(props) {
|
|
|
64
68
|
var _j = (0, react_1.useState)(null), rangeEnd = _j[0], setRangeEnd = _j[1];
|
|
65
69
|
var _k = (0, react_1.useState)(true), selectingStart = _k[0], setSelectingStart = _k[1];
|
|
66
70
|
var _l = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _l[0], setTempDate = _l[1];
|
|
71
|
+
// const [tempDate, setTempDate] = useState<Date | null>(
|
|
72
|
+
// selectedDate
|
|
73
|
+
// ? (disableToday && isSameDay(selectedDate, today) ? tomorrow : selectedDate)
|
|
74
|
+
// : (disableToday ? tomorrow : null)
|
|
75
|
+
// );
|
|
67
76
|
var _m = (0, react_1.useState)(rangeStart), tempRangeStart = _m[0], setTempRangeStart = _m[1];
|
|
68
77
|
var _o = (0, react_1.useState)(rangeEnd), tempRangeEnd = _o[0], setTempRangeEnd = _o[1];
|
|
69
78
|
var _p = (0, react_1.useState)(""), inputValue = _p[0], setInputValue = _p[1];
|
|
70
79
|
var _q = (0, react_1.useState)(false), isTyping = _q[0], setIsTyping = _q[1];
|
|
71
80
|
var popoverRef = (0, react_1.useRef)(null);
|
|
72
|
-
var
|
|
81
|
+
var triggerRef = (0, react_1.useRef)(null);
|
|
82
|
+
var handleOpen = function () {
|
|
83
|
+
if (!isRange && !selectedDate) {
|
|
84
|
+
// setTempDate(new Date());
|
|
85
|
+
setTempDate(disableToday ? tomorrow : new Date());
|
|
86
|
+
}
|
|
87
|
+
if (showTime) {
|
|
88
|
+
// setTempDate(new Date()); // add new
|
|
89
|
+
// setTempDate(disableToday ? tomorrow : new Date());
|
|
90
|
+
// console.log(selectedDate,"selectedDateselectedDate")
|
|
91
|
+
setTempDate(disableToday ? tomorrow : selectedDate ? selectedDate : new Date());
|
|
92
|
+
}
|
|
93
|
+
onOpen();
|
|
94
|
+
};
|
|
73
95
|
// Initialize input value based on selected date
|
|
74
96
|
(0, react_1.useEffect)(function () {
|
|
75
97
|
if (!isRange) {
|
|
@@ -87,12 +109,31 @@ function CustomDatePicker(props) {
|
|
|
87
109
|
var value = e.target.value;
|
|
88
110
|
setInputValue(value);
|
|
89
111
|
setIsTyping(true);
|
|
112
|
+
if (!value.trim()) {
|
|
113
|
+
setTempDate(null);
|
|
114
|
+
setTempRangeStart(null);
|
|
115
|
+
setTempRangeEnd(null);
|
|
116
|
+
setRangeStart(null);
|
|
117
|
+
setRangeEnd(null);
|
|
118
|
+
setSelectingStart(true);
|
|
119
|
+
props.onChange(null);
|
|
120
|
+
setIsTyping(false);
|
|
121
|
+
onClose();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
90
124
|
};
|
|
91
125
|
var handleInputKeyDown = function (e) {
|
|
92
126
|
if (e.key === 'Enter') {
|
|
93
127
|
e.currentTarget.blur();
|
|
94
128
|
}
|
|
95
129
|
};
|
|
130
|
+
var handleInputFocus = function (e) {
|
|
131
|
+
e.stopPropagation();
|
|
132
|
+
setIsTyping(true);
|
|
133
|
+
if (!isOpen) {
|
|
134
|
+
onOpen();
|
|
135
|
+
}
|
|
136
|
+
};
|
|
96
137
|
var handleInputBlur = function () {
|
|
97
138
|
setIsTyping(false);
|
|
98
139
|
if (!inputValue.trim()) {
|
|
@@ -116,13 +157,10 @@ function CustomDatePicker(props) {
|
|
|
116
157
|
isValidDate = false;
|
|
117
158
|
if (isValidDate) {
|
|
118
159
|
var finalDate = parsed;
|
|
119
|
-
if
|
|
160
|
+
// Only preserve previous time if the input format does NOT include time tokens
|
|
161
|
+
if (showTime && tempDate && !formatHasTime) {
|
|
120
162
|
finalDate = new Date(parsed.getFullYear(), parsed.getMonth(), parsed.getDate(), tempDate.getHours(), tempDate.getMinutes(), tempDate.getSeconds());
|
|
121
163
|
}
|
|
122
|
-
else if (showTime && !tempDate) {
|
|
123
|
-
var now = new Date();
|
|
124
|
-
finalDate = new Date(parsed.getFullYear(), parsed.getMonth(), parsed.getDate(), now.getHours(), now.getMinutes(), now.getSeconds());
|
|
125
|
-
}
|
|
126
164
|
setTempDate(finalDate);
|
|
127
165
|
setCurrentMonth(finalDate);
|
|
128
166
|
setInputValue((0, date_fns_1.format)(finalDate, dateFormat));
|
|
@@ -131,9 +169,7 @@ function CustomDatePicker(props) {
|
|
|
131
169
|
}
|
|
132
170
|
}
|
|
133
171
|
}
|
|
134
|
-
catch (
|
|
135
|
-
// Parsing failed
|
|
136
|
-
}
|
|
172
|
+
catch (_a) { }
|
|
137
173
|
if (tempDate) {
|
|
138
174
|
setInputValue((0, date_fns_1.format)(tempDate, dateFormat));
|
|
139
175
|
}
|
|
@@ -143,44 +179,25 @@ function CustomDatePicker(props) {
|
|
|
143
179
|
props.onChange(null);
|
|
144
180
|
}
|
|
145
181
|
};
|
|
146
|
-
var handleInputFocus = function (e) {
|
|
147
|
-
e.stopPropagation();
|
|
148
|
-
setIsTyping(true);
|
|
149
|
-
// Only open on focus if it's not already open and not a manual click
|
|
150
|
-
if (!isOpen && !isManualOpen) {
|
|
151
|
-
onOpen();
|
|
152
|
-
}
|
|
153
|
-
setIsManualOpen(false);
|
|
154
|
-
};
|
|
155
|
-
var handleTriggerClick = function (e) {
|
|
156
|
-
e.stopPropagation();
|
|
157
|
-
setIsManualOpen(true);
|
|
158
|
-
// Initialize tempDate if needed
|
|
159
|
-
if (!isRange && !tempDate) {
|
|
160
|
-
setTempDate(disableToday ? tomorrow : new Date());
|
|
161
|
-
}
|
|
162
|
-
// Toggle popover
|
|
163
|
-
if (isOpen) {
|
|
164
|
-
onClose();
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
onOpen();
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
182
|
(0, react_1.useEffect)(function () {
|
|
171
183
|
if (!isRange) {
|
|
172
184
|
if (selectedDate instanceof Date) {
|
|
173
185
|
setTempDate(new Date(selectedDate));
|
|
174
|
-
|
|
186
|
+
// const corrected = disableToday && isSameDay(selectedDate, today)
|
|
187
|
+
// ? tomorrow
|
|
188
|
+
// : selectedDate;
|
|
189
|
+
// setTempDate(new Date(corrected));
|
|
175
190
|
}
|
|
176
191
|
else {
|
|
177
192
|
setTempDate(null);
|
|
178
|
-
|
|
193
|
+
// setTempDate(disableToday ? tomorrow : null);
|
|
179
194
|
}
|
|
180
195
|
}
|
|
181
|
-
}, [selectedDate, isRange, disableToday
|
|
196
|
+
}, [selectedDate, isRange, disableToday]);
|
|
182
197
|
var handleDaySelect = function (day) {
|
|
198
|
+
// const updated = new Date(day);
|
|
183
199
|
var updated = new Date(day);
|
|
200
|
+
// 👇 Redirect selection from today → tomorrow
|
|
184
201
|
if (disableToday && (0, date_fns_1.isSameDay)(updated, today)) {
|
|
185
202
|
updated = tomorrow;
|
|
186
203
|
}
|
|
@@ -208,6 +225,7 @@ function CustomDatePicker(props) {
|
|
|
208
225
|
: updated;
|
|
209
226
|
setTempDate(updatedDate);
|
|
210
227
|
setInputValue((0, date_fns_1.format)(updatedDate, dateFormat));
|
|
228
|
+
setIsTyping(false);
|
|
211
229
|
props.onChange(updatedDate);
|
|
212
230
|
}
|
|
213
231
|
};
|
|
@@ -267,12 +285,17 @@ function CustomDatePicker(props) {
|
|
|
267
285
|
: "";
|
|
268
286
|
(0, react_1.useEffect)(function () {
|
|
269
287
|
var handleClickOutside = function (event) {
|
|
270
|
-
var _a;
|
|
288
|
+
var _a, _b;
|
|
271
289
|
if (popoverRef.current &&
|
|
272
290
|
!popoverRef.current.contains(event.target) &&
|
|
273
|
-
!((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))
|
|
291
|
+
!((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) &&
|
|
292
|
+
!((_b = triggerRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target))) {
|
|
293
|
+
if (tempDate) {
|
|
294
|
+
props.onChange(tempDate); // add new
|
|
295
|
+
setInputValue((0, date_fns_1.format)(tempDate, dateFormat));
|
|
296
|
+
setIsTyping(false);
|
|
297
|
+
}
|
|
274
298
|
onClose();
|
|
275
|
-
setIsManualOpen(false);
|
|
276
299
|
}
|
|
277
300
|
};
|
|
278
301
|
if (isOpen) {
|
|
@@ -284,12 +307,21 @@ function CustomDatePicker(props) {
|
|
|
284
307
|
return function () {
|
|
285
308
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
286
309
|
};
|
|
287
|
-
}, [isOpen, onClose]);
|
|
310
|
+
}, [isOpen, onClose, props, tempDate]);
|
|
288
311
|
return (react_1.default.createElement(react_2.Box, { width: width, position: "relative" },
|
|
289
312
|
label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })),
|
|
290
|
-
react_1.default.createElement(react_2.Popover, { isLazy: true, isOpen: isOpen,
|
|
313
|
+
react_1.default.createElement(react_2.Popover, { isLazy: true, isOpen: isOpen, onClose: onClose, placement: "bottom-start", initialFocusRef: inputRef, closeOnBlur: false },
|
|
291
314
|
react_1.default.createElement(react_2.PopoverTrigger, null,
|
|
292
|
-
react_1.default.createElement(react_2.Box, {
|
|
315
|
+
react_1.default.createElement(react_2.Box, { ref: triggerRef, onMouseDown: function (e) {
|
|
316
|
+
e.stopPropagation();
|
|
317
|
+
if (!isOpen) {
|
|
318
|
+
handleOpen();
|
|
319
|
+
}
|
|
320
|
+
}, onClick: function (e) {
|
|
321
|
+
// Prevent Chakra PopoverTrigger from toggling (which would immediately close after open)
|
|
322
|
+
e.preventDefault();
|
|
323
|
+
e.stopPropagation();
|
|
324
|
+
} },
|
|
293
325
|
react_1.default.createElement(TextInput_1.default, { id: id, name: name, ref: inputRef, placeholder: placeholderText, value: displayValue, onChange: !isRange ? handleInputChange : undefined, onKeyDown: !isRange ? handleInputKeyDown : undefined, onFocus: !isRange ? handleInputFocus : undefined, onBlur: !isRange ? handleInputBlur : undefined, isReadOnly: isRange, error: error, errorMessage: errorMessage, helperText: helperText, autoComplete: autoComplete, isDisabled: disabled, width: width }))),
|
|
294
326
|
react_1.default.createElement(react_2.PopoverContent, { width: "auto", p: 2, ref: popoverRef },
|
|
295
327
|
react_1.default.createElement(react_2.PopoverBody, null,
|
|
@@ -313,21 +345,36 @@ function CustomDatePicker(props) {
|
|
|
313
345
|
react_1.default.createElement(lucide_react_1.ChevronRightIcon, null))),
|
|
314
346
|
react_1.default.createElement(react_2.Grid, { templateColumns: "repeat(7, 1fr)", gap: 1, fontWeight: "bold", mb: 1 }, ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map(function (day) { return (react_1.default.createElement(react_2.Box, { textAlign: "center", key: day }, day)); })),
|
|
315
347
|
renderDays())),
|
|
316
|
-
!isRange && showTime && (react_1.default.createElement(TimePicker_1.default
|
|
348
|
+
!isRange && showTime && (react_1.default.createElement(TimePicker_1.default
|
|
349
|
+
// date={tempDate ?? new Date()}
|
|
350
|
+
, {
|
|
351
|
+
// date={tempDate ?? new Date()}
|
|
352
|
+
date: tempDate !== null && tempDate !== void 0 ? tempDate : (disableToday ? tomorrow : today), dateFormat: dateFormat,
|
|
353
|
+
// onChange={(updatedDate) => {
|
|
354
|
+
// 👇 Redirect time change if today
|
|
355
|
+
// const corrected = disableToday && isSameDay(updatedDate, today)
|
|
356
|
+
// ? tomorrow
|
|
357
|
+
// : updatedDate;
|
|
358
|
+
// setTempDate(corrected);
|
|
359
|
+
// (props as any).onChange(corrected);
|
|
360
|
+
// }}
|
|
361
|
+
onChange: function (updatedDate) {
|
|
317
362
|
setTempDate(updatedDate);
|
|
318
363
|
setInputValue((0, date_fns_1.format)(updatedDate, dateFormat));
|
|
364
|
+
setIsTyping(false);
|
|
319
365
|
props.onChange(updatedDate);
|
|
320
366
|
} })),
|
|
321
367
|
react_1.default.createElement(react_2.Box, { display: "flex", justifyContent: "space-between", mt: 3 },
|
|
322
368
|
react_1.default.createElement(Button_1.default, { size: "sm", variant: "ghost", onClick: function () {
|
|
323
369
|
setTempDate(null);
|
|
324
|
-
|
|
370
|
+
// setTempDate(disableToday ? tomorrow : null);
|
|
325
371
|
setTempRangeStart(null);
|
|
326
372
|
setTempRangeEnd(null);
|
|
327
373
|
setRangeStart(null);
|
|
328
374
|
setRangeEnd(null);
|
|
329
375
|
setSelectingStart(true);
|
|
330
376
|
props.onChange(null);
|
|
377
|
+
// (props as any).onChange(disableToday ? tomorrow : null);
|
|
331
378
|
onClose();
|
|
332
379
|
} }, "Clear"),
|
|
333
380
|
react_1.default.createElement(Button_1.default, { size: "sm", colorScheme: "primary", onClick: function () {
|
|
@@ -338,6 +385,8 @@ function CustomDatePicker(props) {
|
|
|
338
385
|
}
|
|
339
386
|
else if (!isRange && tempDate) {
|
|
340
387
|
props.onChange(tempDate);
|
|
388
|
+
setInputValue((0, date_fns_1.format)(tempDate, dateFormat));
|
|
389
|
+
setIsTyping(false);
|
|
341
390
|
}
|
|
342
391
|
onClose();
|
|
343
392
|
} }, "OK")))))));
|