@trackunit/filters-asset-filter-definitions 3.0.0 → 3.0.1-alpha-b98222c404a.0

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 (29) hide show
  1. package/index.cjs.js +144 -146
  2. package/index.esm.js +94 -90
  3. package/package.json +21 -21
  4. package/src/defaultFilters/defaults/AccessManagementModeFilter.d.ts +7 -8
  5. package/src/defaultFilters/defaults/ActivityFiltersView.d.ts +7 -8
  6. package/src/defaultFilters/defaults/CountryFilter/buildCountryOptions.d.ts +4 -2
  7. package/src/defaultFilters/defaults/CustomerIdsFilterView.d.ts +2 -2
  8. package/src/defaultFilters/defaults/InspectionTemplateAssignedFilter.d.ts +1 -1
  9. package/src/defaultFilters/defaults/LastInspectionResultFiltersView.d.ts +1 -1
  10. package/src/defaultFilters/defaults/LastPerformedInspectionFilterView.d.ts +1 -1
  11. package/src/defaultFilters/defaults/LastSeenFiltersView.d.ts +7 -8
  12. package/src/defaultFilters/defaults/MetadataCompletenessFilterView.d.ts +2 -2
  13. package/src/defaultFilters/defaults/NameFilterView.d.ts +1 -2
  14. package/src/defaultFilters/defaults/PeriodFilterView.d.ts +7 -8
  15. package/src/defaultFilters/defaults/RentalContractCustomerParentExternalReferenceFilterView.d.ts +1 -2
  16. package/src/defaultFilters/defaults/RentalContractCustomerParentNameFilterView.d.ts +1 -2
  17. package/src/defaultFilters/defaults/RentalContractOrderNumberFilterView.d.ts +1 -2
  18. package/src/defaultFilters/defaults/RentalContractReferenceCodeDescriptionFilterView.d.ts +1 -2
  19. package/src/defaultFilters/defaults/RentalContractReferenceCodeFilterView.d.ts +1 -2
  20. package/src/defaultFilters/defaults/SearchFilterInline.d.ts +1 -2
  21. package/src/defaultFilters/defaults/SiteStatusFilterView.d.ts +6 -7
  22. package/src/defaultFilters/defaults/SiteTypesFilterView.d.ts +11 -12
  23. package/src/defaultFilters/defaults/area/usePlacesSearch.d.ts +129 -19
  24. package/src/defaultFilters/defaults/test/summaryConnectionTestUtils.d.ts +32 -16
  25. package/src/hooks/useDefaultAssetFilterBarDefinition.d.ts +43 -45
  26. package/src/shared/ClearItemButton.d.ts +2 -2
  27. package/src/shared/FreeTextRecentSearchesFilterView.d.ts +1 -2
  28. package/src/shared/RecentSearchesFooter.d.ts +2 -2
  29. package/src/translation.d.ts +7 -4
package/index.cjs.js CHANGED
@@ -328,13 +328,14 @@ const AccessManagementModeFilterView = ({ filterDefinition, filterState, filterB
328
328
  }, [data?.assetSummary?.accessManagementModeDesired?.summary, t]);
329
329
  return (jsxRuntime.jsx(filtersFilterBar.DefaultCheckboxFilter, { filterBarActions: filterBarActions, filterDefinition: filterDefinition, filterState: filterState, loading: loading, options: accessManagementModes, setValue: setValue }));
330
330
  };
331
- const AccessManagementMode = {
332
- UNLOCKED_FOR_ALL: "UNLOCKED_FOR_ALL",
333
- UNLOCKED_FOR_KEY: "UNLOCKED_FOR_KEY",
334
- LOCKED_FOR_ALL: "LOCKED_FOR_ALL",
335
- UNSUPPORTED: "UNSUPPORTED",
336
- UNKNOWN: "UNKNOWN",
337
- };
331
+ exports.AccessManagementMode = void 0;
332
+ (function (AccessManagementMode) {
333
+ AccessManagementMode["UNLOCKED_FOR_ALL"] = "UNLOCKED_FOR_ALL";
334
+ AccessManagementMode["UNLOCKED_FOR_KEY"] = "UNLOCKED_FOR_KEY";
335
+ AccessManagementMode["LOCKED_FOR_ALL"] = "LOCKED_FOR_ALL";
336
+ AccessManagementMode["UNSUPPORTED"] = "UNSUPPORTED";
337
+ AccessManagementMode["UNKNOWN"] = "UNKNOWN";
338
+ })(exports.AccessManagementMode || (exports.AccessManagementMode = {}));
338
339
  /**
339
340
  Access Management Mode filter definition
340
341
  It is a string array filter that filters assets based on their access management mode
@@ -4677,12 +4678,13 @@ const GetFleetRentalCustomerParentNameSummaryMissingDocument = {
4677
4678
  ],
4678
4679
  };
4679
4680
 
4680
- const AssetActivityState = {
4681
- Idling: "IDLING",
4682
- Stopped: "STOPPED",
4683
- Unknown: "UNKNOWN",
4684
- Working: "WORKING",
4685
- };
4681
+ exports.AssetActivityState = void 0;
4682
+ (function (AssetActivityState) {
4683
+ AssetActivityState["Idling"] = "IDLING";
4684
+ AssetActivityState["Stopped"] = "STOPPED";
4685
+ AssetActivityState["Unknown"] = "UNKNOWN";
4686
+ AssetActivityState["Working"] = "WORKING";
4687
+ })(exports.AssetActivityState || (exports.AssetActivityState = {}));
4686
4688
  /**
4687
4689
  * Maps the activity state to a label id
4688
4690
  *
@@ -4691,13 +4693,13 @@ const AssetActivityState = {
4691
4693
  */
