@homebound/beam 3.0.6 → 3.1.0-alpha.1
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.
- package/dist/index.cjs +207 -38
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -24
- package/dist/index.d.ts +42 -24
- package/dist/index.js +364 -195
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.cjs
CHANGED
|
@@ -5890,24 +5890,47 @@ function useHover2(props) {
|
|
|
5890
5890
|
var import_react16 = require("react");
|
|
5891
5891
|
var import_use_query_params2 = require("use-query-params");
|
|
5892
5892
|
function usePersistedFilter({ storageKey, filterDefs }) {
|
|
5893
|
-
const
|
|
5893
|
+
const filterImpls = (0, import_react16.useMemo)(
|
|
5894
|
+
() => Object.fromEntries(safeEntries(filterDefs).map(([key, def]) => [key, def(key)])),
|
|
5895
|
+
[filterDefs]
|
|
5896
|
+
);
|
|
5897
|
+
const filterKeys = (0, import_react16.useMemo)(() => Object.keys(filterImpls), [filterImpls]);
|
|
5894
5898
|
const defaultFilter = (0, import_react16.useMemo)(
|
|
5895
5899
|
() => Object.fromEntries(
|
|
5896
|
-
safeEntries(
|
|
5900
|
+
safeEntries(filterImpls).filter(([, def]) => def.defaultValue !== void 0).map(([key, def]) => [key, def.defaultValue])
|
|
5897
5901
|
),
|
|
5898
|
-
[
|
|
5902
|
+
[filterImpls]
|
|
5899
5903
|
);
|
|
5900
5904
|
const [{ filter: queryParamsFilter }, setQueryParams] = (0, import_use_query_params2.useQueryParams)({ filter: import_use_query_params2.JsonParam });
|
|
5901
|
-
const [storedFilter, setStoredFilter] = useSessionStorage(
|
|
5905
|
+
const [storedFilter, setStoredFilter] = useSessionStorage(
|
|
5906
|
+
storageKey,
|
|
5907
|
+
dehydrateFilter(filterImpls, defaultFilter) ?? defaultFilter
|
|
5908
|
+
);
|
|
5902
5909
|
const isQueryParamFilterValid = hasValidFilterKeys(queryParamsFilter, filterKeys);
|
|
5903
|
-
const
|
|
5904
|
-
const
|
|
5910
|
+
const serializedQueryParamsFilter = (0, import_react16.useMemo)(() => JSON.stringify(queryParamsFilter), [queryParamsFilter]);
|
|
5911
|
+
const serializedStoredFilter = (0, import_react16.useMemo)(() => JSON.stringify(storedFilter), [storedFilter]);
|
|
5912
|
+
const queryParamsFilterSnapshot = (0, import_react16.useMemo)(
|
|
5913
|
+
() => parseSerializedValue(serializedQueryParamsFilter),
|
|
5914
|
+
[serializedQueryParamsFilter]
|
|
5915
|
+
);
|
|
5916
|
+
const storedFilterSnapshot = (0, import_react16.useMemo)(() => parseSerializedValue(serializedStoredFilter), [serializedStoredFilter]);
|
|
5917
|
+
const hydratedQueryParamsFilter = (0, import_react16.useMemo)(
|
|
5918
|
+
() => isQueryParamFilterValid ? hydrateFilter(filterImpls, queryParamsFilterSnapshot) : void 0,
|
|
5919
|
+
[filterImpls, isQueryParamFilterValid, queryParamsFilterSnapshot]
|
|
5920
|
+
);
|
|
5921
|
+
const hydratedStoredFilter = (0, import_react16.useMemo)(
|
|
5922
|
+
() => hasValidFilterKeys(storedFilterSnapshot, filterKeys) ? hydrateFilter(filterImpls, storedFilterSnapshot) : void 0,
|
|
5923
|
+
[filterImpls, filterKeys, storedFilterSnapshot]
|
|
5924
|
+
);
|
|
5925
|
+
const rawFilter = hydratedQueryParamsFilter ?? hydratedStoredFilter ?? defaultFilter;
|
|
5926
|
+
const filter = useStableValue(rawFilter);
|
|
5927
|
+
const setFilter = (filter2) => setQueryParams({ filter: dehydrateFilter(filterImpls, filter2) });
|
|
5905
5928
|
(0, import_react16.useEffect)(
|
|
5906
5929
|
() => {
|
|
5907
5930
|
if (queryParamsFilter === void 0) {
|
|
5908
5931
|
setQueryParams({ filter: storedFilter }, "replaceIn");
|
|
5909
5932
|
} else if (!isQueryParamFilterValid) {
|
|
5910
|
-
setQueryParams({ filter: defaultFilter }, "replaceIn");
|
|
5933
|
+
setQueryParams({ filter: dehydrateFilter(filterImpls, defaultFilter) }, "replaceIn");
|
|
5911
5934
|
} else if (JSON.stringify(queryParamsFilter) !== JSON.stringify(storedFilter)) {
|
|
5912
5935
|
setStoredFilter(queryParamsFilter);
|
|
5913
5936
|
}
|
|
@@ -5919,7 +5942,45 @@ function usePersistedFilter({ storageKey, filterDefs }) {
|
|
|
5919
5942
|
return { setFilter, filter };
|
|
5920
5943
|
}
|
|
5921
5944
|
function hasValidFilterKeys(queryParamsFilter, definedKeys) {
|
|
5922
|
-
return queryParamsFilter && safeKeys(queryParamsFilter).every((key) => definedKeys.includes(key));
|
|
5945
|
+
return !!queryParamsFilter && safeKeys(queryParamsFilter).every((key) => definedKeys.includes(key));
|
|
5946
|
+
}
|
|
5947
|
+
function hydrateFilter(filterImpls, value) {
|
|
5948
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
5949
|
+
const hydratedEntries = [];
|
|
5950
|
+
safeEntries(value).forEach(([key, rawValue]) => {
|
|
5951
|
+
const filter = filterImpls[key];
|
|
5952
|
+
if (!filter) return;
|
|
5953
|
+
const hydratedValue = filter.hydrate ? filter.hydrate(rawValue) : rawValue;
|
|
5954
|
+
if (hydratedValue !== void 0) {
|
|
5955
|
+
hydratedEntries.push([key, hydratedValue]);
|
|
5956
|
+
}
|
|
5957
|
+
});
|
|
5958
|
+
return Object.fromEntries(hydratedEntries);
|
|
5959
|
+
}
|
|
5960
|
+
function dehydrateFilter(filterImpls, value) {
|
|
5961
|
+
if (!value) return value;
|
|
5962
|
+
return Object.fromEntries(
|
|
5963
|
+
safeEntries(value).map(([key, rawValue]) => {
|
|
5964
|
+
const filter = filterImpls[key];
|
|
5965
|
+
return [
|
|
5966
|
+
key,
|
|
5967
|
+
filter?.dehydrate ? filter.dehydrate(rawValue) : rawValue
|
|
5968
|
+
];
|
|
5969
|
+
})
|
|
5970
|
+
);
|
|
5971
|
+
}
|
|
5972
|
+
function parseSerializedValue(value) {
|
|
5973
|
+
return value === void 0 ? void 0 : JSON.parse(value);
|
|
5974
|
+
}
|
|
5975
|
+
function useStableValue(value) {
|
|
5976
|
+
const stableValue = (0, import_react16.useRef)(value);
|
|
5977
|
+
const stableKey = (0, import_react16.useRef)(JSON.stringify(value));
|
|
5978
|
+
const nextKey = JSON.stringify(value);
|
|
5979
|
+
if (stableKey.current !== nextKey) {
|
|
5980
|
+
stableValue.current = value;
|
|
5981
|
+
stableKey.current = nextKey;
|
|
5982
|
+
}
|
|
5983
|
+
return stableValue.current;
|
|
5923
5984
|
}
|
|
5924
5985
|
|
|
5925
5986
|
// src/hooks/useSessionStorage.ts
|
|
@@ -6537,6 +6598,61 @@ function WeekHeader() {
|
|
|
6537
6598
|
] }, (0, import_date_fns2.format)(day, "EEEE"))) }) });
|
|
6538
6599
|
}
|
|
6539
6600
|
|
|
6601
|
+
// src/utils/plainDate.ts
|
|
6602
|
+
var import_temporal_polyfill = require("temporal-polyfill");
|
|
6603
|
+
function plainDateToJsDate(date) {
|
|
6604
|
+
return new Date(date.year, date.month - 1, date.day, 12);
|
|
6605
|
+
}
|
|
6606
|
+
function jsDateToPlainDate(date) {
|
|
6607
|
+
return new import_temporal_polyfill.Temporal.PlainDate(date.getFullYear(), date.getMonth() + 1, date.getDate());
|
|
6608
|
+
}
|
|
6609
|
+
function dateRangeToJsDateRange(range) {
|
|
6610
|
+
if (!range) return void 0;
|
|
6611
|
+
return {
|
|
6612
|
+
from: range.from ? plainDateToJsDate(range.from) : void 0,
|
|
6613
|
+
to: range.to ? plainDateToJsDate(range.to) : void 0
|
|
6614
|
+
};
|
|
6615
|
+
}
|
|
6616
|
+
function jsDateRangeToDateRange(range) {
|
|
6617
|
+
if (!range) return void 0;
|
|
6618
|
+
return {
|
|
6619
|
+
from: range.from ? jsDateToPlainDate(range.from) : void 0,
|
|
6620
|
+
to: range.to ? jsDateToPlainDate(range.to) : void 0
|
|
6621
|
+
};
|
|
6622
|
+
}
|
|
6623
|
+
function dayMatcherToDayPickerMatcher(matcher) {
|
|
6624
|
+
return (date) => matcher(jsDateToPlainDate(date));
|
|
6625
|
+
}
|
|
6626
|
+
function dayMatchersToDayPickerMatchers(matchers) {
|
|
6627
|
+
if (matchers === void 0) return void 0;
|
|
6628
|
+
return Array.isArray(matchers) ? matchers.map(dayMatcherToDayPickerMatcher) : dayMatcherToDayPickerMatcher(matchers);
|
|
6629
|
+
}
|
|
6630
|
+
function todayPlainDate() {
|
|
6631
|
+
return import_temporal_polyfill.Temporal.Now.plainDateISO();
|
|
6632
|
+
}
|
|
6633
|
+
function isPlainDate(value) {
|
|
6634
|
+
return value instanceof import_temporal_polyfill.Temporal.PlainDate;
|
|
6635
|
+
}
|
|
6636
|
+
function parsePersistedPlainDate(value) {
|
|
6637
|
+
if (isPlainDate(value)) return value;
|
|
6638
|
+
if (value instanceof Date && !Number.isNaN(value.getTime())) {
|
|
6639
|
+
return jsDateToPlainDate(value);
|
|
6640
|
+
}
|
|
6641
|
+
if (typeof value !== "string") return void 0;
|
|
6642
|
+
try {
|
|
6643
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(value)) {
|
|
6644
|
+
return import_temporal_polyfill.Temporal.PlainDate.from(value);
|
|
6645
|
+
}
|
|
6646
|
+
} catch {
|
|
6647
|
+
return void 0;
|
|
6648
|
+
}
|
|
6649
|
+
const date = new Date(value);
|
|
6650
|
+
return Number.isNaN(date.getTime()) ? void 0 : jsDateToPlainDate(date);
|
|
6651
|
+
}
|
|
6652
|
+
function dehydratePlainDate(value) {
|
|
6653
|
+
return value?.toString();
|
|
6654
|
+
}
|
|
6655
|
+
|
|
6540
6656
|
// src/components/internal/DatePicker/DatePicker.tsx
|
|
6541
6657
|
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
6542
6658
|
function DatePicker(props) {
|
|
@@ -6556,15 +6672,15 @@ function DatePicker(props) {
|
|
|
6556
6672
|
Head: WeekHeader,
|
|
6557
6673
|
Day
|
|
6558
6674
|
},
|
|
6559
|
-
selected: value ? [value] : [],
|
|
6560
|
-
defaultMonth: value ??
|
|
6675
|
+
selected: value ? [plainDateToJsDate(value)] : [],
|
|
6676
|
+
defaultMonth: plainDateToJsDate(value ?? todayPlainDate()),
|
|
6561
6677
|
onDayClick: (day, modifiers) => {
|
|
6562
6678
|
if (modifiers.disabled) return;
|
|
6563
|
-
onSelect(day);
|
|
6679
|
+
onSelect(jsDateToPlainDate(day));
|
|
6564
6680
|
},
|
|
6565
|
-
disabled: disabledDays,
|
|
6681
|
+
disabled: dayMatchersToDayPickerMatchers(disabledDays),
|
|
6566
6682
|
modifiers: {
|
|
6567
|
-
indicatorDot: dottedDays ?? []
|
|
6683
|
+
indicatorDot: dayMatchersToDayPickerMatchers(dottedDays) ?? []
|
|
6568
6684
|
}
|
|
6569
6685
|
}
|
|
6570
6686
|
) });
|
|
@@ -6591,15 +6707,15 @@ function DateRangePicker(props) {
|
|
|
6591
6707
|
useYearPicker
|
|
6592
6708
|
} = props;
|
|
6593
6709
|
const tid = useTestIds(props, "datePicker");
|
|
6594
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "dib bgWhite fw4 fz_12px lh_16px", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_day_picker4.DayPicker, { mode: "range", selected: range, components: {
|
|
6710
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "dib bgWhite fw4 fz_12px lh_16px", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_day_picker4.DayPicker, { mode: "range", selected: dateRangeToJsDateRange(range), components: {
|
|
6595
6711
|
Caption: useYearPicker ? YearSkipHeader : Header,
|
|
6596
6712
|
Head: WeekHeader,
|
|
6597
6713
|
Day
|
|
6598
|
-
}, defaultMonth: range?.to ??
|
|
6714
|
+
}, defaultMonth: plainDateToJsDate(range?.to ?? range?.from ?? todayPlainDate()), onSelect: (selection, day, activeModifiers) => {
|
|
6599
6715
|
if (activeModifiers.disabled) return;
|
|
6600
|
-
onSelect(selection);
|
|
6601
|
-
}, disabled: disabledDays, modifiers: {
|
|
6602
|
-
indicatorDot: dottedDays ?? []
|
|
6716
|
+
onSelect(jsDateRangeToDateRange(selection));
|
|
6717
|
+
}, disabled: dayMatchersToDayPickerMatchers(disabledDays), modifiers: {
|
|
6718
|
+
indicatorDot: dayMatchersToDayPickerMatchers(dottedDays) ?? []
|
|
6603
6719
|
} }) });
|
|
6604
6720
|
}
|
|
6605
6721
|
|
|
@@ -12429,7 +12545,7 @@ var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
|
12429
12545
|
function DateFieldMock(props) {
|
|
12430
12546
|
const { onChange = () => {
|
|
12431
12547
|
}, errorMsg, onBlur, onFocus } = props;
|
|
12432
|
-
const [value, setValue] = (0, import_react50.useState)(props.value ? (0, import_date_fns3.format)(props.value, "MM/dd/yy") : "");
|
|
12548
|
+
const [value, setValue] = (0, import_react50.useState)(props.value ? (0, import_date_fns3.format)(plainDateToJsDate(props.value), "MM/dd/yy") : "");
|
|
12433
12549
|
const tid = useTestIds(props, "date");
|
|
12434
12550
|
return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
12435
12551
|
"input",
|
|
@@ -12440,7 +12556,8 @@ function DateFieldMock(props) {
|
|
|
12440
12556
|
onChange: (e) => {
|
|
12441
12557
|
const { value: value2 } = e.target;
|
|
12442
12558
|
setValue(value2);
|
|
12443
|
-
|
|
12559
|
+
const parsed = (0, import_date_fns3.parse)(value2, "MM/dd/yy", plainDateToJsDate(todayPlainDate()));
|
|
12560
|
+
onChange(Number.isNaN(parsed.getTime()) ? void 0 : jsDateToPlainDate(parsed));
|
|
12444
12561
|
},
|
|
12445
12562
|
onBlur: () => maybeCall(onBlur),
|
|
12446
12563
|
onFocus: () => maybeCall(onFocus),
|
|
@@ -12454,11 +12571,11 @@ function DateFieldMock(props) {
|
|
|
12454
12571
|
// src/inputs/DateFields/DateFieldBase.tsx
|
|
12455
12572
|
var import_react51 = require("react");
|
|
12456
12573
|
var import_react_aria31 = require("react-aria");
|
|
12457
|
-
var import_react_day_picker5 = require("react-day-picker");
|
|
12458
12574
|
var import_react_stately10 = require("react-stately");
|
|
12459
12575
|
|
|
12460
12576
|
// src/inputs/DateFields/utils.ts
|
|
12461
12577
|
var import_date_fns4 = require("date-fns");
|
|
12578
|
+
var import_temporal_polyfill2 = require("temporal-polyfill");
|
|
12462
12579
|
var dateFormats = {
|
|
12463
12580
|
short: "MM/dd/yy",
|
|
12464
12581
|
medium: "EEE, MMM d",
|
|
@@ -12469,13 +12586,13 @@ function getDateFormat(format4) {
|
|
|
12469
12586
|
}
|
|
12470
12587
|
function formatDate(date, format4) {
|
|
12471
12588
|
if (!date) return "";
|
|
12472
|
-
return (0, import_date_fns4.format)(date, format4);
|
|
12589
|
+
return (0, import_date_fns4.format)(plainDateToJsDate(date), format4);
|
|
12473
12590
|
}
|
|
12474
12591
|
function formatDateRange(date, format4) {
|
|
12475
12592
|
if (!date) return "";
|
|
12476
12593
|
const { from, to } = date;
|
|
12477
|
-
const fromFormatted = from ? (0, import_date_fns4.format)(from, format4) : "";
|
|
12478
|
-
const toFormatted = to ? (0, import_date_fns4.format)(to, format4) : "";
|
|
12594
|
+
const fromFormatted = from ? (0, import_date_fns4.format)(plainDateToJsDate(from), format4) : "";
|
|
12595
|
+
const toFormatted = to ? (0, import_date_fns4.format)(plainDateToJsDate(to), format4) : "";
|
|
12479
12596
|
return !fromFormatted && !toFormatted ? void 0 : `${fromFormatted} - ${toFormatted}`;
|
|
12480
12597
|
}
|
|
12481
12598
|
function parseDate(str, format4) {
|
|
@@ -12485,7 +12602,7 @@ function parseDateRange(str, format4) {
|
|
|
12485
12602
|
const [from = "", to = ""] = str.split("-");
|
|
12486
12603
|
const fromDate = parseDateString(from.trim(), format4);
|
|
12487
12604
|
const toDate = parseDateString(to.trim(), format4);
|
|
12488
|
-
if (toDate && fromDate && toDate <
|
|
12605
|
+
if (toDate && fromDate && import_temporal_polyfill2.Temporal.PlainDate.compare(toDate, fromDate) < 0) {
|
|
12489
12606
|
return { from: toDate, to: fromDate };
|
|
12490
12607
|
}
|
|
12491
12608
|
if (toDate === void 0 && fromDate === void 0) {
|
|
@@ -12507,13 +12624,16 @@ function parseDateString(str, format4) {
|
|
|
12507
12624
|
if (isNaN(year) || String(year).length > 4 || isNaN(month) || isNaN(day) || day <= 0 || day > 31 || month < 0 || month >= 12) {
|
|
12508
12625
|
return void 0;
|
|
12509
12626
|
}
|
|
12510
|
-
const parsed = (0, import_date_fns4.parse)(str, format4,
|
|
12511
|
-
if (!
|
|
12627
|
+
const parsed = (0, import_date_fns4.parse)(str, format4, plainDateToJsDate(todayPlainDate()));
|
|
12628
|
+
if (!isValidJsDate(parsed)) {
|
|
12512
12629
|
return void 0;
|
|
12513
12630
|
}
|
|
12514
|
-
return parsed;
|
|
12631
|
+
return jsDateToPlainDate(parsed);
|
|
12515
12632
|
}
|
|
12516
12633
|
function isValidDate(d) {
|
|
12634
|
+
return d !== void 0 && isPlainDate(d);
|
|
12635
|
+
}
|
|
12636
|
+
function isValidJsDate(d) {
|
|
12517
12637
|
return d !== void 0 && (0, import_date_fns4.isDate)(d) && d.toString() !== "Invalid Date";
|
|
12518
12638
|
}
|
|
12519
12639
|
|
|
@@ -12639,11 +12759,11 @@ function DateFieldBase(props) {
|
|
|
12639
12759
|
(d) => {
|
|
12640
12760
|
setWipValue(d);
|
|
12641
12761
|
if (d && isParsedDateValid(d)) {
|
|
12642
|
-
if (isRangeMode && (
|
|
12762
|
+
if (isRangeMode && isDateRangeValue(d)) {
|
|
12643
12763
|
props.onChange(d);
|
|
12644
12764
|
return;
|
|
12645
12765
|
}
|
|
12646
|
-
if (!isRangeMode && !(
|
|
12766
|
+
if (!isRangeMode && !isDateRangeValue(d)) {
|
|
12647
12767
|
props.onChange(d);
|
|
12648
12768
|
return;
|
|
12649
12769
|
}
|
|
@@ -12718,7 +12838,10 @@ function DateFieldBase(props) {
|
|
|
12718
12838
|
] });
|
|
12719
12839
|
}
|
|
12720
12840
|
function isParsedDateValid(d) {
|
|
12721
|
-
return d !== void 0 && (!(
|
|
12841
|
+
return d !== void 0 && (!isDateRangeValue(d) || isValidDate(d.from) && isValidDate(d.to));
|
|
12842
|
+
}
|
|
12843
|
+
function isDateRangeValue(value) {
|
|
12844
|
+
return typeof value === "object" && value !== null && ("from" in value || "to" in value);
|
|
12722
12845
|
}
|
|
12723
12846
|
|
|
12724
12847
|
// src/utils/withTestMock.tsx
|
|
@@ -18752,6 +18875,14 @@ function dateFilter(props) {
|
|
|
18752
18875
|
}
|
|
18753
18876
|
var anyOption = {};
|
|
18754
18877
|
var DateFilter = class extends BaseFilter {
|
|
18878
|
+
hydrate(value) {
|
|
18879
|
+
if (!isDateFilterValue(value)) return void 0;
|
|
18880
|
+
const hydratedValue = parsePersistedPlainDate(value.value);
|
|
18881
|
+
return hydratedValue ? { op: value.op, value: hydratedValue } : void 0;
|
|
18882
|
+
}
|
|
18883
|
+
dehydrate(value) {
|
|
18884
|
+
return value ? { op: value.op, value: dehydratePlainDate(value.value) } : void 0;
|
|
18885
|
+
}
|
|
18755
18886
|
render(value, setValue, tid, inModal, vertical) {
|
|
18756
18887
|
const { label, operations, getOperationValue, getOperationLabel } = this.props;
|
|
18757
18888
|
return /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_jsx_runtime127.Fragment, { children: [
|
|
@@ -18771,7 +18902,7 @@ var DateFilter = class extends BaseFilter {
|
|
|
18771
18902
|
value: value?.op,
|
|
18772
18903
|
onSelect: (op) => (
|
|
18773
18904
|
// default the selected date to today if it doesn't exist in the filter's value
|
|
18774
|
-
setValue(op ? { op, value: value?.value
|
|
18905
|
+
setValue(op ? { op, value: value?.value ?? todayPlainDate() } : void 0)
|
|
18775
18906
|
),
|
|
18776
18907
|
label: inModal ? `${label} date filter operation` : label,
|
|
18777
18908
|
labelStyle: !inModal && !vertical ? "inline" : inModal || vertical ? "hidden" : "above",
|
|
@@ -18783,9 +18914,13 @@ var DateFilter = class extends BaseFilter {
|
|
|
18783
18914
|
DateField,
|
|
18784
18915
|
{
|
|
18785
18916
|
labelStyle: "inline",
|
|
18786
|
-
value: value?.value
|
|
18917
|
+
value: value?.value ?? todayPlainDate(),
|
|
18787
18918
|
label: "Date",
|
|
18788
|
-
onChange: (d) =>
|
|
18919
|
+
onChange: (d) => {
|
|
18920
|
+
if (d && value) {
|
|
18921
|
+
setValue({ ...value, value: d });
|
|
18922
|
+
}
|
|
18923
|
+
},
|
|
18789
18924
|
disabled: !value,
|
|
18790
18925
|
...tid[`${defaultTestId(this.label)}_dateField`]
|
|
18791
18926
|
}
|
|
@@ -18794,6 +18929,9 @@ var DateFilter = class extends BaseFilter {
|
|
|
18794
18929
|
] });
|
|
18795
18930
|
}
|
|
18796
18931
|
};
|
|
18932
|
+
function isDateFilterValue(value) {
|
|
18933
|
+
return typeof value === "object" && value !== null && "op" in value && "value" in value;
|
|
18934
|
+
}
|
|
18797
18935
|
|
|
18798
18936
|
// src/components/Filters/DateRangeFilter.tsx
|
|
18799
18937
|
var import_jsx_runtime128 = require("react/jsx-runtime");
|
|
@@ -18801,6 +18939,17 @@ function dateRangeFilter(props) {
|
|
|
18801
18939
|
return (key) => new DateRangeFilter(key, props);
|
|
18802
18940
|
}
|
|
18803
18941
|
var DateRangeFilter = class extends BaseFilter {
|
|
18942
|
+
hydrate(value) {
|
|
18943
|
+
if (!isDateRangeFilterValue(value)) return void 0;
|
|
18944
|
+
const hydratedValue = hydrateDateRange(value.value);
|
|
18945
|
+
return hydratedValue ? { op: value.op, value: hydratedValue } : void 0;
|
|
18946
|
+
}
|
|
18947
|
+
dehydrate(value) {
|
|
18948
|
+
return value ? {
|
|
18949
|
+
op: value.op,
|
|
18950
|
+
value: value.value ? { from: dehydratePlainDate(value.value.from), to: dehydratePlainDate(value.value.to) } : void 0
|
|
18951
|
+
} : void 0;
|
|
18952
|
+
}
|
|
18804
18953
|
render(value, setValue, tid, inModal, vertical) {
|
|
18805
18954
|
const { label, placeholderText, disabledDays, testFieldLabel, defaultValue } = this.props;
|
|
18806
18955
|
return /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_jsx_runtime128.Fragment, { children: [
|
|
@@ -18812,8 +18961,17 @@ var DateRangeFilter = class extends BaseFilter {
|
|
|
18812
18961
|
isRangeFilterField: true,
|
|
18813
18962
|
placeholder: placeholderText,
|
|
18814
18963
|
label: testFieldLabel ?? "Date",
|
|
18815
|
-
value: value?.value
|
|
18816
|
-
onChange: (d) =>
|
|
18964
|
+
value: value?.value,
|
|
18965
|
+
onChange: (d) => {
|
|
18966
|
+
if (!d) {
|
|
18967
|
+
setValue(void 0);
|
|
18968
|
+
return;
|
|
18969
|
+
}
|
|
18970
|
+
const op = value?.op ?? defaultValue?.op;
|
|
18971
|
+
if (op !== void 0) {
|
|
18972
|
+
setValue({ op, value: d });
|
|
18973
|
+
}
|
|
18974
|
+
},
|
|
18817
18975
|
disabledDays,
|
|
18818
18976
|
...tid[`${defaultTestId(this.label)}_dateField`]
|
|
18819
18977
|
}
|
|
@@ -18821,6 +18979,17 @@ var DateRangeFilter = class extends BaseFilter {
|
|
|
18821
18979
|
] });
|
|
18822
18980
|
}
|
|
18823
18981
|
};
|
|
18982
|
+
function isDateRangeFilterValue(value) {
|
|
18983
|
+
return typeof value === "object" && value !== null && "op" in value && "value" in value;
|
|
18984
|
+
}
|
|
18985
|
+
function hydrateDateRange(value) {
|
|
18986
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
18987
|
+
const { from, to } = value;
|
|
18988
|
+
const hydratedFrom = parsePersistedPlainDate(from);
|
|
18989
|
+
const hydratedTo = parsePersistedPlainDate(to);
|
|
18990
|
+
if (hydratedFrom === void 0 && hydratedTo === void 0) return void 0;
|
|
18991
|
+
return { from: hydratedFrom, to: hydratedTo };
|
|
18992
|
+
}
|
|
18824
18993
|
|
|
18825
18994
|
// src/components/Filters/MultiFilter.tsx
|
|
18826
18995
|
var import_jsx_runtime129 = require("react/jsx-runtime");
|
|
@@ -19626,10 +19795,10 @@ function useGridTableLayoutState({
|
|
|
19626
19795
|
});
|
|
19627
19796
|
(0, import_react99.useEffect)(() => {
|
|
19628
19797
|
if (page.limit !== persistedPageSize) setPersistedPageSize(page.limit);
|
|
19629
|
-
setPage((prev) =>
|
|
19798
|
+
setPage((prev) => prev.offset === 0 ? prev : {
|
|
19630
19799
|
...prev,
|
|
19631
19800
|
offset: 0
|
|
19632
|
-
})
|
|
19801
|
+
});
|
|
19633
19802
|
}, [page.limit, persistedPageSize, setPersistedPageSize, filter, searchString]);
|
|
19634
19803
|
return {
|
|
19635
19804
|
filter,
|