@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.
- package/CHANGELOG.md +24 -0
- package/dist/{Combobox-hxGMMb8x.js → Combobox-DGAa9vgU.js} +7 -19
- package/dist/Combobox-DGAa9vgU.js.map +1 -0
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-CUFa7cQK.js → DataTable-DQ9FFuV8.js} +111 -57
- package/dist/DataTable-DQ9FFuV8.js.map +1 -0
- package/dist/DataTable.css +68 -26
- package/dist/{Dialog-UzG6-s9H.js → Dialog-BwabBKoZ.js} +19 -13
- package/dist/Dialog-BwabBKoZ.js.map +1 -0
- package/dist/Dialog.css +31 -28
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-BHK18NYm.js → Drawer-GXeoK-r9.js} +20 -12
- package/dist/Drawer-GXeoK-r9.js.map +1 -0
- package/dist/Drawer.css +33 -27
- package/dist/Drawer.js +1 -1
- package/dist/{Page-ClI3IOc7.js → Page-DEbpjQw0.js} +2 -2
- package/dist/{Page-ClI3IOc7.js.map → Page-DEbpjQw0.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-CnF6yBr5.js → Pagination-BR8MiRaA.js} +17 -25
- package/dist/Pagination-BR8MiRaA.js.map +1 -0
- package/dist/Pagination.js +1 -1
- package/dist/{SearchField-D6bICv4b.js → SearchField-CJAo8dE0.js} +10 -7
- package/dist/{SearchField-D6bICv4b.js.map → SearchField-CJAo8dE0.js.map} +1 -1
- package/dist/SearchField.css +14 -8
- package/dist/SearchField.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldSync-BOzavAtv.js → SelectFieldSync-D4VdOXoY.js} +93 -81
- package/dist/SelectFieldSync-D4VdOXoY.js.map +1 -0
- package/dist/SelectFieldSync.css +6 -5
- package/dist/{SelectTrigger-DfVnPiNf.js → SelectTrigger-D4AjiMKp.js} +2 -2
- package/dist/{SelectTrigger-DfVnPiNf.js.map → SelectTrigger-D4AjiMKp.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-D8scKtBr.js → SelectTriggerBase-D9GuxPxR.js} +3 -15
- package/dist/SelectTriggerBase-D9GuxPxR.js.map +1 -0
- package/dist/Table.js +1 -1
- package/dist/{Toolbar-BxYOXLmv.js → Toolbar-Vw9V1RHr.js} +208 -139
- package/dist/Toolbar-Vw9V1RHr.js.map +1 -0
- package/dist/Toolbar.css +62 -30
- package/dist/Toolbar.js +1 -1
- package/dist/beta/components/SelectField/internal/useCombo.d.ts +1 -0
- package/dist/beta/components/Table/DataTable/internal/cells/DataTableHeaderCell.d.ts +9 -1
- package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
- package/dist/beta/components/Table/internal/ResizeHandle.d.ts +5 -2
- package/dist/beta/components/Table/internal/getCommonPinningStyles.d.ts +2 -1
- package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +28 -0
- package/dist/beta.js +3 -3
- package/dist/components/Combobox/internal/ComboboxLegacy/ComboboxLegacyUtils.d.ts +0 -36
- package/dist/components/Combobox/internal/ComboboxUtils.d.ts +0 -57
- package/dist/components/Dialog/Dialog.d.ts +3 -3
- package/dist/components/Drawer/Drawer.d.ts +2 -2
- package/dist/components/Pagination/internal/Pagination.d.ts +3 -4
- package/dist/components/Pagination/internal/PaginationList.d.ts +1 -0
- package/dist/components/Pagination/internal/PaginationTotalCount.d.ts +2 -4
- package/dist/index.js +7 -7
- package/dist/internal/hooks/index.d.ts +1 -0
- package/dist/internal/hooks/useDownshiftEnvironment/index.d.ts +1 -0
- package/dist/internal/hooks/useDownshiftEnvironment/useDownshiftEnvironment.d.ts +36 -0
- package/dist/{match-sorter.esm-CtBw0MrM.js → match-sorter.esm-NrKOPPde.js} +16 -3
- package/dist/match-sorter.esm-NrKOPPde.js.map +1 -0
- package/package.json +7 -7
- package/dist/Combobox-hxGMMb8x.js.map +0 -1
- package/dist/DataTable-CUFa7cQK.js.map +0 -1
- package/dist/Dialog-UzG6-s9H.js.map +0 -1
- package/dist/Drawer-BHK18NYm.js.map +0 -1
- package/dist/Pagination-CnF6yBr5.js.map +0 -1
- package/dist/SelectFieldSync-BOzavAtv.js.map +0 -1
- package/dist/SelectTriggerBase-D8scKtBr.js.map +0 -1
- package/dist/Toolbar-BxYOXLmv.js.map +0 -1
- 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-
|
|
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-
|
|
31
|
-
import { D as Drawer } from './Drawer-
|
|
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 = "
|
|
215
|
+
const toolbar = "_toolbar_1em0g_13";
|
|
216
216
|
const styles$3 = {
|
|
217
217
|
toolbar: toolbar,
|
|
218
|
-
"toolbar-outline-spacer": "_toolbar-outline-
|
|
219
|
-
"toolbar-content": "_toolbar-
|
|
220
|
-
"overflow-wrap": "_overflow-
|
|
221
|
-
"overflow-collapse": "_overflow-
|
|
222
|
-
"toolbar-overflow-content": "_toolbar-overflow-
|
|
223
|
-
"toolbar-button-item": "_toolbar-button-
|
|
224
|
-
"toolbar-item": "_toolbar-
|
|
225
|
-
"toolbar-button-toggle-item": "_toolbar-button-toggle-
|
|
226
|
-
"toolbar-overflow-trigger": "_toolbar-overflow-
|
|
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-
|
|
683
|
-
"filter-button-content": "_filter-button-
|
|
684
|
-
"filter-
|
|
685
|
-
"filter-button-buttons": "_filter-button-
|
|
686
|
-
"filter-
|
|
687
|
-
"filter-
|
|
688
|
-
"filter-
|
|
689
|
-
"filter-
|
|
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
|
|
698
|
-
|
|
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
|
-
|
|
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: {
|
|
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: {
|
|
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:
|
|
896
|
-
|
|
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
|
|
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
|
|
1029
|
-
|
|
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,
|
|
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
|
-
|
|
1039
|
-
setIsOpen(false);
|
|
1040
|
-
}
|
|
1157
|
+
setIsOpen(false);
|
|
1041
1158
|
}
|
|
1042
1159
|
}
|
|
1043
1160
|
},
|
|
1044
|
-
[filter.id, filter.type, controlledFiltering, updateFilter
|
|
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
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
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 =
|
|
1695
|
-
if (existingFilter) {
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
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-
|
|
2193
|
+
//# sourceMappingURL=Toolbar-Vw9V1RHr.js.map
|