@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.
Files changed (115) hide show
  1. package/dist/_gqlTypes/index.d.ts +224 -72
  2. package/dist/_gqlTypes/index.js +143 -61
  3. package/dist/_gqlTypes/index.js.map +1 -1
  4. package/dist/_queries/attributes/attributeDetailsFragment.js +3 -0
  5. package/dist/_queries/attributes/attributeDetailsFragment.js.map +1 -1
  6. package/dist/components/Explorer/Explorer.d.ts +5 -1
  7. package/dist/components/Explorer/Explorer.js +7 -0
  8. package/dist/components/Explorer/Explorer.js.map +1 -1
  9. package/dist/components/Explorer/_types.d.ts +6 -0
  10. package/dist/components/Explorer/_types.js.map +1 -1
  11. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.d.ts +8 -0
  12. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.js +34 -0
  13. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.js.map +1 -0
  14. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.d.ts +3 -1
  15. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js +12 -14
  16. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js.map +1 -1
  17. package/dist/components/Explorer/actions-mass/edit-attribute/_types.d.ts +15 -3
  18. package/dist/components/Explorer/actions-mass/edit-attribute/_types.js.map +1 -1
  19. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.d.ts +13 -0
  20. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.js +47 -0
  21. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.js.map +1 -0
  22. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.d.ts +13 -0
  23. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.js +73 -0
  24. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.js.map +1 -0
  25. package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js +14 -17
  26. package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js.map +1 -1
  27. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.d.ts +23 -0
  28. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.js +68 -0
  29. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.js.map +1 -0
  30. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js +16 -50
  31. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js.map +1 -1
  32. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js +6 -6
  33. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js.map +1 -1
  34. package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.d.ts +7 -31
  35. package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.js +9 -20
  36. package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.js.map +1 -1
  37. package/dist/components/Explorer/useNotifyFiltersChange.d.ts +15 -0
  38. package/dist/components/Explorer/useNotifyFiltersChange.js +26 -0
  39. package/dist/components/Explorer/useNotifyFiltersChange.js.map +1 -0
  40. package/dist/components/Filters/_types.d.ts +14 -0
  41. package/dist/components/Filters/_types.js +2 -1
  42. package/dist/components/Filters/_types.js.map +1 -1
  43. package/dist/components/Filters/context/filtersReducer.d.ts +14 -1
  44. package/dist/components/Filters/context/filtersReducer.js +39 -8
  45. package/dist/components/Filters/context/filtersReducer.js.map +1 -1
  46. package/dist/components/Filters/filter-items/CommonFilterItem.js +4 -1
  47. package/dist/components/Filters/filter-items/CommonFilterItem.js.map +1 -1
  48. package/dist/components/Filters/filter-items/filter-type/FilterDropDown.js +15 -3
  49. package/dist/components/Filters/filter-items/filter-type/FilterDropDown.js.map +1 -1
  50. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.d.ts +3 -1
  51. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js +2 -2
  52. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js.map +1 -1
  53. package/dist/components/Filters/filter-items/filter-type/_types.d.ts +3 -1
  54. package/dist/components/Filters/filter-items/filter-type/_types.js.map +1 -1
  55. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js +2 -3
  56. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js.map +1 -1
  57. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.d.ts +2 -4
  58. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js +22 -16
  59. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js.map +1 -1
  60. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js +39 -83
  61. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js.map +1 -1
  62. package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.d.ts +1 -0
  63. package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.js.map +1 -1
  64. package/dist/components/Filters/filter-items/filter-type/tree/useTreeNodeSelection.d.ts +21 -0
  65. package/dist/components/Filters/filter-items/filter-type/tree/useTreeNodeSelection.js +85 -0
  66. package/dist/components/Filters/filter-items/filter-type/tree/useTreeNodeSelection.js.map +1 -0
  67. package/dist/components/Filters/filter-items/filter-type/tree/useTreePermissions.d.ts +8 -0
  68. package/dist/components/Filters/filter-items/filter-type/tree/useTreePermissions.js +40 -0
  69. package/dist/components/Filters/filter-items/filter-type/tree/useTreePermissions.js.map +1 -0
  70. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.d.ts +2 -3
  71. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.js +2 -3
  72. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.js.map +1 -1
  73. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.d.ts +1 -1
  74. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.js +3 -4
  75. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.js.map +1 -1
  76. package/dist/components/Filters/filter-items/shared/EmptyValueCheckbox.js +1 -7
  77. package/dist/components/Filters/filter-items/shared/EmptyValueCheckbox.js.map +1 -1
  78. package/dist/components/Filters/prepareFiltersForRequest.js +37 -14
  79. package/dist/components/Filters/prepareFiltersForRequest.js.map +1 -1
  80. package/dist/components/Filters/useFilters.d.ts +312 -0
  81. package/dist/components/Filters/useTransformFilters.js +1 -0
  82. package/dist/components/Filters/useTransformFilters.js.map +1 -1
  83. package/dist/hooks/index.d.ts +1 -0
  84. package/dist/hooks/index.js +1 -0
  85. package/dist/hooks/index.js.map +1 -1
  86. package/dist/hooks/useDelayedLoading/index.d.ts +1 -0
  87. package/dist/hooks/useDelayedLoading/index.js +5 -0
  88. package/dist/hooks/useDelayedLoading/index.js.map +1 -0
  89. package/dist/hooks/useDelayedLoading/useDelayedLoading.d.ts +17 -0
  90. package/dist/hooks/useDelayedLoading/useDelayedLoading.js +54 -0
  91. package/dist/hooks/useDelayedLoading/useDelayedLoading.js.map +1 -0
  92. package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.d.ts +3 -1
  93. package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.js.map +1 -1
  94. package/dist/hooks/useIFrameMessenger/messageHandlers.d.ts +2 -1
  95. package/dist/hooks/useIFrameMessenger/messageHandlers.js +9 -0
  96. package/dist/hooks/useIFrameMessenger/messageHandlers.js.map +1 -1
  97. package/dist/hooks/useIFrameMessenger/types.d.ts +21 -2
  98. package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
  99. package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +1 -0
  100. package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.js +29 -7
  101. package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.js.map +1 -1
  102. package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.d.ts +14 -0
  103. package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.js +22 -0
  104. package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.js.map +1 -0
  105. package/dist/hooks/useIFrameMessengerClient/iFrameMessengerClientContext.d.ts +1 -0
  106. package/dist/hooks/useIFrameMessengerClient/useIFrameMessengerClient.d.ts +1 -0
  107. package/dist/locales/en/shared.json +3 -1
  108. package/dist/locales/fr/shared.json +3 -1
  109. package/package.json +2 -2
  110. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.d.ts +0 -12
  111. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.js +0 -24
  112. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.js.map +0 -1
  113. package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.d.ts +0 -13
  114. package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.js +0 -28
  115. 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 /*|| isMonoDependencyWorkflow*/) ?? []);
