@servicetitan/anvil2 1.49.7 → 1.50.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.
Files changed (69) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{Combobox-hxGMMb8x.js → Combobox-DGAa9vgU.js} +7 -19
  3. package/dist/Combobox-DGAa9vgU.js.map +1 -0
  4. package/dist/Combobox.js +1 -1
  5. package/dist/{DataTable-CUFa7cQK.js → DataTable-DQ9FFuV8.js} +111 -57
  6. package/dist/DataTable-DQ9FFuV8.js.map +1 -0
  7. package/dist/DataTable.css +68 -26
  8. package/dist/{Dialog-UzG6-s9H.js → Dialog-BwabBKoZ.js} +19 -13
  9. package/dist/Dialog-BwabBKoZ.js.map +1 -0
  10. package/dist/Dialog.css +31 -28
  11. package/dist/Dialog.js +1 -1
  12. package/dist/{Drawer-BHK18NYm.js → Drawer-GXeoK-r9.js} +20 -12
  13. package/dist/Drawer-GXeoK-r9.js.map +1 -0
  14. package/dist/Drawer.css +33 -27
  15. package/dist/Drawer.js +1 -1
  16. package/dist/{Page-ClI3IOc7.js → Page-DEbpjQw0.js} +2 -2
  17. package/dist/{Page-ClI3IOc7.js.map → Page-DEbpjQw0.js.map} +1 -1
  18. package/dist/Page.js +1 -1
  19. package/dist/{Pagination-CnF6yBr5.js → Pagination-BR8MiRaA.js} +17 -25
  20. package/dist/Pagination-BR8MiRaA.js.map +1 -0
  21. package/dist/Pagination.js +1 -1
  22. package/dist/{SearchField-D6bICv4b.js → SearchField-CJAo8dE0.js} +10 -7
  23. package/dist/{SearchField-D6bICv4b.js.map → SearchField-CJAo8dE0.js.map} +1 -1
  24. package/dist/SearchField.css +14 -8
  25. package/dist/SearchField.js +1 -1
  26. package/dist/SelectField.js +1 -1
  27. package/dist/{SelectFieldSync-BOzavAtv.js → SelectFieldSync-D4VdOXoY.js} +93 -81
  28. package/dist/SelectFieldSync-D4VdOXoY.js.map +1 -0
  29. package/dist/SelectFieldSync.css +6 -5
  30. package/dist/{SelectTrigger-DfVnPiNf.js → SelectTrigger-D4AjiMKp.js} +2 -2
  31. package/dist/{SelectTrigger-DfVnPiNf.js.map → SelectTrigger-D4AjiMKp.js.map} +1 -1
  32. package/dist/SelectTrigger.js +1 -1
  33. package/dist/{SelectTriggerBase-D8scKtBr.js → SelectTriggerBase-D9GuxPxR.js} +3 -15
  34. package/dist/SelectTriggerBase-D9GuxPxR.js.map +1 -0
  35. package/dist/Table.js +1 -1
  36. package/dist/{Toolbar-BxYOXLmv.js → Toolbar-Vw9V1RHr.js} +208 -139
  37. package/dist/Toolbar-Vw9V1RHr.js.map +1 -0
  38. package/dist/Toolbar.css +62 -30
  39. package/dist/Toolbar.js +1 -1
  40. package/dist/beta/components/SelectField/internal/useCombo.d.ts +1 -0
  41. package/dist/beta/components/Table/DataTable/internal/cells/DataTableHeaderCell.d.ts +9 -1
  42. package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
  43. package/dist/beta/components/Table/internal/ResizeHandle.d.ts +5 -2
  44. package/dist/beta/components/Table/internal/getCommonPinningStyles.d.ts +2 -1
  45. package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +28 -0
  46. package/dist/beta.js +3 -3
  47. package/dist/components/Combobox/internal/ComboboxLegacy/ComboboxLegacyUtils.d.ts +0 -36
  48. package/dist/components/Combobox/internal/ComboboxUtils.d.ts +0 -57
  49. package/dist/components/Dialog/Dialog.d.ts +3 -3
  50. package/dist/components/Drawer/Drawer.d.ts +2 -2
  51. package/dist/components/Pagination/internal/Pagination.d.ts +3 -4
  52. package/dist/components/Pagination/internal/PaginationList.d.ts +1 -0
  53. package/dist/components/Pagination/internal/PaginationTotalCount.d.ts +2 -4
  54. package/dist/index.js +7 -7
  55. package/dist/internal/hooks/index.d.ts +1 -0
  56. package/dist/internal/hooks/useDownshiftEnvironment/index.d.ts +1 -0
  57. package/dist/internal/hooks/useDownshiftEnvironment/useDownshiftEnvironment.d.ts +36 -0
  58. package/dist/{match-sorter.esm-CtBw0MrM.js → match-sorter.esm-NrKOPPde.js} +16 -3
  59. package/dist/match-sorter.esm-NrKOPPde.js.map +1 -0
  60. package/package.json +7 -7
  61. package/dist/Combobox-hxGMMb8x.js.map +0 -1
  62. package/dist/DataTable-CUFa7cQK.js.map +0 -1
  63. package/dist/Dialog-UzG6-s9H.js.map +0 -1
  64. package/dist/Drawer-BHK18NYm.js.map +0 -1
  65. package/dist/Pagination-CnF6yBr5.js.map +0 -1
  66. package/dist/SelectFieldSync-BOzavAtv.js.map +0 -1
  67. package/dist/SelectTriggerBase-D8scKtBr.js.map +0 -1
  68. package/dist/Toolbar-BxYOXLmv.js.map +0 -1
  69. package/dist/match-sorter.esm-CtBw0MrM.js.map +0 -1
