@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 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 = filterBarConfig.appliedFilterKeys().includes(filter.filterKey);
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 => filterBarConfig.appliedFilterKeys().includes(filter.filterKey)),
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 = filterBarConfig.appliedFilterKeys().includes(filter.filterKey);
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 => filterBarConfig.appliedFilterKeys().includes(filter.filterKey)),
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.36",
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.29",
15
- "@trackunit/react-core-hooks": "1.17.46",
16
- "@trackunit/react-filter-components": "2.1.36",
17
- "@trackunit/react-date-and-time-components": "2.1.36",
18
- "@trackunit/shared-utils": "1.15.37",
19
- "@trackunit/react-form-components": "2.1.35",
20
- "@trackunit/iris-app-runtime-core-api": "1.16.41",
21
- "@trackunit/geo-json-utils": "1.14.40",
22
- "@trackunit/i18n-library-translation": "2.0.34",
23
- "@trackunit/css-class-variance-utilities": "1.13.37",
24
- "@trackunit/react-components": "2.1.33"
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<keyof FilterBarDefinition>;
44
+ appliedFilterKeys: () => Array<FilterName>;
45
45
  isFilterIncludedByKey(key: string): boolean;
46
46
  };
47
47
  export type FilterName = string;