@leav/ui 1.13.0-6f2d667e → 1.13.0-95c8de41
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/dist/_gqlTypes/index.d.ts +224 -72
- package/dist/_gqlTypes/index.js +143 -61
- package/dist/_gqlTypes/index.js.map +1 -1
- package/dist/_queries/attributes/attributeDetailsFragment.js +3 -0
- package/dist/_queries/attributes/attributeDetailsFragment.js.map +1 -1
- package/dist/components/Explorer/Explorer.d.ts +5 -1
- package/dist/components/Explorer/Explorer.js +7 -0
- package/dist/components/Explorer/Explorer.js.map +1 -1
- package/dist/components/Explorer/_types.d.ts +6 -0
- package/dist/components/Explorer/_types.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.d.ts +8 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.js +34 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.d.ts +3 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js +12 -14
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/_types.d.ts +15 -3
- package/dist/components/Explorer/actions-mass/edit-attribute/_types.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.d.ts +13 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.js +47 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.d.ts +13 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.js +73 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js +14 -17
- package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.d.ts +23 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.js +68 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.js.map +1 -0
- package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js +16 -50
- package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js.map +1 -1
- package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js +6 -6
- package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js.map +1 -1
- package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.d.ts +7 -31
- package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.js +9 -20
- package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.js.map +1 -1
- package/dist/components/Explorer/useNotifyFiltersChange.d.ts +15 -0
- package/dist/components/Explorer/useNotifyFiltersChange.js +26 -0
- package/dist/components/Explorer/useNotifyFiltersChange.js.map +1 -0
- package/dist/components/Filters/_types.d.ts +14 -0
- package/dist/components/Filters/_types.js +2 -1
- package/dist/components/Filters/_types.js.map +1 -1
- package/dist/components/Filters/context/filtersReducer.d.ts +14 -1
- package/dist/components/Filters/context/filtersReducer.js +39 -8
- package/dist/components/Filters/context/filtersReducer.js.map +1 -1
- package/dist/components/Filters/filter-items/CommonFilterItem.js +4 -1
- package/dist/components/Filters/filter-items/CommonFilterItem.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/FilterDropDown.js +15 -3
- package/dist/components/Filters/filter-items/filter-type/FilterDropDown.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.d.ts +3 -1
- package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js +2 -2
- package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/_types.d.ts +3 -1
- package/dist/components/Filters/filter-items/filter-type/_types.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js +2 -3
- package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.d.ts +2 -4
- package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js +22 -16
- package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js +39 -83
- package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.d.ts +1 -0
- package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/tree/useTreeNodeSelection.d.ts +21 -0
- package/dist/components/Filters/filter-items/filter-type/tree/useTreeNodeSelection.js +85 -0
- package/dist/components/Filters/filter-items/filter-type/tree/useTreeNodeSelection.js.map +1 -0
- package/dist/components/Filters/filter-items/filter-type/tree/useTreePermissions.d.ts +8 -0
- package/dist/components/Filters/filter-items/filter-type/tree/useTreePermissions.js +40 -0
- package/dist/components/Filters/filter-items/filter-type/tree/useTreePermissions.js.map +1 -0
- package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.d.ts +2 -3
- package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.js +2 -3
- package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.d.ts +1 -1
- package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.js +3 -4
- package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.js.map +1 -1
- package/dist/components/Filters/filter-items/shared/EmptyValueCheckbox.js +1 -7
- package/dist/components/Filters/filter-items/shared/EmptyValueCheckbox.js.map +1 -1
- package/dist/components/Filters/prepareFiltersForRequest.js +37 -14
- package/dist/components/Filters/prepareFiltersForRequest.js.map +1 -1
- package/dist/components/Filters/useFilters.d.ts +312 -0
- package/dist/components/Filters/useTransformFilters.js +1 -0
- package/dist/components/Filters/useTransformFilters.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useDelayedLoading/index.d.ts +1 -0
- package/dist/hooks/useDelayedLoading/index.js +5 -0
- package/dist/hooks/useDelayedLoading/index.js.map +1 -0
- package/dist/hooks/useDelayedLoading/useDelayedLoading.d.ts +17 -0
- package/dist/hooks/useDelayedLoading/useDelayedLoading.js +54 -0
- package/dist/hooks/useDelayedLoading/useDelayedLoading.js.map +1 -0
- package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.d.ts +3 -1
- package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.d.ts +2 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.js +9 -0
- package/dist/hooks/useIFrameMessenger/messageHandlers.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/types.d.ts +21 -2
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +1 -0
- package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.js +29 -7
- package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.d.ts +14 -0
- package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.js +22 -0
- package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.js.map +1 -0
- package/dist/hooks/useIFrameMessengerClient/iFrameMessengerClientContext.d.ts +1 -0
- package/dist/hooks/useIFrameMessengerClient/useIFrameMessengerClient.d.ts +1 -0
- package/dist/locales/en/shared.json +3 -1
- package/dist/locales/fr/shared.json +3 -1
- package/package.json +2 -2
- package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.d.ts +0 -12
- package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.js +0 -24
- package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.js.map +0 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.d.ts +0 -13
- package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.js +0 -28
- package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.js.map +0 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
2
|
+
// This file is released under LGPL V3
|
|
3
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
const EDITION_MAPPING_INITIAL_STATE = { count: 0, mapping: [] };
|
|
6
|
+
const _isBucketMatchingFilter = (bucket, dependencyFilter) => bucket.dependenciesFilters?.some(filter => filter?.field === dependencyFilter.field && filter?.value === dependencyFilter.value) ?? false;
|
|
7
|
+
export const useEditionMappingState = () => {
|
|
8
|
+
const [editionMapping, setEditionMapping] = useState(EDITION_MAPPING_INITIAL_STATE);
|
|
9
|
+
const resetEditionMapping = () => setEditionMapping(EDITION_MAPPING_INITIAL_STATE);
|
|
10
|
+
const applyMappingChange = ({ before, after, occurrenceCount }) => {
|
|
11
|
+
setEditionMapping(current => before === after
|
|
12
|
+
? {
|
|
13
|
+
count: current.count - occurrenceCount,
|
|
14
|
+
mapping: [{ values: (current.mapping[0]?.values ?? []).filter(value => value.before !== before) }],
|
|
15
|
+
}
|
|
16
|
+
: {
|
|
17
|
+
count: current.count + occurrenceCount,
|
|
18
|
+
mapping: [
|
|
19
|
+
{
|
|
20
|
+
values: (current.mapping[0]?.values ?? [])
|
|
21
|
+
.filter(value => value.before !== before)
|
|
22
|
+
.concat([{ before, after }]),
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const applyMonoDependencyWorkflowChange = ({ before, after, occurrenceCount, dependencyFilter, }) => {
|
|
28
|
+
setEditionMapping(current => {
|
|
29
|
+
if (before === after) {
|
|
30
|
+
return {
|
|
31
|
+
count: current.count - occurrenceCount,
|
|
32
|
+
mapping: current.mapping.map(bucket => {
|
|
33
|
+
if (!_isBucketMatchingFilter(bucket, dependencyFilter)) {
|
|
34
|
+
return bucket;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
dependenciesFilters: [dependencyFilter],
|
|
38
|
+
values: (bucket.values ?? []).filter(value => value.before !== before),
|
|
39
|
+
};
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const hasExistingBucket = current.mapping.some(bucket => _isBucketMatchingFilter(bucket, dependencyFilter));
|
|
44
|
+
if (!hasExistingBucket) {
|
|
45
|
+
return {
|
|
46
|
+
count: current.count + occurrenceCount,
|
|
47
|
+
mapping: [...current.mapping, { dependenciesFilters: [dependencyFilter], values: [{ before, after }] }],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
count: current.count + occurrenceCount,
|
|
52
|
+
mapping: current.mapping.map(bucket => {
|
|
53
|
+
if (!_isBucketMatchingFilter(bucket, dependencyFilter)) {
|
|
54
|
+
return bucket;
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
dependenciesFilters: [dependencyFilter],
|
|
58
|
+
values: (bucket.values ?? [])
|
|
59
|
+
.filter(value => value.before !== before)
|
|
60
|
+
.concat([{ before, after }]),
|
|
61
|
+
};
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
editionMapping,
|
|
68
|
+
resetEditionMapping,
|
|
69
|
+
applyMappingChange,
|
|
70
|
+
applyMonoDependencyWorkflowChange,
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=useEditionMappingState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEditionMappingState.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useState} from 'react';\nimport {type RecordFilterInput, type SaveValueBulkMappingInput} from '_ui/_gqlTypes';\nimport {type SetAttributeMapping, type SetAttributeMappingWithDependency} from './_types';\n\ntype EditionMapping = {count: number; mapping: SaveValueBulkMappingInput[]};\n\nconst EDITION_MAPPING_INITIAL_STATE: EditionMapping = {count: 0, mapping: []};\n\nconst _isBucketMatchingFilter = (bucket: SaveValueBulkMappingInput, dependencyFilter: RecordFilterInput) =>\n bucket.dependenciesFilters?.some(\n filter => filter?.field === dependencyFilter.field && filter?.value === dependencyFilter.value,\n ) ?? false;\n\nexport const useEditionMappingState = () => {\n const [editionMapping, setEditionMapping] = useState<EditionMapping>(EDITION_MAPPING_INITIAL_STATE);\n\n const resetEditionMapping = () => setEditionMapping(EDITION_MAPPING_INITIAL_STATE);\n\n const applyMappingChange: SetAttributeMapping = ({before, after, occurrenceCount}) => {\n setEditionMapping(current =>\n before === after\n ? {\n count: current.count - occurrenceCount,\n mapping: [{values: (current.mapping[0]?.values ?? []).filter(value => value.before !== before)}],\n }\n : {\n count: current.count + occurrenceCount,\n mapping: [\n {\n values: (current.mapping[0]?.values ?? [])\n .filter(value => value.before !== before)\n .concat([{before, after}]),\n },\n ],\n },\n );\n };\n\n const applyMonoDependencyWorkflowChange: SetAttributeMappingWithDependency = ({\n before,\n after,\n occurrenceCount,\n dependencyFilter,\n }) => {\n setEditionMapping(current => {\n if (before === after) {\n return {\n count: current.count - occurrenceCount,\n mapping: current.mapping.map(bucket => {\n if (!_isBucketMatchingFilter(bucket, dependencyFilter)) {\n return bucket;\n }\n return {\n dependenciesFilters: [dependencyFilter],\n values: (bucket.values ?? []).filter(value => value.before !== before),\n };\n }),\n };\n }\n\n const hasExistingBucket = current.mapping.some(bucket => _isBucketMatchingFilter(bucket, dependencyFilter));\n\n if (!hasExistingBucket) {\n return {\n count: current.count + occurrenceCount,\n mapping: [...current.mapping, {dependenciesFilters: [dependencyFilter], values: [{before, after}]}],\n };\n }\n\n return {\n count: current.count + occurrenceCount,\n mapping: current.mapping.map(bucket => {\n if (!_isBucketMatchingFilter(bucket, dependencyFilter)) {\n return bucket;\n }\n return {\n dependenciesFilters: [dependencyFilter],\n values: (bucket.values ?? [])\n .filter(value => value.before !== before)\n .concat([{before, after}]),\n };\n }),\n };\n });\n };\n\n return {\n editionMapping,\n resetEditionMapping,\n applyMappingChange,\n applyMonoDependencyWorkflowChange,\n };\n};\n"]}
|
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
// This file is released under LGPL V3
|
|
3
3
|
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
4
|
import { useMassEditableAttributesQuery } from '../../../../_gqlTypes';
|
|
5
|
-
import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
|
|
6
5
|
export const useMassEditableAttributes = ({ libraryId }) => {
|
|
7
|
-
const { t } = useSharedTranslation();
|
|
8
6
|
const { data } = useMassEditableAttributesQuery({
|
|
9
7
|
variables: { libraryId },
|
|
10
8
|
skip: libraryId.length === 0,
|
|
@@ -13,24 +11,24 @@ export const useMassEditableAttributes = ({ libraryId }) => {
|
|
|
13
11
|
.map(treeAttribute => {
|
|
14
12
|
let dependencies = [];
|
|
15
13
|
if ('permissions_conf_dependent_values' in treeAttribute) {
|
|
16
|
-
dependencies = treeAttribute.permissions_conf_dependent_values?.dependenciesTreeAttributes ?? []
|
|
14
|
+
dependencies = (treeAttribute.permissions_conf_dependent_values?.dependenciesTreeAttributes ?? [])
|
|
15
|
+
.map(attribute => {
|
|
16
|
+
if ('linked_tree' in attribute && attribute.linked_tree?.libraries.length === 1) {
|
|
17
|
+
return {
|
|
18
|
+
id: attribute.id,
|
|
19
|
+
label: attribute.label,
|
|
20
|
+
linkedTreeLibraryId: attribute.linked_tree.libraries[0].library.id,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
})
|
|
25
|
+
// TODO: to be factorised as utility (replace .filter(Boolean) but with better TS support)
|
|
26
|
+
.filter((x) => x !== null);
|
|
17
27
|
}
|
|
18
28
|
const hasEmptyDependency = dependencies.length === 0;
|
|
19
29
|
const isSimpleWorkflow = dependencies.length === 1 && dependencies[0].id === treeAttribute.id;
|
|
20
30
|
const isMonoDependencyWorkflow = dependencies.length === 2 &&
|
|
21
31
|
dependencies.filter(attribute => attribute.id === treeAttribute.id).length === 1;
|
|
22
|
-
let treeNodes = [];
|
|
23
|
-
if ('tree_values' in treeAttribute) {
|
|
24
|
-
treeNodes =
|
|
25
|
-
treeAttribute.tree_values?.map(treeValue => ({
|
|
26
|
-
id: treeValue.node?.id ?? null,
|
|
27
|
-
label: treeValue.node?.record.whoAmI.label ??
|
|
28
|
-
treeValue.node?.record.id ??
|
|
29
|
-
t('explorer.massAction.editAttribute_value_undefined'),
|
|
30
|
-
color: treeValue.node?.record.whoAmI.color,
|
|
31
|
-
allowedDependentNodeIds: treeValue.allowedDependentValues?.map(({ nodeId }) => nodeId) ?? [],
|
|
32
|
-
})) ?? [];
|
|
33
|
-
}
|
|
34
32
|
return {
|
|
35
33
|
id: treeAttribute.id,
|
|
36
34
|
label: treeAttribute.label,
|
|
@@ -38,9 +36,8 @@ export const useMassEditableAttributes = ({ libraryId }) => {
|
|
|
38
36
|
hasEmptyDependency,
|
|
39
37
|
isSimpleWorkflow,
|
|
40
38
|
isMonoDependencyWorkflow,
|
|
41
|
-
treeNodes,
|
|
42
39
|
};
|
|
43
40
|
})
|
|
44
|
-
.filter(({ hasEmptyDependency, isSimpleWorkflow, isMonoDependencyWorkflow }) => hasEmptyDependency || isSimpleWorkflow
|
|
41
|
+
.filter(({ hasEmptyDependency, isSimpleWorkflow, isMonoDependencyWorkflow }) => hasEmptyDependency || isSimpleWorkflow || isMonoDependencyWorkflow) ?? []);
|
|
45
42
|
};
|
|
46
43
|
//# sourceMappingURL=useMassEditableAttributes.js.map
|
package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMassEditableAttributes.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,8BAA8B,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"useMassEditableAttributes.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,8BAA8B,EAAC,MAAM,eAAe,CAAC;AAG7D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EAAC,SAAS,EAAsB,EAA2B,EAAE;IACnG,MAAM,EAAC,IAAI,EAAC,GAAG,8BAA8B,CAAC;QAC1C,SAAS,EAAE,EAAC,SAAS,EAAC;QACtB,IAAI,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC;KAC/B,CAAC,CAAC;IAEH,OAAO,CACH,IAAI,EAAE,UAAU,EAAE,IAAI;SACjB,GAAG,CAAC,aAAa,CAAC,EAAE;QACjB,IAAI,YAAY,GAA0C,EAAE,CAAC;QAC7D,IAAI,mCAAmC,IAAI,aAAa,EAAE,CAAC;YACvD,YAAY,GAAG,CAAC,aAAa,CAAC,iCAAiC,EAAE,0BAA0B,IAAI,EAAE,CAAC;iBAC7F,GAAG,CAAC,SAAS,CAAC,EAAE;gBACb,IAAI,aAAa,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9E,OAAO;wBACH,EAAE,EAAE,SAAS,CAAC,EAAE;wBAChB,KAAK,EAAE,SAAS,CAAC,KAAK;wBACtB,mBAAmB,EAAE,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;qBACrE,CAAC;gBACN,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC;gBACF,0FAA0F;iBACzF,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;QACrD,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC;QAC9F,MAAM,wBAAwB,GAC1B,YAAY,CAAC,MAAM,KAAK,CAAC;YACzB,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QAErF,OAAO;YACH,EAAE,EAAE,aAAa,CAAC,EAAE;YACpB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,YAAY;YACZ,kBAAkB;YAClB,gBAAgB;YAChB,wBAAwB;SAC3B,CAAC;IACN,CAAC,CAAC;SACD,MAAM,CACH,CAAC,EAAC,kBAAkB,EAAE,gBAAgB,EAAE,wBAAwB,EAAC,EAAE,EAAE,CACjE,kBAAkB,IAAI,gBAAgB,IAAI,wBAAwB,CACzE,IAAI,EAAE,CACd,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useMassEditableAttributesQuery} from '_ui/_gqlTypes';\nimport {type MassEditableAttribute} from './_types';\n\nexport const useMassEditableAttributes = ({libraryId}: {libraryId: string}): MassEditableAttribute[] => {\n const {data} = useMassEditableAttributesQuery({\n variables: {libraryId},\n skip: libraryId.length === 0,\n });\n\n return (\n data?.attributes?.list\n .map(treeAttribute => {\n let dependencies: MassEditableAttribute['dependencies'] = [];\n if ('permissions_conf_dependent_values' in treeAttribute) {\n dependencies = (treeAttribute.permissions_conf_dependent_values?.dependenciesTreeAttributes ?? [])\n .map(attribute => {\n if ('linked_tree' in attribute && attribute.linked_tree?.libraries.length === 1) {\n return {\n id: attribute.id,\n label: attribute.label,\n linkedTreeLibraryId: attribute.linked_tree.libraries[0].library.id,\n };\n }\n return null;\n })\n // TODO: to be factorised as utility (replace .filter(Boolean) but with better TS support)\n .filter((x): x is NonNullable<typeof x> => x !== null);\n }\n\n const hasEmptyDependency = dependencies.length === 0;\n const isSimpleWorkflow = dependencies.length === 1 && dependencies[0].id === treeAttribute.id;\n const isMonoDependencyWorkflow =\n dependencies.length === 2 &&\n dependencies.filter(attribute => attribute.id === treeAttribute.id).length === 1;\n\n return {\n id: treeAttribute.id,\n label: treeAttribute.label,\n dependencies,\n hasEmptyDependency,\n isSimpleWorkflow,\n isMonoDependencyWorkflow,\n };\n })\n .filter(\n ({hasEmptyDependency, isSimpleWorkflow, isMonoDependencyWorkflow}) =>\n hasEmptyDependency || isSimpleWorkflow || isMonoDependencyWorkflow,\n ) ?? []\n );\n};\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type RecordFilterInput } from '../../../../_gqlTypes';
|
|
2
|
+
export declare const useTreeNodesCandidates: ({ attributeId, dependencyAttributeId, dependencyAttributeNodeId, libraryId, massSelectionFilters, }: {
|
|
3
|
+
attributeId: string;
|
|
4
|
+
dependencyAttributeId?: string;
|
|
5
|
+
dependencyAttributeNodeId?: string;
|
|
6
|
+
libraryId: string;
|
|
7
|
+
massSelectionFilters: RecordFilterInput[];
|
|
8
|
+
}) => {
|
|
9
|
+
candidateNodes: Array<{
|
|
10
|
+
currentNode: {
|
|
11
|
+
id: string | null;
|
|
12
|
+
label: string;
|
|
13
|
+
color?: string | null;
|
|
14
|
+
};
|
|
15
|
+
occurrenceCount: number;
|
|
16
|
+
allowedDependentValues: Array<{
|
|
17
|
+
id: string;
|
|
18
|
+
label: string;
|
|
19
|
+
color?: string | null;
|
|
20
|
+
}>;
|
|
21
|
+
}>;
|
|
22
|
+
loading: boolean;
|
|
23
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
2
|
+
// This file is released under LGPL V3
|
|
3
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
|
+
import { useTreeAttributeRemappingQuery } from '../../../../_gqlTypes';
|
|
5
|
+
import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
|
|
6
|
+
export const useTreeNodesCandidates = ({ attributeId, dependencyAttributeId, dependencyAttributeNodeId, libraryId, massSelectionFilters, }) => {
|
|
7
|
+
const { t } = useSharedTranslation();
|
|
8
|
+
const { data, loading } = useTreeAttributeRemappingQuery({
|
|
9
|
+
variables: {
|
|
10
|
+
attributeId,
|
|
11
|
+
libraryId,
|
|
12
|
+
recordFilters: massSelectionFilters,
|
|
13
|
+
attributeDependentValue: dependencyAttributeId
|
|
14
|
+
? {
|
|
15
|
+
attributeId: dependencyAttributeId,
|
|
16
|
+
nodeId: dependencyAttributeNodeId,
|
|
17
|
+
}
|
|
18
|
+
: undefined,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
const nodeOccurrences = (data?.listDistinctValues ?? []).map(treeOccurrence => ({
|
|
22
|
+
count: treeOccurrence.count,
|
|
23
|
+
treeNodeId: 'treeNode' in treeOccurrence && treeOccurrence.treeNode ? treeOccurrence.treeNode.id : null,
|
|
24
|
+
}));
|
|
25
|
+
const treeValuesRemappingTarget = data?.attributes?.list && data.attributes.list.length === 1 ? data.attributes.list[0] : null;
|
|
26
|
+
const remappableNodes = (treeValuesRemappingTarget?.tree_values ?? [])
|
|
27
|
+
.map(({ node }) => node)
|
|
28
|
+
.filter((x) => x !== null)
|
|
29
|
+
.map(node => ({
|
|
30
|
+
id: node.id,
|
|
31
|
+
label: node.record.whoAmI.label ?? '',
|
|
32
|
+
color: node.record.whoAmI.color,
|
|
33
|
+
}));
|
|
34
|
+
const candidateNodes = treeValuesRemappingTarget === null
|
|
35
|
+
? []
|
|
36
|
+
: nodeOccurrences
|
|
37
|
+
.map(occurrence => {
|
|
38
|
+
const treeValue = treeValuesRemappingTarget.tree_values?.find(({ node }) => (node?.id ?? null) === occurrence.treeNodeId);
|
|
39
|
+
if (!treeValue) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
currentNode: occurrence.treeNodeId === null
|
|
44
|
+
? {
|
|
45
|
+
id: null,
|
|
46
|
+
label: t('explorer.massAction.editAttribute_value_undefined'),
|
|
47
|
+
color: undefined,
|
|
48
|
+
}
|
|
49
|
+
: {
|
|
50
|
+
id: occurrence.treeNodeId,
|
|
51
|
+
label: treeValue.node?.record.whoAmI.label ?? '',
|
|
52
|
+
color: treeValue.node?.record.whoAmI.color,
|
|
53
|
+
},
|
|
54
|
+
occurrenceCount: occurrence.count,
|
|
55
|
+
allowedDependentValues: treeValue.allowedDependentValues == null
|
|
56
|
+
? remappableNodes
|
|
57
|
+
: treeValue.allowedDependentValues
|
|
58
|
+
.map(allowedValue => remappableNodes.find(({ id }) => id === allowedValue.nodeId) ?? null)
|
|
59
|
+
.filter((x) => x !== null),
|
|
60
|
+
};
|
|
61
|
+
})
|
|
62
|
+
.filter((x) => x !== null);
|
|
63
|
+
return {
|
|
64
|
+
candidateNodes,
|
|
65
|
+
loading,
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=useTreeNodesCandidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeNodesCandidates.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type RecordFilterInput, useTreeAttributeRemappingQuery} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\n\nexport const useTreeNodesCandidates = ({\n attributeId,\n dependencyAttributeId,\n dependencyAttributeNodeId,\n libraryId,\n massSelectionFilters,\n}: {\n attributeId: string;\n dependencyAttributeId?: string;\n dependencyAttributeNodeId?: string;\n libraryId: string;\n massSelectionFilters: RecordFilterInput[];\n}): {\n candidateNodes: Array<{\n currentNode: {\n id: string | null;\n label: string;\n color?: string | null;\n };\n occurrenceCount: number;\n allowedDependentValues: Array<{\n id: string;\n label: string;\n color?: string | null;\n }>;\n }>;\n loading: boolean;\n} => {\n const {t} = useSharedTranslation();\n\n const {data, loading} = useTreeAttributeRemappingQuery({\n variables: {\n attributeId,\n libraryId,\n recordFilters: massSelectionFilters,\n attributeDependentValue: dependencyAttributeId\n ? {\n attributeId: dependencyAttributeId,\n nodeId: dependencyAttributeNodeId,\n }\n : undefined,\n },\n });\n\n const nodeOccurrences = (data?.listDistinctValues ?? []).map(treeOccurrence => ({\n count: treeOccurrence.count,\n treeNodeId: 'treeNode' in treeOccurrence && treeOccurrence.treeNode ? treeOccurrence.treeNode.id : null,\n }));\n\n const treeValuesRemappingTarget =\n data?.attributes?.list && data.attributes.list.length === 1 ? data.attributes.list[0] : null;\n\n const remappableNodes = (treeValuesRemappingTarget?.tree_values ?? [])\n .map(({node}) => node)\n .filter((x): x is NonNullable<typeof x> => x !== null)\n .map(node => ({\n id: node.id,\n label: node.record.whoAmI.label ?? '',\n color: node.record.whoAmI.color,\n }));\n\n const candidateNodes =\n treeValuesRemappingTarget === null\n ? []\n : nodeOccurrences\n .map(occurrence => {\n const treeValue = treeValuesRemappingTarget.tree_values?.find(\n ({node}) => (node?.id ?? null) === occurrence.treeNodeId,\n );\n if (!treeValue) {\n return null;\n }\n\n return {\n currentNode:\n occurrence.treeNodeId === null\n ? {\n id: null,\n label: t('explorer.massAction.editAttribute_value_undefined'),\n color: undefined,\n }\n : {\n id: occurrence.treeNodeId,\n label: treeValue.node?.record.whoAmI.label ?? '',\n color: treeValue.node?.record.whoAmI.color,\n },\n occurrenceCount: occurrence.count,\n allowedDependentValues:\n treeValue.allowedDependentValues == null\n ? remappableNodes\n : treeValue.allowedDependentValues\n .map(\n allowedValue =>\n remappableNodes.find(({id}) => id === allowedValue.nodeId) ?? null,\n )\n .filter((x): x is NonNullable<typeof x> => x !== null),\n };\n })\n .filter((x): x is NonNullable<typeof x> => x !== null);\n\n return {\n candidateNodes,\n loading,\n };\n};\n"]}
|
|
@@ -5,7 +5,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
import { useEffect, useState } from 'react';
|
|
6
6
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
7
7
|
import { faEdit } from '@fortawesome/free-solid-svg-icons';
|
|
8
|
-
import { KitAlert,
|
|
8
|
+
import { KitAlert, KitNotification, KitSelect, KitSpace, KitTypography } from 'aristid-ds';
|
|
9
9
|
import { localizedTranslation } from '@leav/utils';
|
|
10
10
|
import { useSaveValueBulkMutation } from '../../../_gqlTypes';
|
|
11
11
|
import { useSharedTranslation } from '../../../hooks/useSharedTranslation';
|
|
@@ -15,7 +15,8 @@ import { MASS_SELECTION_ALL } from '../_constants';
|
|
|
15
15
|
import { EditTreeAttributeValuesMapping } from './edit-attribute/EditTreeAttributeValuesMapping';
|
|
16
16
|
import { EditAttributeMassActionModal } from './edit-attribute/EditAttributeMassActionModal';
|
|
17
17
|
import { useMassEditableAttributes } from './edit-attribute/useMassEditableAttributes';
|
|
18
|
-
|
|
18
|
+
import { EditMonoDependencyWorkflowTreeAttribute } from './edit-attribute/EditMonoDependencyWorkflowTreeAttribute';
|
|
19
|
+
import { useEditionMappingState } from './edit-attribute/useEditionMappingState';
|
|
19
20
|
export const useEditAttributeMassAction = ({ isEnabled, store: { view }, totalCount, }) => {
|
|
20
21
|
const { lang: availableLanguages } = useLang();
|
|
21
22
|
const { t } = useSharedTranslation();
|
|
@@ -24,16 +25,23 @@ export const useEditAttributeMassAction = ({ isEnabled, store: { view }, totalCo
|
|
|
24
25
|
const [massSelectionFilters, setMassSelectionFilters] = useState([]);
|
|
25
26
|
const editableAttributes = useMassEditableAttributes({ libraryId: view.libraryId });
|
|
26
27
|
const [selectedAttribute, setSelectedAttribute] = useState(null);
|
|
27
|
-
const [executeSaveValueBulk] = useSaveValueBulkMutation(
|
|
28
|
-
|
|
28
|
+
const [executeSaveValueBulk] = useSaveValueBulkMutation({
|
|
29
|
+
update(cache) {
|
|
30
|
+
// Without this evict, Apollo keeps stale listDistinctValues occurrences in cache,
|
|
31
|
+
// preventing a re-edit of the same attribute right after a previous (partial or full) bulk edit.
|
|
32
|
+
cache.evict({ fieldName: 'listDistinctValues' });
|
|
33
|
+
cache.gc();
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
const { editionMapping, resetEditionMapping, applyMappingChange, applyMonoDependencyWorkflowChange } = useEditionMappingState();
|
|
29
37
|
useEffect(() => {
|
|
30
|
-
|
|
38
|
+
resetEditionMapping();
|
|
31
39
|
}, [selectedAttribute]);
|
|
32
40
|
const _closeModal = () => {
|
|
33
41
|
setOpenModal(false);
|
|
34
42
|
setMassSelectionFilters([]);
|
|
35
43
|
setSelectedAttribute(null);
|
|
36
|
-
|
|
44
|
+
resetEditionMapping();
|
|
37
45
|
};
|
|
38
46
|
const bulkCount = view.massSelection === MASS_SELECTION_ALL ? totalCount : view.massSelection.length;
|
|
39
47
|
const _saveEditionMapping = () => {
|
|
@@ -81,7 +89,7 @@ export const useEditAttributeMassAction = ({ isEnabled, store: { view }, totalCo
|
|
|
81
89
|
callback: (_massSelectionFilter) => {
|
|
82
90
|
setMassSelectionFilters(_massSelectionFilter);
|
|
83
91
|
setSelectedAttribute(null);
|
|
84
|
-
|
|
92
|
+
resetEditionMapping();
|
|
85
93
|
setOpenModal(true);
|
|
86
94
|
},
|
|
87
95
|
},
|
|
@@ -91,49 +99,7 @@ export const useEditAttributeMassAction = ({ isEnabled, store: { view }, totalCo
|
|
|
91
99
|
})), onChange: (attributeId) => {
|
|
92
100
|
setSelectedAttribute(editableAttributes.find(attribute => attribute.id === attributeId));
|
|
93
101
|
} })] }), selectedAttribute != null &&
|
|
94
|
-
(selectedAttribute.hasEmptyDependency ? (_jsx(EditTreeAttributeValuesMapping, { libraryId: view.libraryId, attribute: selectedAttribute, massSelectionFilters: massSelectionFilters, setAttributeMapping: ({
|
|
95
|
-
setEditionMapping(before === after
|
|
96
|
-
? {
|
|
97
|
-
count: editionMapping.count - occurrenceCount,
|
|
98
|
-
mapping: [
|
|
99
|
-
{
|
|
100
|
-
values: (editionMapping.mapping[0]?.values ?? []).filter(value => value.before !== before),
|
|
101
|
-
},
|
|
102
|
-
],
|
|
103
|
-
}
|
|
104
|
-
: {
|
|
105
|
-
count: editionMapping.count + occurrenceCount,
|
|
106
|
-
mapping: [
|
|
107
|
-
{
|
|
108
|
-
values: (editionMapping.mapping[0]?.values ?? [])
|
|
109
|
-
.filter(value => value.before !== before)
|
|
110
|
-
.concat([{ before, after }]),
|
|
111
|
-
},
|
|
112
|
-
],
|
|
113
|
-
});
|
|
114
|
-
} })) : selectedAttribute.isSimpleWorkflow ? (_jsx(EditTreeAttributeValuesMapping, { libraryId: view.libraryId, attribute: selectedAttribute, massSelectionFilters: massSelectionFilters, setAttributeMapping: ({ before, after, occurrenceCount }) => {
|
|
115
|
-
setEditionMapping(before === after
|
|
116
|
-
? {
|
|
117
|
-
count: editionMapping.count - occurrenceCount,
|
|
118
|
-
mapping: [
|
|
119
|
-
{
|
|
120
|
-
values: (editionMapping.mapping[0]?.values ?? []).filter(value => value.before !== before),
|
|
121
|
-
},
|
|
122
|
-
],
|
|
123
|
-
}
|
|
124
|
-
: {
|
|
125
|
-
count: editionMapping.count + occurrenceCount,
|
|
126
|
-
mapping: [
|
|
127
|
-
{
|
|
128
|
-
values: (editionMapping.mapping[0]?.values ?? [])
|
|
129
|
-
.filter(value => value.before !== before)
|
|
130
|
-
.concat([{ before, after }]),
|
|
131
|
-
},
|
|
132
|
-
],
|
|
133
|
-
});
|
|
134
|
-
} })) : selectedAttribute.isMonoDependencyWorkflow ? (
|
|
135
|
-
/* TODO: */
|
|
136
|
-
_jsx(KitEmpty, { description: "WIP" })) : null)] })),
|
|
102
|
+
(selectedAttribute.hasEmptyDependency ? (_jsx(EditTreeAttributeValuesMapping, { libraryId: view.libraryId, attribute: selectedAttribute, massSelectionFilters: massSelectionFilters, setAttributeMapping: applyMappingChange })) : selectedAttribute.isSimpleWorkflow ? (_jsx(EditTreeAttributeValuesMapping, { libraryId: view.libraryId, attribute: selectedAttribute, massSelectionFilters: massSelectionFilters, setAttributeMapping: applyMappingChange })) : selectedAttribute.isMonoDependencyWorkflow ? (_jsx(EditMonoDependencyWorkflowTreeAttribute, { libraryId: view.libraryId, attribute: selectedAttribute, massSelectionFilters: massSelectionFilters, setAttributeMapping: applyMonoDependencyWorkflowChange })) : null)] })),
|
|
137
103
|
};
|
|
138
104
|
};
|
|
139
105
|
//# sourceMappingURL=useEditAttributeMassAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEditAttributeMassAction.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-mass/useEditAttributeMassAction.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useEffect, useState} from 'react';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faEdit} from '@fortawesome/free-solid-svg-icons';\nimport {KitAlert, KitEmpty, KitNotification, KitSelect, KitSpace, KitTypography} from 'aristid-ds';\nimport {localizedTranslation} from '@leav/utils';\nimport {type RecordFilterInput, type SaveValueBulkMappingInput, useSaveValueBulkMutation} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION} from '_ui/constants';\nimport {useLang} from '_ui/hooks';\nimport {MASS_SELECTION_ALL} from '../_constants';\nimport {type FeatureHook} from '../_types';\nimport {type IViewSettingsState} from '../manage-view-settings';\nimport {EditTreeAttributeValuesMapping} from './edit-attribute/EditTreeAttributeValuesMapping';\nimport {EditAttributeMassActionModal} from './edit-attribute/EditAttributeMassActionModal';\nimport {useMassEditableAttributes} from './edit-attribute/useMassEditableAttributes';\nimport {type MassEditableAttribute} from './edit-attribute/_types';\n\nconst EDITION_MAPPING_DEFAULT_VALUES = {count: 0, mapping: []};\n\nexport const useEditAttributeMassAction = ({\n isEnabled,\n store: {view},\n totalCount,\n}: FeatureHook<{\n store: {\n view: IViewSettingsState;\n };\n totalCount: number;\n}>) => {\n const {lang: availableLanguages} = useLang();\n const {t} = useSharedTranslation();\n\n const [openModal, setOpenModal] = useState(false);\n\n // Represent the current selection, used to apply modifications to correct records\n const [massSelectionFilters, setMassSelectionFilters] = useState<RecordFilterInput[]>([]);\n\n const editableAttributes = useMassEditableAttributes({libraryId: view.libraryId});\n\n const [selectedAttribute, setSelectedAttribute] = useState<MassEditableAttribute | null>(null);\n const [executeSaveValueBulk] = useSaveValueBulkMutation();\n const [editionMapping, setEditionMapping] = useState<{count: number; mapping: SaveValueBulkMappingInput[]}>(\n EDITION_MAPPING_DEFAULT_VALUES,\n );\n useEffect(() => {\n setEditionMapping(EDITION_MAPPING_DEFAULT_VALUES);\n }, [selectedAttribute]);\n\n const _closeModal = () => {\n setOpenModal(false);\n setMassSelectionFilters([]);\n setSelectedAttribute(null);\n setEditionMapping(EDITION_MAPPING_DEFAULT_VALUES);\n };\n\n const bulkCount = view.massSelection === MASS_SELECTION_ALL ? totalCount : view.massSelection.length;\n\n const _saveEditionMapping = () => {\n if (!selectedAttribute || editionMapping.count === 0) {\n return;\n }\n\n executeSaveValueBulk({\n variables: {\n libraryId: view.libraryId,\n recordsFilters: massSelectionFilters,\n attributeId: selectedAttribute.id,\n mapping: editionMapping.mapping,\n },\n }).catch(() => {\n KitAlert.error({\n showIcon: true,\n duration: ERROR_ALERT_DURATION,\n message: t('error.error_occurred'),\n description: t('explorer.massAction.editAttribute_submit_error'),\n closable: true,\n });\n });\n\n _closeModal();\n\n KitNotification.info({\n message: t('explorer.massAction.editAttribute_submit_notification_title'),\n description:\n t('explorer.massAction.editAttribute_submit_notification_description', {\n count: editionMapping.count,\n }) ?? undefined,\n duration: INFO_NOTIFICATION_DURATION,\n closable: true,\n });\n };\n\n // TODO: https://aristid.atlassian.net/browse/LEAVC-830\n if (!isEnabled || editableAttributes.length === 0) {\n return {\n editAttributeMassAction: null,\n editAttributeMassActionModal: null,\n };\n }\n\n return {\n editAttributeMassAction: {\n label: t('explorer.massAction.editAttribute'),\n icon: <FontAwesomeIcon icon={faEdit} />,\n deselectAll: false,\n callback: (_massSelectionFilter: RecordFilterInput[]) => {\n setMassSelectionFilters(_massSelectionFilter);\n setSelectedAttribute(null);\n setEditionMapping(EDITION_MAPPING_DEFAULT_VALUES);\n setOpenModal(true);\n },\n },\n editAttributeMassActionModal: (\n <EditAttributeMassActionModal\n isOpen={openModal}\n bulkCount={bulkCount}\n onOkButtonClick={_saveEditionMapping}\n onCancelButtonClick={_closeModal}\n >\n <KitSpace direction=\"vertical\" size=\"xxs\" style={{width: '100%'}}>\n <KitTypography.Text>\n {t('explorer.massAction.editAttribute_attribute_select_title')}\n </KitTypography.Text>\n <KitSelect\n size=\"large\"\n allowClear={false}\n placeholder={t('explorer.massAction.editAttribute_attribute_select_placeholder')}\n options={editableAttributes.map(attribute => ({\n label: localizedTranslation(attribute.label, availableLanguages),\n value: attribute.id,\n }))}\n onChange={(attributeId: string) => {\n setSelectedAttribute(editableAttributes.find(attribute => attribute.id === attributeId)!);\n }}\n />\n </KitSpace>\n {selectedAttribute != null &&\n (selectedAttribute.hasEmptyDependency ? (\n <EditTreeAttributeValuesMapping\n libraryId={view.libraryId}\n attribute={selectedAttribute}\n massSelectionFilters={massSelectionFilters}\n setAttributeMapping={({before, after, occurrenceCount}) => {\n setEditionMapping(\n before === after\n ? {\n count: editionMapping.count - occurrenceCount,\n mapping: [\n {\n values: (editionMapping.mapping[0]?.values ?? []).filter(\n value => value.before !== before,\n ),\n },\n ],\n }\n : {\n count: editionMapping.count + occurrenceCount,\n mapping: [\n {\n values: (editionMapping.mapping[0]?.values ?? [])\n .filter(value => value.before !== before)\n .concat([{before, after}]),\n },\n ],\n },\n );\n }}\n />\n ) : selectedAttribute.isSimpleWorkflow ? (\n <EditTreeAttributeValuesMapping\n libraryId={view.libraryId}\n attribute={selectedAttribute}\n massSelectionFilters={massSelectionFilters}\n setAttributeMapping={({before, after, occurrenceCount}) => {\n setEditionMapping(\n before === after\n ? {\n count: editionMapping.count - occurrenceCount,\n mapping: [\n {\n values: (editionMapping.mapping[0]?.values ?? []).filter(\n value => value.before !== before,\n ),\n },\n ],\n }\n : {\n count: editionMapping.count + occurrenceCount,\n mapping: [\n {\n values: (editionMapping.mapping[0]?.values ?? [])\n .filter(value => value.before !== before)\n .concat([{before, after}]),\n },\n ],\n },\n );\n }}\n />\n ) : selectedAttribute.isMonoDependencyWorkflow ? (\n /* TODO: */\n <KitEmpty description=\"WIP\" />\n ) : null)}\n </EditAttributeMassActionModal>\n ),\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"useEditAttributeMassAction.js","sourceRoot":"","sources":["../../../../src/components/Explorer/actions-mass/useEditAttributeMassAction.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useEffect, useState} from 'react';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faEdit} from '@fortawesome/free-solid-svg-icons';\nimport {KitAlert, KitNotification, KitSelect, KitSpace, KitTypography} from 'aristid-ds';\nimport {localizedTranslation} from '@leav/utils';\nimport {type RecordFilterInput, useSaveValueBulkMutation} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {ERROR_ALERT_DURATION, INFO_NOTIFICATION_DURATION} from '_ui/constants';\nimport {useLang} from '_ui/hooks';\nimport {MASS_SELECTION_ALL} from '../_constants';\nimport {type FeatureHook} from '../_types';\nimport {type IViewSettingsState} from '../manage-view-settings';\nimport {EditTreeAttributeValuesMapping} from './edit-attribute/EditTreeAttributeValuesMapping';\nimport {EditAttributeMassActionModal} from './edit-attribute/EditAttributeMassActionModal';\nimport {useMassEditableAttributes} from './edit-attribute/useMassEditableAttributes';\nimport {EditMonoDependencyWorkflowTreeAttribute} from './edit-attribute/EditMonoDependencyWorkflowTreeAttribute';\nimport {type MassEditableAttribute} from './edit-attribute/_types';\nimport {useEditionMappingState} from './edit-attribute/useEditionMappingState';\n\nexport const useEditAttributeMassAction = ({\n isEnabled,\n store: {view},\n totalCount,\n}: FeatureHook<{\n store: {\n view: IViewSettingsState;\n };\n totalCount: number;\n}>) => {\n const {lang: availableLanguages} = useLang();\n const {t} = useSharedTranslation();\n\n const [openModal, setOpenModal] = useState(false);\n\n // Represent the current selection, used to apply modifications to correct records\n const [massSelectionFilters, setMassSelectionFilters] = useState<RecordFilterInput[]>([]);\n\n const editableAttributes = useMassEditableAttributes({libraryId: view.libraryId});\n\n const [selectedAttribute, setSelectedAttribute] = useState<MassEditableAttribute | null>(null);\n const [executeSaveValueBulk] = useSaveValueBulkMutation({\n update(cache) {\n // Without this evict, Apollo keeps stale listDistinctValues occurrences in cache,\n // preventing a re-edit of the same attribute right after a previous (partial or full) bulk edit.\n cache.evict({fieldName: 'listDistinctValues'});\n cache.gc();\n },\n });\n const {editionMapping, resetEditionMapping, applyMappingChange, applyMonoDependencyWorkflowChange} =\n useEditionMappingState();\n\n useEffect(() => {\n resetEditionMapping();\n }, [selectedAttribute]);\n\n const _closeModal = () => {\n setOpenModal(false);\n setMassSelectionFilters([]);\n setSelectedAttribute(null);\n resetEditionMapping();\n };\n\n const bulkCount = view.massSelection === MASS_SELECTION_ALL ? totalCount : view.massSelection.length;\n\n const _saveEditionMapping = () => {\n if (!selectedAttribute || editionMapping.count === 0) {\n return;\n }\n\n executeSaveValueBulk({\n variables: {\n libraryId: view.libraryId,\n recordsFilters: massSelectionFilters,\n attributeId: selectedAttribute.id,\n mapping: editionMapping.mapping,\n },\n }).catch(() => {\n KitAlert.error({\n showIcon: true,\n duration: ERROR_ALERT_DURATION,\n message: t('error.error_occurred'),\n description: t('explorer.massAction.editAttribute_submit_error'),\n closable: true,\n });\n });\n\n _closeModal();\n\n KitNotification.info({\n message: t('explorer.massAction.editAttribute_submit_notification_title'),\n description:\n t('explorer.massAction.editAttribute_submit_notification_description', {\n count: editionMapping.count,\n }) ?? undefined,\n duration: INFO_NOTIFICATION_DURATION,\n closable: true,\n });\n };\n\n // TODO: https://aristid.atlassian.net/browse/LEAVC-830\n if (!isEnabled || editableAttributes.length === 0) {\n return {\n editAttributeMassAction: null,\n editAttributeMassActionModal: null,\n };\n }\n\n return {\n editAttributeMassAction: {\n label: t('explorer.massAction.editAttribute'),\n icon: <FontAwesomeIcon icon={faEdit} />,\n deselectAll: false,\n callback: (_massSelectionFilter: RecordFilterInput[]) => {\n setMassSelectionFilters(_massSelectionFilter);\n setSelectedAttribute(null);\n resetEditionMapping();\n setOpenModal(true);\n },\n },\n editAttributeMassActionModal: (\n <EditAttributeMassActionModal\n isOpen={openModal}\n bulkCount={bulkCount}\n onOkButtonClick={_saveEditionMapping}\n onCancelButtonClick={_closeModal}\n >\n <KitSpace direction=\"vertical\" size=\"xxs\" style={{width: '100%'}}>\n <KitTypography.Text>\n {t('explorer.massAction.editAttribute_attribute_select_title')}\n </KitTypography.Text>\n <KitSelect\n size=\"large\"\n allowClear={false}\n placeholder={t('explorer.massAction.editAttribute_attribute_select_placeholder')}\n options={editableAttributes.map(attribute => ({\n label: localizedTranslation(attribute.label, availableLanguages),\n value: attribute.id,\n }))}\n onChange={(attributeId: string) => {\n setSelectedAttribute(editableAttributes.find(attribute => attribute.id === attributeId)!);\n }}\n />\n </KitSpace>\n {selectedAttribute != null &&\n (selectedAttribute.hasEmptyDependency ? (\n <EditTreeAttributeValuesMapping\n libraryId={view.libraryId}\n attribute={selectedAttribute}\n massSelectionFilters={massSelectionFilters}\n setAttributeMapping={applyMappingChange}\n />\n ) : selectedAttribute.isSimpleWorkflow ? (\n <EditTreeAttributeValuesMapping\n libraryId={view.libraryId}\n attribute={selectedAttribute}\n massSelectionFilters={massSelectionFilters}\n setAttributeMapping={applyMappingChange}\n />\n ) : selectedAttribute.isMonoDependencyWorkflow ? (\n <EditMonoDependencyWorkflowTreeAttribute\n libraryId={view.libraryId}\n attribute={selectedAttribute}\n massSelectionFilters={massSelectionFilters}\n setAttributeMapping={applyMonoDependencyWorkflowChange}\n />\n ) : null)}\n </EditAttributeMassActionModal>\n ),\n };\n};\n"]}
|
|
@@ -6,7 +6,7 @@ import { AttributeFormat, AttributeType, } from '../../../../_gqlTypes';
|
|
|
6
6
|
import { closestCenter, DndContext, KeyboardSensor, PointerSensor, useSensor, useSensors, } from '@dnd-kit/core';
|
|
7
7
|
import { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from '@dnd-kit/sortable';
|
|
8
8
|
import { useAttributeDetailsData } from '../_shared/useAttributeDetailsData';
|
|
9
|
-
import {
|
|
9
|
+
import { FiltersActionTypes } from '../../../../components/Filters/context/filtersReducer';
|
|
10
10
|
import { FilterListItem } from './FilterListItem';
|
|
11
11
|
import { CommonFilterItem } from '../../../../components/Filters/filter-items/CommonFilterItem';
|
|
12
12
|
import { useFiltersContext } from '../../../../components/Filters/useFiltersContext';
|
|
@@ -40,7 +40,7 @@ export const FilterItems = ({ libraryId }) => {
|
|
|
40
40
|
}));
|
|
41
41
|
const addFilter = (attributeId) => () => {
|
|
42
42
|
dispatch({
|
|
43
|
-
type:
|
|
43
|
+
type: FiltersActionTypes.ADD_FILTER,
|
|
44
44
|
payload: {
|
|
45
45
|
field: attributeId,
|
|
46
46
|
attribute: {
|
|
@@ -55,8 +55,8 @@ export const FilterItems = ({ libraryId }) => {
|
|
|
55
55
|
linkedTree: _isLibraryTreeAttribute(attributeDetailsById[attributeId])
|
|
56
56
|
? (attributeDetailsById[attributeId].linked_tree ?? undefined)
|
|
57
57
|
: undefined,
|
|
58
|
-
smartFilter:
|
|
59
|
-
?
|
|
58
|
+
smartFilter: 'smart_filter' in attributeDetailsById[attributeId]
|
|
59
|
+
? attributeDetailsById[attributeId].smart_filter
|
|
60
60
|
: undefined,
|
|
61
61
|
},
|
|
62
62
|
},
|
|
@@ -64,7 +64,7 @@ export const FilterItems = ({ libraryId }) => {
|
|
|
64
64
|
};
|
|
65
65
|
const removeFilter = (filterId) => () => {
|
|
66
66
|
dispatch({
|
|
67
|
-
type:
|
|
67
|
+
type: FiltersActionTypes.REMOVE_FILTER,
|
|
68
68
|
payload: {
|
|
69
69
|
id: filterId,
|
|
70
70
|
},
|
|
@@ -76,7 +76,7 @@ export const FilterItems = ({ libraryId }) => {
|
|
|
76
76
|
if (!dropTarget || indexFrom === indexTo || indexTo === -1) {
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
|
-
dispatch({ type:
|
|
79
|
+
dispatch({ type: FiltersActionTypes.MOVE_FILTER, payload: { indexFrom, indexTo } });
|
|
80
80
|
};
|
|
81
81
|
const activeFilters = filters.filter(({ attribute }) => searchFilteredColumnsIds.includes(attribute.id));
|
|
82
82
|
const inactiveFilters = searchFilteredColumnsIds.filter(attributeId => filters.every(filterItem => filterItem.attribute.id !== attributeId) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterItems.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/manage-view-settings/filter-items/FilterItems.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent} from 'react';\nimport {KitFilter, KitInput, KitTypography} from 'aristid-ds';\nimport styled from 'styled-components';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {\n AttributeFormat,\n type AttributesByLibAttributeFragment,\n type AttributesByLibAttributeLinkAttributeFragment,\n type AttributesByLibAttributeTreeAttributeFragment,\n AttributeType,\n} from '_ui/_gqlTypes';\nimport {\n closestCenter,\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy} from '@dnd-kit/sortable';\nimport {useAttributeDetailsData} from '../_shared/useAttributeDetailsData';\nimport {ViewSettingsActionTypes} from '../store-view-settings/viewSettingsReducer';\nimport {FilterListItem} from './FilterListItem';\nimport {CommonFilterItem} from '_ui/components/Filters/filter-items/CommonFilterItem';\nimport {useFiltersContext} from '_ui/components/Filters/useFiltersContext';\nimport {type IUIFilterBaseAttribute, type UIFilter} from '_ui/components/Filters/_types';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faEye, faEyeSlash, faSearch} from '@fortawesome/free-solid-svg-icons';\n\nconst StyledListContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: calc(var(--general-spacing-l) * 1px);\n`;\n\nconst StyledList = styled.ul`\n padding: calc(var(--general-spacing-s) * 1px) 0;\n margin: 0;\n list-style: none;\n color: var(--general-utilities-text-primary);\n`;\n\nconst StyledEyeSlash = styled(FontAwesomeIcon)`\n color: var(--general-utilities-neutral-dark);\n`;\n\nconst StyledFaEye = styled(FontAwesomeIcon)`\n color: var(--general-utilities-neutral-deepDark);\n`;\n\nconst _isLibraryLinkAttribute = (\n attribute: AttributesByLibAttributeFragment,\n): attribute is AttributesByLibAttributeLinkAttributeFragment =>\n [AttributeType.simple_link, AttributeType.advanced_link].includes(attribute.type) && 'linked_library' in attribute;\n\nconst _isLibraryTreeAttribute = (\n attribute: AttributesByLibAttributeFragment,\n): attribute is AttributesByLibAttributeTreeAttributeFragment =>\n attribute.type === AttributeType.tree && 'linked_tree' in attribute;\n\nexport const FilterItems: FunctionComponent<{libraryId: string}> = ({libraryId}) => {\n const {t} = useSharedTranslation();\n const {\n filtersData: {filters},\n dispatch,\n } = useFiltersContext();\n\n const {onSearchChanged, searchFilteredColumnsIds, attributeDetailsById} = useAttributeDetailsData(libraryId);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const addFilter = (attributeId: string) => () => {\n dispatch({\n type: ViewSettingsActionTypes.ADD_FILTER,\n payload: {\n field: attributeId,\n attribute: {\n id: attributeId,\n label: attributeDetailsById[attributeId].label,\n format: attributeDetailsById[attributeId].format ?? AttributeFormat.text,\n type: attributeDetailsById[attributeId].type,\n valuesList: (attributeDetailsById[attributeId] as IUIFilterBaseAttribute).valuesList,\n linkedLibrary: _isLibraryLinkAttribute(attributeDetailsById[attributeId])\n ? (attributeDetailsById[attributeId].linked_library ?? undefined)\n : undefined, // TODO : https://aristid.atlassian.net/browse/XSTREAM-1155\n linkedTree: _isLibraryTreeAttribute(attributeDetailsById[attributeId])\n ? (attributeDetailsById[attributeId].linked_tree ?? undefined)\n : undefined,\n smartFilter: _isLibraryLinkAttribute(attributeDetailsById[attributeId])\n ? (attributeDetailsById[attributeId].smart_filter ?? undefined)\n : undefined,\n },\n },\n });\n };\n\n const removeFilter = (filterId: string) => () => {\n dispatch({\n type: ViewSettingsActionTypes.REMOVE_FILTER,\n payload: {\n id: filterId,\n },\n });\n };\n\n const _handleDragEnd = ({active: draggedElement, over: dropTarget}: DragEndEvent) => {\n const indexFrom = activeFilters.findIndex(({field}) =>\n Array.isArray(field) ? field.includes(String(draggedElement.id)) : field === String(draggedElement.id),\n );\n const indexTo = activeFilters.findIndex(({field}) =>\n Array.isArray(field) ? field.includes(String(dropTarget?.id)) : field === String(dropTarget?.id),\n );\n if (!dropTarget || indexFrom === indexTo || indexTo === -1) {\n return;\n }\n\n dispatch({type: ViewSettingsActionTypes.MOVE_FILTER, payload: {indexFrom, indexTo}});\n };\n\n const activeFilters = filters.filter(({attribute}) => searchFilteredColumnsIds.includes(attribute.id));\n const inactiveFilters = searchFilteredColumnsIds.filter(\n attributeId =>\n filters.every(filterItem => filterItem.attribute.id !== attributeId) &&\n !('compute' in attributeDetailsById[attributeId] && attributeDetailsById[attributeId]?.compute),\n );\n\n if (!Object.keys(attributeDetailsById).length) {\n return <></>;\n }\n\n return (\n <StyledListContainer>\n {activeFilters.length > 0 && (\n <StyledList aria-label={t('explorer.filter-list.active')}>\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={_handleDragEnd}>\n <SortableContext\n items={activeFilters.map(({attribute}) => attribute.id)}\n strategy={verticalListSortingStrategy}\n >\n {activeFilters.map(activeFilter => (\n <FilterListItem\n key={activeFilter.attribute.id}\n attributeId={activeFilter.attribute.id}\n isDraggable\n visibilityButtonProps={{\n icon: <StyledFaEye icon={faEye} />,\n title: String(t('explorer.hide')),\n onClick: removeFilter(activeFilter.id),\n }}\n >\n <CommonFilterItem\n filter={\n {\n ...activeFilter,\n attribute: {\n ...activeFilter.attribute,\n ...attributeDetailsById[activeFilter?.attribute?.id],\n },\n } as UIFilter\n }\n />\n </FilterListItem>\n ))}\n </SortableContext>\n </DndContext>\n </StyledList>\n )}\n <KitTypography.Title level=\"h4\">{t('explorer.available-attributes')}</KitTypography.Title>\n <KitInput\n placeholder={String(t('global.search'))}\n onChange={onSearchChanged}\n allowClear\n prefix={<FontAwesomeIcon icon={faSearch} />}\n />\n <StyledList aria-label={t('explorer.filter-list.inactive')}>\n {inactiveFilters.map(attributeId => (\n <FilterListItem\n key={attributeId}\n attributeId={attributeId}\n visibilityButtonProps={{\n icon: <StyledEyeSlash icon={faEyeSlash} />,\n title: String(t('explorer.show')),\n onClick: addFilter(attributeId),\n }}\n >\n <KitFilter label={attributeDetailsById[attributeId].label} />\n </FilterListItem>\n ))}\n </StyledList>\n </StyledListContainer>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"FilterItems.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/manage-view-settings/filter-items/FilterItems.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AAC9D,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EACH,eAAe,EAIf,aAAa,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,aAAa,EACb,UAAU,EAEV,cAAc,EACd,aAAa,EACb,SAAS,EACT,UAAU,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,eAAe,EAAE,2BAA2B,EAAE,2BAA2B,EAAC,MAAM,mBAAmB,CAAC;AAC5G,OAAO,EAAC,uBAAuB,EAAC,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,gBAAgB,EAAC,MAAM,sDAAsD,CAAC;AACtF,OAAO,EAAC,iBAAiB,EAAC,MAAM,0CAA0C,CAAC;AAE3E,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAC,MAAM,mCAAmC,CAAC;AAE9E,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;CAIrC,CAAC;AAEF,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAA;;;;;CAK3B,CAAC;AAEF,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;;CAE7C,CAAC;AAEF,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;;CAE1C,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC5B,SAA2C,EACe,EAAE,CAC5D,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,gBAAgB,IAAI,SAAS,CAAC;AAEvH,MAAM,uBAAuB,GAAG,CAC5B,SAA2C,EACe,EAAE,CAC5D,SAAS,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,aAAa,IAAI,SAAS,CAAC;AAExE,MAAM,CAAC,MAAM,WAAW,GAA2C,CAAC,EAAC,SAAS,EAAC,EAAE,EAAE;IAC/E,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,EACF,WAAW,EAAE,EAAC,OAAO,EAAC,EACtB,QAAQ,GACX,GAAG,iBAAiB,EAAE,CAAC;IAExB,MAAM,EAAC,eAAe,EAAE,wBAAwB,EAAE,oBAAoB,EAAC,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAE7G,MAAM,OAAO,GAAG,UAAU,CACtB,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CAAC,cAAc,EAAE;QACtB,gBAAgB,EAAE,2BAA2B;KAChD,CAAC,CACL,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,WAAmB,EAAE,EAAE,CAAC,GAAG,EAAE;QAC5C,QAAQ,CAAC;YACL,IAAI,EAAE,kBAAkB,CAAC,UAAU;YACnC,OAAO,EAAE;gBACL,KAAK,EAAE,WAAW;gBAClB,SAAS,EAAE;oBACP,EAAE,EAAE,WAAW;oBACf,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,KAAK;oBAC9C,MAAM,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,IAAI;oBACxE,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,IAAI;oBAC5C,UAAU,EAAG,oBAAoB,CAAC,WAAW,CAA4B,CAAC,UAAU;oBACpF,aAAa,EAAE,uBAAuB,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;wBACrE,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,cAAc,IAAI,SAAS,CAAC;wBACjE,CAAC,CAAC,SAAS,EAAE,2DAA2D;oBAC5E,UAAU,EAAE,uBAAuB,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;wBAClE,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC;wBAC9D,CAAC,CAAC,SAAS;oBACf,WAAW,EACP,cAAc,IAAI,oBAAoB,CAAC,WAAW,CAAC;wBAC/C,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,YAAY;wBAChD,CAAC,CAAC,SAAS;iBACtB;aACJ;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,GAAG,EAAE;QAC5C,QAAQ,CAAC;YACL,IAAI,EAAE,kBAAkB,CAAC,aAAa;YACtC,OAAO,EAAE;gBACL,EAAE,EAAE,QAAQ;aACf;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,EAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAe,EAAE,EAAE;QAChF,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAClD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CACzG,CAAC;QACF,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAChD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CACnG,CAAC;QACF,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,OAAO,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO;QACX,CAAC;QAED,QAAQ,CAAC,EAAC,IAAI,EAAE,kBAAkB,CAAC,WAAW,EAAE,OAAO,EAAE,EAAC,SAAS,EAAE,OAAO,EAAC,EAAC,CAAC,CAAC;IACpF,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,SAAS,EAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,MAAM,eAAe,GAAG,wBAAwB,CAAC,MAAM,CACnD,WAAW,CAAC,EAAE,CACV,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,KAAK,WAAW,CAAC;QACpE,CAAC,CAAC,SAAS,IAAI,oBAAoB,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CACtG,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,mBAAK,CAAC;IACjB,CAAC;IAED,OAAO,CACH,MAAC,mBAAmB,eACf,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,KAAC,UAAU,kBAAa,CAAC,CAAC,6BAA6B,CAAC,YACpD,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,YACtF,KAAC,eAAe,IACZ,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAAC,SAAS,EAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EACvD,QAAQ,EAAE,2BAA2B,YAEpC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAC/B,KAAC,cAAc,IAEX,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,EACtC,WAAW,QACX,qBAAqB,EAAE;gCACnB,IAAI,EAAE,KAAC,WAAW,IAAC,IAAI,EAAE,KAAK,GAAI;gCAClC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;gCACjC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;6BACzC,YAED,KAAC,gBAAgB,IACb,MAAM,EACF;oCACI,GAAG,YAAY;oCACf,SAAS,EAAE;wCACP,GAAG,YAAY,CAAC,SAAS;wCACzB,GAAG,oBAAoB,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC;qCACvD;iCACQ,GAEnB,IAnBG,YAAY,CAAC,SAAS,CAAC,EAAE,CAoBjB,CACpB,CAAC,GACY,GACT,GACJ,CAChB,EACD,KAAC,aAAa,CAAC,KAAK,IAAC,KAAK,EAAC,IAAI,YAAE,CAAC,CAAC,+BAA+B,CAAC,GAAuB,EAC1F,KAAC,QAAQ,IACL,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EACvC,QAAQ,EAAE,eAAe,EACzB,UAAU,QACV,MAAM,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,QAAQ,GAAI,GAC7C,EACF,KAAC,UAAU,kBAAa,CAAC,CAAC,+BAA+B,CAAC,YACrD,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAChC,KAAC,cAAc,IAEX,WAAW,EAAE,WAAW,EACxB,qBAAqB,EAAE;wBACnB,IAAI,EAAE,KAAC,cAAc,IAAC,IAAI,EAAE,UAAU,GAAI;wBAC1C,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;wBACjC,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC;qBAClC,YAED,KAAC,SAAS,IAAC,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,KAAK,GAAI,IARxD,WAAW,CASH,CACpB,CAAC,GACO,IACK,CACzB,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent} from 'react';\nimport {KitFilter, KitInput, KitTypography} from 'aristid-ds';\nimport styled from 'styled-components';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {\n AttributeFormat,\n type AttributesByLibAttributeFragment,\n type AttributesByLibAttributeLinkAttributeFragment,\n type AttributesByLibAttributeTreeAttributeFragment,\n AttributeType,\n} from '_ui/_gqlTypes';\nimport {\n closestCenter,\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy} from '@dnd-kit/sortable';\nimport {useAttributeDetailsData} from '../_shared/useAttributeDetailsData';\nimport {FiltersActionTypes} from '_ui/components/Filters/context/filtersReducer';\nimport {FilterListItem} from './FilterListItem';\nimport {CommonFilterItem} from '_ui/components/Filters/filter-items/CommonFilterItem';\nimport {useFiltersContext} from '_ui/components/Filters/useFiltersContext';\nimport {type IUIFilterBaseAttribute, type UIFilter} from '_ui/components/Filters/_types';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faEye, faEyeSlash, faSearch} from '@fortawesome/free-solid-svg-icons';\n\nconst StyledListContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: calc(var(--general-spacing-l) * 1px);\n`;\n\nconst StyledList = styled.ul`\n padding: calc(var(--general-spacing-s) * 1px) 0;\n margin: 0;\n list-style: none;\n color: var(--general-utilities-text-primary);\n`;\n\nconst StyledEyeSlash = styled(FontAwesomeIcon)`\n color: var(--general-utilities-neutral-dark);\n`;\n\nconst StyledFaEye = styled(FontAwesomeIcon)`\n color: var(--general-utilities-neutral-deepDark);\n`;\n\nconst _isLibraryLinkAttribute = (\n attribute: AttributesByLibAttributeFragment,\n): attribute is AttributesByLibAttributeLinkAttributeFragment =>\n [AttributeType.simple_link, AttributeType.advanced_link].includes(attribute.type) && 'linked_library' in attribute;\n\nconst _isLibraryTreeAttribute = (\n attribute: AttributesByLibAttributeFragment,\n): attribute is AttributesByLibAttributeTreeAttributeFragment =>\n attribute.type === AttributeType.tree && 'linked_tree' in attribute;\n\nexport const FilterItems: FunctionComponent<{libraryId: string}> = ({libraryId}) => {\n const {t} = useSharedTranslation();\n const {\n filtersData: {filters},\n dispatch,\n } = useFiltersContext();\n\n const {onSearchChanged, searchFilteredColumnsIds, attributeDetailsById} = useAttributeDetailsData(libraryId);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const addFilter = (attributeId: string) => () => {\n dispatch({\n type: FiltersActionTypes.ADD_FILTER,\n payload: {\n field: attributeId,\n attribute: {\n id: attributeId,\n label: attributeDetailsById[attributeId].label,\n format: attributeDetailsById[attributeId].format ?? AttributeFormat.text,\n type: attributeDetailsById[attributeId].type,\n valuesList: (attributeDetailsById[attributeId] as IUIFilterBaseAttribute).valuesList,\n linkedLibrary: _isLibraryLinkAttribute(attributeDetailsById[attributeId])\n ? (attributeDetailsById[attributeId].linked_library ?? undefined)\n : undefined, // TODO : https://aristid.atlassian.net/browse/XSTREAM-1155\n linkedTree: _isLibraryTreeAttribute(attributeDetailsById[attributeId])\n ? (attributeDetailsById[attributeId].linked_tree ?? undefined)\n : undefined,\n smartFilter:\n 'smart_filter' in attributeDetailsById[attributeId]\n ? attributeDetailsById[attributeId].smart_filter\n : undefined,\n },\n },\n });\n };\n\n const removeFilter = (filterId: string) => () => {\n dispatch({\n type: FiltersActionTypes.REMOVE_FILTER,\n payload: {\n id: filterId,\n },\n });\n };\n\n const _handleDragEnd = ({active: draggedElement, over: dropTarget}: DragEndEvent) => {\n const indexFrom = activeFilters.findIndex(({field}) =>\n Array.isArray(field) ? field.includes(String(draggedElement.id)) : field === String(draggedElement.id),\n );\n const indexTo = activeFilters.findIndex(({field}) =>\n Array.isArray(field) ? field.includes(String(dropTarget?.id)) : field === String(dropTarget?.id),\n );\n if (!dropTarget || indexFrom === indexTo || indexTo === -1) {\n return;\n }\n\n dispatch({type: FiltersActionTypes.MOVE_FILTER, payload: {indexFrom, indexTo}});\n };\n\n const activeFilters = filters.filter(({attribute}) => searchFilteredColumnsIds.includes(attribute.id));\n const inactiveFilters = searchFilteredColumnsIds.filter(\n attributeId =>\n filters.every(filterItem => filterItem.attribute.id !== attributeId) &&\n !('compute' in attributeDetailsById[attributeId] && attributeDetailsById[attributeId]?.compute),\n );\n\n if (!Object.keys(attributeDetailsById).length) {\n return <></>;\n }\n\n return (\n <StyledListContainer>\n {activeFilters.length > 0 && (\n <StyledList aria-label={t('explorer.filter-list.active')}>\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={_handleDragEnd}>\n <SortableContext\n items={activeFilters.map(({attribute}) => attribute.id)}\n strategy={verticalListSortingStrategy}\n >\n {activeFilters.map(activeFilter => (\n <FilterListItem\n key={activeFilter.attribute.id}\n attributeId={activeFilter.attribute.id}\n isDraggable\n visibilityButtonProps={{\n icon: <StyledFaEye icon={faEye} />,\n title: String(t('explorer.hide')),\n onClick: removeFilter(activeFilter.id),\n }}\n >\n <CommonFilterItem\n filter={\n {\n ...activeFilter,\n attribute: {\n ...activeFilter.attribute,\n ...attributeDetailsById[activeFilter?.attribute?.id],\n },\n } as UIFilter\n }\n />\n </FilterListItem>\n ))}\n </SortableContext>\n </DndContext>\n </StyledList>\n )}\n <KitTypography.Title level=\"h4\">{t('explorer.available-attributes')}</KitTypography.Title>\n <KitInput\n placeholder={String(t('global.search'))}\n onChange={onSearchChanged}\n allowClear\n prefix={<FontAwesomeIcon icon={faSearch} />}\n />\n <StyledList aria-label={t('explorer.filter-list.inactive')}>\n {inactiveFilters.map(attributeId => (\n <FilterListItem\n key={attributeId}\n attributeId={attributeId}\n visibilityButtonProps={{\n icon: <StyledEyeSlash icon={faEyeSlash} />,\n title: String(t('explorer.show')),\n onClick: addFilter(attributeId),\n }}\n >\n <KitFilter label={attributeDetailsById[attributeId].label} />\n </FilterListItem>\n ))}\n </StyledList>\n </StyledListContainer>\n );\n};\n"]}
|