@trackunit/filters-filter-bar 2.1.36 → 2.1.38
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/index.cjs.js +7 -2
- package/index.esm.js +7 -2
- package/package.json +12 -12
- package/src/lib/types/FilterTypes.d.ts +1 -1
package/index.cjs.js
CHANGED
|
@@ -845,10 +845,13 @@ const uniqueKeysFromGroups = (filters) => [...new Set(filters.map(filter => filt
|
|
|
845
845
|
*/
|
|
846
846
|
const useFiltersMenu = ({ filterBarDefinition, filterBarConfig, hiddenFilters = [], allowShowFiltersDirectly = true, includeFilterKeys, }) => {
|
|
847
847
|
const hideInMenu = react.useMemo(() => {
|
|
848
|
+
// appliedFilterKeys() serialises filterBarConfig.values with JSON.parse/stringify —
|
|
849
|
+
// call it once and convert to a Set so the per-filter .includes() becomes O(1).
|
|
850
|
+
const appliedKeys = new Set(filterBarConfig.appliedFilterKeys());
|
|
848
851
|
const result = sharedUtils.objectValues(filterBarDefinition)
|
|
849
852
|
.map(filter => {
|
|
850
853
|
const showInFilterBar = filter.showInFilterBar ? filter.showInFilterBar() : true;
|
|
851
|
-
const showMenuAnywayBecauseFilterHasChanged =
|
|
854
|
+
const showMenuAnywayBecauseFilterHasChanged = appliedKeys.has(filter.filterKey);
|
|
852
855
|
const showInMenu = includeFilterKeys
|
|
853
856
|
? filter.filterKey.startsWith("cf__")
|
|
854
857
|
? includeFilterKeys.includes(irisAppApi.customFieldFilterKey)
|
|
@@ -864,9 +867,11 @@ const useFiltersMenu = ({ filterBarDefinition, filterBarConfig, hiddenFilters =
|
|
|
864
867
|
const hiddenFiltersArray = react.useMemo(() => [...hideInMenu, ...hiddenFilters], [hideInMenu, hiddenFilters]);
|
|
865
868
|
const { filtersGrouped } = useGroupFilters(filterBarDefinitionArray, hiddenFiltersArray);
|
|
866
869
|
const { appliedFilters, filtersToShow, showDirectlyFilters, hasCustomFields } = react.useMemo(() => {
|
|
870
|
+
// appliedFilterKeys() is expensive (JSON.parse/stringify) — compute once per memo run.
|
|
871
|
+
const appliedKeys = new Set(filterBarConfig.appliedFilterKeys());
|
|
867
872
|
const allFilters = filtersGrouped.map(group => group.filters).flat();
|
|
868
873
|
return {
|
|
869
|
-
appliedFilters: allFilters.filter(filter =>
|
|
874
|
+
appliedFilters: allFilters.filter(filter => appliedKeys.has(filter.filterKey)),
|
|
870
875
|
filtersToShow: allFilters.filter(filter => !filter.showDirectly),
|
|
871
876
|
showDirectlyFilters: allFilters.filter(filter => filter.showDirectly && allowShowFiltersDirectly),
|
|
872
877
|
hasCustomFields: allFilters.some(filter => filter.group === "CUSTOM_FIELDS"),
|
package/index.esm.js
CHANGED
|
@@ -843,10 +843,13 @@ const uniqueKeysFromGroups = (filters) => [...new Set(filters.map(filter => filt
|
|
|
843
843
|
*/
|
|
844
844
|
const useFiltersMenu = ({ filterBarDefinition, filterBarConfig, hiddenFilters = [], allowShowFiltersDirectly = true, includeFilterKeys, }) => {
|
|
845
845
|
const hideInMenu = useMemo(() => {
|
|
846
|
+
// appliedFilterKeys() serialises filterBarConfig.values with JSON.parse/stringify —
|
|
847
|
+
// call it once and convert to a Set so the per-filter .includes() becomes O(1).
|
|
848
|
+
const appliedKeys = new Set(filterBarConfig.appliedFilterKeys());
|
|
846
849
|
const result = objectValues(filterBarDefinition)
|
|
847
850
|
.map(filter => {
|
|
848
851
|
const showInFilterBar = filter.showInFilterBar ? filter.showInFilterBar() : true;
|
|
849
|
-
const showMenuAnywayBecauseFilterHasChanged =
|
|
852
|
+
const showMenuAnywayBecauseFilterHasChanged = appliedKeys.has(filter.filterKey);
|
|
850
853
|
const showInMenu = includeFilterKeys
|
|
851
854
|
? filter.filterKey.startsWith("cf__")
|
|
852
855
|
? includeFilterKeys.includes(customFieldFilterKey)
|
|
@@ -862,9 +865,11 @@ const useFiltersMenu = ({ filterBarDefinition, filterBarConfig, hiddenFilters =
|
|
|
862
865
|
const hiddenFiltersArray = useMemo(() => [...hideInMenu, ...hiddenFilters], [hideInMenu, hiddenFilters]);
|
|
863
866
|
const { filtersGrouped } = useGroupFilters(filterBarDefinitionArray, hiddenFiltersArray);
|
|
864
867
|
const { appliedFilters, filtersToShow, showDirectlyFilters, hasCustomFields } = useMemo(() => {
|
|
868
|
+
// appliedFilterKeys() is expensive (JSON.parse/stringify) — compute once per memo run.
|
|
869
|
+
const appliedKeys = new Set(filterBarConfig.appliedFilterKeys());
|
|
865
870
|
const allFilters = filtersGrouped.map(group => group.filters).flat();
|
|
866
871
|
return {
|
|
867
|
-
appliedFilters: allFilters.filter(filter =>
|
|
872
|
+
appliedFilters: allFilters.filter(filter => appliedKeys.has(filter.filterKey)),
|
|
868
873
|
filtersToShow: allFilters.filter(filter => !filter.showDirectly),
|
|
869
874
|
showDirectlyFilters: allFilters.filter(filter => filter.showDirectly && allowShowFiltersDirectly),
|
|
870
875
|
hasCustomFields: allFilters.some(filter => filter.group === "CUSTOM_FIELDS"),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/filters-filter-bar",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.38",
|
|
4
4
|
"repository": "https://github.com/Trackunit/manager",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"engines": {
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"tailwind-merge": "^2.0.0",
|
|
12
12
|
"string-ts": "^2.0.0",
|
|
13
13
|
"zod": "^3.25.76",
|
|
14
|
-
"@trackunit/iris-app-api": "2.0.
|
|
15
|
-
"@trackunit/react-core-hooks": "1.17.
|
|
16
|
-
"@trackunit/react-filter-components": "2.1.
|
|
17
|
-
"@trackunit/react-date-and-time-components": "2.1.
|
|
18
|
-
"@trackunit/shared-utils": "1.15.
|
|
19
|
-
"@trackunit/react-form-components": "2.1.
|
|
20
|
-
"@trackunit/iris-app-runtime-core-api": "1.16.
|
|
21
|
-
"@trackunit/geo-json-utils": "1.14.
|
|
22
|
-
"@trackunit/i18n-library-translation": "2.0.
|
|
23
|
-
"@trackunit/css-class-variance-utilities": "1.13.
|
|
24
|
-
"@trackunit/react-components": "2.1.
|
|
14
|
+
"@trackunit/iris-app-api": "2.0.31",
|
|
15
|
+
"@trackunit/react-core-hooks": "1.17.48",
|
|
16
|
+
"@trackunit/react-filter-components": "2.1.38",
|
|
17
|
+
"@trackunit/react-date-and-time-components": "2.1.38",
|
|
18
|
+
"@trackunit/shared-utils": "1.15.39",
|
|
19
|
+
"@trackunit/react-form-components": "2.1.37",
|
|
20
|
+
"@trackunit/iris-app-runtime-core-api": "1.16.43",
|
|
21
|
+
"@trackunit/geo-json-utils": "1.14.42",
|
|
22
|
+
"@trackunit/i18n-library-translation": "2.0.36",
|
|
23
|
+
"@trackunit/css-class-variance-utilities": "1.13.39",
|
|
24
|
+
"@trackunit/react-components": "2.1.35"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"@apollo/client": "^3.13.8",
|
|
@@ -41,7 +41,7 @@ export type FilterMapGetter = {
|
|
|
41
41
|
getValuesByKey: (key: string) => FilterValueType;
|
|
42
42
|
isDefaultValue: (key: string, value: FilterValueType) => boolean;
|
|
43
43
|
arrayIncludesValue: (key: string, value: string | boolean) => boolean;
|
|
44
|
-
appliedFilterKeys: () => Array<
|
|
44
|
+
appliedFilterKeys: () => Array<FilterName>;
|
|
45
45
|
isFilterIncludedByKey(key: string): boolean;
|
|
46
46
|
};
|
|
47
47
|
export type FilterName = string;
|