@@ -22,13 +22,13 @@ import { S as SvgEvent } from './event-BEJFimi3.js';
22
22
  import { D as DateTime } from './Calendar-CAYitkfM.js';
23
23
  import { C as Chip } from './Chip-UqdorCE2.js';
24
24
  import { L as ListView } from './ListView-D8mfK8Lu.js';
25
- import { S as SearchField, a as SvgSearch } from './SearchField-D6bICv4b.js';
25
+ import { S as SearchField, a as SvgSearch } from './SearchField-CJAo8dE0.js';
26
26
  import { u as useDateFieldSingleConversion, a as useDateFieldSingleState, M as MaskedDateInput, b as DateFieldSingleCalendar, D as DateFieldSingle } from './DateFieldSingle-DAtR8ImE.js';
27
27
  import { u as useDateFieldRangeConversion, a as useDateFieldRangeState, M as MaskedDateRangeInput, b as DateFieldRangeCalendar, D as DateFieldRange } from './DateFieldRange-ZAic_9mt.js';
28
28
  import { C as Checkbox } from './Checkbox-zAKOGEBl.js';
29
29
  import { R as Radio } from './Radio-jj0-1dOg.js';
30
- import { C as Combobox } from './Combobox-hxGMMb8x.js';
31
- import { D as Drawer } from './Drawer-BHK18NYm.js';
30
+ import { C as Combobox } from './Combobox-DGAa9vgU.js';
31
+ import { D as Drawer } from './Drawer-GXeoK-r9.js';
32
32
  import { d as BreakpointSm, c as BreakpointMd, b as BreakpointLg, a as BreakpointXl, B as BreakpointXxl } from './primitive-BByug0kD.js';
33
33
  import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
34
34
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
@@ -212,18 +212,18 @@ const handleMenuKeyboardNavigation = (event) => {
212
212
  menuItems[nextIndex]?.focus();
213
213
  };
214
214
 