4692
4694
  const mapActivityToLabelId = (state) => {
4693
4695
  switch (state) {
4694
- case AssetActivityState.Working:
4696
+ case exports.AssetActivityState.Working:
4695
4697
  return "assetFilters.activityFilter.working";
4696
- case AssetActivityState.Idling:
4698
+ case exports.AssetActivityState.Idling:
4697
4699
  return "assetFilters.activityFilter.idling";
4698
- case AssetActivityState.Stopped:
4700
+ case exports.AssetActivityState.Stopped:
4699
4701
  return "assetFilters.activityFilter.stopped";
4700
- case AssetActivityState.Unknown:
4702
+ case exports.AssetActivityState.Unknown:
4701
4703
  return "assetFilters.activityFilter.unknown";
4702
4704
  default:
4703
4705
  return "assetFilters.activityFilter.unknown";
@@ -4725,28 +4727,28 @@ const ActivityFiltersView = ({ filterBarActions, filterDefinition, filterState,
4725
4727
  const activity = data?.assetSummary?.activity;
4726
4728
  return (jsxRuntime.jsx(filtersFilterBar.DefaultCheckboxFilter, { filterBarActions: filterBarActions, filterDefinition: filterDefinition, filterState: filterState, loading: loading, options: [
4727
4729
  {
4728
- key: AssetActivityState.Working,
4730
+ key: exports.AssetActivityState.Working,
4729
4731
  label: t("assetFilters.activityFilter.working"),
4730
4732
  count: activity?.working,
4731
- prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: AssetActivityState.Working, withBackground: false, withLabel: false }),
4733
+ prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: exports.AssetActivityState.Working, withBackground: false, withLabel: false }),
4732
4734
  },
4733
4735
  {
4734
- key: AssetActivityState.Idling,
4736
+ key: exports.AssetActivityState.Idling,
4735
4737
  label: t("assetFilters.activityFilter.idling"),
4736
4738
  count: activity?.idling,
4737
- prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: AssetActivityState.Idling, withBackground: false, withLabel: false }),
4739
+ prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: exports.AssetActivityState.Idling, withBackground: false, withLabel: false }),
4738
4740
  },
4739
4741
  {
4740
- key: AssetActivityState.Stopped,
4742
+ key: exports.AssetActivityState.Stopped,
4741
4743
  label: t("assetFilters.activityFilter.stopped"),
4742
4744
  count: activity?.stopped,
4743
- prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: AssetActivityState.Stopped, withBackground: false, withLabel: false }),
4745
+ prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: exports.AssetActivityState.Stopped, withBackground: false, withLabel: false }),
4744
4746
  },
4745
4747
  {
4746
- key: AssetActivityState.Unknown,
4748
+ key: exports.AssetActivityState.Unknown,
4747
4749
  label: t("assetFilters.activityFilter.unknown"),
4748
4750
  count: activity?.unknown,
4749
- prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: AssetActivityState.Unknown, withBackground: false, withLabel: false }),
4751
+ prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: exports.AssetActivityState.Unknown, withBackground: false, withLabel: false }),
4750
4752
  },
4751
4753
  ], setValue: setValue, value: value }));
4752
4754
  };
@@ -5022,8 +5024,6 @@ const assetTypeConst = {
5022
5024
  VEHICLE: "VEHICLE",
5023
5025
  };
5024
5026
  const ALL_TYPES = sharedUtils.objectValues(assetTypeConst);
5025
- const isAssetType = (value) => ALL_TYPES.some(type => type === value);
5026
- const mapAssetTypeToLabelId = (value) => isAssetType(value) ? `assetFilters.assetType.${value}` : "assetFilters.unknown";
5027
5027
  /**
5028
5028
  * A filter view component for filtering asset types.
5029
5029
  *
@@ -5081,7 +5081,7 @@ const useAssetTypeFilter = ({ showTypes } = { showTypes: ALL_TYPES }) => {
5081
5081
  type: "stringArray",
5082
5082
  group: "METADATA",
5083
5083
  title: t("fleetlist.column.assetType"),
5084
- valueAsText: values => values.map(value => t(mapAssetTypeToLabelId(value))),
5084
+ valueAsText: values => values.map(value => t(`assetFilters.assetType.${value}`)),
5085
5085
  component: props => jsxRuntime.jsx(AssetTypesFilterView, { showTypes: showTypes, ...props }),
5086
5086
  };
5087
5087
  }, [showTypes, t]);
@@ -5723,7 +5723,7 @@ const useFacetLimitedOptions = (filterState, config) => {
5723
5723
  variables: { limit: FACET_FETCH_LIMIT, search: debouncedSearch, filters: config.scope(activeFilters) },
5724
5724
  });
5725
5725
  const options = react.useMemo(() => {
5726
- const items = data !== undefined && data !== null ? (config.read(data) ?? []) : [];
5726
+ const items = data ? (config.read(data) ?? []) : [];
5727
5727
  const facetOptions = items.map(item => config.toOption(item));
5728
5728
  return config.showCount === false ? facetOptions.map(option => ({ ...option, count: undefined })) : facetOptions;
5729
5729
  }, [config, data]);
@@ -5849,7 +5849,7 @@ const useCustomerHierarchy = (customerSummary) => {
5849
5849
  // Finalize and sort the hierarchy
5850
5850
  const finalRootOptions = Array.from(rootCustomerIds)
5851
5851
  .map(id => customerMap.get(id))
5852
- .filter(sharedUtils.nonNullable)
5852
+ .filter(Boolean)
5853
5853
  .sort((a, b) => a.label.localeCompare(b.label));
5854
5854
  finalRootOptions.forEach(option => assignLevelAndSort(option, 0));
5855
5855
  return finalRootOptions;
@@ -5864,15 +5864,13 @@ const useCustomerHierarchy = (customerSummary) => {
5864
5864
  * @param props - Filter properties including data, state, and actions.
5865
5865
  * @param props.customerId - The ID of the customer that owns the customers shown in the filter bar.
5866
5866
  * @param props.hasCount - Whether the filter should display the count for matching items.
5867
- * @returns {ReactElement | null} A customer ID filter component for rendering in the UI, or null when the filter definition is not a valueNameArray definition.
5867
+ * @returns {ReactElement} A customer ID filter component for rendering in the UI.
5868
5868
  */
