@trackunit/filters-asset-filter-definitions 2.32.5 → 3.0.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.
- package/index.cjs.js +146 -144
- package/index.esm.js +90 -94
- package/migrations/entry.js.map +1 -0
- package/package.json +21 -21
- package/src/defaultFilters/defaults/AccessManagementModeFilter.d.ts +8 -7
- package/src/defaultFilters/defaults/ActivityFiltersView.d.ts +8 -7
- package/src/defaultFilters/defaults/CountryFilter/buildCountryOptions.d.ts +2 -4
- package/src/defaultFilters/defaults/CustomerIdsFilterView.d.ts +2 -2
- package/src/defaultFilters/defaults/InspectionTemplateAssignedFilter.d.ts +1 -1
- package/src/defaultFilters/defaults/LastInspectionResultFiltersView.d.ts +1 -1
- package/src/defaultFilters/defaults/LastPerformedInspectionFilterView.d.ts +1 -1
- package/src/defaultFilters/defaults/LastSeenFiltersView.d.ts +8 -7
- package/src/defaultFilters/defaults/MetadataCompletenessFilterView.d.ts +2 -2
- package/src/defaultFilters/defaults/NameFilterView.d.ts +2 -1
- package/src/defaultFilters/defaults/PeriodFilterView.d.ts +8 -7
- package/src/defaultFilters/defaults/RentalContractCustomerParentExternalReferenceFilterView.d.ts +2 -1
- package/src/defaultFilters/defaults/RentalContractCustomerParentNameFilterView.d.ts +2 -1
- package/src/defaultFilters/defaults/RentalContractOrderNumberFilterView.d.ts +2 -1
- package/src/defaultFilters/defaults/RentalContractReferenceCodeDescriptionFilterView.d.ts +2 -1
- package/src/defaultFilters/defaults/RentalContractReferenceCodeFilterView.d.ts +2 -1
- package/src/defaultFilters/defaults/SearchFilterInline.d.ts +2 -1
- package/src/defaultFilters/defaults/SiteStatusFilterView.d.ts +7 -6
- package/src/defaultFilters/defaults/SiteTypesFilterView.d.ts +12 -11
- package/src/defaultFilters/defaults/area/usePlacesSearch.d.ts +19 -129
- package/src/defaultFilters/defaults/test/summaryConnectionTestUtils.d.ts +16 -32
- package/src/hooks/useDefaultAssetFilterBarDefinition.d.ts +45 -43
- package/src/shared/ClearItemButton.d.ts +2 -2
- package/src/shared/FreeTextRecentSearchesFilterView.d.ts +2 -1
- package/src/shared/RecentSearchesFooter.d.ts +2 -2
- package/src/translation.d.ts +4 -7
package/index.cjs.js
CHANGED
|
@@ -328,14 +328,13 @@ 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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
})(exports.AccessManagementMode || (exports.AccessManagementMode = {}));
|
|
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
|
+
};
|
|
339
338
|
/**
|
|
340
339
|
Access Management Mode filter definition
|
|
341
340
|
It is a string array filter that filters assets based on their access management mode
|
|
@@ -4678,13 +4677,12 @@ const GetFleetRentalCustomerParentNameSummaryMissingDocument = {
|
|
|
4678
4677
|
],
|
|
4679
4678
|
};
|
|
4680
4679
|
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
})(exports.AssetActivityState || (exports.AssetActivityState = {}));
|
|
4680
|
+
const AssetActivityState = {
|
|
4681
|
+
Idling: "IDLING",
|
|
4682
|
+
Stopped: "STOPPED",
|
|
4683
|
+
Unknown: "UNKNOWN",
|
|
4684
|
+
Working: "WORKING",
|
|
4685
|
+
};
|
|
4688
4686
|
/**
|
|
4689
4687
|
* Maps the activity state to a label id
|
|
4690
4688
|
*
|
|
@@ -4693,13 +4691,13 @@ exports.AssetActivityState = void 0;
|
|
|
4693
4691
|
*/
|
|
4694
4692
|
const mapActivityToLabelId = (state) => {
|
|
4695
4693
|
switch (state) {
|
|
4696
|
-
case
|
|
4694
|
+
case AssetActivityState.Working:
|
|
4697
4695
|
return "assetFilters.activityFilter.working";
|
|
4698
|
-
case
|
|
4696
|
+
case AssetActivityState.Idling:
|
|
4699
4697
|
return "assetFilters.activityFilter.idling";
|
|
4700
|
-
case
|
|
4698
|
+
case AssetActivityState.Stopped:
|
|
4701
4699
|
return "assetFilters.activityFilter.stopped";
|
|
4702
|
-
case
|
|
4700
|
+
case AssetActivityState.Unknown:
|
|
4703
4701
|
return "assetFilters.activityFilter.unknown";
|
|
4704
4702
|
default:
|
|
4705
4703
|
return "assetFilters.activityFilter.unknown";
|
|
@@ -4727,28 +4725,28 @@ const ActivityFiltersView = ({ filterBarActions, filterDefinition, filterState,
|
|
|
4727
4725
|
const activity = data?.assetSummary?.activity;
|
|
4728
4726
|
return (jsxRuntime.jsx(filtersFilterBar.DefaultCheckboxFilter, { filterBarActions: filterBarActions, filterDefinition: filterDefinition, filterState: filterState, loading: loading, options: [
|
|
4729
4727
|
{
|
|
4730
|
-
key:
|
|
4728
|
+
key: AssetActivityState.Working,
|
|
4731
4729
|
label: t("assetFilters.activityFilter.working"),
|
|
4732
4730
|
count: activity?.working,
|
|
4733
|
-
prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state:
|
|
4731
|
+
prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: AssetActivityState.Working, withBackground: false, withLabel: false }),
|
|
4734
4732
|
},
|
|
4735
4733
|
{
|
|
4736
|
-
key:
|
|
4734
|
+
key: AssetActivityState.Idling,
|
|
4737
4735
|
label: t("assetFilters.activityFilter.idling"),
|
|
4738
4736
|
count: activity?.idling,
|
|
4739
|
-
prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state:
|
|
4737
|
+
prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: AssetActivityState.Idling, withBackground: false, withLabel: false }),
|
|
4740
4738
|
},
|
|
4741
4739
|
{
|
|
4742
|
-
key:
|
|
4740
|
+
key: AssetActivityState.Stopped,
|
|
4743
4741
|
label: t("assetFilters.activityFilter.stopped"),
|
|
4744
4742
|
count: activity?.stopped,
|
|
4745
|
-
prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state:
|
|
4743
|
+
prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: AssetActivityState.Stopped, withBackground: false, withLabel: false }),
|
|
4746
4744
|
},
|
|
4747
4745
|
{
|
|
4748
|
-
key:
|
|
4746
|
+
key: AssetActivityState.Unknown,
|
|
4749
4747
|
label: t("assetFilters.activityFilter.unknown"),
|
|
4750
4748
|
count: activity?.unknown,
|
|
4751
|
-
prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state:
|
|
4749
|
+
prefix: jsxRuntime.jsx(utilizationIndicator.ActivityIndicator, { state: AssetActivityState.Unknown, withBackground: false, withLabel: false }),
|
|
4752
4750
|
},
|
|
4753
4751
|
], setValue: setValue, value: value }));
|
|
4754
4752
|
};
|
|
@@ -5024,6 +5022,8 @@ const assetTypeConst = {
|
|
|
5024
5022
|
VEHICLE: "VEHICLE",
|
|
5025
5023
|
};
|
|
5026
5024
|
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(
|
|
5084
|
+
valueAsText: values => values.map(value => t(mapAssetTypeToLabelId(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 ? (config.read(data) ?? []) : [];
|
|
5726
|
+
const items = data !== undefined && data !== null ? (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(
|
|
5852
|
+
.filter(sharedUtils.nonNullable)
|
|
5853
5853
|
.sort((a, b) => a.label.localeCompare(b.label));
|
|
5854
5854
|
finalRootOptions.forEach(option => assignLevelAndSort(option, 0));
|
|
5855
5855
|
return finalRootOptions;
|
|
@@ -5864,13 +5864,15 @@ 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} A customer ID filter component for rendering in the UI.
|
|
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.
|
|
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
|
-
|
|
5873
|
-
|
|
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 }));
|
|
5874
5876
|
};
|
|
5875
5877
|
/**
|
|
5876
5878
|
* Custom hook to create and configure a customer IDs filter definition.
|
|
@@ -6305,7 +6307,7 @@ const GroupIdsFilterView = (props) => {
|
|
|
6305
6307
|
read: asGroupConnectionNode,
|
|
6306
6308
|
toOption: node => ({
|
|
6307
6309
|
key: node.group?.groupId || "unknown",
|
|
6308
|
-
count: node.count
|
|
6310
|
+
count: node.count ?? 0,
|
|
6309
6311
|
label: node.group?.name || t("machine.types.Unknown"),
|
|
6310
6312
|
}),
|
|
6311
6313
|
},
|
|
@@ -6714,7 +6716,7 @@ const InspectionTemplateAssignedFilter = (props) => {
|
|
|
6714
6716
|
* Inspection template assigned filter definition. Applied to results via
|
|
6715
6717
|
* `AssetFiltersInput.inspectionTemplateAssigned` (see `useActiveAssetFilters`).
|
|
6716
6718
|
*/
|
|
6717
|
-
const useInspectionTemplateAssignedFilter = ({ isDefault } = {}) => {
|
|
6719
|
+
const useInspectionTemplateAssignedFilter = ({ isDefault, } = {}) => {
|
|
6718
6720
|
const [t] = useTranslation();
|
|
6719
6721
|
const result = react.useMemo(() => {
|
|
6720
6722
|
return {
|
|
@@ -6817,7 +6819,7 @@ const LastInspectionResultFiltersView = (props) => {
|
|
|
6817
6819
|
* @param root0.isDefault - When true, include in default filter bar configuration
|
|
6818
6820
|
* @returns {StringArrayFilterDefinition} Filter definition for the asset filter bar
|
|
6819
6821
|
*/
|
|
6820
|
-
const useLastInspectionResultFilter = ({ isDefault } = {}) => {
|
|
6822
|
+
const useLastInspectionResultFilter = ({ isDefault, } = {}) => {
|
|
6821
6823
|
const [t] = useTranslation();
|
|
6822
6824
|
const result = react.useMemo(() => {
|
|
6823
6825
|
return {
|
|
@@ -6906,7 +6908,7 @@ const LastPerformedInspectionFilterView = (props) => {
|
|
|
6906
6908
|
* `inspectionLastFilters.performed` (see `useActiveAssetFilters`); the schema exposes no
|
|
6907
6909
|
* per-time-bucket summary, so options render without counts.
|
|
6908
6910
|
*/
|
|
6909
|
-
const useLastPerformedInspectionFilter = ({ isDefault } = {}) => {
|
|
6911
|
+
const useLastPerformedInspectionFilter = ({ isDefault, } = {}) => {
|
|
6910
6912
|
const [t] = useTranslation();
|
|
6911
6913
|
const result = react.useMemo(() => {
|
|
6912
6914
|
return {
|
|
@@ -6923,14 +6925,13 @@ const useLastPerformedInspectionFilter = ({ isDefault } = {}) => {
|
|
|
6923
6925
|
};
|
|
6924
6926
|
|
|
6925
6927
|
/** The time the asset was last seen. */
|
|
6926
|
-
|
|
6927
|
-
|
|
6928
|
-
|
|
6929
|
-
|
|
6930
|
-
|
|
6931
|
-
|
|
6932
|
-
|
|
6933
|
-
})(exports.AssetLastSeen || (exports.AssetLastSeen = {}));
|
|
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
|
+
};
|
|
6934
6935
|
/**
|
|
6935
6936
|
* Represents the view component for the "Last Seen" filter.
|
|
6936
6937
|
*
|
|
@@ -6947,7 +6948,7 @@ const LastSeenFiltersView = (props) => {
|
|
|
6947
6948
|
});
|
|
6948
6949
|
props.setValue(() => value);
|
|
6949
6950
|
};
|
|
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:
|
|
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 })] }) })] }));
|
|
6951
6952
|
};
|
|
6952
6953
|
/**
|
|
6953
6954
|
*
|
|
@@ -6961,19 +6962,19 @@ const useLastSeenFilter = () => {
|
|
|
6961
6962
|
group: "STATUS",
|
|
6962
6963
|
title: t("fleetlist.column.lastSeen"),
|
|
6963
6964
|
valueAsText: value => {
|
|
6964
|
-
if (value ===
|
|
6965
|
+
if (value === AssetLastSeen.LastHour) {
|
|
6965
6966
|
return t("assetFilters.lastSeenFilter.lastHour");
|
|
6966
6967
|
}
|
|
6967
|
-
else if (value ===
|
|
6968
|
+
else if (value === AssetLastSeen.Last_24Hours) {
|
|
6968
6969
|
return t("assetFilters.lastSeenFilter.last24Hours");
|
|
6969
6970
|
}
|
|
6970
|
-
else if (value ===
|
|
6971
|
+
else if (value === AssetLastSeen.Last_7Days) {
|
|
6971
6972
|
return t("assetFilters.lastSeenFilter.last7Days");
|
|
6972
6973
|
}
|
|
6973
|
-
else if (value ===
|
|
6974
|
+
else if (value === AssetLastSeen.Last_30Days) {
|
|
6974
6975
|
return t("assetFilters.lastSeenFilter.last30Days");
|
|
6975
6976
|
}
|
|
6976
|
-
else if (value ===
|
|
6977
|
+
else if (value === AssetLastSeen.OlderThan_30Days) {
|
|
6977
6978
|
return t("assetFilters.lastSeenFilter.olderThan30Days");
|
|
6978
6979
|
}
|
|
6979
6980
|
else {
|
|
@@ -7052,7 +7053,7 @@ const MetadataCompletenessFilterView = (props) => {
|
|
|
7052
7053
|
/**
|
|
7053
7054
|
* MetadataCompleteness filter definition
|
|
7054
7055
|
*/
|
|
7055
|
-
const useMetadataCompletenessFilter = ({ isDefault } = {}) => {
|
|
7056
|
+
const useMetadataCompletenessFilter = ({ isDefault, } = {}) => {
|
|
7056
7057
|
const [t] = useTranslation();
|
|
7057
7058
|
const result = react.useMemo(() => {
|
|
7058
7059
|
return {
|
|
@@ -7210,9 +7211,16 @@ const useFreeTextRecentSearches = ({ recentSearches, setRecentSearches, }) => {
|
|
|
7210
7211
|
// 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
|
|
7211
7212
|
const FreeTextRecentSearchesFilterView = ({ filterBarActions, filterState, filterDefinition, localStorageKey, searchPlaceholder, }) => {
|
|
7212
7213
|
const [t] = useTranslation();
|
|
7213
|
-
const
|
|
7214
|
+
const filterKey = filterDefinition?.filterKey;
|
|
7215
|
+
const filterValue = filterKey ? String(filterState.values[filterKey]) : undefined;
|
|
7214
7216
|
const [searchString, setSearchString] = react.useState(filterValue ?? "");
|
|
7215
|
-
const
|
|
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
|
+
}
|
|
7216
7224
|
const { clientSideUserId } = reactCoreHooks.useCurrentUser();
|
|
7217
7225
|
reactComponents.useDebounce(searchString, {
|
|
7218
7226
|
delay: 500,
|
|
@@ -7223,19 +7231,11 @@ const FreeTextRecentSearchesFilterView = ({ filterBarActions, filterState, filte
|
|
|
7223
7231
|
apply({ value: debouncedSearchString, setRecent: false });
|
|
7224
7232
|
},
|
|
7225
7233
|
});
|
|
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}-${
|
|
7236
|
+
key: `${localStorageKey}-${filterKey}-free-text-filter-recent-searches-${clientSideUserId}`,
|
|
7237
7237
|
schema: zod.z.array(zod.z.string()),
|
|
7238
|
-
}), [localStorageKey,
|
|
7238
|
+
}), [localStorageKey, 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 (
|
|
7249
|
-
filterBarActions.setStringValue(
|
|
7248
|
+
if (filterKey) {
|
|
7249
|
+
filterBarActions.setStringValue(filterKey, value);
|
|
7250
7250
|
}
|
|
7251
|
-
}, [
|
|
7252
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(filtersFilterBar.FilterHeader, { ...filterDefinition, ...filterBarActions, filterHasChanges: filterBarActions.appliedFilterKeys().includes(
|
|
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: {
|
|
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
|
|
7374
|
+
count: node.count ?? 0,
|
|
7375
7375
|
label: node.ownerAccount?.name || t("machine.types.Unknown"),
|
|
7376
7376
|
}),
|
|
7377
7377
|
},
|
|
@@ -7428,25 +7428,24 @@ const usePartnerFilter = () => {
|
|
|
7428
7428
|
return result;
|
|
7429
7429
|
};
|
|
7430
7430
|
|
|
7431
|
-
|
|
7432
|
-
|
|
7433
|
-
|
|
7434
|
-
|
|
7435
|
-
|
|
7436
|
-
|
|
7437
|
-
|
|
7438
|
-
})(exports.DayPeriod || (exports.DayPeriod = {}));
|
|
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
|
+
};
|
|
7439
7438
|
const dayPeriodToTranslationKey = (value) => {
|
|
7440
7439
|
switch (value) {
|
|
7441
|
-
case
|
|
7440
|
+
case DayPeriod.LAST_24_HOURS:
|
|
7442
7441
|
return "assetFilters.periodFilter.LAST_24_HOURS";
|
|
7443
|
-
case
|
|
7442
|
+
case DayPeriod.LAST_7_DAYS:
|
|
7444
7443
|
return "assetFilters.periodFilter.LAST_7_DAYS";
|
|
7445
|
-
case
|
|
7444
|
+
case DayPeriod.LAST_30_DAYS:
|
|
7446
7445
|
return "assetFilters.periodFilter.LAST_30_DAYS";
|
|
7447
|
-
case
|
|
7446
|
+
case DayPeriod.LIFETIME:
|
|
7448
7447
|
return "assetFilters.periodFilter.LIFETIME";
|
|
7449
|
-
case
|
|
7448
|
+
case DayPeriod.LAST_YEAR:
|
|
7450
7449
|
return "assetFilters.periodFilter.LAST_YEAR";
|
|
7451
7450
|
default:
|
|
7452
7451
|
return sharedUtils.exhaustiveCheck(value);
|
|
@@ -7472,7 +7471,7 @@ const PeriodFilterView = (props) => {
|
|
|
7472
7471
|
});
|
|
7473
7472
|
props.setValue(() => value);
|
|
7474
7473
|
};
|
|
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:
|
|
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 })] }))] }) })] }));
|
|
7476
7475
|
};
|
|
7477
7476
|
/**
|
|
7478
7477
|
*
|
|
@@ -7487,21 +7486,21 @@ const usePeriodFilter = () => {
|
|
|
7487
7486
|
title: t("assetFilters.periodFilter.label"),
|
|
7488
7487
|
valueAsText: value => {
|
|
7489
7488
|
switch (value) {
|
|
7490
|
-
case
|
|
7489
|
+
case DayPeriod.LAST_24_HOURS:
|
|
7491
7490
|
return t("assetFilters.periodFilter.LAST_24_HOURS");
|
|
7492
|
-
case
|
|
7491
|
+
case DayPeriod.LAST_7_DAYS:
|
|
7493
7492
|
return t("assetFilters.periodFilter.LAST_7_DAYS");
|
|
7494
|
-
case
|
|
7493
|
+
case DayPeriod.LAST_30_DAYS:
|
|
7495
7494
|
return t("assetFilters.periodFilter.LAST_30_DAYS");
|
|
7496
|
-
case
|
|
7495
|
+
case DayPeriod.LIFETIME:
|
|
7497
7496
|
return t("assetFilters.periodFilter.LIFETIME");
|
|
7498
|
-
case
|
|
7497
|
+
case DayPeriod.LAST_YEAR:
|
|
7499
7498
|
return t(dayPeriodToTranslationKey(value));
|
|
7500
7499
|
default:
|
|
7501
7500
|
return "";
|
|
7502
7501
|
}
|
|
7503
7502
|
},
|
|
7504
|
-
defaultValue:
|
|
7503
|
+
defaultValue: DayPeriod.LAST_7_DAYS,
|
|
7505
7504
|
component: props => jsxRuntime.jsx(PeriodFilterView, { ...props }),
|
|
7506
7505
|
};
|
|
7507
7506
|
}, [t]);
|
|
@@ -7834,9 +7833,17 @@ const SearchFilterInline = ({ filterBarActions, filterState, filterDefinition, l
|
|
|
7834
7833
|
const { logEvent } = reactCoreHooks.useAnalytics(filtersFilterBar.FilterEvents);
|
|
7835
7834
|
const [t] = useTranslation();
|
|
7836
7835
|
const { geometry, ref: searchElementRef } = reactComponents.useMeasure();
|
|
7837
|
-
const
|
|
7836
|
+
const filterKey = filterDefinition?.filterKey;
|
|
7837
|
+
const filterValue = filterKey ? String(filterState.values[filterKey]) : undefined;
|
|
7838
7838
|
const [searchString, setSearchString] = react.useState(filterValue ?? "");
|
|
7839
|
-
const
|
|
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
|
+
}
|
|
7840
7847
|
const { clientSideUserId } = reactCoreHooks.useCurrentUser();
|
|
7841
7848
|
reactComponents.useDebounce(searchString, {
|
|
7842
7849
|
delay: 500,
|
|
@@ -7847,20 +7854,11 @@ const SearchFilterInline = ({ filterBarActions, filterState, filterDefinition, l
|
|
|
7847
7854
|
apply({ value: debouncedSearchString, setRecent: false });
|
|
7848
7855
|
},
|
|
7849
7856
|
});
|
|
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]);
|
|
7859
7857
|
const localStorageProps = react.useMemo(() => ({
|
|
7860
7858
|
defaultState: [],
|
|
7861
|
-
key: `${localStorageKey}-${
|
|
7859
|
+
key: `${localStorageKey}-${filterKey}-free-text-filter-recent-searches-${clientSideUserId}`,
|
|
7862
7860
|
schema: searchStringSchema,
|
|
7863
|
-
}), [localStorageKey,
|
|
7861
|
+
}), [localStorageKey, filterKey, clientSideUserId]);
|
|
7864
7862
|
const [recentSearches, setRecentSearches] = reactComponents.useLocalStorage(localStorageProps);
|
|
7865
7863
|
const apply = react.useCallback(({ value, wasPreviousSearch = false, setRecent = true }) => {
|
|
7866
7864
|
if (setRecent !== false) {
|
|
@@ -7877,10 +7875,10 @@ const SearchFilterInline = ({ filterBarActions, filterState, filterDefinition, l
|
|
|
7877
7875
|
wasPreviousSearch: Boolean(wasPreviousSearch),
|
|
7878
7876
|
},
|
|
7879
7877
|
});
|
|
7880
|
-
if (
|
|
7881
|
-
filterBarActions.setStringValue(
|
|
7878
|
+
if (filterKey) {
|
|
7879
|
+
filterBarActions.setStringValue(filterKey, value);
|
|
7882
7880
|
}
|
|
7883
|
-
}, [
|
|
7881
|
+
}, [filterKey, filterBarActions, logEvent, setRecentSearches]);
|
|
7884
7882
|
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
|
|
7885
7883
|
//TODO: [Buss] remove height restriction once baseinput sizes matches buttons
|
|
7886
7884
|
, {
|
|
@@ -8113,13 +8111,12 @@ const useSiteIdsFilter = (props) => {
|
|
|
8113
8111
|
};
|
|
8114
8112
|
|
|
8115
8113
|
/** The states of a site */
|
|
8116
|
-
|
|
8117
|
-
|
|
8118
|
-
|
|
8119
|
-
|
|
8120
|
-
|
|
8121
|
-
|
|
8122
|
-
})(exports.SiteStatus || (exports.SiteStatus = {}));
|
|
8114
|
+
const SiteStatus = {
|
|
8115
|
+
Active: "ACTIVE",
|
|
8116
|
+
Archived: "ARCHIVED",
|
|
8117
|
+
Finished: "FINISHED",
|
|
8118
|
+
Planned: "PLANNED",
|
|
8119
|
+
};
|
|
8123
8120
|
/**
|
|
8124
8121
|
* A component that renders a checkbox filter view with site statuses.
|
|
8125
8122
|
*
|
|
@@ -8128,7 +8125,7 @@ exports.SiteStatus = void 0;
|
|
|
8128
8125
|
*/
|
|
8129
8126
|
const SiteStatusFilterView = (props) => {
|
|
8130
8127
|
const [t] = useTranslation();
|
|
8131
|
-
const shownStatus = [
|
|
8128
|
+
const shownStatus = [SiteStatus.Active, SiteStatus.Planned, SiteStatus.Finished, SiteStatus.Archived];
|
|
8132
8129
|
return (jsxRuntime.jsx(filtersFilterBar.DefaultCheckboxFilter, { ...props, options: shownStatus.map(value => ({
|
|
8133
8130
|
key: value,
|
|
8134
8131
|
label: t(mapSiteStatusToLabelId(value)),
|
|
@@ -8136,16 +8133,16 @@ const SiteStatusFilterView = (props) => {
|
|
|
8136
8133
|
};
|
|
8137
8134
|
const mapSiteStatusToLabelId = (status) => {
|
|
8138
8135
|
switch (status) {
|
|
8139
|
-
case
|
|
8140
|
-
case
|
|
8141
|
-
case
|
|
8142
|
-
case
|
|
8136
|
+
case SiteStatus.Active:
|
|
8137
|
+
case SiteStatus.Finished:
|
|
8138
|
+
case SiteStatus.Archived:
|
|
8139
|
+
case SiteStatus.Planned:
|
|
8143
8140
|
return `siteFilters.siteStatus.${status}`;
|
|
8144
8141
|
default:
|
|
8145
8142
|
return "siteFilters.siteStatus.unknown";
|
|
8146
8143
|
}
|
|
8147
8144
|
};
|
|
8148
|
-
const defaultValue = [
|
|
8145
|
+
const defaultValue = [SiteStatus.Active.valueOf()];
|
|
8149
8146
|
/**
|
|
8150
8147
|
* SiteStatus filter definition
|
|
8151
8148
|
*
|
|
@@ -8169,16 +8166,15 @@ const useSiteStatusFilter = (props) => {
|
|
|
8169
8166
|
};
|
|
8170
8167
|
|
|
8171
8168
|
/** The different types of a site for SFS */
|
|
8172
|
-
|
|
8173
|
-
|
|
8174
|
-
|
|
8175
|
-
|
|
8176
|
-
|
|
8177
|
-
|
|
8178
|
-
|
|
8179
|
-
|
|
8180
|
-
|
|
8181
|
-
})(exports.SiteTypeSFS || (exports.SiteTypeSFS = {}));
|
|
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
|
+
};
|
|
8182
8178
|
/**
|
|
8183
8179
|
* Sorts the site type summary array in the correct order
|
|
8184
8180
|
*
|
|
@@ -8187,13 +8183,13 @@ exports.SiteTypeSFS = void 0;
|
|
|
8187
8183
|
*/
|
|
8188
8184
|
const sortSiteTypeSummary = (arr) => {
|
|
8189
8185
|
const typeOrder = {
|
|
8190
|
-
[
|
|
8191
|
-
[
|
|
8192
|
-
[
|
|
8193
|
-
[
|
|
8194
|
-
[
|
|
8195
|
-
[
|
|
8196
|
-
[
|
|
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,
|
|
8197
8193
|
};
|
|
8198
8194
|
return [...arr].sort((a, b) => {
|
|
8199
8195
|
const typeA = typeOrder[a.key];
|
|
@@ -8226,13 +8222,13 @@ const SiteTypesFilterView = (props) => {
|
|
|
8226
8222
|
const key = summary.siteType;
|
|
8227
8223
|
if (key) {
|
|
8228
8224
|
output.push({
|
|
8229
|
-
key: sharedUtils.enumFromValue(key,
|
|
8225
|
+
key: sharedUtils.enumFromValue(key, SiteTypeSFS),
|
|
8230
8226
|
count: summary.count,
|
|
8231
8227
|
});
|
|
8232
8228
|
}
|
|
8233
8229
|
});
|
|
8234
8230
|
if (props.filterBarActions.getFilterBarName() !== "assetFilters") {
|
|
8235
|
-
return output.filter(SortSiteTypeSummary => SortSiteTypeSummary.key !==
|
|
8231
|
+
return output.filter(SortSiteTypeSummary => SortSiteTypeSummary.key !== SiteTypeSFS.NotOnSite);
|
|
8236
8232
|
}
|
|
8237
8233
|
return output;
|
|
8238
8234
|
}, [data?.assetSummary?.siteTypes.summary, props.filterBarActions]);
|
|
@@ -8274,13 +8270,13 @@ const useSiteTypeFilter = ({ showInFilterBar, persistValue, group } = {
|
|
|
8274
8270
|
};
|
|
8275
8271
|
const mapSiteTypeToLabelId = (type) => {
|
|
8276
8272
|
switch (type) {
|
|
8277
|
-
case
|
|
8278
|
-
case
|
|
8279
|
-
case
|
|
8280
|
-
case
|
|
8281
|
-
case
|
|
8282
|
-
case
|
|
8283
|
-
case
|
|
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:
|
|
8284
8280
|
return `siteFilters.siteType.${type}`;
|
|
8285
8281
|
default:
|
|
8286
8282
|
return "siteFilters.siteType.unknown";
|
|
@@ -8697,15 +8693,19 @@ const useDefaultAssetFilterBarDefinition = () => {
|
|
|
8697
8693
|
setupLibraryTranslations();
|
|
8698
8694
|
|
|
8699
8695
|
exports.ALL_TYPES = ALL_TYPES;
|
|
8696
|
+
exports.AccessManagementMode = AccessManagementMode;
|
|
8700
8697
|
exports.ActiveFilterFiltersView = ActiveFilterFiltersView;
|
|
8701
8698
|
exports.ActivityFiltersView = ActivityFiltersView;
|
|
8702
8699
|
exports.AreaView = AreaView;
|
|
8700
|
+
exports.AssetActivityState = AssetActivityState;
|
|
8703
8701
|
exports.AssetIdsFiltersView = AssetIdsFiltersView;
|
|
8702
|
+
exports.AssetLastSeen = AssetLastSeen;
|
|
8704
8703
|
exports.AssetTypesFilterView = AssetTypesFilterView;
|
|
8705
8704
|
exports.BrandFilterView = BrandFilterView;
|
|
8706
8705
|
exports.ClearItemButton = ClearItemButton;
|
|
8707
8706
|
exports.CriticalityFiltersView = CriticalityFiltersView;
|
|
8708
8707
|
exports.CustomerIdsFilterView = CustomerIdsFilterView;
|
|
8708
|
+
exports.DayPeriod = DayPeriod;
|
|
8709
8709
|
exports.FollowedFiltersView = FollowedFiltersView;
|
|
8710
8710
|
exports.FreeTextRecentSearchesFilterView = FreeTextRecentSearchesFilterView;
|
|
8711
8711
|
exports.GetFleetGroupSummaryConnectionDocument = GetFleetGroupSummaryConnectionDocument;
|
|
@@ -8739,7 +8739,9 @@ exports.SearchFilterInline = SearchFilterInline;
|
|
|
8739
8739
|
exports.ServicePanStatusesFiltersView = ServicePanStatusesFiltersView;
|
|
8740
8740
|
exports.SiteDepotOwnershipIdsFilterView = SiteDepotOwnershipIdsFilterView;
|
|
8741
8741
|
exports.SiteIdsFilterView = SiteIdsFilterView;
|
|
8742
|
+
exports.SiteStatus = SiteStatus;
|
|
8742
8743
|
exports.SiteStatusFilterView = SiteStatusFilterView;
|
|
8744
|
+
exports.SiteTypeSFS = SiteTypeSFS;
|
|
8743
8745
|
exports.SiteTypesFilterView = SiteTypesFilterView;
|
|
8744
8746
|
exports.TelematicsConnectedFiltersView = TelematicsConnectedFiltersView;
|
|
8745
8747
|
exports.TypesFilterView = TypesFilterView;
|