Skip to content

Commit f944119

Browse files
fix: [M3-10299] - DatePicker: Show error, if end date time is before start date time (linode#12614)
* Show error, if end date time is before start date time * Added changeset: DatePicker: Show error, if end date time is before start date time * Update DateTimeRangePicker.tsx * Update DateTimeRangePicker.tsx * Update packages/ui/src/components/DatePicker/DateTimeRangePicker/DateTimeRangePicker.tsx Co-authored-by: Connie Liu <139280159+coliu-akamai@users.noreply.github.com> * Update packages/ui/.changeset/pr-12614-fixed-1753928477441.md Co-authored-by: Connie Liu <139280159+coliu-akamai@users.noreply.github.com> * Update packages/ui/src/components/DatePicker/DateTimeRangePicker/DateTimeRangePicker.tsx Co-authored-by: Connie Liu <139280159+coliu-akamai@users.noreply.github.com> --------- Co-authored-by: Connie Liu <139280159+coliu-akamai@users.noreply.github.com>
1 parent 89ea4f0 commit f944119

File tree

2 files changed

+37
-13
lines changed

2 files changed

+37
-13
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/ui": Fixed
3+
---
4+
5+
DatePicker: Show error if end date time is before start date time ([#12614](https://github.com/linode/manager/pull/12614))

packages/ui/src/components/DatePicker/DateTimeRangePicker/DateTimeRangePicker.tsx

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,18 @@ export const DateTimeRangePicker = ({
163163
setTimeZone(previousValues.current.timeZone);
164164
setSelectedPreset(previousValues.current.selectedPreset);
165165

166+
// Clear errors
167+
setStartDateError('');
168+
setEndDateError('');
166169
setOpen(false);
167170
setAnchorEl(null);
168171
};
169172

170173
const handleApply = () => {
174+
if (startDateError || endDateError) {
175+
return;
176+
}
177+
171178
onApply?.({
172179
endDate: endDate ? endDate.toISO() : null,
173180
selectedPreset,
@@ -213,9 +220,13 @@ export const DateTimeRangePicker = ({
213220
) => {
214221
if (newStartDate && newEndDate && newStartDate > newEndDate) {
215222
setStartDateError(
216-
'Start date must be earlier than or equal to end date.',
223+
startDateProps?.errorMessage ??
224+
'Start date must be earlier than or equal to end date.',
225+
);
226+
setEndDateError(
227+
endDateProps?.errorMessage ??
228+
'End date must be later than or equal to start date.',
217229
);
218-
setEndDateError('End date must be later than or equal to start date.');
219230
} else {
220231
setStartDateError('');
221232
setEndDateError('');
@@ -302,7 +313,11 @@ export const DateTimeRangePicker = ({
302313
onClose={handleClose}
303314
open={open}
304315
role="dialog"
305-
sx={{ boxShadow: 3, zIndex: 1300 }}
316+
sx={(theme) => ({
317+
boxShadow: 3,
318+
zIndex: 1300,
319+
mt: startDateError || endDateError ? theme.spacingFunction(24) : 0,
320+
})}
306321
transformOrigin={{ horizontal: 'left', vertical: 'top' }}
307322
>
308323
<Box
@@ -351,30 +366,34 @@ export const DateTimeRangePicker = ({
351366
>
352367
<TimePicker
353368
label="Start Time"
354-
onChange={(newTime) => {
369+
onChange={(newTime: DateTime | null) => {
355370
if (newTime) {
356-
setStartDate(
357-
(prev) =>
371+
setStartDate((prev) => {
372+
const updatedValue =
358373
prev?.set({
359374
hour: newTime.hour,
360375
minute: newTime.minute,
361-
}) ?? newTime,
362-
);
376+
}) ?? newTime;
377+
validateDates(updatedValue, endDate);
378+
return updatedValue;
379+
});
363380
}
364381
}}
365382
value={startDate}
366383
/>
367384
<TimePicker
368385
label="End Time"
369-
onChange={(newTime) => {
386+
onChange={(newTime: DateTime | null) => {
370387
if (newTime) {
371-
setEndDate(
372-
(prev) =>
388+
setEndDate((prev) => {
389+
const updatedValue =
373390
prev?.set({
374391
hour: newTime.hour,
375392
minute: newTime.minute,
376-
}) ?? newTime,
377-
);
393+
}) ?? newTime;
394+
validateDates(startDate, updatedValue);
395+
return updatedValue;
396+
});
378397
}
379398
}}
380399
value={endDate}

0 commit comments

Comments
 (0)