5869
5869
  const CustomerIdsFilterView = ({ customerId, hasCount = true, ...props }) => {
5870
5870
  const { data, loading, customSearch } = useCustomerData(props.filterState.values, customerId);
5871
5871
  const hierarchicalOptions = useCustomerHierarchy(data?.assetSummary?.customers?.summary);
5872
- if (props.filterDefinition.type !== "valueNameArray") {
5873
- return null;
5874
- }
5875
- return (jsxRuntime.jsx(filtersFilterBar.HierarchicalCheckboxFilter, { cascadeSelection: true, customSearch: customSearch, filterBarActions: props.filterBarActions, filterDefinition: props.filterDefinition, filterState: props.filterState, loading: loading, options: hierarchicalOptions, setValue: props.setValue, showCount: hasCount, value: props.value }));
5872
+ const valueNameArrayFilterDefinition = props.filterDefinition;
5873
+ return (jsxRuntime.jsx(filtersFilterBar.HierarchicalCheckboxFilter, { cascadeSelection: true, customSearch: customSearch, filterBarActions: props.filterBarActions, filterDefinition: valueNameArrayFilterDefinition, filterState: props.filterState, loading: loading, options: hierarchicalOptions, setValue: props.setValue, showCount: hasCount, value: props.value }));
5876
5874
  };
5877
5875
  /**
5878
5876
  * Custom hook to create and configure a customer IDs filter definition.
@@ -6307,7 +6305,7 @@ const GroupIdsFilterView = (props) => {
6307
6305
  read: asGroupConnectionNode,
6308
6306
  toOption: node => ({
6309
6307
  key: node.group?.groupId || "unknown",
6310
- count: node.count ?? 0,
6308
+ count: node.count || 0,
6311
6309
  label: node.group?.name || t("machine.types.Unknown"),
6312
6310
  }),
6313
6311
  },
@@ -6716,7 +6714,7 @@ const InspectionTemplateAssignedFilter = (props) => {
6716
6714
  * Inspection template assigned filter definition. Applied to results via
6717
6715
  * `AssetFiltersInput.inspectionTemplateAssigned` (see `useActiveAssetFilters`).
6718
6716
  */
