@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 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 filterKeys = Object.keys(filterDefs);
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(filterDefs).filter(([key, def]) => def(key).defaultValue !== void 0).map(([key, def]) => [key, def(key).defaultValue])
5900
+ safeEntries(filterImpls).filter(([, def]) => def.defaultValue !== void 0).map(([key, def]) => [key, def.defaultValue])
5897
5901
  ),
5898
- [filterDefs]
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(storageKey, queryParamsFilter ?? defaultFilter);
5905
+ const [storedFilter, setStoredFilter] = useSessionStorage(
5906
+ storageKey,
5907
+ dehydrateFilter(filterImpls, defaultFilter) ?? defaultFilter
5908
+ );
5902
5909
  const isQueryParamFilterValid = hasValidFilterKeys(queryParamsFilter, filterKeys);
5903
- const filter = isQueryParamFilterValid ? queryParamsFilter : storedFilter ?? defaultFilter;
5904
- const setFilter = (filter2) => setQueryParams({ filter: filter2 });
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 ?? /* @__PURE__ */ new Date(),
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 ?? /* @__PURE__ */ new Date(), onSelect: (selection, day, activeModifiers) => {
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
- onChange((0, import_date_fns3.parse)(value2, "MM/dd/yy", /* @__PURE__ */ new Date()));
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 < fromDate) {
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, /* @__PURE__ */ new Date());
12511
- if (!isValidDate(parsed)) {
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 && (0, import_react_day_picker5.isDateRange)(d)) {
12762
+ if (isRangeMode && isDateRangeValue(d)) {
12643
12763
  props.onChange(d);
12644
12764
  return;
12645
12765
  }
12646
- if (!isRangeMode && !(0, import_react_day_picker5.isDateRange)(d)) {
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 && (!(0, import_react_day_picker5.isDateRange)(d) || (0, import_react_day_picker5.isDateRange)(d) && isValidDate(d.from) && isValidDate(d.to));
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 ? new Date(value.value) : /* @__PURE__ */ new Date() } : void 0)
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 ? new Date(value.value) : /* @__PURE__ */ new Date(),
18917
+ value: value?.value ?? todayPlainDate(),
18787
18918
  label: "Date",
18788
- onChange: (d) => setValue({ ...value, value: 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 ? { from: new Date(value.value.from), to: new Date(value.value.to) } : void 0,
18816
- onChange: (d) => d ? setValue({ op: defaultValue?.op, value: d }) : setValue(void 0),
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,