41
+ .filter(({ hasEmptyDependency, isSimpleWorkflow, isMonoDependencyWorkflow }) => hasEmptyDependency || isSimpleWorkflow || isMonoDependencyWorkflow) ?? []);
45
42
  };
46
43
  //# sourceMappingURL=useMassEditableAttributes.js.map
@@ -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;AAC7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAGpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EAAC,SAAS,EAAsB,EAA2B,EAAE;IACnG,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,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,aAAa,CAAC,iCAAiC,EAAE,0BAA0B,IAAI,EAAE,CAAC;QACrG,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,IAAI,SAAS,GAAuC,EAAE,CAAC;QACvD,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;YACjC,SAAS;gBACL,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBACzC,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI;oBAC9B,KAAK,EACD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;wBACnC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;wBACzB,CAAC,CAAC,mDAAmD,CAAC;oBAC1D,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;oBAC1C,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,MAAO,CAAC,IAAI,EAAE;iBAC9F,CAAC,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC;QAED,OAAO;YACH,EAAE,EAAE,aAAa,CAAC,EAAE;YACpB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,YAAY;YACZ,kBAAkB;YAClB,gBAAgB;YAChB,wBAAwB;YACxB,SAAS;SACZ,CAAC;IACN,CAAC,CAAC;SACD,MAAM,CACH,CAAC,EAAC,kBAAkB,EAAE,gBAAgB,EAAE,wBAAwB,EAAC,EAAE,EAAE,CACjE,kBAAkB,IAAI,gBAAgB,CAAC,+BAA+B,CAC7E,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 {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type MassEditableAttribute} from './_types';\n\nexport const useMassEditableAttributes = ({libraryId}: {libraryId: string}): MassEditableAttribute[] => {\n const {t} = useSharedTranslation();\n\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 }\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 let treeNodes: MassEditableAttribute['treeNodes'] = [];\n if ('tree_values' in treeAttribute) {\n treeNodes =\n treeAttribute.tree_values?.map(treeValue => ({\n id: treeValue.node?.id ?? null,\n label:\n treeValue.node?.record.whoAmI.label ??\n treeValue.node?.record.id ??\n t('explorer.massAction.editAttribute_value_undefined'),\n color: treeValue.node?.record.whoAmI.color,\n allowedDependentNodeIds: treeValue.allowedDependentValues?.map(({nodeId}) => nodeId!) ?? [],\n })) ?? [];\n }\n\n return {\n id: treeAttribute.id,\n label: treeAttribute.label,\n dependencies,\n hasEmptyDependency,\n isSimpleWorkflow,\n isMonoDependencyWorkflow,\n treeNodes,\n };\n })\n .filter(\n ({hasEmptyDependency, isSimpleWorkflow, isMonoDependencyWorkflow}) =>\n hasEmptyDependency || isSimpleWorkflow /*|| isMonoDependencyWorkflow*/,\n ) ?? []\n );\n};\n"]}
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, KitEmpty, KitNotification, KitSelect, KitSpace, KitTypography } from 'aristid-ds';
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
- const EDITION_MAPPING_DEFAULT_VALUES = { count: 0, mapping: [] };
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
- const [editionMapping, setEditionMapping] = useState(EDITION_MAPPING_DEFAULT_VALUES);
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
- setEditionMapping(EDITION_MAPPING_DEFAULT_VALUES);
38
+ resetEditionMapping();
31
39
  }, [selectedAttribute]);
