@leav/ui 1.13.0-2d58210a → 1.13.0-3e5f362c

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 (42) hide show
  1. package/dist/_gqlTypes/index.d.ts +115 -39
  2. package/dist/_gqlTypes/index.js +97 -30
  3. package/dist/_gqlTypes/index.js.map +1 -1
  4. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.d.ts +8 -0
  5. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.js +34 -0
  6. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.js.map +1 -0
  7. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.d.ts +3 -1
  8. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js +12 -14
  9. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js.map +1 -1
  10. package/dist/components/Explorer/actions-mass/edit-attribute/_types.d.ts +15 -3
  11. package/dist/components/Explorer/actions-mass/edit-attribute/_types.js.map +1 -1
  12. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.d.ts +13 -0
  13. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.js +47 -0
  14. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.js.map +1 -0
  15. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.d.ts +13 -0
  16. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.js +73 -0
  17. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.js.map +1 -0
  18. package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js +14 -17
  19. package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js.map +1 -1
  20. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.d.ts +23 -0
  21. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.js +68 -0
  22. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.js.map +1 -0
  23. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js +16 -50
  24. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js.map +1 -1
  25. package/dist/hooks/index.d.ts +1 -0
  26. package/dist/hooks/index.js +1 -0
  27. package/dist/hooks/index.js.map +1 -1
  28. package/dist/hooks/useDelayedLoading/index.d.ts +1 -0
  29. package/dist/hooks/useDelayedLoading/index.js +5 -0
  30. package/dist/hooks/useDelayedLoading/index.js.map +1 -0
  31. package/dist/hooks/useDelayedLoading/useDelayedLoading.d.ts +17 -0
  32. package/dist/hooks/useDelayedLoading/useDelayedLoading.js +54 -0
  33. package/dist/hooks/useDelayedLoading/useDelayedLoading.js.map +1 -0
  34. package/dist/locales/en/shared.json +1 -0
  35. package/dist/locales/fr/shared.json +1 -0
  36. package/package.json +1 -1
  37. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.d.ts +0 -12
  38. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.js +0 -24
  39. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.js.map +0 -1
  40. package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.d.ts +0 -13
  41. package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.js +0 -28
  42. package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ import { type RecordFilterInput } from '../../../../_gqlTypes';
