diff --git a/client/src/app/components/FilterPanel/DateRangeFilter.tsx b/client/src/app/components/FilterPanel/DateRangeFilter.tsx index 68ccfb31..62b2f495 100644 --- a/client/src/app/components/FilterPanel/DateRangeFilter.tsx +++ b/client/src/app/components/FilterPanel/DateRangeFilter.tsx @@ -4,6 +4,7 @@ import { DatePicker, Form, FormGroup, + isValidDate, isValidDate as isValidJSDate, } from "@patternfly/react-core"; @@ -72,6 +73,11 @@ export const DateRangeFilter = ({ } }; + const toValidator = (date: Date) => + from && isValidDate(from) && date >= from + ? "" + : 'The "to" date must be after the "from" date'; + return (
@@ -82,8 +88,7 @@ export const DateRangeFilter = ({ onChange={onFromDateChange} aria-label="Interval start" placeholder="MM/DD/YYYY" - // disable error text (no space in toolbar scenario) - invalidFormatText={""} + invalidFormatText={"Invalid date"} // default value ("parent") creates collision with sticky table header appendTo={document.body} isDisabled={isDisabled} @@ -96,9 +101,9 @@ export const DateRangeFilter = ({ isDisabled={isDisabled || !isValidJSDate(from)} dateFormat={americanDateFormat} dateParse={parseAmericanDate} - // disable error text (no space in toolbar scenario) - invalidFormatText={""} + invalidFormatText={"Invalid date"} rangeStart={from} + validators={[toValidator]} aria-label="Interval end" placeholder="MM/DD/YYYY" appendTo={document.body} diff --git a/client/src/app/components/FilterToolbar/DateRangeFilter.tsx b/client/src/app/components/FilterToolbar/DateRangeFilter.tsx index a27a8bdc..26d5fd01 100644 --- a/client/src/app/components/FilterToolbar/DateRangeFilter.tsx +++ b/client/src/app/components/FilterToolbar/DateRangeFilter.tsx @@ -7,6 +7,7 @@ import { type ToolbarLabel, type ToolbarLabelGroup, Tooltip, + isValidDate, isValidDate as isValidJSDate, } from "@patternfly/react-core"; @@ -115,6 +116,11 @@ export const DateRangeFilter = ({ } }; + const toValidator = (date: Date) => + from && isValidDate(from) && date >= from + ? "" + : 'The "to" date must be after the "from" date'; + return ( ({ onChange={onFromDateChange} aria-label="Interval start" placeholder="MM/DD/YYYY" - // disable error text (no space in toolbar scenario) - invalidFormatText={""} + invalidFormatText={"Invalid date"} // default value ("parent") creates collision with sticky table header appendTo={document.body} isDisabled={isDisabled} @@ -144,9 +149,9 @@ export const DateRangeFilter = ({ isDisabled={isDisabled || !isValidJSDate(from)} dateFormat={americanDateFormat} dateParse={parseAmericanDate} - // disable error text (no space in toolbar scenario) - invalidFormatText={""} + invalidFormatText={"Invalid date"} rangeStart={from} + validators={[toValidator]} aria-label="Interval end" placeholder="MM/DD/YYYY" appendTo={document.body}