215
- const toolbar = "_toolbar_bslcr_13";
215
+ const toolbar = "_toolbar_1em0g_13";
216
216
  const styles$3 = {
217
217
  toolbar: toolbar,
218
- "toolbar-outline-spacer": "_toolbar-outline-spacer_bslcr_17",
219
- "toolbar-content": "_toolbar-content_bslcr_20",
220
- "overflow-wrap": "_overflow-wrap_bslcr_24",
221
- "overflow-collapse": "_overflow-collapse_bslcr_27",
222
- "toolbar-overflow-content": "_toolbar-overflow-content_bslcr_30",
223
- "toolbar-button-item": "_toolbar-button-item_bslcr_38",
224
- "toolbar-item": "_toolbar-item_bslcr_44",
225
- "toolbar-button-toggle-item": "_toolbar-button-toggle-item_bslcr_63",
226
- "toolbar-overflow-trigger": "_toolbar-overflow-trigger_bslcr_69"
218
+ "toolbar-outline-spacer": "_toolbar-outline-spacer_1em0g_20",
219
+ "toolbar-content": "_toolbar-content_1em0g_23",
220
+ "overflow-wrap": "_overflow-wrap_1em0g_28",
221
+ "overflow-collapse": "_overflow-collapse_1em0g_31",
222
+ "toolbar-overflow-content": "_toolbar-overflow-content_1em0g_34",
223
+ "toolbar-button-item": "_toolbar-button-item_1em0g_42",
224
+ "toolbar-item": "_toolbar-item_1em0g_48",
225
+ "toolbar-button-toggle-item": "_toolbar-button-toggle-item_1em0g_67",
226
+ "toolbar-overflow-trigger": "_toolbar-overflow-trigger_1em0g_73"
227
227
  };
228
228
 