32
40
  const _closeModal = () => {
33
41
  setOpenModal(false);
34
42
  setMassSelectionFilters([]);
35
43
  setSelectedAttribute(null);
36
- setEditionMapping(EDITION_MAPPING_DEFAULT_VALUES);
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
- setEditionMapping(EDITION_MAPPING_DEFAULT_VALUES);
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: ({ before, after, occurrenceCount }) => {
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":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AACzD,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AACnG,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AACjD,OAAO,EAAyD,wBAAwB,EAAC,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,oBAAoB,EAAE,0BAA0B,EAAC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAC,8BAA8B,EAAC,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAC,4BAA4B,EAAC,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAAC,yBAAyB,EAAC,MAAM,4CAA4C,CAAC;AAGrF,MAAM,8BAA8B,GAAG,EAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACvC,SAAS,EACT,KAAK,EAAE,EAAC,IAAI,EAAC,EACb,UAAU,GAMZ,EAAE,EAAE;IACF,MAAM,EAAC,IAAI,EAAE,kBAAkB,EAAC,GAAG,OAAO,EAAE,CAAC;IAC7C,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,kFAAkF;IAClF,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IAE1F,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC;IAElF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAA+B,IAAI,CAAC,CAAC;IAC/F,MAAM,CAAC,oBAAoB,CAAC,GAAG,wBAAwB,EAAE,CAAC;IAC1D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAChD,8BAA8B,CACjC,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACX,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;IACtD,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,MAAM,WAAW,GAAG,GAAG,EAAE;QACrB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IAErG,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,iBAAiB,IAAI,cAAc,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO;QACX,CAAC;QAED,oBAAoB,CAAC;YACjB,SAAS,EAAE;gBACP,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,cAAc,EAAE,oBAAoB;gBACpC,WAAW,EAAE,iBAAiB,CAAC,EAAE;gBACjC,OAAO,EAAE,cAAc,CAAC,OAAO;aAClC;SACJ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACV,QAAQ,CAAC,KAAK,CAAC;gBACX,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,oBAAoB;gBAC9B,OAAO,EAAE,CAAC,CAAC,sBAAsB,CAAC;gBAClC,WAAW,EAAE,CAAC,CAAC,gDAAgD,CAAC;gBAChE,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,WAAW,EAAE,CAAC;QAEd,eAAe,CAAC,IAAI,CAAC;YACjB,OAAO,EAAE,CAAC,CAAC,6DAA6D,CAAC;YACzE,WAAW,EACP,CAAC,CAAC,mEAAmE,EAAE;gBACnE,KAAK,EAAE,cAAc,CAAC,KAAK;aAC9B,CAAC,IAAI,SAAS;YACnB,QAAQ,EAAE,0BAA0B;YACpC,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,uDAAuD;IACvD,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO;YACH,uBAAuB,EAAE,IAAI;YAC7B,4BAA4B,EAAE,IAAI;SACrC,CAAC;IACN,CAAC;IAED,OAAO;QACH,uBAAuB,EAAE;YACrB,KAAK,EAAE,CAAC,CAAC,mCAAmC,CAAC;YAC7C,IAAI,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,MAAM,GAAI;YACvC,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,CAAC,oBAAyC,EAAE,EAAE;gBACpD,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;gBAC9C,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC3B,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;gBAClD,YAAY,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;SACJ;QACD,4BAA4B,EAAE,CAC1B,MAAC,4BAA4B,IACzB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,mBAAmB,EACpC,mBAAmB,EAAE,WAAW,aAEhC,MAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,aAC5D,KAAC,aAAa,CAAC,IAAI,cACd,CAAC,CAAC,0DAA0D,CAAC,GAC7C,EACrB,KAAC,SAAS,IACN,IAAI,EAAC,OAAO,EACZ,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,CAAC,CAAC,gEAAgE,CAAC,EAChF,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gCAC1C,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,KAAK,EAAE,kBAAkB,CAAC;gCAChE,KAAK,EAAE,SAAS,CAAC,EAAE;6BACtB,CAAC,CAAC,EACH,QAAQ,EAAE,CAAC,WAAmB,EAAE,EAAE;gCAC9B,oBAAoB,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,WAAW,CAAE,CAAC,CAAC;4BAC9F,CAAC,GACH,IACK,EACV,iBAAiB,IAAI,IAAI;oBACtB,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CACpC,KAAC,8BAA8B,IAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,SAAS,EAAE,iBAAiB,EAC5B,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAC,EAAE,EAAE;4BACtD,iBAAiB,CACb,MAAM,KAAK,KAAK;gCACZ,CAAC,CAAC;oCACI,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,eAAe;oCAC7C,OAAO,EAAE;wCACL;4CACI,MAAM,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CACpD,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CACnC;yCACJ;qCACJ;iCACJ;gCACH,CAAC,CAAC;oCACI,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,eAAe;oCAC7C,OAAO,EAAE;wCACL;4CACI,MAAM,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;iDAC5C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;iDACxC,MAAM,CAAC,CAAC,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;yCACjC;qCACJ;iCACJ,CACV,CAAC;wBACN,CAAC,GACH,CACL,CAAC,CAAC,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACrC,KAAC,8BAA8B,IAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,SAAS,EAAE,iBAAiB,EAC5B,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAC,EAAE,EAAE;4BACtD,iBAAiB,CACb,MAAM,KAAK,KAAK;gCACZ,CAAC,CAAC;oCACI,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,eAAe;oCAC7C,OAAO,EAAE;wCACL;4CACI,MAAM,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CACpD,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CACnC;yCACJ;qCACJ;iCACJ;gCACH,CAAC,CAAC;oCACI,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,eAAe;oCAC7C,OAAO,EAAE;wCACL;4CACI,MAAM,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;iDAC5C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;iDACxC,MAAM,CAAC,CAAC,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;yCACjC;qCACJ;iCACJ,CACV,CAAC;wBACN,CAAC,GACH,CACL,CAAC,CAAC,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC,CAAC;oBAC7C,WAAW;oBACX,KAAC,QAAQ,IAAC,WAAW,EAAC,KAAK,GAAG,CACjC,CAAC,CAAC,CAAC,IAAI,CAAC,IACc,CAClC;KACJ,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 {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 { ViewSettingsActionTypes } from '../store-view-settings/viewSettingsReducer';
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: ViewSettingsActionTypes.ADD_FILTER,
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: _isLibraryLinkAttribute(attributeDetailsById[attributeId])
59
- ? (attributeDetailsById[attributeId].smart_filter ?? undefined)
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: ViewSettingsActionTypes.REMOVE_FILTER,
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: ViewSettingsActionTypes.MOVE_FILTER, payload: { indexFrom, indexTo } });
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":"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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 {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"]}