6719
- const useInspectionTemplateAssignedFilter = ({ isDefault, } = {}) => {
6717
+ const useInspectionTemplateAssignedFilter = ({ isDefault } = {}) => {
6720
6718
  const [t] = useTranslation();
6721
6719
  const result = react.useMemo(() => {
6722
6720
  return {
@@ -6819,7 +6817,7 @@ const LastInspectionResultFiltersView = (props) => {
6819
6817
  * @param root0.isDefault - When true, include in default filter bar configuration
6820
6818
  * @returns {StringArrayFilterDefinition} Filter definition for the asset filter bar
6821
6819
  */
6822
- const useLastInspectionResultFilter = ({ isDefault, } = {}) => {
6820
+ const useLastInspectionResultFilter = ({ isDefault } = {}) => {
6823
6821
  const [t] = useTranslation();
6824
6822
  const result = react.useMemo(() => {
6825
6823
  return {
@@ -6908,7 +6906,7 @@ const LastPerformedInspectionFilterView = (props) => {
6908
6906
  * `inspectionLastFilters.performed` (see `useActiveAssetFilters`); the schema exposes no
6909
6907
  * per-time-bucket summary, so options render without counts.
6910
6908
  */
6911
- const useLastPerformedInspectionFilter = ({ isDefault, } = {}) => {
6909
+ const useLastPerformedInspectionFilter = ({ isDefault } = {}) => {
6912
6910
  const [t] = useTranslation();
6913
6911
  const result = react.useMemo(() => {
6914
6912
  return {
@@ -6925,13 +6923,14 @@ const useLastPerformedInspectionFilter = ({ isDefault, } = {}) => {
6925
6923
  };
6926
6924
 
6927
6925
  /** The time the asset was last seen. */
6928
- const AssetLastSeen = {
6929
- Last_7Days: "LAST_7_DAYS",
6930
- Last_24Hours: "LAST_24_HOURS",
6931
- Last_30Days: "LAST_30_DAYS",
6932
- LastHour: "LAST_HOUR",
6933
- OlderThan_30Days: "OLDER_THAN_30_DAYS",
6934
- };
6926
+ exports.AssetLastSeen = void 0;
6927
+ (function (AssetLastSeen) {
6928
+ AssetLastSeen["Last_7Days"] = "LAST_7_DAYS";
6929
+ AssetLastSeen["Last_24Hours"] = "LAST_24_HOURS";
6930
+ AssetLastSeen["Last_30Days"] = "LAST_30_DAYS";
6931
+ AssetLastSeen["LastHour"] = "LAST_HOUR";
6932
+ AssetLastSeen["OlderThan_30Days"] = "OLDER_THAN_30_DAYS";
6933
+ })(exports.AssetLastSeen || (exports.AssetLastSeen = {}));
6935
6934
  /**
6936
6935
  * Represents the view component for the "Last Seen" filter.
6937
6936
  *
@@ -6948,7 +6947,7 @@ const LastSeenFiltersView = (props) => {
6948
6947
  });
6949
6948
  props.setValue(() => value);
6950
6949
  };
6951
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(filtersFilterBar.FilterHeader, { ...props.filterDefinition, ...props.filterBarActions, filterHasChanges: props.filterBarActions.appliedFilterKeys().includes(props.filterDefinition.filterKey) }), jsxRuntime.jsx(reactFilterComponents.FilterBody, { limitSize: true, children: jsxRuntime.jsxs(reactFormComponents.RadioGroup, { className: "pl-2 pr-2", id: "lastSeen", label: "", onChange: val => handleChange(val.currentTarget.value), value: props.value ?? "ALL", children: [jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.anytime"), value: "ALL" }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.lastHour"), value: AssetLastSeen.LastHour }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.last24Hours"), value: AssetLastSeen.Last_24Hours }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.last7Days"), value: AssetLastSeen.Last_7Days }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.last30Days"), value: AssetLastSeen.Last_30Days }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.olderThan30Days"), value: AssetLastSeen.OlderThan_30Days })] }) })] }));
6950
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(filtersFilterBar.FilterHeader, { ...props.filterDefinition, ...props.filterBarActions, filterHasChanges: props.filterBarActions.appliedFilterKeys().includes(props.filterDefinition.filterKey) }), jsxRuntime.jsx(reactFilterComponents.FilterBody, { limitSize: true, children: jsxRuntime.jsxs(reactFormComponents.RadioGroup, { className: "pl-2 pr-2", id: "lastSeen", label: "", onChange: val => handleChange(val.currentTarget.value), value: props.value ?? "ALL", children: [jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.anytime"), value: "ALL" }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.lastHour"), value: exports.AssetLastSeen.LastHour }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.last24Hours"), value: exports.AssetLastSeen.Last_24Hours }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.last7Days"), value: exports.AssetLastSeen.Last_7Days }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.last30Days"), value: exports.AssetLastSeen.Last_30Days }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.lastSeenFilter.olderThan30Days"), value: exports.AssetLastSeen.OlderThan_30Days })] }) })] }));
6952
6951
  };
6953
6952
  /**
6954
6953
  *
@@ -6962,19 +6961,19 @@ const useLastSeenFilter = () => {
6962
6961
  group: "STATUS",
6963
6962
  title: t("fleetlist.column.lastSeen"),
6964
6963
  valueAsText: value => {
6965
- if (value === AssetLastSeen.LastHour) {
6964
+ if (value === exports.AssetLastSeen.LastHour) {
6966
6965
  return t("assetFilters.lastSeenFilter.lastHour");
6967
6966
  }
6968
- else if (value === AssetLastSeen.Last_24Hours) {
6967
+ else if (value === exports.AssetLastSeen.Last_24Hours) {
6969
6968
  return t("assetFilters.lastSeenFilter.last24Hours");
6970
6969
  }
6971
- else if (value === AssetLastSeen.Last_7Days) {
6970
+ else if (value === exports.AssetLastSeen.Last_7Days) {
6972
6971
  return t("assetFilters.lastSeenFilter.last7Days");
6973
6972
  }
6974
- else if (value === AssetLastSeen.Last_30Days) {
6973
+ else if (value === exports.AssetLastSeen.Last_30Days) {
6975
6974
  return t("assetFilters.lastSeenFilter.last30Days");
6976
6975
  }
6977
- else if (value === AssetLastSeen.OlderThan_30Days) {
6976
+ else if (value === exports.AssetLastSeen.OlderThan_30Days) {
6978
6977
  return t("assetFilters.lastSeenFilter.olderThan30Days");
6979
6978
  }
6980
6979
  else {
@@ -7053,7 +7052,7 @@ const MetadataCompletenessFilterView = (props) => {
7053
7052
  /**
7054
7053
  * MetadataCompleteness filter definition
7055
7054
  */
7056
- const useMetadataCompletenessFilter = ({ isDefault, } = {}) => {
7055
+ const useMetadataCompletenessFilter = ({ isDefault } = {}) => {
7057
7056
  const [t] = useTranslation();
7058
7057
  const result = react.useMemo(() => {
7059
7058
  return {
@@ -7211,16 +7210,9 @@ const useFreeTextRecentSearches = ({ recentSearches, setRecentSearches, }) => {
7211
7210
  // eslint-disable-next-line @trackunit/require-component-prop-contracts -- renders a fragment (header + body) with no DOM root to attach these props to; fix in GLU-2699
7212
7211
  const FreeTextRecentSearchesFilterView = ({ filterBarActions, filterState, filterDefinition, localStorageKey, searchPlaceholder, }) => {
7213
7212
  const [t] = useTranslation();
7214
- const filterKey = filterDefinition?.filterKey;
7215
- const filterValue = filterKey ? String(filterState.values[filterKey]) : undefined;
7213
+ const filterValue = filterDefinition?.filterKey ? String(filterState.values[filterDefinition.filterKey]) : undefined;
7216
7214
  const [searchString, setSearchString] = react.useState(filterValue ?? "");
7217
- const [syncedFilterValue, setSyncedFilterValue] = react.useState(filterValue);
7218
- if (filterValue !== syncedFilterValue) {
7219
- setSyncedFilterValue(filterValue);
7220
- if (filterValue !== searchString && filterValue !== undefined) {
7221
- setSearchString(filterValue);
7222
- }
7223
- }
7215
+ const previousFilterValue = reactComponents.usePrevious(filterValue);
7224
7216
  const { clientSideUserId } = reactCoreHooks.useCurrentUser();
7225
7217
  reactComponents.useDebounce(searchString, {
7226
7218
  delay: 500,
@@ -7231,11 +7223,19 @@ const FreeTextRecentSearchesFilterView = ({ filterBarActions, filterState, filte
7231
7223
  apply({ value: debouncedSearchString, setRecent: false });
7232
7224
  },
7233
7225
  });
7226
+ react.useEffect(() => {
7227
+ if (filterValue === searchString || previousFilterValue === filterValue) {
7228
+ return;
7229
+ }
7230
+ if (filterValue !== undefined) {
7231
+ setSearchString(filterValue);
7232
+ }
7233
+ }, [filterValue, previousFilterValue, searchString]);
7234
7234
  const localStorageProps = react.useMemo(() => ({
7235
7235
  defaultState: [],
7236
- key: `${localStorageKey}-${filterKey}-free-text-filter-recent-searches-${clientSideUserId}`,
7236
+ key: `${localStorageKey}-${filterDefinition?.filterKey}-free-text-filter-recent-searches-${clientSideUserId}`,
7237
7237
  schema: zod.z.array(zod.z.string()),
7238
- }), [localStorageKey, filterKey, clientSideUserId]);
7238
+ }), [localStorageKey, filterDefinition?.filterKey, clientSideUserId]);
7239
7239
  const [recentSearches, setRecentSearches] = reactComponents.useLocalStorage(localStorageProps);
7240
7240
  const { recentSearchesWithoutEmptyValues, rememberRecentSearch } = useFreeTextRecentSearches({
7241
7241
  recentSearches,
@@ -7245,11 +7245,11 @@ const FreeTextRecentSearchesFilterView = ({ filterBarActions, filterState, filte
7245
7245
  if (setRecent !== false) {
7246
7246
  rememberRecentSearch(value);
7247
7247
  }
7248
- if (filterKey) {
7249
- filterBarActions.setStringValue(filterKey, value);
7248
+ if (filterDefinition?.filterKey) {
7249
+ filterBarActions.setStringValue(filterDefinition.filterKey, value);
7250
7250
  }
7251
- }, [filterKey, filterBarActions, rememberRecentSearch]);
7252
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(filtersFilterBar.FilterHeader, { ...filterDefinition, ...filterBarActions, filterHasChanges: filterBarActions.appliedFilterKeys().includes(filterKey ?? ""), filterKey: filterKey ?? "", searchEnabled: true, searchProps: {
7251
+ }, [filterDefinition?.filterKey, filterBarActions, rememberRecentSearch]);
7252
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(filtersFilterBar.FilterHeader, { ...filterDefinition, ...filterBarActions, filterHasChanges: filterBarActions.appliedFilterKeys().includes(filterDefinition?.filterKey ?? ""), filterKey: filterDefinition?.filterKey ?? "", searchEnabled: true, searchProps: {
7253
7253
  onEnter: () => apply({ value: searchString, setRecent: true }),
7254
7254
  onChange: setSearchString,
7255
7255
  onClear: () => setSearchString(""),
@@ -7371,7 +7371,7 @@ const OwnerAccountIdsFilterView = (props) => {
7371
7371
  read: asOwnerAccountConnectionNode,
7372
7372
  toOption: node => ({
7373
7373
  key: node.ownerAccount?.accountId || "unknown",
7374
- count: node.count ?? 0,
7374
+ count: node.count || 0,
7375
7375
  label: node.ownerAccount?.name || t("machine.types.Unknown"),
7376
7376
  }),
7377
7377
  },
@@ -7428,24 +7428,25 @@ const usePartnerFilter = () => {
7428
7428
  return result;
7429
7429
  };
7430
7430
 
7431
- const DayPeriod = {
7432
- LAST_24_HOURS: "LAST_24_HOURS",
7433
- LAST_7_DAYS: "LAST_7_DAYS",
7434
- LAST_30_DAYS: "LAST_30_DAYS",
7435
- LIFETIME: "LIFETIME",
7436
- LAST_YEAR: "LAST_YEAR",
7437
- };
7431
+ exports.DayPeriod = void 0;
7432
+ (function (DayPeriod) {
7433
+ DayPeriod["LAST_24_HOURS"] = "LAST_24_HOURS";
7434
+ DayPeriod["LAST_7_DAYS"] = "LAST_7_DAYS";
7435
+ DayPeriod["LAST_30_DAYS"] = "LAST_30_DAYS";
7436
+ DayPeriod["LIFETIME"] = "LIFETIME";
7437
+ DayPeriod["LAST_YEAR"] = "LAST_YEAR";
7438
+ })(exports.DayPeriod || (exports.DayPeriod = {}));
7438
7439
  const dayPeriodToTranslationKey = (value) => {
7439
7440
  switch (value) {
7440
- case DayPeriod.LAST_24_HOURS:
7441
+ case exports.DayPeriod.LAST_24_HOURS:
7441
7442
  return "assetFilters.periodFilter.LAST_24_HOURS";
7442
- case DayPeriod.LAST_7_DAYS:
7443
+ case exports.DayPeriod.LAST_7_DAYS:
7443
7444
  return "assetFilters.periodFilter.LAST_7_DAYS";
7444
- case DayPeriod.LAST_30_DAYS:
7445
+ case exports.DayPeriod.LAST_30_DAYS:
7445
7446
  return "assetFilters.periodFilter.LAST_30_DAYS";
7446
- case DayPeriod.LIFETIME:
7447
+ case exports.DayPeriod.LIFETIME:
7447
7448
  return "assetFilters.periodFilter.LIFETIME";
7448
- case DayPeriod.LAST_YEAR:
7449
+ case exports.DayPeriod.LAST_YEAR:
7449
7450
  return "assetFilters.periodFilter.LAST_YEAR";
7450
7451
  default:
7451
7452
  return sharedUtils.exhaustiveCheck(value);
@@ -7471,7 +7472,7 @@ const PeriodFilterView = (props) => {
7471
7472
  });
7472
7473
  props.setValue(() => value);
7473
7474
  };
7474
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(filtersFilterBar.FilterHeader, { ...props.filterDefinition, ...props.filterBarActions, filterHasChanges: props.filterBarActions.appliedFilterKeys().includes(props.filterDefinition.filterKey) }), jsxRuntime.jsx(reactFilterComponents.FilterBody, { limitSize: true, children: jsxRuntime.jsxs(reactFormComponents.RadioGroup, { id: "period", label: "", onChange: val => handleChange(val.currentTarget.value), value: props.value || "LAST_24_HOURS", children: [props.filterBarActions.getFilterBarName() !== "utilizationFilter" ? (jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LAST_24_HOURS"), value: DayPeriod.LAST_24_HOURS })) : null, jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LAST_7_DAYS"), value: DayPeriod.LAST_7_DAYS }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LAST_30_DAYS"), value: DayPeriod.LAST_30_DAYS }), props.filterBarActions.getFilterBarName() === "fleetEmissionsFilter" && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LAST_YEAR"), value: DayPeriod.LAST_YEAR }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LIFETIME"), value: DayPeriod.LIFETIME })] }))] }) })] }));
7475
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(filtersFilterBar.FilterHeader, { ...props.filterDefinition, ...props.filterBarActions, filterHasChanges: props.filterBarActions.appliedFilterKeys().includes(props.filterDefinition.filterKey) }), jsxRuntime.jsx(reactFilterComponents.FilterBody, { limitSize: true, children: jsxRuntime.jsxs(reactFormComponents.RadioGroup, { id: "period", label: "", onChange: val => handleChange(val.currentTarget.value), value: props.value || "LAST_24_HOURS", children: [props.filterBarActions.getFilterBarName() !== "utilizationFilter" ? (jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LAST_24_HOURS"), value: exports.DayPeriod.LAST_24_HOURS })) : null, jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LAST_7_DAYS"), value: exports.DayPeriod.LAST_7_DAYS }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LAST_30_DAYS"), value: exports.DayPeriod.LAST_30_DAYS }), props.filterBarActions.getFilterBarName() === "fleetEmissionsFilter" && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LAST_YEAR"), value: exports.DayPeriod.LAST_YEAR }), jsxRuntime.jsx(reactFormComponents.RadioItem, { label: t("assetFilters.periodFilter.LIFETIME"), value: exports.DayPeriod.LIFETIME })] }))] }) })] }));
7475
7476
  };
7476
7477
  /**
7477
7478
  *
@@ -7486,21 +7487,21 @@ const usePeriodFilter = () => {
7486
7487
  title: t("assetFilters.periodFilter.label"),
7487
7488
  valueAsText: value => {
7488
7489
  switch (value) {
7489
- case DayPeriod.LAST_24_HOURS:
7490
+ case exports.DayPeriod.LAST_24_HOURS:
7490
7491
  return t("assetFilters.periodFilter.LAST_24_HOURS");
7491
- case DayPeriod.LAST_7_DAYS:
7492
+ case exports.DayPeriod.LAST_7_DAYS:
7492
7493
  return t("assetFilters.periodFilter.LAST_7_DAYS");
7493
- case DayPeriod.LAST_30_DAYS:
7494
+ case exports.DayPeriod.LAST_30_DAYS:
7494
7495
  return t("assetFilters.periodFilter.LAST_30_DAYS");
7495
- case DayPeriod.LIFETIME:
7496
+ case exports.DayPeriod.LIFETIME:
7496
7497
  return t("assetFilters.periodFilter.LIFETIME");
7497
- case DayPeriod.LAST_YEAR:
7498
+ case exports.DayPeriod.LAST_YEAR:
7498
7499
  return t(dayPeriodToTranslationKey(value));
7499
7500
  default:
7500
7501
  return "";
7501
7502
  }
7502
7503
  },
7503
- defaultValue: DayPeriod.LAST_7_DAYS,
7504
+ defaultValue: exports.DayPeriod.LAST_7_DAYS,
7504
7505
  component: props => jsxRuntime.jsx(PeriodFilterView, { ...props }),
7505
7506
  };
7506
7507
  }, [t]);
@@ -7833,17 +7834,9 @@ const SearchFilterInline = ({ filterBarActions, filterState, filterDefinition, l
7833
7834
  const { logEvent } = reactCoreHooks.useAnalytics(filtersFilterBar.FilterEvents);
7834
7835
  const [t] = useTranslation();
7835
7836
  const { geometry, ref: searchElementRef } = reactComponents.useMeasure();
7836
- const filterKey = filterDefinition?.filterKey;
7837
- const filterValue = filterKey ? String(filterState.values[filterKey]) : undefined;
7837
+ const filterValue = filterDefinition?.filterKey ? String(filterState.values[filterDefinition.filterKey]) : undefined;
7838
7838
  const [searchString, setSearchString] = react.useState(filterValue ?? "");
7839
- const [syncedFilterValue, setSyncedFilterValue] = react.useState(filterValue);
7840
- if (filterValue !== syncedFilterValue) {
7841
- // Catch a change in filter value from outside the component and update the search string to match
7842
- setSyncedFilterValue(filterValue);
7843
- if (filterValue !== searchString && filterValue !== undefined) {
7844
- setSearchString(filterValue);
7845
- }
7846
- }
7839
+ const previousFilterValue = reactComponents.usePrevious(filterValue);
7847
7840
  const { clientSideUserId } = reactCoreHooks.useCurrentUser();
7848
7841
  reactComponents.useDebounce(searchString, {
7849
7842
  delay: 500,
@@ -7854,11 +7847,20 @@ const SearchFilterInline = ({ filterBarActions, filterState, filterDefinition, l
7854
7847
  apply({ value: debouncedSearchString, setRecent: false });
7855
7848
  },
7856
7849
  });
7850
+ react.useEffect(() => {
7851
+ // Catch a change in filter value from outside the component and update the search string to match
7852
+ if (filterValue === searchString || previousFilterValue === filterValue) {
7853
+ return;
7854
+ }
7855
+ if (filterValue !== undefined) {
7856
+ setSearchString(filterValue);
7857
+ }
7858
+ }, [filterValue, previousFilterValue, searchString]);
7857
7859
  const localStorageProps = react.useMemo(() => ({
7858
7860
  defaultState: [],
7859
- key: `${localStorageKey}-${filterKey}-free-text-filter-recent-searches-${clientSideUserId}`,
7861
+ key: `${localStorageKey}-${filterDefinition?.filterKey}-free-text-filter-recent-searches-${clientSideUserId}`,
7860
7862
  schema: searchStringSchema,
7861
- }), [localStorageKey, filterKey, clientSideUserId]);
7863
+ }), [localStorageKey, filterDefinition?.filterKey, clientSideUserId]);
7862
7864
  const [recentSearches, setRecentSearches] = reactComponents.useLocalStorage(localStorageProps);
7863
7865
  const apply = react.useCallback(({ value, wasPreviousSearch = false, setRecent = true }) => {
7864
7866
  if (setRecent !== false) {
@@ -7875,10 +7877,10 @@ const SearchFilterInline = ({ filterBarActions, filterState, filterDefinition, l
7875
7877
  wasPreviousSearch: Boolean(wasPreviousSearch),
7876
7878
  },
7877
7879
  });
7878
- if (filterKey) {
7879
- filterBarActions.setStringValue(filterKey, value);
7880
+ if (filterDefinition?.filterKey) {
7881
+ filterBarActions.setStringValue(filterDefinition.filterKey, value);
7880
7882
  }
7881
- }, [filterKey, filterBarActions, logEvent, setRecentSearches]);
7883
+ }, [filterDefinition?.filterKey, filterBarActions, logEvent, setRecentSearches]);
7882
7884
  return (jsxRuntime.jsxs(reactComponents.Popover, { activation: defaultActivation => ({ ...defaultActivation, keyboardHandlers: false }), "data-testid": dataTestId ? `${dataTestId}-popover` : undefined, placement: "bottom-start", children: [jsxRuntime.jsx(reactComponents.PopoverTrigger, { children: jsxRuntime.jsx("div", { className: "flex-grow", "data-testid": "filters-menu-search-field-container", children: jsxRuntime.jsx(reactFormComponents.Search
7883
7885
  //TODO: [Buss] remove height restriction once baseinput sizes matches buttons
7884
7886
  , {
@@ -8111,12 +8113,13 @@ const useSiteIdsFilter = (props) => {
8111
8113
  };
8112
8114
 
8113
8115
  /** The states of a site */
8114
- const SiteStatus = {
8115
- Active: "ACTIVE",
8116
- Archived: "ARCHIVED",
8117
- Finished: "FINISHED",
8118
- Planned: "PLANNED",
8119
- };
8116
+ exports.SiteStatus = void 0;
8117
+ (function (SiteStatus) {
8118
+ SiteStatus["Active"] = "ACTIVE";
8119
+ SiteStatus["Archived"] = "ARCHIVED";
8120
+ SiteStatus["Finished"] = "FINISHED";
8121
+ SiteStatus["Planned"] = "PLANNED";
8122
+ })(exports.SiteStatus || (exports.SiteStatus = {}));
8120
8123
  /**
8121
8124
  * A component that renders a checkbox filter view with site statuses.
8122
8125
  *
@@ -8125,7 +8128,7 @@ const SiteStatus = {
8125
8128
  */
8126
8129
  const SiteStatusFilterView = (props) => {
8127
8130
  const [t] = useTranslation();
8128
- const shownStatus = [SiteStatus.Active, SiteStatus.Planned, SiteStatus.Finished, SiteStatus.Archived];
8131
+ const shownStatus = [exports.SiteStatus.Active, exports.SiteStatus.Planned, exports.SiteStatus.Finished, exports.SiteStatus.Archived];
8129
8132
  return (jsxRuntime.jsx(filtersFilterBar.DefaultCheckboxFilter, { ...props, options: shownStatus.map(value => ({
8130
8133
  key: value,
8131
8134
  label: t(mapSiteStatusToLabelId(value)),
@@ -8133,16 +8136,16 @@ const SiteStatusFilterView = (props) => {
8133
8136
  };
8134
8137
  const mapSiteStatusToLabelId = (status) => {
8135
8138
  switch (status) {
8136
- case SiteStatus.Active:
8137
- case SiteStatus.Finished:
8138
- case SiteStatus.Archived:
8139
- case SiteStatus.Planned:
8139
+ case exports.SiteStatus.Active:
8140
+ case exports.SiteStatus.Finished:
8141
+ case exports.SiteStatus.Archived:
8142
+ case exports.SiteStatus.Planned:
8140
8143
  return `siteFilters.siteStatus.${status}`;
8141
8144
  default:
8142
8145
  return "siteFilters.siteStatus.unknown";
8143
8146
  }
8144
8147
  };
8145
- const defaultValue = [SiteStatus.Active.valueOf()];
8148
+ const defaultValue = [exports.SiteStatus.Active.valueOf()];
8146
8149
  /**
8147
8150
  * SiteStatus filter definition
8148
8151
  *
@@ -8166,15 +8169,16 @@ const useSiteStatusFilter = (props) => {
8166
8169
  };
8167
8170
 
8168
8171
  /** The different types of a site for SFS */
8169
- const SiteTypeSFS = {
8170
- Area: "AREA",
8171
- ClassicPoi: "CLASSIC_POI",
8172
- ClassicZone: "CLASSIC_ZONE",
8173
- ConstructionSite: "CONSTRUCTION_SITE",
8174
- Depot: "DEPOT",
8175
- NotOnSite: "NOT_ON_SITE",
8176
- WorkPlace: "WORK_PLACE",
8177
- };
8172
+ exports.SiteTypeSFS = void 0;
8173
+ (function (SiteTypeSFS) {
8174
+ SiteTypeSFS["Area"] = "AREA";
8175
+ SiteTypeSFS["ClassicPoi"] = "CLASSIC_POI";
8176
+ SiteTypeSFS["ClassicZone"] = "CLASSIC_ZONE";
8177
+ SiteTypeSFS["ConstructionSite"] = "CONSTRUCTION_SITE";
8178
+ SiteTypeSFS["Depot"] = "DEPOT";
8179
+ SiteTypeSFS["NotOnSite"] = "NOT_ON_SITE";
8180
+ SiteTypeSFS["WorkPlace"] = "WORK_PLACE";
8181
+ })(exports.SiteTypeSFS || (exports.SiteTypeSFS = {}));
8178
8182
  /**
8179
8183
  * Sorts the site type summary array in the correct order
8180
8184
  *
@@ -8183,13 +8187,13 @@ const SiteTypeSFS = {
8183
8187
  */
8184
8188
  const sortSiteTypeSummary = (arr) => {
8185
8189
  const typeOrder = {
8186
- [SiteTypeSFS.ConstructionSite]: 1,
8187
- [SiteTypeSFS.Depot]: 2,
8188
- [SiteTypeSFS.WorkPlace]: 3,
8189
- [SiteTypeSFS.Area]: 4,
8190
- [SiteTypeSFS.ClassicZone]: 5,
8191
- [SiteTypeSFS.ClassicPoi]: 6,
8192
- [SiteTypeSFS.NotOnSite]: 7,
8190
+ [exports.SiteTypeSFS.ConstructionSite]: 1,
8191
+ [exports.SiteTypeSFS.Depot]: 2,
8192
+ [exports.SiteTypeSFS.WorkPlace]: 3,
8193
+ [exports.SiteTypeSFS.Area]: 4,
8194
+ [exports.SiteTypeSFS.ClassicZone]: 5,
8195
+ [exports.SiteTypeSFS.ClassicPoi]: 6,
8196
+ [exports.SiteTypeSFS.NotOnSite]: 7,
8193
8197
  };
8194
8198
  return [...arr].sort((a, b) => {
8195
8199
  const typeA = typeOrder[a.key];
@@ -8222,13 +8226,13 @@ const SiteTypesFilterView = (props) => {
8222
8226
  const key = summary.siteType;
8223
8227
  if (key) {
8224
8228
  output.push({
8225
- key: sharedUtils.enumFromValue(key, SiteTypeSFS),
8229
+ key: sharedUtils.enumFromValue(key, exports.SiteTypeSFS),
8226
8230
  count: summary.count,
8227
8231
  });
8228
8232
  }
8229
8233
  });
8230
8234
  if (props.filterBarActions.getFilterBarName() !== "assetFilters") {
8231
- return output.filter(SortSiteTypeSummary => SortSiteTypeSummary.key !== SiteTypeSFS.NotOnSite);
8235
+ return output.filter(SortSiteTypeSummary => SortSiteTypeSummary.key !== exports.SiteTypeSFS.NotOnSite);
8232
8236
  }
8233
8237
  return output;
8234
8238
  }, [data?.assetSummary?.siteTypes.summary, props.filterBarActions]);
@@ -8270,13 +8274,13 @@ const useSiteTypeFilter = ({ showInFilterBar, persistValue, group } = {
8270
8274
  };
8271
8275
  const mapSiteTypeToLabelId = (type) => {
8272
8276
  switch (type) {
8273
- case SiteTypeSFS.Area:
8274
- case SiteTypeSFS.ClassicPoi:
8275
- case SiteTypeSFS.ClassicZone:
8276
- case SiteTypeSFS.ConstructionSite:
8277
- case SiteTypeSFS.WorkPlace:
8278
- case SiteTypeSFS.Depot:
8279
- case SiteTypeSFS.NotOnSite:
8277
+ case exports.SiteTypeSFS.Area:
8278
+ case exports.SiteTypeSFS.ClassicPoi:
8279
+ case exports.SiteTypeSFS.ClassicZone:
8280
+ case exports.SiteTypeSFS.ConstructionSite:
8281
+ case exports.SiteTypeSFS.WorkPlace:
8282
+ case exports.SiteTypeSFS.Depot:
8283
+ case exports.SiteTypeSFS.NotOnSite:
8280
8284
  return `siteFilters.siteType.${type}`;
8281
8285
  default:
8282
8286
  return "siteFilters.siteType.unknown";
@@ -8693,19 +8697,15 @@ const useDefaultAssetFilterBarDefinition = () => {
8693
8697
  setupLibraryTranslations();
8694
8698
 
8695
8699
  exports.ALL_TYPES = ALL_TYPES;
8696
- exports.AccessManagementMode = AccessManagementMode;
8697
8700
  exports.ActiveFilterFiltersView = ActiveFilterFiltersView;
8698
8701
  exports.ActivityFiltersView = ActivityFiltersView;
8699
8702
  exports.AreaView = AreaView;
8700
- exports.AssetActivityState = AssetActivityState;
8701
8703
  exports.AssetIdsFiltersView = AssetIdsFiltersView;
8702
- exports.AssetLastSeen = AssetLastSeen;
8703
8704
  exports.AssetTypesFilterView = AssetTypesFilterView;
8704
8705
  exports.BrandFilterView = BrandFilterView;
8705
8706
  exports.ClearItemButton = ClearItemButton;
8706
8707
  exports.CriticalityFiltersView = CriticalityFiltersView;
8707
8708
  exports.CustomerIdsFilterView = CustomerIdsFilterView;
8708
- exports.DayPeriod = DayPeriod;
8709
8709
  exports.FollowedFiltersView = FollowedFiltersView;
8710
8710
  exports.FreeTextRecentSearchesFilterView = FreeTextRecentSearchesFilterView;
8711
8711
  exports.GetFleetGroupSummaryConnectionDocument = GetFleetGroupSummaryConnectionDocument;
@@ -8739,9 +8739,7 @@ exports.SearchFilterInline = SearchFilterInline;
8739
8739
  exports.ServicePanStatusesFiltersView = ServicePanStatusesFiltersView;
8740
8740
  exports.SiteDepotOwnershipIdsFilterView = SiteDepotOwnershipIdsFilterView;
8741
8741
  exports.SiteIdsFilterView = SiteIdsFilterView;
8742
- exports.SiteStatus = SiteStatus;
8743
8742
  exports.SiteStatusFilterView = SiteStatusFilterView;
8744
- exports.SiteTypeSFS = SiteTypeSFS;
8745
8743
  exports.SiteTypesFilterView = SiteTypesFilterView;
8746
8744
  exports.TelematicsConnectedFiltersView = TelematicsConnectedFiltersView;
8747
8745
  exports.TypesFilterView = TypesFilterView;