2
+ import { type MassEditableAttribute, type SetAttributeMappingWithDependency } from './_types';
3
+ export declare const EditMonoDependencyWorkflowTreeAttribute: ({ libraryId, attribute, massSelectionFilters, setAttributeMapping, }: {
4
+ libraryId: string;
5
+ attribute: MassEditableAttribute;
6
+ massSelectionFilters: RecordFilterInput[];
7
+ setAttributeMapping: SetAttributeMappingWithDependency;
8
+ }) => JSX.Element;
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { KitCollapse, KitLoader, KitSpace, KitTag, KitTypography } from 'aristid-ds';
3
+ import { useDelayedLoading } from '../../../../hooks/useDelayedLoading';
4
+ import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
5
+ import { EditTreeAttributeValuesMapping } from './EditTreeAttributeValuesMapping';
6
+ import { useDependencyValues } from './useDependencyValues';
7
+ export const EditMonoDependencyWorkflowTreeAttribute = ({ libraryId, attribute, massSelectionFilters, setAttributeMapping, }) => {
8
+ const { t } = useSharedTranslation();
9
+ const [monoDependencyAttribute, _ignoredCurrentAttribute] = attribute.dependencies.toSorted((a, _b) => a.id === attribute.id ? 1 : -1);
10
+ const { dependencyValues, loading } = useDependencyValues({
11
+ libraryId,
12
+ monoDependencyAttribute,
13
+ massSelectionFilters,
14
+ });
15
+ const isLoaderVisible = useDelayedLoading(loading);
16
+ if (isLoaderVisible) {
17
+ return _jsx(KitLoader, {});
18
+ }
19
+ return (_jsxs(KitSpace, { direction: "vertical", style: { width: '100%' }, children: [_jsx(KitTypography.Text, { style: { paddingTop: 'calc(var(--general-spacing-s) * 1px)' }, children: t('explorer.massAction.editAttribute_mono_dependency_workflow_notice') }), dependencyValues.map(({ key, label, dependencyAttributeId, dependencyAttributeNodeId, filtersWithDependency, dependencyFilter, }) => (_jsx(KitCollapse, { items: [
20
+ {
21
+ key: '1',
22
+ label: _jsx(KitTag, { type: "secondary", children: label }),
23
+ children: (_jsx(EditTreeAttributeValuesMapping, { libraryId: libraryId, attribute: attribute, dependencyAttributeId: dependencyAttributeId, dependencyAttributeNodeId: dependencyAttributeNodeId, massSelectionFilters: filtersWithDependency, setAttributeMapping: ({ before, after, occurrenceCount }) => {
24
+ setAttributeMapping({
25
+ before,
26
+ after,
27
+ occurrenceCount,
28
+ dependencyFilter,
29
+ });
30
+ } })),
31
+ },
32
+ ] }, key)))] }));
33
+ };
34
+ //# sourceMappingURL=EditMonoDependencyWorkflowTreeAttribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditMonoDependencyWorkflowTreeAttribute.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AACnF,OAAO,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,EACpD,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,mBAAmB,GAMtB,EAAE,EAAE;IACD,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAClG,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjC,CAAC;IAEF,MAAM,EAAC,gBAAgB,EAAE,OAAO,EAAC,GAAG,mBAAmB,CAAC;QACpD,SAAS;QACT,uBAAuB;QACvB,oBAAoB;KACvB,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,eAAe,EAAE,CAAC;QAClB,OAAO,KAAC,SAAS,KAAG,CAAC;IACzB,CAAC;IAED,OAAO,CACH,MAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,EAAC,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,aACjD,KAAC,aAAa,CAAC,IAAI,IAAC,KAAK,EAAE,EAAC,UAAU,EAAE,sCAAsC,EAAC,YAC1E,CAAC,CAAC,mEAAmE,CAAC,GACtD,EACpB,gBAAgB,CAAC,GAAG,CACjB,CAAC,EACG,GAAG,EACH,KAAK,EACL,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,GACnB,EAAE,EAAE,CAAC,CACF,KAAC,WAAW,IAER,KAAK,EAAE;oBACH;wBACI,GAAG,EAAE,GAAG;wBACR,KAAK,EAAE,KAAC,MAAM,IAAC,IAAI,EAAC,WAAW,YAAE,KAAK,GAAU;wBAChD,QAAQ,EAAE,CACN,KAAC,8BAA8B,IAC3B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,qBAAqB,EAAE,qBAAqB,EAC5C,yBAAyB,EAAE,yBAAyB,EACpD,oBAAoB,EAAE,qBAAqB,EAC3C,mBAAmB,EAAE,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAC,EAAE,EAAE;gCACtD,mBAAmB,CAAC;oCAChB,MAAM;oCACN,KAAK;oCACL,eAAe;oCACf,gBAAgB;iCACnB,CAAC,CAAC;4BACP,CAAC,GACH,CACL;qBACJ;iBACJ,IAvBI,GAAG,CAwBV,CACL,CACJ,IACM,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 {type RecordFilterInput} from '_ui/_gqlTypes';\nimport {KitCollapse, KitLoader, KitSpace, KitTag, KitTypography} from 'aristid-ds';\nimport {useDelayedLoading} from '_ui/hooks/useDelayedLoading';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type MassEditableAttribute, type SetAttributeMappingWithDependency} from './_types';\nimport {EditTreeAttributeValuesMapping} from './EditTreeAttributeValuesMapping';\nimport {useDependencyValues} from './useDependencyValues';\n\nexport const EditMonoDependencyWorkflowTreeAttribute = ({\n libraryId,\n attribute,\n massSelectionFilters,\n setAttributeMapping,\n}: {\n libraryId: string;\n attribute: MassEditableAttribute;\n massSelectionFilters: RecordFilterInput[];\n setAttributeMapping: SetAttributeMappingWithDependency;\n}) => {\n const {t} = useSharedTranslation();\n\n const [monoDependencyAttribute, _ignoredCurrentAttribute] = attribute.dependencies.toSorted((a, _b) =>\n a.id === attribute.id ? 1 : -1,\n );\n\n const {dependencyValues, loading} = useDependencyValues({\n libraryId,\n monoDependencyAttribute,\n massSelectionFilters,\n });\n\n const isLoaderVisible = useDelayedLoading(loading);\n\n if (isLoaderVisible) {\n return <KitLoader />;\n }\n\n return (\n <KitSpace direction=\"vertical\" style={{width: '100%'}}>\n <KitTypography.Text style={{paddingTop: 'calc(var(--general-spacing-s) * 1px)'}}>\n {t('explorer.massAction.editAttribute_mono_dependency_workflow_notice')}\n </KitTypography.Text>\n {dependencyValues.map(\n ({\n key,\n label,\n dependencyAttributeId,\n dependencyAttributeNodeId,\n filtersWithDependency,\n dependencyFilter,\n }) => (\n <KitCollapse\n key={key}\n items={[\n {\n key: '1',\n label: <KitTag type=\"secondary\">{label}</KitTag>,\n children: (\n <EditTreeAttributeValuesMapping\n libraryId={libraryId}\n attribute={attribute}\n dependencyAttributeId={dependencyAttributeId}\n dependencyAttributeNodeId={dependencyAttributeNodeId}\n massSelectionFilters={filtersWithDependency}\n setAttributeMapping={({before, after, occurrenceCount}) => {\n setAttributeMapping({\n before,\n after,\n occurrenceCount,\n dependencyFilter,\n });\n }}\n />\n ),\n },\n ]}\n />\n ),\n )}\n </KitSpace>\n );\n};\n"]}
@@ -1,8 +1,10 @@
1
1
  import { type RecordFilterInput } from '../../../../_gqlTypes';