229
229
  const ToolbarItemWrapper = ({
@@ -679,14 +679,15 @@ const FilterGroupContext = createContext({
679
679
  });
680
680
 
681
681
  const styles$2 = {
682
- "filter-button-trigger": "_filter-button-trigger_320zf_18",
683
- "filter-button-content": "_filter-button-content_320zf_22",
684
- "filter-drawer-trigger": "_filter-drawer-trigger_320zf_26",
685
- "filter-button-buttons": "_filter-button-buttons_320zf_31",
686
- "filter-item": "_filter-item_320zf_37",
687
- "filter-select-search": "_filter-select-search_320zf_45",
688
- "filter-button-trigger--selected": "_filter-button-trigger--selected_320zf_54",
689
- "filter-drawer-trigger--chipped": "_filter-drawer-trigger--chipped_320zf_64"
682
+ "filter-button-trigger": "_filter-button-trigger_1gitm_18",
683
+ "filter-button-content": "_filter-button-content_1gitm_22",
684
+ "filter-select-content": "_filter-select-content_1gitm_26",
685
+ "filter-button-buttons": "_filter-button-buttons_1gitm_32",
686
+ "filter-drawer-trigger": "_filter-drawer-trigger_1gitm_38",
687
+ "filter-item": "_filter-item_1gitm_53",
688
+ "filter-select-search": "_filter-select-search_1gitm_61",
689
+ "filter-button-trigger--selected": "_filter-button-trigger--selected_1gitm_78",
690
+ "filter-drawer-trigger--chipped": "_filter-drawer-trigger--chipped_1gitm_88"
690
691
  };
691
692
 
692
693
  const FilterItemWrapper = ({
@@ -694,18 +695,8 @@ const FilterItemWrapper = ({
694
695
  children
695
696
  }) => {
696
697
  const { addHiddenFilter, removeHiddenFilter, filterGroupRef } = useContext(FilterGroupContext);
697
- const props = {
698
- item: {
699
- itemType: "button",
700
- itemProps: {
701
- children: null,
702
- "aria-hidden": true
703
- }
704
- },
705
- children,
706
- className: styles$2["filter-item"],
707
- observerRoot: filterGroupRef.current,
708
- onVisibilityChange: (isVisible) => {
698
+ const handleVisibilityChange = useCallback(
699
+ (isVisible) => {
709
700
  if (filter) {
710
701
  if (isVisible) {
711
702
  removeHiddenFilter?.(filter);
@@ -714,8 +705,25 @@ const FilterItemWrapper = ({
714
705
  }
715
706
  }
716
707
  },
717
- rootMargin: "0px -80px 0px 0px"
718
- };
708
+ [filter, addHiddenFilter, removeHiddenFilter]
709
+ );
710
+ const props = useMemo(
711
+ () => ({
712
+ item: {
713
+ itemType: "button",
714
+ itemProps: {
715
+ children: null,
716
+ "aria-hidden": true
717
+ }
718
+ },
719
+ children,
720
+ className: styles$2["filter-item"],
721
+ observerRoot: filterGroupRef.current,
722
+ onVisibilityChange: handleVisibilityChange,
723
+ rootMargin: "0px -80px 0px 0px"
724
+ }),
725
+ [children, filterGroupRef, handleVisibilityChange]
726
+ );
719
727
  return /* @__PURE__ */ jsx(ToolbarItemWrapper, { ...props });
720
728
  };
721
729
 
@@ -820,6 +828,100 @@ const hasChangedFilter = (a, b) => {
820
828
  }
821
829
  return a !== b;
822
830
  };
831
+ const getFilterSelectionValue = (filter) => {
832
+ switch (filter.type) {
833
+ case "boolean":
834
+ return filter.checked;
835
+ case "singleSelect":
836
+ return filter.selectedItem;
837
+ case "multiSelect":
838
+ return filter.selectedItems;
839
+ case "date":
840
+ case "dateRange":
841
+ case "custom":
842
+ return filter.value;
843
+ default:
844
+ return void 0;
845
+ }
846
+ };
847
+ const hasFilterSelectionChanged = (existingFilter, newFilter) => {
848
+ const existingValue = getFilterSelectionValue(existingFilter);
849
+ const newValue = getFilterSelectionValue(newFilter);
850
+ return existingValue !== newValue;
851
+ };
852
+ const preserveFilterState = (newFilter, existingFilter) => {
853
+ switch (newFilter.type) {
854
+ case "boolean":
855
+ return {
856
+ ...newFilter,
857
+ checked: existingFilter.checked
858
+ };
859
+ case "singleSelect":
860
+ return {
861
+ ...newFilter,
862
+ selectedItem: existingFilter.selectedItem
863
+ };
864
+ case "multiSelect":
865
+ return {
866
+ ...newFilter,
867
+ selectedItems: existingFilter.selectedItems
868
+ };
869
+ case "date":
870
+ return {
871
+ ...newFilter,
872
+ value: existingFilter.value
873
+ };
874
+ case "dateRange":
875
+ return {
876
+ ...newFilter,
877
+ value: existingFilter.value
878
+ };
879
+ case "custom":
880
+ return {
881
+ ...newFilter,
882
+ value: existingFilter.value
883
+ };
884
+ default:
885
+ return newFilter;
886
+ }
887
+ };
888
+ const cloneFiltersWithItemRefs = (filters) => {
889
+ return filters.map((filter) => {
890
+ switch (filter.type) {
891
+ case "singleSelect":
892
+ return {
893
+ ...filter,
894
+ selectedItem: filter.selectedItem ? filter.items.find(
895
+ (item) => item.id === filter.selectedItem?.id
896
+ ) || filter.selectedItem : void 0
897
+ };
898
+ case "multiSelect":
899
+ return {
900
+ ...filter,
901
+ selectedItems: filter.selectedItems ? filter.selectedItems.map(
902
+ (selectedItem) => filter.items.find((item) => item.id === selectedItem.id) || selectedItem
903
+ ) : []
904
+ };
905
+ case "date":
906
+ return {
907
+ ...filter,
908
+ value: filter.value
909
+ };
910
+ case "dateRange":
911
+ return {
912
+ ...filter,
913
+ value: filter.value
914
+ };
915
+ case "custom":
916
+ return {
917
+ ...filter,
918
+ value: filter.value ? { ...filter.value } : void 0
919
+ };
920
+ default:
921
+ return { ...filter };
922
+ }
923
+ });
924
+ };
823
925
 
824
926
  const FilterToggleButton = ({
825
927
  id,
@@ -852,6 +954,15 @@ const FilterSelect = ({
852
954
  onDraftChange
853
955
  }) => {
854
956
  const isMultiSelect = filter.type === "multiSelect";
957
+ const handleSearch = useCallback(
958
+ (e) => {
959
+ filter.onSearch?.(e.target.value);
960
+ },
961
+ [filter]
962
+ );
963
+ const handleSearchClear = useCallback(() => {
964
+ filter.onSearchClear?.();
965
+ }, [filter]);
855
966
  const singleSelectList = useMemo(
856
967
  () => /* @__PURE__ */ jsx(
857
968
  Listbox,
@@ -862,7 +973,7 @@ const FilterSelect = ({
862
973
  onDraftChange(selected);
863
974
  },
864
975
  disableAutoSelectOnFocus: true,
865
- style: { padding: 0 },
976
+ style: { paddingInline: "1rem", paddingBlockStart: "1rem" },
866
977
  children: ({ items }) => items.map((item) => /* @__PURE__ */ jsx(Listbox.Option, { item, disabled: item.disabled, children: item.label }, item.id))
867
978
  },
868
979
  filter.id
@@ -879,7 +990,7 @@ const FilterSelect = ({
879
990
  const items = selectedItems;
880
991
  onDraftChange(items);
881
992
  },
882
- style: { padding: 0 },
993
+ style: { paddingInline: "1rem", paddingBlockStart: "1rem" },
883
994
  children: ({ items }) => items.map((item) => /* @__PURE__ */ jsx(ListView.Option, { item, children: item.label }, item.id))
884
995
  },
885
996
  filter.id
@@ -892,12 +1003,8 @@ const FilterSelect = ({
892
1003
  {
893
1004
  size: "small",
894
1005
  className: styles$2["filter-select-search"],
895
- onChange: (e) => {
896
- filter.onSearch?.(e.target.value);
897
- },
898
- onClear: () => {
899
- filter.onSearchClear?.();
900
- },
1006
+ onChange: handleSearch,
1007
+ onClear: handleSearchClear,
901
1008
  "data-anv": "filter-select-search"
902
1009
  }
903
1010
  ),
@@ -1008,7 +1115,11 @@ const FilterButton = ({
1008
1115
  const [draftValue, setDraftValue] = useState(
1009
1116
  filter.type === "multiSelect" ? [] : void 0
1010
1117
  );
1011
- const getCurrentFilterValue = () => {
1118
+ const draftValueRef = useRef(draftValue);
1119
+ useEffect(() => {
1120
+ draftValueRef.current = draftValue;
1121
+ }, [draftValue]);
1122
+ const getCurrentFilterValue = useCallback(() => {
1012
1123
  switch (filter.type) {
1013
1124
  case "singleSelect":
1014
1125
  return filter.selectedItem;
@@ -1022,35 +1133,41 @@ const FilterButton = ({
1022
1133
  default:
1023
1134
  return void 0;
1024
1135
  }
1025
- };
1136
+ }, [filter]);
1137
+ const prevIsOpenRef = useRef(isOpen);
1138
+ const prevFilterRef = useRef(filter);
1026
1139
  useEffect(() => {
1140
+ const justOpened = isOpen && !prevIsOpenRef.current;
1141
+ prevIsOpenRef.current = isOpen;
1027
1142
  if (isOpen) {
1028
- const initialValue = getCurrentFilterValue();
1029
- setDraftValue(initialValue);
1143
+ const shouldSync = justOpened || prevFilterRef.current && hasFilterSelectionChanged(prevFilterRef.current, filter);
1144
+ if (shouldSync) {
1145
+ const currentValue = getCurrentFilterValue();
1146
+ setDraftValue(currentValue);
1147
+ }
1148
+ prevFilterRef.current = filter;
1030
1149
  }
1031
- }, [isOpen]);
1150
+ }, [isOpen, filter]);
1032
1151
  const handleChange = useCallback(
1033
1152
  (value) => {
1034
- if (hasChangedFilter(value, draftValue)) {
1153
+ if (hasChangedFilter(value, draftValueRef.current)) {
1035
1154
  setDraftValue(value);
1036
- if (!controlledFiltering) {
1155
+ if (!controlledFiltering && filter.type !== "multiSelect") {
1037
1156
  updateFilter(filter.id, value, true);
1038
- if (filter.type !== "multiSelect") {
1039
- setIsOpen(false);
1040
- }
1157
+ setIsOpen(false);
1041
1158
  }
1042
1159
  }
1043
1160
  },
1044
- [filter.id, filter.type, controlledFiltering, updateFilter, draftValue]
1161
+ [filter.id, filter.type, controlledFiltering, updateFilter]
1045
1162
  );
1046
- const handleSubmit = () => {
1163
+ const handleSubmit = useCallback(() => {
1047
1164
  const stateValue = getCurrentFilterValue();
1048
1165
  if (hasChangedFilter(draftValue, stateValue)) {
1049
1166
  updateFilter(filter.id, draftValue, true);
1050
1167
  }
1051
1168
  setIsOpen(false);
1052
- };
1053
- const handleCancel = () => {
1169
+ }, [draftValue, getCurrentFilterValue, filter.id, updateFilter]);
1170
+ const handleCancel = useCallback(() => {
1054
1171
  if (!controlledFiltering) {
1055
1172
  setIsOpen(false);
1056
1173
  return;
@@ -1058,7 +1175,7 @@ const FilterButton = ({
1058
1175
  const originalValue = getCurrentFilterValue();
1059
1176
  setDraftValue(originalValue);
1060
1177
  setIsOpen(false);
1061
- };
1178
+ }, [controlledFiltering, getCurrentFilterValue]);
1062
1179
  const getButtonLabel = useMemo(() => {
1063
1180
  switch (filter.type) {
1064
1181
  case "singleSelect": {
@@ -1177,9 +1294,6 @@ const FilterButton = ({
1177
1294
  if (controlledFiltering) {
1178
1295
  handleCancel();
1179
1296
  } else {
1180
- if (filter.type === "multiSelect") {
1181
- updateFilter(filter.id, draftValue, true);
1182
- }
1183
1297
  handleSubmit();
1184
1298
  }
1185
1299
  };
@@ -1204,6 +1318,7 @@ const FilterButton = ({
1204
1318
  open: isOpen,
1205
1319
  onClickOutside: isOpen ? handleOutsidePress : void 0,
1206
1320
  placement: "bottom-start",
1321
+ noPadding: filter.type === "multiSelect" || filter.type === "singleSelect",
1207
1322
  children: [
1208
1323
  /* @__PURE__ */ jsx(
1209
1324
  Popover.Button,
@@ -1285,50 +1400,25 @@ const FilterDrawer = () => {
1285
1400
  const activeFiltersCount = getActiveFilters(
1286
1401
  !showInlineFilters ? filters : hiddenFilters
1287
1402
  ).length;
1403
+ const prevOpenRef = useRef(open);
1404
+ const prevFiltersRef = useRef(filters);
1288
1405
  useEffect(() => {
1406
+ const justOpened = open && !prevOpenRef.current;
1407
+ prevOpenRef.current = open;
1289
1408
  if (open) {
1290
- setDraftFilters(
1291
- filters.map((filter) => {
1292
- switch (filter.type) {
1293
- case "singleSelect":
1294
- return {
1295
- ...filter,
1296
- selectedItem: filter.selectedItem ? filter.items.find(
1297
- (item) => item.id === filter.selectedItem?.id
1298
- ) || filter.selectedItem : void 0
1299
- };
1300
- case "multiSelect":
1301
- return {
1302
- ...filter,
1303
- selectedItems: filter.selectedItems ? filter.selectedItems.map((selectedItem) => {
1304
- const matchingItem = filter.items.find(
1305
- (item) => item.id === selectedItem.id
1306
- );
1307
- return matchingItem || selectedItem;
1308
- }) : []
1309
- };
1310
- case "date":
1311
- return {
1312
- ...filter,
1313
- value: filter.value
1314
- };
1315
- case "dateRange":
1316
- return {
1317
- ...filter,
1318
- value: filter.value
1319
- };
1320
- case "custom":
1321
- return {
1322
- ...filter,
1323
- value: filter.value ? { ...filter.value } : void 0
1324
- };
1325
- default:
1326
- return { ...filter };
1327
- }
1328
- })
1409
+ const anySelectionChanged = prevFiltersRef.current.some(
1410
+ (prevFilter, index) => {
1411
+ const newFilter = filters[index];
1412
+ return newFilter && hasFilterSelectionChanged(prevFilter, newFilter);
1413
+ }
1329
1414
  );
1415
+ const shouldSync = justOpened || anySelectionChanged;
1416
+ if (shouldSync) {
1417
+ setDraftFilters(cloneFiltersWithItemRefs(filters));
1418
+ }
1419
+ prevFiltersRef.current = filters;
1330
1420
  }
1331
- }, [open]);
1421
+ }, [open, filters]);
1332
1422
  const handleDraftChange = useCallback(
1333
1423
  (filterId, value) => {
1334
1424
  setDraftFilters((draft) => updateSingleFilter(draft, filterId, value));
@@ -1690,43 +1780,14 @@ const FilterGroupElement = forwardRef(
1690
1780
  const showInlineFilters = containerQuery && containerQuery.name !== "xs" && containerQuery.name !== "sm";
1691
1781
  useEffect(() => {
1692
1782
  setFilters((prevFilters) => {
1783
+ const existingFiltersMap = new Map(prevFilters.map((f) => [f.id, f]));
1693
1784
  return initialFilters.map((newFilter) => {
1694
- const existingFilter = prevFilters.find((f) => f.id === newFilter.id);
1695
- if (existingFilter) {
1696
- switch (newFilter.type) {
1697
- case "boolean":
1698
- return {
1699
- ...newFilter,
1700
- checked: existingFilter.checked
1701
- };
1702
- case "singleSelect":
1703
- return {
1704
- ...newFilter,
1705
- selectedItem: existingFilter.selectedItem
1706
- };
1707
- case "multiSelect":
1708
- return {
1709
- ...newFilter,
1710
- selectedItems: existingFilter.selectedItems
1711
- };
1712
- case "date":
1713
- return {
1714
- ...newFilter,
1715
- value: existingFilter.value
1716
- };
1717
- case "dateRange":
1718
- return {
1719
- ...newFilter,
1720
- value: existingFilter.value
1721
- };
1722
- case "custom":
1723
- return {
1724
- ...newFilter,
1725
- value: existingFilter.value
1726
- };
1727
- default:
1728
- return newFilter;
1729
- }
1785
+ const existingFilter = existingFiltersMap.get(newFilter.id);
1786
+ if (!existingFilter) {
1787
+ return newFilter;
1788
+ }
1789
+ if (!hasFilterSelectionChanged(existingFilter, newFilter)) {
1790
+ return preserveFilterState(newFilter, existingFilter);
1730
1791
  }
1731
1792
  return newFilter;
1732
1793
  });
@@ -1785,9 +1846,17 @@ const FilterGroupElement = forwardRef(
1785
1846
  },
1786
1847
  filter.id
1787
1848
  );
1788
- case "custom":
1789
1849
  case "singleSelect":
1790
1850
  case "multiSelect":
1851
+ return /* @__PURE__ */ jsx(
1852
+ FilterButton,
1853
+ {
1854
+ filter,
1855
+ className: styles$2["filter-select-content"]
1856
+ },
1857
+ filter.id
1858
+ );
1859
+ case "custom":
1791
1860
  case "date":
1792
1861
  case "dateRange":
1793
1862
  return /* @__PURE__ */ jsx(FilterButton, { filter }, filter.id);
@@ -2121,4 +2190,4 @@ const Toolbar = Object.assign(ToolbarElement, {
2121
2190
  });
2122
2191
 
2123
2192
  export { Toolbar as T, ToolbarButton as a, ToolbarButtonToggle as b, ToolbarButtonLink as c, ToolbarSelect as d, ToolbarControlGroup as e, ToolbarSearchField as f, ToolbarElement as g };
2124
- //# sourceMappingURL=Toolbar-BxYOXLmv.js.map
2193
+ //# sourceMappingURL=Toolbar-Vw9V1RHr.js.map