2
2
  import { type MassEditableAttribute, type SetAttributeMapping } from './_types';
3
- export declare const EditTreeAttributeValuesMapping: ({ libraryId, attribute, setAttributeMapping, massSelectionFilters, }: {
3
+ export declare const EditTreeAttributeValuesMapping: ({ libraryId, attribute, dependencyAttributeId, dependencyAttributeNodeId, setAttributeMapping, massSelectionFilters, }: {
4
4
  libraryId: string;
5
5
  attribute: MassEditableAttribute;
6
+ dependencyAttributeId?: string;
7
+ dependencyAttributeNodeId?: string;
6
8
  setAttributeMapping: SetAttributeMapping;
7
9
  massSelectionFilters: RecordFilterInput[];
8
10
  }) => JSX.Element;
@@ -1,29 +1,27 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
3
3
  // This file is released under LGPL V3
4
4
  // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
5
  import { KitLoader, KitSpace } from 'aristid-ds';
6
6
  import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
7
- import { useValuesDistribution } from './useValuesDistribution';
8
- import { useTreeNodeRemapping } from './useTreeNodeRemapping';
7
+ import { useTreeNodesCandidates } from './useTreeNodesCandidates';
9
8
  import { TreeNodeRemap } from './TreeNodeRemap';
10
- const UNDEFINED_NODE_ID = null;
11
- export const EditTreeAttributeValuesMapping = ({ libraryId, attribute, setAttributeMapping, massSelectionFilters, }) => {
9
+ const EMPTY_VALUE_NODE_ID = null;
10
+ export const EditTreeAttributeValuesMapping = ({ libraryId, attribute, dependencyAttributeId, dependencyAttributeNodeId, setAttributeMapping, massSelectionFilters, }) => {
12
11
  const { t } = useSharedTranslation();
13
- const { distribution, noValueCount, loading } = useValuesDistribution({
12
+ const { candidateNodes, loading } = useTreeNodesCandidates({
14
13
  attributeId: attribute.id,
14
+ dependencyAttributeId,
15
+ dependencyAttributeNodeId,
15
16
  libraryId,
16
- recordFilters: massSelectionFilters,
17
+ massSelectionFilters,
17
18
  });
18
- const noValueNode = attribute.treeNodes.find(({ id }) => id === UNDEFINED_NODE_ID) ?? null;
19
- const editableNodes = attribute.treeNodes.filter(({ id }) => id !== UNDEFINED_NODE_ID);
20
- const remappingList = useTreeNodeRemapping({ distribution, editableNodes });
21
19
  if (loading) {
22
20
  return _jsx(KitLoader, {});
23
21
  }
24
- return (_jsxs(KitSpace, { direction: "vertical", size: "xs", style: { display: 'flex' }, children: [remappingList.map(remapping => (_jsx(TreeNodeRemap, { ...remapping, setAttributeMapping: setAttributeMapping }, remapping.currentNode.id))), noValueCount > 0 && noValueNode !== null && (_jsx(TreeNodeRemap, { currentNode: noValueNode, occurrenceCount: noValueCount, candidateNodes: [
25
- { id: UNDEFINED_NODE_ID, label: t('explorer.massAction.editAttribute_value_do_not_change') },
26
- ...editableNodes,
27
- ], setAttributeMapping: setAttributeMapping }))] }));
22
+ return (_jsx(KitSpace, { direction: "vertical", size: "xs", style: { display: 'flex' }, children: candidateNodes.map(remapping => (_jsx(TreeNodeRemap, { currentNode: remapping.currentNode, occurrenceCount: remapping.occurrenceCount, candidateNodes: [
23
+ { id: EMPTY_VALUE_NODE_ID, label: t('explorer.massAction.editAttribute_value_do_not_change') },
24
+ ...remapping.allowedDependentValues,
25
+ ], setAttributeMapping: setAttributeMapping }, remapping.currentNode.id ?? 'empty'))) }));
28
26
  };
29
27
  //# sourceMappingURL=EditTreeAttributeValuesMapping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditTreeAttributeValuesMapping.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAG9C,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,EAC3C,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,oBAAoB,GAMvB,EAAE,EAAE;IACD,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,EAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAC,GAAG,qBAAqB,CAAC;QAChE,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,SAAS;QACT,aAAa,EAAE,oBAAoB;KACtC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,iBAAiB,CAAC,IAAI,IAAI,CAAC;IACzF,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,iBAAiB,CAAC,CAAC;IAErF,MAAM,aAAa,GAAG,oBAAoB,CAAC,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC,CAAC;IAE1E,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,KAAC,SAAS,KAAG,CAAC;IACzB,CAAC;IAED,OAAO,CACH,MAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAC,aAC5D,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAC5B,KAAC,aAAa,OAEN,SAAS,EACb,mBAAmB,EAAE,mBAAmB,IAFnC,SAAS,CAAC,WAAW,CAAC,EAAE,CAG/B,CACL,CAAC,EACD,YAAY,GAAG,CAAC,IAAI,WAAW,KAAK,IAAI,IAAI,CACzC,KAAC,aAAa,IACV,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,YAAY,EAC7B,cAAc,EAAE;oBACZ,EAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC,uDAAuD,CAAC,EAAC;oBAC1F,GAAG,aAAa;iBACnB,EACD,mBAAmB,EAAE,mBAAmB,GAC1C,CACL,IACM,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 {KitLoader, KitSpace} from 'aristid-ds';\nimport {type RecordFilterInput} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useValuesDistribution} from './useValuesDistribution';\nimport {useTreeNodeRemapping} from './useTreeNodeRemapping';\nimport {TreeNodeRemap} from './TreeNodeRemap';\nimport {type MassEditableAttribute, type SetAttributeMapping} from './_types';\n\nconst UNDEFINED_NODE_ID = null;\n\nexport const EditTreeAttributeValuesMapping = ({\n libraryId,\n attribute,\n setAttributeMapping,\n massSelectionFilters,\n}: {\n libraryId: string;\n attribute: MassEditableAttribute;\n setAttributeMapping: SetAttributeMapping;\n massSelectionFilters: RecordFilterInput[];\n}) => {\n const {t} = useSharedTranslation();\n\n const {distribution, noValueCount, loading} = useValuesDistribution({\n attributeId: attribute.id,\n libraryId,\n recordFilters: massSelectionFilters,\n });\n\n const noValueNode = attribute.treeNodes.find(({id}) => id === UNDEFINED_NODE_ID) ?? null;\n const editableNodes = attribute.treeNodes.filter(({id}) => id !== UNDEFINED_NODE_ID);\n\n const remappingList = useTreeNodeRemapping({distribution, editableNodes});\n\n if (loading) {\n return <KitLoader />;\n }\n\n return (\n <KitSpace direction=\"vertical\" size=\"xs\" style={{display: 'flex'}}>\n {remappingList.map(remapping => (\n <TreeNodeRemap\n key={remapping.currentNode.id}\n {...remapping}\n setAttributeMapping={setAttributeMapping}\n />\n ))}\n {noValueCount > 0 && noValueNode !== null && (\n <TreeNodeRemap\n currentNode={noValueNode}\n occurrenceCount={noValueCount}\n candidateNodes={[\n {id: UNDEFINED_NODE_ID, label: t('explorer.massAction.editAttribute_value_do_not_change')},\n ...editableNodes,\n ]}\n setAttributeMapping={setAttributeMapping}\n />\n )}\n </KitSpace>\n );\n};\n"]}
1
+ {"version":3,"file":"EditTreeAttributeValuesMapping.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAG9C,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,EAC3C,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,GAQvB,EAAE,EAAE;IACD,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,EAAC,cAAc,EAAE,OAAO,EAAC,GAAG,sBAAsB,CAAC;QACrD,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,qBAAqB;QACrB,yBAAyB;QACzB,SAAS;QACT,oBAAoB;KACvB,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,KAAC,SAAS,KAAG,CAAC;IACzB,CAAC;IAED,OAAO,CACH,KAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAC,YAC5D,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAC7B,KAAC,aAAa,IAEV,WAAW,EAAE,SAAS,CAAC,WAAW,EAClC,eAAe,EAAE,SAAS,CAAC,eAAe,EAC1C,cAAc,EAAE;gBACZ,EAAC,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC,uDAAuD,CAAC,EAAC;gBAC5F,GAAG,SAAS,CAAC,sBAAsB;aACtC,EACD,mBAAmB,EAAE,mBAAmB,IAPnC,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,OAAO,CAQ1C,CACL,CAAC,GACK,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 {KitLoader, KitSpace} from 'aristid-ds';\nimport {type RecordFilterInput} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useTreeNodesCandidates} from './useTreeNodesCandidates';\nimport {TreeNodeRemap} from './TreeNodeRemap';\nimport {type MassEditableAttribute, type SetAttributeMapping} from './_types';\n\nconst EMPTY_VALUE_NODE_ID = null;\n\nexport const EditTreeAttributeValuesMapping = ({\n libraryId,\n attribute,\n dependencyAttributeId,\n dependencyAttributeNodeId,\n setAttributeMapping,\n massSelectionFilters,\n}: {\n libraryId: string;\n attribute: MassEditableAttribute;\n dependencyAttributeId?: string;\n dependencyAttributeNodeId?: string;\n setAttributeMapping: SetAttributeMapping;\n massSelectionFilters: RecordFilterInput[];\n}) => {\n const {t} = useSharedTranslation();\n\n const {candidateNodes, loading} = useTreeNodesCandidates({\n attributeId: attribute.id,\n dependencyAttributeId,\n dependencyAttributeNodeId,\n libraryId,\n massSelectionFilters,\n });\n\n if (loading) {\n return <KitLoader />;\n }\n\n return (\n <KitSpace direction=\"vertical\" size=\"xs\" style={{display: 'flex'}}>\n {candidateNodes.map(remapping => (\n <TreeNodeRemap\n key={remapping.currentNode.id ?? 'empty'}\n currentNode={remapping.currentNode}\n occurrenceCount={remapping.occurrenceCount}\n candidateNodes={[\n {id: EMPTY_VALUE_NODE_ID, label: t('explorer.massAction.editAttribute_value_do_not_change')},\n ...remapping.allowedDependentValues,\n ]}\n setAttributeMapping={setAttributeMapping}\n />\n ))}\n </KitSpace>\n );\n};\n"]}
@@ -1,23 +1,35 @@
1
1
  import { type SystemTranslation } from '../../../../types';
2
- import { type SaveValueBulkMappingValueInput } from '../../../../_gqlTypes';
2
+ import { type RecordFilterInput, type SaveValueBulkMappingValueInput } from '../../../../_gqlTypes';
3
3
  export type MassEditableAttribute = {
4
4
  id: string;
5
5
  label?: SystemTranslation;
6
6
  dependencies: Array<{
7
7
  id: string;
8
8
  label?: SystemTranslation;
9
+ linkedTreeLibraryId: string;
9
10
  }>;
10
11
  hasEmptyDependency: boolean;
11
12
  isSimpleWorkflow: boolean;
12
13
  isMonoDependencyWorkflow: boolean;
13
- treeNodes: MassEditTreeNode[];
14
14
  };
15
15
  export type MassEditTreeNode = {
16
16
  id: string | null;
17
17
  label: string;
18
18
  color?: string | null;
19
- allowedDependentNodeIds?: string[];
20
19
  };
21
20
  export type SetAttributeMapping = (mapping: SaveValueBulkMappingValueInput & {
22
21
  occurrenceCount: number;
23
22
  }) => void;
23
+ export type SetAttributeMappingWithDependency = (mapping: SaveValueBulkMappingValueInput & {
24
+ occurrenceCount: number;
25
+ } & {
26
+ dependencyFilter: RecordFilterInput;
27
+ }) => void;
28
+ export type DependencyValue = {
29
+ key: string;
30
+ label: string;
31
+ dependencyFilter: RecordFilterInput;
32
+ filtersWithDependency: RecordFilterInput[];
33
+ dependencyAttributeId?: string;
34
+ dependencyAttributeNodeId?: string;
35
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/_types.ts"],"names":[],"mappings":"","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 SystemTranslation} from '_ui/types';\nimport {type SaveValueBulkMappingValueInput} from '_ui/_gqlTypes';\n\nexport type MassEditableAttribute = {\n id: string;\n label?: SystemTranslation;\n dependencies: Array<{id: string; label?: SystemTranslation}>;\n hasEmptyDependency: boolean;\n isSimpleWorkflow: boolean;\n isMonoDependencyWorkflow: boolean;\n treeNodes: MassEditTreeNode[];\n};\n\nexport type MassEditTreeNode = {\n id: string | null;\n label: string;\n color?: string | null;\n allowedDependentNodeIds?: string[];\n};\n\nexport type SetAttributeMapping = (mapping: SaveValueBulkMappingValueInput & {occurrenceCount: number}) => void;\n"]}
1
+ {"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/_types.ts"],"names":[],"mappings":"","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 SystemTranslation} from '_ui/types';\nimport {type RecordFilterInput, type SaveValueBulkMappingValueInput} from '_ui/_gqlTypes';\n\nexport type MassEditableAttribute = {\n id: string;\n label?: SystemTranslation;\n dependencies: Array<{id: string; label?: SystemTranslation; linkedTreeLibraryId: string}>;\n hasEmptyDependency: boolean;\n isSimpleWorkflow: boolean;\n isMonoDependencyWorkflow: boolean;\n};\n\nexport type MassEditTreeNode = {\n id: string | null;\n label: string;\n color?: string | null;\n};\n\nexport type SetAttributeMapping = (mapping: SaveValueBulkMappingValueInput & {occurrenceCount: number}) => void;\n\nexport type SetAttributeMappingWithDependency = (\n mapping: SaveValueBulkMappingValueInput & {occurrenceCount: number} & {dependencyFilter: RecordFilterInput},\n) => void;\n\nexport type DependencyValue = {\n key: string;\n label: string;\n dependencyFilter: RecordFilterInput;\n filtersWithDependency: RecordFilterInput[];\n dependencyAttributeId?: string;\n dependencyAttributeNodeId?: string;\n};\n"]}
@@ -0,0 +1,13 @@
1
+ import { type RecordFilterInput } from '../../../../_gqlTypes';
2
+ import { type DependencyValue } from './_types';
3
+ export declare const useDependencyValues: ({ libraryId, monoDependencyAttribute, massSelectionFilters, }: {
4
+ libraryId: string;
5
+ monoDependencyAttribute: {
6
+ id: string;
7
+ linkedTreeLibraryId: string;
8
+ };
9
+ massSelectionFilters: RecordFilterInput[];
10
+ }) => {
11
+ dependencyValues: DependencyValue[];
12
+ loading: boolean;
13
+ };
@@ -0,0 +1,47 @@
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 { RecordFilterCondition, RecordFilterOperator, useValuesOccurrencesForDependencyQuery, } from '../../../../_gqlTypes';
5
+ import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
6
+ export const useDependencyValues = ({ libraryId, monoDependencyAttribute, massSelectionFilters, }) => {
7
+ const { t } = useSharedTranslation();
8
+ const { data, loading } = useValuesOccurrencesForDependencyQuery({
9
+ variables: {
10
+ libraryId,
11
+ dependencyAttributeId: monoDependencyAttribute.id,
12
+ recordFilters: massSelectionFilters,
13
+ },
14
+ });
15
+ const dependencyValues = (data?.listDistinctValues ?? []).map(occurrence => {
16
+ const dependencyFilter = occurrence.treeNode
17
+ ? {
18
+ field: `${monoDependencyAttribute.id}.${monoDependencyAttribute.linkedTreeLibraryId}.id`,
19
+ condition: RecordFilterCondition.EQUAL,
20
+ value: occurrence.treeNode.record.id,
21
+ }
22
+ : {
23
+ field: monoDependencyAttribute.id,
24
+ condition: RecordFilterCondition.IS_EMPTY,
25
+ };
26
+ const filtersWithDependency = massSelectionFilters.length > 0
27
+ ? [
28
+ dependencyFilter,
29
+ { operator: RecordFilterOperator.AND },
30
+ { operator: RecordFilterOperator.OPEN_BRACKET },
31
+ ...massSelectionFilters,
32
+ { operator: RecordFilterOperator.CLOSE_BRACKET },
33
+ ]
34
+ : [dependencyFilter];
35
+ return {
36
+ key: occurrence.treeNode?.id ?? 'no-dependency',
37
+ label: occurrence.treeNode?.record.whoAmI.label ??
38
+ String(t('explorer.massAction.editAttribute_value_undefined')),
39
+ dependencyFilter,
40
+ filtersWithDependency,
41
+ dependencyAttributeId: occurrence.treeNode ? monoDependencyAttribute.id : undefined,
42
+ dependencyAttributeNodeId: occurrence.treeNode?.id,
43
+ };
44
+ });
45
+ return { dependencyValues, loading };
46
+ };
47
+ //# sourceMappingURL=useDependencyValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDependencyValues.js","sourceRoot":"","sources":["../../../../../src/components/Explorer/actions-mass/edit-attribute/useDependencyValues.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EACH,qBAAqB,EAErB,oBAAoB,EACpB,sCAAsC,GACzC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAGpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAChC,SAAS,EACT,uBAAuB,EACvB,oBAAoB,GAKvB,EAA2D,EAAE;IAC1D,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,EAAC,IAAI,EAAE,OAAO,EAAC,GAAG,sCAAsC,CAAC;QAC3D,SAAS,EAAE;YACP,SAAS;YACT,qBAAqB,EAAE,uBAAuB,CAAC,EAAE;YACjD,aAAa,EAAE,oBAAoB;SACtC;KACJ,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QACvE,MAAM,gBAAgB,GAAsB,UAAU,CAAC,QAAQ;YAC3D,CAAC,CAAC;gBACI,KAAK,EAAE,GAAG,uBAAuB,CAAC,EAAE,IAAI,uBAAuB,CAAC,mBAAmB,KAAK;gBACxF,SAAS,EAAE,qBAAqB,CAAC,KAAK;gBACtC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;aACvC;YACH,CAAC,CAAC;gBACI,KAAK,EAAE,uBAAuB,CAAC,EAAE;gBACjC,SAAS,EAAE,qBAAqB,CAAC,QAAQ;aAC5C,CAAC;QAER,MAAM,qBAAqB,GACvB,oBAAoB,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC;gBACI,gBAAgB;gBAChB,EAAC,QAAQ,EAAE,oBAAoB,CAAC,GAAG,EAAC;gBACpC,EAAC,QAAQ,EAAE,oBAAoB,CAAC,YAAY,EAAC;gBAC7C,GAAG,oBAAoB;gBACvB,EAAC,QAAQ,EAAE,oBAAoB,CAAC,aAAa,EAAC;aACjD;YACH,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAE7B,OAAO;YACH,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,eAAe;YAC/C,KAAK,EACD,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;gBACxC,MAAM,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC;YAClE,gBAAgB;YAChB,qBAAqB;YACrB,qBAAqB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YACnF,yBAAyB,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE;SACrD,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,EAAC,gBAAgB,EAAE,OAAO,EAAC,CAAC;AACvC,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 {\n RecordFilterCondition,\n type RecordFilterInput,\n RecordFilterOperator,\n useValuesOccurrencesForDependencyQuery,\n} from '_ui/_gqlTypes';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type DependencyValue} from './_types';\n\nexport const useDependencyValues = ({\n libraryId,\n monoDependencyAttribute,\n massSelectionFilters,\n}: {\n libraryId: string;\n monoDependencyAttribute: {id: string; linkedTreeLibraryId: string};\n massSelectionFilters: RecordFilterInput[];\n}): {dependencyValues: DependencyValue[]; loading: boolean} => {\n const {t} = useSharedTranslation();\n\n const {data, loading} = useValuesOccurrencesForDependencyQuery({\n variables: {\n libraryId,\n dependencyAttributeId: monoDependencyAttribute.id,\n recordFilters: massSelectionFilters,\n },\n });\n\n const dependencyValues = (data?.listDistinctValues ?? []).map(occurrence => {\n const dependencyFilter: RecordFilterInput = occurrence.treeNode\n ? {\n field: `${monoDependencyAttribute.id}.${monoDependencyAttribute.linkedTreeLibraryId}.id`,\n condition: RecordFilterCondition.EQUAL,\n value: occurrence.treeNode.record.id,\n }\n : {\n field: monoDependencyAttribute.id,\n condition: RecordFilterCondition.IS_EMPTY,\n };\n\n const filtersWithDependency: RecordFilterInput[] =\n massSelectionFilters.length > 0\n ? [\n dependencyFilter,\n {operator: RecordFilterOperator.AND},\n {operator: RecordFilterOperator.OPEN_BRACKET},\n ...massSelectionFilters,\n {operator: RecordFilterOperator.CLOSE_BRACKET},\n ]\n : [dependencyFilter];\n\n return {\n key: occurrence.treeNode?.id ?? 'no-dependency',\n label:\n occurrence.treeNode?.record.whoAmI.label ??\n String(t('explorer.massAction.editAttribute_value_undefined')),\n dependencyFilter,\n filtersWithDependency,\n dependencyAttributeId: occurrence.treeNode ? monoDependencyAttribute.id : undefined,\n dependencyAttributeNodeId: occurrence.treeNode?.id,\n };\n });\n\n return {dependencyValues, loading};\n};\n"]}
@@ -0,0 +1,13 @@
1
+ import { type SaveValueBulkMappingInput } from '../../../../_gqlTypes';
2
+ import { type SetAttributeMapping, type SetAttributeMappingWithDependency } from './_types';
3
+ type EditionMapping = {
4
+ count: number;
5
+ mapping: SaveValueBulkMappingInput[];
6
+ };
7
+ export declare const useEditionMappingState: () => {
8
+ editionMapping: EditionMapping;
9
+ resetEditionMapping: () => void;
10
+ applyMappingChange: SetAttributeMapping;
11
+ applyMonoDependencyWorkflowChange: SetAttributeMappingWithDependency;
12
+ };
13
+ export {};
@@ -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"]}