@leav/ui 1.6.0-a54099d3 → 1.6.0-b54abb33

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 (20) hide show
  1. package/dist/_gqlTypes/index.d.ts +9 -0
  2. package/dist/_gqlTypes/index.js +3 -1
  3. package/dist/_gqlTypes/index.js.map +1 -1
  4. package/dist/_queries/trees/treeNodeChildrenQuery.js +2 -0
  5. package/dist/_queries/trees/treeNodeChildrenQuery.js.map +1 -1
  6. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/TreeField.js +6 -0
  7. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/TreeField.js.map +1 -1
  8. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.d.ts +2 -1
  9. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.js +2 -2
  10. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.js.map +1 -1
  11. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/useManageTreeNodeSelection.d.ts +3 -2
  12. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/useManageTreeNodeSelection.js +2 -2
  13. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/useManageTreeNodeSelection.js.map +1 -1
  14. package/dist/components/SelectTreeNode/SelectTreeNode.d.ts +2 -1
  15. package/dist/components/SelectTreeNode/SelectTreeNode.js +3 -3
  16. package/dist/components/SelectTreeNode/SelectTreeNode.js.map +1 -1
  17. package/dist/components/SelectTreeNode/SelectTreeNodeContent.d.ts +2 -1
  18. package/dist/components/SelectTreeNode/SelectTreeNodeContent.js +6 -2
  19. package/dist/components/SelectTreeNode/SelectTreeNodeContent.js.map +1 -1
  20. package/package.json +1 -1
@@ -41,12 +41,14 @@ export const getTreeNodeChildrenQuery = gql `
41
41
  $node: ID
42
42
  $pagination: Pagination
43
43
  $childrenAsRecordValuePermissionFilter: ChildrenAsRecordValuePermissionFilterInput
44
+ $dependentValuesPermissionFilter: DependentValuesPermissionFilterInput
44
45
  ) {
45
46
  treeNodeChildren(
46
47
  treeId: $treeId
47
48
  node: $node
48
49
  pagination: $pagination
49
50
  childrenAsRecordValuePermissionFilter: $childrenAsRecordValuePermissionFilter
51
+ dependentValuesPermissionFilter: $dependentValuesPermissionFilter
50
52
  ) {
51
53
  totalCount
52
54
  list {
@@ -1 +1 @@
1
- {"version":3,"file":"treeNodeChildrenQuery.js","sourceRoot":"","sources":["../../../src/_queries/trees/treeNodeChildrenQuery.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,GAAG,EAAC,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,oBAAoB,CAAC;AAE1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;MACrC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkD3B,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 {gql} from '@apollo/client';\nimport {recordIdentityFragment} from '../../gqlFragments';\n\nexport const getTreeNodeChildrenQuery = gql`\n ${recordIdentityFragment}\n\n fragment TreeNodeChild on TreeNodeLight {\n id\n order\n childrenCount\n record {\n ...RecordIdentity\n active: property(attribute: \"active\") {\n ... on Value {\n value\n }\n }\n }\n ancestors {\n id\n record {\n id\n library {\n id\n label\n }\n ...RecordIdentity\n }\n }\n permissions {\n access_tree\n detach\n edit_children\n }\n }\n\n query TREE_NODE_CHILDREN(\n $treeId: ID!\n $node: ID\n $pagination: Pagination\n $childrenAsRecordValuePermissionFilter: ChildrenAsRecordValuePermissionFilterInput\n ) {\n treeNodeChildren(\n treeId: $treeId\n node: $node\n pagination: $pagination\n childrenAsRecordValuePermissionFilter: $childrenAsRecordValuePermissionFilter\n ) {\n totalCount\n list {\n ...TreeNodeChild\n }\n }\n }\n`;\n"]}
1
+ {"version":3,"file":"treeNodeChildrenQuery.js","sourceRoot":"","sources":["../../../src/_queries/trees/treeNodeChildrenQuery.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,GAAG,EAAC,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,oBAAoB,CAAC;AAE1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;MACrC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoD3B,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 {gql} from '@apollo/client';\nimport {recordIdentityFragment} from '../../gqlFragments';\n\nexport const getTreeNodeChildrenQuery = gql`\n ${recordIdentityFragment}\n\n fragment TreeNodeChild on TreeNodeLight {\n id\n order\n childrenCount\n record {\n ...RecordIdentity\n active: property(attribute: \"active\") {\n ... on Value {\n value\n }\n }\n }\n ancestors {\n id\n record {\n id\n library {\n id\n label\n }\n ...RecordIdentity\n }\n }\n permissions {\n access_tree\n detach\n edit_children\n }\n }\n\n query TREE_NODE_CHILDREN(\n $treeId: ID!\n $node: ID\n $pagination: Pagination\n $childrenAsRecordValuePermissionFilter: ChildrenAsRecordValuePermissionFilterInput\n $dependentValuesPermissionFilter: DependentValuesPermissionFilterInput\n ) {\n treeNodeChildren(\n treeId: $treeId\n node: $node\n pagination: $pagination\n childrenAsRecordValuePermissionFilter: $childrenAsRecordValuePermissionFilter\n dependentValuesPermissionFilter: $dependentValuesPermissionFilter\n ) {\n totalCount\n list {\n ...TreeNodeChild\n }\n }\n }\n`;\n"]}
@@ -76,6 +76,11 @@ const TreeField = ({ element, readonly, isFormCreationMode, onDeleteMultipleValu
76
76
  attributeId: state.activeAttribute?.attribute?.id,
77
77
  action: RecordPermissionsActions.create_record,
78
78
  };
79
+ const dependentValuesPermissionFilter = {
80
+ libraryId: state.libraryId,
81
+ attributeId: state.activeAttribute?.attribute?.id,
82
+ recordId: state.record?.id,
83
+ };
79
84
  const { openModal, removeTreeNode, actionButtonLabel, SelectTreeNodeModal, RemoveAllTreeNodes } = useManageTreeNodeSelection({
80
85
  modaleTitle: label,
81
86
  attribute,
@@ -88,6 +93,7 @@ const TreeField = ({ element, readonly, isFormCreationMode, onDeleteMultipleValu
88
93
  isReadOnly,
89
94
  isFieldInError,
90
95
  childrenAsRecordValuePermissionFilter,
96
+ dependentValuesPermissionFilter,
91
97
  });
92
98
  return (_jsx(StyledWrapperDiv, { "$metadataEdit": metadataEdit, children: _jsx(AntForm.Item, { name: attribute.id, noStyle: true, children: _jsxs(KitInputWrapperStyled, { id: TREE_FIELD_ID_PREFIX + attribute.id, "data-testid": "tree-field", label: label, required: attribute.required, bordered: true, status: isFieldInError ? 'error' : undefined, helper: isFieldInError ? String(fieldErrors[0]) : undefined, "$readonlyBackground": isReadOnly, extra: _jsxs(_Fragment, { children: [_jsx(KitInputExtraAlignLeftDiv, { children: _jsx(ComputeIndicator, { calculatedFlags: calculatedFlags, inheritedFlags: inheritedFlags }) }), RemoveAllTreeNodes] }), children: [_jsx(TreeNodeList, { attribute: attribute, backendValues: backendValues, removeTreeNode: removeTreeNode, isReadOnly: isReadOnly }), !isReadOnly && (_jsx(StyledFieldFooterKitButton, { icon: _jsx(FontAwesomeIcon, { icon: faList }), onClick: openModal, size: "m", "$hasNoValue": !backendValues?.length, children: actionButtonLabel })), SelectTreeNodeModal] }) }) }));
93
99
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TreeField.js","sourceRoot":"","sources":["../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/TreeField/TreeField.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, useEffect, useState} from 'react';\nimport styled, {css} from 'styled-components';\nimport {type ICommonFieldsSettings, localizedTranslation} from '@leav/utils';\nimport {AntForm, KitButton, KitInputWrapper} from 'aristid-ds';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faList} from '@fortawesome/free-solid-svg-icons';\nimport {useLang} from '_ui/hooks';\nimport {type IFormElementProps} from '../../_types';\nimport {\n type ChildrenAsRecordValuePermissionFilterInput,\n type RecordFormAttributeTreeAttributeFragment,\n RecordPermissionsActions,\n} from '_ui/_gqlTypes';\nimport {TREE_FIELD_ID_PREFIX} from '_ui/constants';\nimport {type RecordFormElementsValueTreeValue} from '_ui/hooks/useGetRecordForm';\nimport {TreeNodeList} from './display-tree-node/TreeNodeList';\nimport {useManageTreeNodeSelection} from './manage-tree-node-selection/useManageTreeNodeSelection';\nimport {useOutsideInteractionDetector} from '../shared/useOutsideInteractionDetector';\nimport {useEditRecordReducer} from '_ui/components/RecordEdition/editRecordReducer/useEditRecordReducer';\nimport {EditRecordReducerActionsTypes} from '_ui/components/RecordEdition/editRecordReducer/editRecordReducer';\nimport {computeCalculatedFlags, computeInheritedFlags} from '../shared/calculatedInheritedFlags';\nimport {ComputeIndicator} from '../shared/ComputeIndicator';\n\nconst StyledWrapperDiv = styled.div<{$metadataEdit: boolean}>`\n margin-bottom: ${props => (props.$metadataEdit ? 0 : '1.5em')};\n`;\n\nconst KitInputExtraAlignLeftDiv = styled.div`\n margin-right: auto;\n line-height: 12px;\n`;\n\nconst StyledFieldFooterKitButton = styled(KitButton)<{$hasNoValue: boolean}>`\n margin-top: ${props => (props.$hasNoValue ? 0 : 'calc((var(--general-spacing-xs)) * 1px)')};\n`;\n\nconst KitInputWrapperStyled = styled(KitInputWrapper)<{$readonlyBackground: boolean}>`\n .kit-input-wrapper-content {\n min-height: 48px;\n }\n\n ${props =>\n props.$readonlyBackground &&\n css`\n .kit-input-wrapper-content {\n background-color: var(--general-utilities-neutral-light);\n }\n `}\n`;\n\ntype TreeFieldProps = IFormElementProps<ICommonFieldsSettings>;\n\nconst TreeField: FunctionComponent<TreeFieldProps> = ({\n element,\n readonly,\n isFormCreationMode,\n onDeleteMultipleValues,\n onValueSubmit,\n onValueDelete,\n metadataEdit = false,\n}) => {\n const {state, dispatch} = useEditRecordReducer();\n const {lang} = useLang();\n const {\n settings,\n attribute,\n values,\n }: {\n settings: typeof element.settings;\n attribute?: RecordFormAttributeTreeAttributeFragment;\n values?: RecordFormElementsValueTreeValue[];\n } = element;\n\n const [backendValues, setBackendValues] = useState<RecordFormElementsValueTreeValue[]>(values);\n\n const calculatedFlags = computeCalculatedFlags(backendValues);\n const inheritedFlags = computeInheritedFlags(backendValues);\n const label = localizedTranslation(settings.label, lang);\n const form = AntForm.useFormInstance();\n const fieldErrors = form.getFieldError(attribute.id);\n\n // TODO: Temporary const that should be removed (and all it's usages) when we will have a proper way to override multiple values\n const tmpCantOverrideValues =\n attribute.multiple_values &&\n (calculatedFlags.calculatedValues?.length > 1 || inheritedFlags.inheritedValues?.length > 1);\n\n const isReadOnly = attribute.readonly || !attribute.permissions.edit_value || readonly || tmpCantOverrideValues;\n const isFieldInError = fieldErrors.length > 0;\n\n useEffect(() => {\n if (state.activeAttribute?.attribute.id === attribute.id) {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_ACTIVE_VALUE,\n values: backendValues,\n });\n }\n }, [backendValues]);\n\n useOutsideInteractionDetector({\n attribute,\n activeAttribute: state.activeAttribute,\n attributePrefix: TREE_FIELD_ID_PREFIX,\n dispatch,\n backendValues,\n allowedSelectors: ['.kit-modal-wrapper'],\n });\n\n const childrenAsRecordValuePermissionFilter: ChildrenAsRecordValuePermissionFilterInput = {\n libraryId: state.libraryId,\n attributeId: state.activeAttribute?.attribute?.id,\n action: RecordPermissionsActions.create_record,\n };\n\n const {openModal, removeTreeNode, actionButtonLabel, SelectTreeNodeModal, RemoveAllTreeNodes} =\n useManageTreeNodeSelection({\n modaleTitle: label,\n attribute,\n isFormCreationMode,\n backendValues,\n setBackendValues,\n onValueSubmit,\n onValueDelete,\n onDeleteMultipleValues,\n isReadOnly,\n isFieldInError,\n childrenAsRecordValuePermissionFilter,\n });\n\n return (\n <StyledWrapperDiv $metadataEdit={metadataEdit}>\n <AntForm.Item name={attribute.id} noStyle>\n <KitInputWrapperStyled\n id={TREE_FIELD_ID_PREFIX + attribute.id}\n data-testid=\"tree-field\"\n label={label}\n required={attribute.required}\n bordered\n status={isFieldInError ? 'error' : undefined}\n helper={isFieldInError ? String(fieldErrors[0]) : undefined}\n $readonlyBackground={isReadOnly}\n extra={\n <>\n <KitInputExtraAlignLeftDiv>\n <ComputeIndicator calculatedFlags={calculatedFlags} inheritedFlags={inheritedFlags} />\n </KitInputExtraAlignLeftDiv>\n {RemoveAllTreeNodes}\n </>\n }\n >\n <TreeNodeList\n attribute={attribute}\n backendValues={backendValues}\n removeTreeNode={removeTreeNode}\n isReadOnly={isReadOnly}\n />\n {!isReadOnly && (\n <StyledFieldFooterKitButton\n icon={<FontAwesomeIcon icon={faList} />}\n onClick={openModal}\n size=\"m\"\n $hasNoValue={!backendValues?.length}\n >\n {actionButtonLabel}\n </StyledFieldFooterKitButton>\n )}\n {SelectTreeNodeModal}\n </KitInputWrapperStyled>\n </AntForm.Item>\n </StyledWrapperDiv>\n );\n};\n\nexport default TreeField;\n"]}
1
+ {"version":3,"file":"TreeField.js","sourceRoot":"","sources":["../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/TreeField/TreeField.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, useEffect, useState} from 'react';\nimport styled, {css} from 'styled-components';\nimport {type ICommonFieldsSettings, localizedTranslation} from '@leav/utils';\nimport {AntForm, KitButton, KitInputWrapper} from 'aristid-ds';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faList} from '@fortawesome/free-solid-svg-icons';\nimport {useLang} from '_ui/hooks';\nimport {type IFormElementProps} from '../../_types';\nimport {\n type ChildrenAsRecordValuePermissionFilterInput,\n type DependentValuesPermissionFilterInput,\n type RecordFormAttributeTreeAttributeFragment,\n RecordPermissionsActions,\n} from '_ui/_gqlTypes';\nimport {TREE_FIELD_ID_PREFIX} from '_ui/constants';\nimport {type RecordFormElementsValueTreeValue} from '_ui/hooks/useGetRecordForm';\nimport {TreeNodeList} from './display-tree-node/TreeNodeList';\nimport {useManageTreeNodeSelection} from './manage-tree-node-selection/useManageTreeNodeSelection';\nimport {useOutsideInteractionDetector} from '../shared/useOutsideInteractionDetector';\nimport {useEditRecordReducer} from '_ui/components/RecordEdition/editRecordReducer/useEditRecordReducer';\nimport {EditRecordReducerActionsTypes} from '_ui/components/RecordEdition/editRecordReducer/editRecordReducer';\nimport {computeCalculatedFlags, computeInheritedFlags} from '../shared/calculatedInheritedFlags';\nimport {ComputeIndicator} from '../shared/ComputeIndicator';\n\nconst StyledWrapperDiv = styled.div<{$metadataEdit: boolean}>`\n margin-bottom: ${props => (props.$metadataEdit ? 0 : '1.5em')};\n`;\n\nconst KitInputExtraAlignLeftDiv = styled.div`\n margin-right: auto;\n line-height: 12px;\n`;\n\nconst StyledFieldFooterKitButton = styled(KitButton)<{$hasNoValue: boolean}>`\n margin-top: ${props => (props.$hasNoValue ? 0 : 'calc((var(--general-spacing-xs)) * 1px)')};\n`;\n\nconst KitInputWrapperStyled = styled(KitInputWrapper)<{$readonlyBackground: boolean}>`\n .kit-input-wrapper-content {\n min-height: 48px;\n }\n\n ${props =>\n props.$readonlyBackground &&\n css`\n .kit-input-wrapper-content {\n background-color: var(--general-utilities-neutral-light);\n }\n `}\n`;\n\ntype TreeFieldProps = IFormElementProps<ICommonFieldsSettings>;\n\nconst TreeField: FunctionComponent<TreeFieldProps> = ({\n element,\n readonly,\n isFormCreationMode,\n onDeleteMultipleValues,\n onValueSubmit,\n onValueDelete,\n metadataEdit = false,\n}) => {\n const {state, dispatch} = useEditRecordReducer();\n const {lang} = useLang();\n const {\n settings,\n attribute,\n values,\n }: {\n settings: typeof element.settings;\n attribute?: RecordFormAttributeTreeAttributeFragment;\n values?: RecordFormElementsValueTreeValue[];\n } = element;\n\n const [backendValues, setBackendValues] = useState<RecordFormElementsValueTreeValue[]>(values);\n\n const calculatedFlags = computeCalculatedFlags(backendValues);\n const inheritedFlags = computeInheritedFlags(backendValues);\n const label = localizedTranslation(settings.label, lang);\n const form = AntForm.useFormInstance();\n const fieldErrors = form.getFieldError(attribute.id);\n\n // TODO: Temporary const that should be removed (and all it's usages) when we will have a proper way to override multiple values\n const tmpCantOverrideValues =\n attribute.multiple_values &&\n (calculatedFlags.calculatedValues?.length > 1 || inheritedFlags.inheritedValues?.length > 1);\n\n const isReadOnly = attribute.readonly || !attribute.permissions.edit_value || readonly || tmpCantOverrideValues;\n const isFieldInError = fieldErrors.length > 0;\n\n useEffect(() => {\n if (state.activeAttribute?.attribute.id === attribute.id) {\n dispatch({\n type: EditRecordReducerActionsTypes.SET_ACTIVE_VALUE,\n values: backendValues,\n });\n }\n }, [backendValues]);\n\n useOutsideInteractionDetector({\n attribute,\n activeAttribute: state.activeAttribute,\n attributePrefix: TREE_FIELD_ID_PREFIX,\n dispatch,\n backendValues,\n allowedSelectors: ['.kit-modal-wrapper'],\n });\n\n const childrenAsRecordValuePermissionFilter: ChildrenAsRecordValuePermissionFilterInput = {\n libraryId: state.libraryId,\n attributeId: state.activeAttribute?.attribute?.id,\n action: RecordPermissionsActions.create_record,\n };\n\n const dependentValuesPermissionFilter: DependentValuesPermissionFilterInput = {\n libraryId: state.libraryId,\n attributeId: state.activeAttribute?.attribute?.id,\n recordId: state.record?.id,\n };\n\n const {openModal, removeTreeNode, actionButtonLabel, SelectTreeNodeModal, RemoveAllTreeNodes} =\n useManageTreeNodeSelection({\n modaleTitle: label,\n attribute,\n isFormCreationMode,\n backendValues,\n setBackendValues,\n onValueSubmit,\n onValueDelete,\n onDeleteMultipleValues,\n isReadOnly,\n isFieldInError,\n childrenAsRecordValuePermissionFilter,\n dependentValuesPermissionFilter,\n });\n\n return (\n <StyledWrapperDiv $metadataEdit={metadataEdit}>\n <AntForm.Item name={attribute.id} noStyle>\n <KitInputWrapperStyled\n id={TREE_FIELD_ID_PREFIX + attribute.id}\n data-testid=\"tree-field\"\n label={label}\n required={attribute.required}\n bordered\n status={isFieldInError ? 'error' : undefined}\n helper={isFieldInError ? String(fieldErrors[0]) : undefined}\n $readonlyBackground={isReadOnly}\n extra={\n <>\n <KitInputExtraAlignLeftDiv>\n <ComputeIndicator calculatedFlags={calculatedFlags} inheritedFlags={inheritedFlags} />\n </KitInputExtraAlignLeftDiv>\n {RemoveAllTreeNodes}\n </>\n }\n >\n <TreeNodeList\n attribute={attribute}\n backendValues={backendValues}\n removeTreeNode={removeTreeNode}\n isReadOnly={isReadOnly}\n />\n {!isReadOnly && (\n <StyledFieldFooterKitButton\n icon={<FontAwesomeIcon icon={faList} />}\n onClick={openModal}\n size=\"m\"\n $hasNoValue={!backendValues?.length}\n >\n {actionButtonLabel}\n </StyledFieldFooterKitButton>\n )}\n {SelectTreeNodeModal}\n </KitInputWrapperStyled>\n </AntForm.Item>\n </StyledWrapperDiv>\n );\n};\n\nexport default TreeField;\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type FunctionComponent } from 'react';
2
- import { type ChildrenAsRecordValuePermissionFilterInput, type RecordFormAttributeTreeAttributeFragment } from '../../../../../../_gqlTypes';
2
+ import { type DependentValuesPermissionFilterInput, type ChildrenAsRecordValuePermissionFilterInput, type RecordFormAttributeTreeAttributeFragment } from '../../../../../../_gqlTypes';
3
3
  import { type RecordFormElementsValueTreeValue } from '../../../../../../hooks/useGetRecordForm';
4
4
  import { type ITreeNodeWithRecord } from '../../../../../../types';
5
5
  type SelectTreeNodeModalBackendValue = RecordFormElementsValueTreeValue | {
@@ -21,6 +21,7 @@ interface ISelectTreeNodeModalProps {
21
21
  onConfirm: (selectedNodes: ITreeNodeWithRecord[]) => void;
22
22
  onClose: () => void;
23
23
  childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;
24
+ dependentValuesPermissionFilter?: DependentValuesPermissionFilterInput;
24
25
  className?: string;
25
26
  }
26
27
  export declare const SelectTreeNodeModal: FunctionComponent<ISelectTreeNodeModalProps>;
@@ -10,7 +10,7 @@ import { SelectTreeNode } from '../../../../../../components/SelectTreeNode';
10
10
  import { useSharedTranslation } from '../../../../../../hooks/useSharedTranslation';
11
11
  const SELECT_TREE_NODE_MODAL_HEIGHT = '563px';
12
12
  const SELECT_TREE_NODE_MODAL_WIDTH = '656px';
13
- export const SelectTreeNodeModal = ({ title, open, attribute, backendValues, onConfirm, onClose, childrenAsRecordValuePermissionFilter, className, }) => {
13
+ export const SelectTreeNodeModal = ({ title, open, attribute, backendValues, onConfirm, onClose, childrenAsRecordValuePermissionFilter, dependentValuesPermissionFilter, className, }) => {
14
14
  const { t } = useSharedTranslation();
15
15
  const [selectedNodes, setSelectedNodes] = useState([]);
16
16
  const _handleOnSelect = (node, selected) => {
@@ -34,6 +34,6 @@ export const SelectTreeNodeModal = ({ title, open, attribute, backendValues, onC
34
34
  : true, selectedNodes: [
35
35
  ...selectedNodes.map(node => node.id),
36
36
  ...backendValues.map(value => value.treeValue.id),
37
- ], childrenAsRecordValuePermissionFilter: childrenAsRecordValuePermissionFilter, disabledNodes: backendValues.map(value => value.treeValue.id).concat(attribute.linked_tree.id), onSelect: _handleOnSelect }) }));
37
+ ], childrenAsRecordValuePermissionFilter: childrenAsRecordValuePermissionFilter, dependentValuesPermissionFilter: dependentValuesPermissionFilter, disabledNodes: backendValues.map(value => value.treeValue.id).concat(attribute.linked_tree.id), onSelect: _handleOnSelect }) }));
38
38
  };
39
39
  //# sourceMappingURL=SelectTreeNodeModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTreeNodeModal.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.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 ComponentProps, type FunctionComponent, useState} from 'react';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faCheck, faXmark} from '@fortawesome/free-solid-svg-icons';\nimport {KitButton, KitModal} from 'aristid-ds';\nimport {\n type ChildrenAsRecordValuePermissionFilterInput,\n type RecordFormAttributeTreeAttributeFragment,\n} from '_ui/_gqlTypes';\nimport {SelectTreeNode} from '_ui/components/SelectTreeNode';\nimport {type RecordFormElementsValueTreeValue} from '_ui/hooks/useGetRecordForm';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type ITreeNodeWithRecord} from '_ui/types';\n\nconst SELECT_TREE_NODE_MODAL_HEIGHT = '563px';\nconst SELECT_TREE_NODE_MODAL_WIDTH = '656px';\n\ntype SelectTreeNodeModalBackendValue =\n | RecordFormElementsValueTreeValue\n | {\n treeValue: {\n id: string;\n };\n };\n\ntype SelectTreeNodeModalAttribute =\n | RecordFormAttributeTreeAttributeFragment\n | {\n multiple_values: boolean;\n linked_tree: {\n id: string;\n };\n };\n\ninterface ISelectTreeNodeModalProps {\n title: string;\n open: boolean;\n attribute: SelectTreeNodeModalAttribute;\n backendValues: SelectTreeNodeModalBackendValue[];\n onConfirm: (selectedNodes: ITreeNodeWithRecord[]) => void;\n onClose: () => void;\n childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;\n className?: string;\n}\n\nexport const SelectTreeNodeModal: FunctionComponent<ISelectTreeNodeModalProps> = ({\n title,\n open,\n attribute,\n backendValues,\n onConfirm,\n onClose,\n childrenAsRecordValuePermissionFilter,\n className,\n}) => {\n const {t} = useSharedTranslation();\n\n const [selectedNodes, setSelectedNodes] = useState<ITreeNodeWithRecord[]>([]);\n\n const _handleOnSelect: ComponentProps<typeof SelectTreeNode>['onSelect'] = (node, selected) => {\n if (!attribute.multiple_values) {\n onConfirm(selected ? [node] : []);\n onClose();\n return;\n }\n\n if (selected) {\n setSelectedNodes(prev => [...prev, node]);\n } else {\n setSelectedNodes(prev => prev.filter(selectedValue => selectedValue.id !== node.id));\n }\n };\n\n const _handleOnConfirm: ComponentProps<typeof KitButton>['onClick'] = () => {\n onConfirm(selectedNodes);\n onClose();\n };\n\n return (\n <KitModal\n appElement={document.getElementById('root')}\n className={className}\n showCloseIcon\n width={SELECT_TREE_NODE_MODAL_WIDTH}\n height={SELECT_TREE_NODE_MODAL_HEIGHT}\n title={title}\n isOpen={open}\n close={onClose}\n footer={\n <>\n <KitButton icon={<FontAwesomeIcon icon={faXmark} />} onClick={onClose}>\n {t('global.close')}\n </KitButton>\n {attribute.multiple_values && (\n <KitButton\n type=\"primary\"\n icon={<FontAwesomeIcon icon={faCheck} />}\n disabled={selectedNodes.length === 0}\n onClick={_handleOnConfirm}\n >\n {t('global.confirm')}\n </KitButton>\n )}\n </>\n }\n >\n <SelectTreeNode\n treeId={attribute.linked_tree.id}\n multiple // We want to be able to set as selected in the tree components, the nodes that are already selected and the disabled nodes\n selectedNodes={[\n ...selectedNodes.map(node => node.id),\n ...backendValues.map(value => value.treeValue.id),\n ]}\n childrenAsRecordValuePermissionFilter={childrenAsRecordValuePermissionFilter}\n disabledNodes={backendValues.map(value => value.treeValue.id).concat(attribute.linked_tree.id)}\n onSelect={_handleOnSelect}\n />\n </KitModal>\n );\n};\n"]}
1
+ {"version":3,"file":"SelectTreeNodeModal.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.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 ComponentProps, type FunctionComponent, useState} from 'react';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faCheck, faXmark} from '@fortawesome/free-solid-svg-icons';\nimport {KitButton, KitModal} from 'aristid-ds';\nimport {\n type DependentValuesPermissionFilterInput,\n type ChildrenAsRecordValuePermissionFilterInput,\n type RecordFormAttributeTreeAttributeFragment,\n} from '_ui/_gqlTypes';\nimport {SelectTreeNode} from '_ui/components/SelectTreeNode';\nimport {type RecordFormElementsValueTreeValue} from '_ui/hooks/useGetRecordForm';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type ITreeNodeWithRecord} from '_ui/types';\n\nconst SELECT_TREE_NODE_MODAL_HEIGHT = '563px';\nconst SELECT_TREE_NODE_MODAL_WIDTH = '656px';\n\ntype SelectTreeNodeModalBackendValue =\n | RecordFormElementsValueTreeValue\n | {\n treeValue: {\n id: string;\n };\n };\n\ntype SelectTreeNodeModalAttribute =\n | RecordFormAttributeTreeAttributeFragment\n | {\n multiple_values: boolean;\n linked_tree: {\n id: string;\n };\n };\n\ninterface ISelectTreeNodeModalProps {\n title: string;\n open: boolean;\n attribute: SelectTreeNodeModalAttribute;\n backendValues: SelectTreeNodeModalBackendValue[];\n onConfirm: (selectedNodes: ITreeNodeWithRecord[]) => void;\n onClose: () => void;\n childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;\n dependentValuesPermissionFilter?: DependentValuesPermissionFilterInput;\n className?: string;\n}\n\nexport const SelectTreeNodeModal: FunctionComponent<ISelectTreeNodeModalProps> = ({\n title,\n open,\n attribute,\n backendValues,\n onConfirm,\n onClose,\n childrenAsRecordValuePermissionFilter,\n dependentValuesPermissionFilter,\n className,\n}) => {\n const {t} = useSharedTranslation();\n\n const [selectedNodes, setSelectedNodes] = useState<ITreeNodeWithRecord[]>([]);\n\n const _handleOnSelect: ComponentProps<typeof SelectTreeNode>['onSelect'] = (node, selected) => {\n if (!attribute.multiple_values) {\n onConfirm(selected ? [node] : []);\n onClose();\n return;\n }\n\n if (selected) {\n setSelectedNodes(prev => [...prev, node]);\n } else {\n setSelectedNodes(prev => prev.filter(selectedValue => selectedValue.id !== node.id));\n }\n };\n\n const _handleOnConfirm: ComponentProps<typeof KitButton>['onClick'] = () => {\n onConfirm(selectedNodes);\n onClose();\n };\n\n return (\n <KitModal\n appElement={document.getElementById('root')}\n className={className}\n showCloseIcon\n width={SELECT_TREE_NODE_MODAL_WIDTH}\n height={SELECT_TREE_NODE_MODAL_HEIGHT}\n title={title}\n isOpen={open}\n close={onClose}\n footer={\n <>\n <KitButton icon={<FontAwesomeIcon icon={faXmark} />} onClick={onClose}>\n {t('global.close')}\n </KitButton>\n {attribute.multiple_values && (\n <KitButton\n type=\"primary\"\n icon={<FontAwesomeIcon icon={faCheck} />}\n disabled={selectedNodes.length === 0}\n onClick={_handleOnConfirm}\n >\n {t('global.confirm')}\n </KitButton>\n )}\n </>\n }\n >\n <SelectTreeNode\n treeId={attribute.linked_tree.id}\n multiple // We want to be able to set as selected in the tree components, the nodes that are already selected and the disabled nodes\n selectedNodes={[\n ...selectedNodes.map(node => node.id),\n ...backendValues.map(value => value.treeValue.id),\n ]}\n childrenAsRecordValuePermissionFilter={childrenAsRecordValuePermissionFilter}\n dependentValuesPermissionFilter={dependentValuesPermissionFilter}\n disabledNodes={backendValues.map(value => value.treeValue.id).concat(attribute.linked_tree.id)}\n onSelect={_handleOnSelect}\n />\n </KitModal>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type Dispatch, type SetStateAction } from 'react';
2
- import { type ChildrenAsRecordValuePermissionFilterInput, type RecordFormAttributeTreeAttributeFragment } from '../../../../../../_gqlTypes';
2
+ import { type DependentValuesPermissionFilterInput, type ChildrenAsRecordValuePermissionFilterInput, type RecordFormAttributeTreeAttributeFragment } from '../../../../../../_gqlTypes';
3
3
  import { type RecordFormElementsValueTreeValue } from '../../../../../../hooks/useGetRecordForm';
4
4
  import { type DeleteMultipleValuesFunc, type DeleteValueFunc, type SubmitValueFunc } from '../../../_types';
5
5
  interface IUseManageTreeNodeSelectionProps {
@@ -14,8 +14,9 @@ interface IUseManageTreeNodeSelectionProps {
14
14
  isReadOnly: boolean;
15
15
  isFieldInError: boolean;
16
16
  childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;
17
+ dependentValuesPermissionFilter?: DependentValuesPermissionFilterInput;
17
18
  }
18
- export declare const useManageTreeNodeSelection: ({ modaleTitle, attribute, isFormCreationMode, backendValues, setBackendValues, onValueSubmit, onValueDelete, onDeleteMultipleValues, isReadOnly, isFieldInError, childrenAsRecordValuePermissionFilter, }: IUseManageTreeNodeSelectionProps) => {
19
+ export declare const useManageTreeNodeSelection: ({ modaleTitle, attribute, isFormCreationMode, backendValues, setBackendValues, onValueSubmit, onValueDelete, onDeleteMultipleValues, isReadOnly, isFieldInError, childrenAsRecordValuePermissionFilter, dependentValuesPermissionFilter, }: IUseManageTreeNodeSelectionProps) => {
19
20
  openModal: () => void;
20
21
  removeTreeNode: (nodeValue: RecordFormElementsValueTreeValue, skipAfterRemove?: boolean) => Promise<void>;
21
22
  actionButtonLabel: string;
@@ -9,7 +9,7 @@ import { useSharedTranslation } from '../../../../../../hooks/useSharedTranslati
9
9
  import { APICallStatus, } from '../../../_types';
10
10
  import { DeleteAllValuesButton } from '../../shared/DeleteAllValuesButton';
11
11
  import { SelectTreeNodeModal } from './SelectTreeNodeModal';
12
- export const useManageTreeNodeSelection = ({ modaleTitle, attribute, isFormCreationMode, backendValues, setBackendValues, onValueSubmit, onValueDelete, onDeleteMultipleValues, isReadOnly, isFieldInError, childrenAsRecordValuePermissionFilter, }) => {
12
+ export const useManageTreeNodeSelection = ({ modaleTitle, attribute, isFormCreationMode, backendValues, setBackendValues, onValueSubmit, onValueDelete, onDeleteMultipleValues, isReadOnly, isFieldInError, childrenAsRecordValuePermissionFilter, dependentValuesPermissionFilter, }) => {
13
13
  const { t } = useSharedTranslation();
14
14
  const form = AntForm.useFormInstance();
15
15
  const [isModalHidden, setIsModalHidden] = useState(true);
@@ -126,7 +126,7 @@ export const useManageTreeNodeSelection = ({ modaleTitle, attribute, isFormCreat
126
126
  }
127
127
  },
128
128
  actionButtonLabel: label,
129
- SelectTreeNodeModal: isModalHidden ? null : (_jsx(SelectTreeNodeModal, { open: true, title: label, attribute: attribute, backendValues: backendValues, onConfirm: _addTreeNodes, onClose: _closeModal, childrenAsRecordValuePermissionFilter: childrenAsRecordValuePermissionFilter })),
129
+ SelectTreeNodeModal: isModalHidden ? null : (_jsx(SelectTreeNodeModal, { open: true, title: label, attribute: attribute, backendValues: backendValues, onConfirm: _addTreeNodes, onClose: _closeModal, childrenAsRecordValuePermissionFilter: childrenAsRecordValuePermissionFilter, dependentValuesPermissionFilter: dependentValuesPermissionFilter })),
130
130
  RemoveAllTreeNodes: !isReadOnly && backendValues.length > 1 && attribute.multiple_values && !attribute.required ? (_jsx(DeleteAllValuesButton, { handleDelete: _removeAllTreeNodes, disabled: isReadOnly, danger: isFieldInError })) : null,
131
131
  };
132
132
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useManageTreeNodeSelection.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/useManageTreeNodeSelection.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAA0D,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACnG,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAC;AAMnC,OAAO,EAAC,yBAAyB,EAAC,MAAM,YAAY,CAAC;AACrD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EACH,aAAa,GAIhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAgB1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACvC,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,qCAAqC,GACN,EAAE,EAAE;IACnC,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAEvC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEzD,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,kBAAkB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC1E,IAAI,CAAC,SAAS,CAAC,CAAC,EAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAC1F,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAA0D,GAAG,EAAE;QAC5E,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,aAAa,GAA4D,KAAK,EAAC,aAAa,EAAC,EAAE;QACjG,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,SAAS;YACT,OAAO,EAAE,CAAC,SAAS,CAAC,eAAe,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YAClG,KAAK,EAAE,IAAI;SACd,CAAC,CAAC,CAAC;QAEJ,kGAAkG;QAClG,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAEvD,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,eAAe,GAAuC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpF,GAAG,KAAK;gBACR,OAAO,EAAE,yBAAyB,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjD,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACvC,GAAG,QAAQ;oBACX,KAAK,EAAE;wBACH,GAAG,QAAQ,CAAC,KAAK;wBACjB,OAAO,EAAE,yBAAyB,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;qBACnE;iBACJ,CAAC,CAAC;aACN,CAAC,CAAC,CAAC;YAEJ,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe;gBAC3C,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC;gBACxC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;YAE3B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAC,SAAS,EAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAExF,IAAI,CAAC,SAAS,CAAC;gBACX;oBACI,IAAI,EAAE,SAAS,CAAC,EAAE;oBAClB,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,IAAI,EAAE,wEAAwE;iBAC1F;aACJ,CAAC,CAAC;YAEH,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAE5F,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3C,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAEhG,OAAO,GAAG,iBAAiB,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC;gBACX;oBACI,IAAI,EAAE,SAAS,CAAC,EAAE;oBAClB,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;iBACvD;aACJ,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAiE,KAAK,IAAI,EAAE;QACjG,kGAAkG;QAClG,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAE/E,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC;gBACX;oBACI,IAAI,EAAE,SAAS,CAAC,EAAE;oBAClB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;iBAC1E;aACJ,CAAC,CAAC;YACH,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE7D,IAAI,CAAC,SAAS,CAAC;gBACX;oBACI,IAAI,EAAE,SAAS,CAAC,EAAE;oBAClB,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;iBACvD;aACJ,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,WAAW,EAAE,CAAC;IAE9H,OAAO;QACH,SAAS,EAAE,GAAG,EAAE;YACZ,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,SAA2C,EAAE,kBAA2B,KAAK,EAAE,EAAE;YACpG,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YAEjF,IAAI,eAAe,EAAE,CAAC;gBAClB,OAAO;YACX,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC1C,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAE9F,IAAI,CAAC,aAAa,CACd,SAAS,CAAC,EAAE,EACZ,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAC,SAAS,EAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CACtD,CAAC;gBAEF,IAAI,CAAC,SAAS,CAAC;oBACX;wBACI,IAAI,EAAE,SAAS,CAAC,EAAE;wBAClB,MAAM,EACF,SAAS,CAAC,QAAQ,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;4BAC/C,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC;4BACvC,CAAC,CAAC,EAAE;qBACf;iBACJ,CAAC,CAAC;gBAEH,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;YACvC,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC;oBACX;wBACI,IAAI,EAAE,SAAS,CAAC,EAAE;wBAClB,MAAM,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;qBACtC;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QACD,iBAAiB,EAAE,KAAK;QACxB,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACxC,KAAC,mBAAmB,IAChB,IAAI,QACJ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,qCAAqC,EAAE,qCAAqC,GAC9E,CACL;QACD,kBAAkB,EACd,CAAC,UAAU,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC1F,KAAC,qBAAqB,IAClB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,cAAc,GACxB,CACL,CAAC,CAAC,CAAC,IAAI;KACf,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 ComponentProps, type Dispatch, type SetStateAction, useEffect, useState} from 'react';\nimport {AntForm} from 'aristid-ds';\nimport {\n type ChildrenAsRecordValuePermissionFilterInput,\n type RecordFormAttributeTreeAttributeFragment,\n} from '_ui/_gqlTypes';\nimport {type RecordFormElementsValueTreeValue} from '_ui/hooks/useGetRecordForm';\nimport {arrayValueVersionToObject} from '_ui/_utils';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {\n APICallStatus,\n type DeleteMultipleValuesFunc,\n type DeleteValueFunc,\n type SubmitValueFunc,\n} from '../../../_types';\nimport {DeleteAllValuesButton} from '../../shared/DeleteAllValuesButton';\nimport {SelectTreeNodeModal} from './SelectTreeNodeModal';\n\ninterface IUseManageTreeNodeSelectionProps {\n modaleTitle: string;\n attribute: RecordFormAttributeTreeAttributeFragment;\n isFormCreationMode: boolean;\n backendValues: RecordFormElementsValueTreeValue[];\n setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueTreeValue[]>>;\n onValueSubmit: SubmitValueFunc;\n onValueDelete: DeleteValueFunc;\n onDeleteMultipleValues: DeleteMultipleValuesFunc;\n isReadOnly: boolean;\n isFieldInError: boolean;\n childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;\n}\n\nexport const useManageTreeNodeSelection = ({\n modaleTitle,\n attribute,\n isFormCreationMode,\n backendValues,\n setBackendValues,\n onValueSubmit,\n onValueDelete,\n onDeleteMultipleValues,\n isReadOnly,\n isFieldInError,\n childrenAsRecordValuePermissionFilter,\n}: IUseManageTreeNodeSelectionProps) => {\n const {t} = useSharedTranslation();\n const form = AntForm.useFormInstance();\n\n const [isModalHidden, setIsModalHidden] = useState(true);\n\n // Used to force the input error display when a value is set\n AntForm.useWatch(attribute.id, form);\n\n useEffect(() => {\n if (!isFormCreationMode && backendValues.length === 0 && attribute.required) {\n form.setFields([{name: attribute.id, errors: [t('errors.standard_field_required')]}]);\n }\n }, []);\n\n const _closeModal: ComponentProps<typeof SelectTreeNodeModal>['onClose'] = () => {\n setIsModalHidden(true);\n };\n\n const _addTreeNodes: ComponentProps<typeof SelectTreeNodeModal>['onConfirm'] = async selectedNodes => {\n const valuesToSave = selectedNodes.map(node => ({\n attribute,\n idValue: !attribute.multiple_values && backendValues.length > 0 ? backendValues[0].id_value : null,\n value: node,\n }));\n\n // When we will handle computed values, we will need to passe the active version (if still needed)\n const result = await onValueSubmit(valuesToSave, null);\n\n if (result.status === APICallStatus.SUCCESS) {\n const formattedValues: RecordFormElementsValueTreeValue[] = result.values.map(value => ({\n ...value,\n version: arrayValueVersionToObject(value.version),\n metadata: value.metadata?.map(metadata => ({\n ...metadata,\n value: {\n ...metadata.value,\n version: arrayValueVersionToObject(metadata.value.version ?? []),\n },\n })),\n }));\n\n const updatedValues = attribute.multiple_values\n ? [...backendValues, ...formattedValues]\n : [...formattedValues];\n\n form.setFieldValue(attribute.id, [...updatedValues.map(({treeValue}) => treeValue.id)]);\n\n form.setFields([\n {\n name: attribute.id,\n errors: [],\n touched: true, // necessary for isFieldsTouched to work properly (only for tree fields)\n },\n ]);\n\n setBackendValues(updatedValues);\n }\n\n if (result.status === APICallStatus.ERROR) {\n const selectedNodesById = selectedNodes.reduce((acc, cur) => ({...acc, [cur.id]: cur}), {});\n\n const errorsMessage = result.errors?.map(err => {\n const linkedRecordLabel = selectedNodesById[err.input].title || selectedNodesById[err.input].id;\n\n return `${linkedRecordLabel}: ${err.message}`;\n });\n\n form.setFields([\n {\n name: attribute.id,\n errors: errorsMessage ?? [t('error.error_occurred')],\n },\n ]);\n }\n };\n\n const _removeAllTreeNodes: ComponentProps<typeof DeleteAllValuesButton>['handleDelete'] = async () => {\n // When we will handle computed values, we will need to passe the active version (if still needed)\n const result = await onDeleteMultipleValues(attribute.id, backendValues, null);\n\n if (result.status === APICallStatus.SUCCESS) {\n form.setFieldValue(attribute.id, []);\n form.setFields([\n {\n name: attribute.id,\n errors: attribute.required ? [t('errors.standard_field_required')] : [],\n },\n ]);\n setBackendValues([]);\n }\n\n if (result.status === APICallStatus.ERROR) {\n const errorsMessage = result.errors?.map(err => err.message);\n\n form.setFields([\n {\n name: attribute.id,\n errors: errorsMessage ?? [t('error.error_occurred')],\n },\n ]);\n }\n };\n\n const label = `${t(!attribute.multiple_values && backendValues.length > 0 ? 'global.replace' : 'global.add')} ${modaleTitle}`;\n\n return {\n openModal: () => {\n setIsModalHidden(false);\n },\n removeTreeNode: async (nodeValue: RecordFormElementsValueTreeValue, skipAfterRemove: boolean = false) => {\n const result = await onValueDelete({id_value: nodeValue.id_value}, attribute.id);\n\n if (skipAfterRemove) {\n return;\n }\n\n if (result.status === APICallStatus.SUCCESS) {\n const newBackendValues = backendValues.filter(value => value.id_value !== nodeValue.id_value);\n\n form.setFieldValue(\n attribute.id,\n newBackendValues.map(({treeValue}) => treeValue.id),\n );\n\n form.setFields([\n {\n name: attribute.id,\n errors:\n attribute.required && newBackendValues.length === 0\n ? [t('errors.standard_field_required')]\n : [],\n },\n ]);\n\n setBackendValues(newBackendValues);\n }\n\n if (result.status === APICallStatus.ERROR) {\n form.setFields([\n {\n name: attribute.id,\n errors: [t('error.error_occurred')],\n },\n ]);\n }\n },\n actionButtonLabel: label,\n SelectTreeNodeModal: isModalHidden ? null : (\n <SelectTreeNodeModal\n open\n title={label}\n attribute={attribute}\n backendValues={backendValues}\n onConfirm={_addTreeNodes}\n onClose={_closeModal}\n childrenAsRecordValuePermissionFilter={childrenAsRecordValuePermissionFilter}\n />\n ),\n RemoveAllTreeNodes:\n !isReadOnly && backendValues.length > 1 && attribute.multiple_values && !attribute.required ? (\n <DeleteAllValuesButton\n handleDelete={_removeAllTreeNodes}\n disabled={isReadOnly}\n danger={isFieldInError}\n />\n ) : null,\n };\n};\n"]}
1
+ {"version":3,"file":"useManageTreeNodeSelection.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/useManageTreeNodeSelection.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 ComponentProps, type Dispatch, type SetStateAction, useEffect, useState} from 'react';\nimport {AntForm} from 'aristid-ds';\nimport {\n type DependentValuesPermissionFilterInput,\n type ChildrenAsRecordValuePermissionFilterInput,\n type RecordFormAttributeTreeAttributeFragment,\n} from '_ui/_gqlTypes';\nimport {type RecordFormElementsValueTreeValue} from '_ui/hooks/useGetRecordForm';\nimport {arrayValueVersionToObject} from '_ui/_utils';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {\n APICallStatus,\n type DeleteMultipleValuesFunc,\n type DeleteValueFunc,\n type SubmitValueFunc,\n} from '../../../_types';\nimport {DeleteAllValuesButton} from '../../shared/DeleteAllValuesButton';\nimport {SelectTreeNodeModal} from './SelectTreeNodeModal';\n\ninterface IUseManageTreeNodeSelectionProps {\n modaleTitle: string;\n attribute: RecordFormAttributeTreeAttributeFragment;\n isFormCreationMode: boolean;\n backendValues: RecordFormElementsValueTreeValue[];\n setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueTreeValue[]>>;\n onValueSubmit: SubmitValueFunc;\n onValueDelete: DeleteValueFunc;\n onDeleteMultipleValues: DeleteMultipleValuesFunc;\n isReadOnly: boolean;\n isFieldInError: boolean;\n childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;\n dependentValuesPermissionFilter?: DependentValuesPermissionFilterInput;\n}\n\nexport const useManageTreeNodeSelection = ({\n modaleTitle,\n attribute,\n isFormCreationMode,\n backendValues,\n setBackendValues,\n onValueSubmit,\n onValueDelete,\n onDeleteMultipleValues,\n isReadOnly,\n isFieldInError,\n childrenAsRecordValuePermissionFilter,\n dependentValuesPermissionFilter,\n}: IUseManageTreeNodeSelectionProps) => {\n const {t} = useSharedTranslation();\n const form = AntForm.useFormInstance();\n\n const [isModalHidden, setIsModalHidden] = useState(true);\n\n // Used to force the input error display when a value is set\n AntForm.useWatch(attribute.id, form);\n\n useEffect(() => {\n if (!isFormCreationMode && backendValues.length === 0 && attribute.required) {\n form.setFields([{name: attribute.id, errors: [t('errors.standard_field_required')]}]);\n }\n }, []);\n\n const _closeModal: ComponentProps<typeof SelectTreeNodeModal>['onClose'] = () => {\n setIsModalHidden(true);\n };\n\n const _addTreeNodes: ComponentProps<typeof SelectTreeNodeModal>['onConfirm'] = async selectedNodes => {\n const valuesToSave = selectedNodes.map(node => ({\n attribute,\n idValue: !attribute.multiple_values && backendValues.length > 0 ? backendValues[0].id_value : null,\n value: node,\n }));\n\n // When we will handle computed values, we will need to passe the active version (if still needed)\n const result = await onValueSubmit(valuesToSave, null);\n\n if (result.status === APICallStatus.SUCCESS) {\n const formattedValues: RecordFormElementsValueTreeValue[] = result.values.map(value => ({\n ...value,\n version: arrayValueVersionToObject(value.version),\n metadata: value.metadata?.map(metadata => ({\n ...metadata,\n value: {\n ...metadata.value,\n version: arrayValueVersionToObject(metadata.value.version ?? []),\n },\n })),\n }));\n\n const updatedValues = attribute.multiple_values\n ? [...backendValues, ...formattedValues]\n : [...formattedValues];\n\n form.setFieldValue(attribute.id, [...updatedValues.map(({treeValue}) => treeValue.id)]);\n\n form.setFields([\n {\n name: attribute.id,\n errors: [],\n touched: true, // necessary for isFieldsTouched to work properly (only for tree fields)\n },\n ]);\n\n setBackendValues(updatedValues);\n }\n\n if (result.status === APICallStatus.ERROR) {\n const selectedNodesById = selectedNodes.reduce((acc, cur) => ({...acc, [cur.id]: cur}), {});\n\n const errorsMessage = result.errors?.map(err => {\n const linkedRecordLabel = selectedNodesById[err.input].title || selectedNodesById[err.input].id;\n\n return `${linkedRecordLabel}: ${err.message}`;\n });\n\n form.setFields([\n {\n name: attribute.id,\n errors: errorsMessage ?? [t('error.error_occurred')],\n },\n ]);\n }\n };\n\n const _removeAllTreeNodes: ComponentProps<typeof DeleteAllValuesButton>['handleDelete'] = async () => {\n // When we will handle computed values, we will need to passe the active version (if still needed)\n const result = await onDeleteMultipleValues(attribute.id, backendValues, null);\n\n if (result.status === APICallStatus.SUCCESS) {\n form.setFieldValue(attribute.id, []);\n form.setFields([\n {\n name: attribute.id,\n errors: attribute.required ? [t('errors.standard_field_required')] : [],\n },\n ]);\n setBackendValues([]);\n }\n\n if (result.status === APICallStatus.ERROR) {\n const errorsMessage = result.errors?.map(err => err.message);\n\n form.setFields([\n {\n name: attribute.id,\n errors: errorsMessage ?? [t('error.error_occurred')],\n },\n ]);\n }\n };\n\n const label = `${t(!attribute.multiple_values && backendValues.length > 0 ? 'global.replace' : 'global.add')} ${modaleTitle}`;\n\n return {\n openModal: () => {\n setIsModalHidden(false);\n },\n removeTreeNode: async (nodeValue: RecordFormElementsValueTreeValue, skipAfterRemove: boolean = false) => {\n const result = await onValueDelete({id_value: nodeValue.id_value}, attribute.id);\n\n if (skipAfterRemove) {\n return;\n }\n\n if (result.status === APICallStatus.SUCCESS) {\n const newBackendValues = backendValues.filter(value => value.id_value !== nodeValue.id_value);\n\n form.setFieldValue(\n attribute.id,\n newBackendValues.map(({treeValue}) => treeValue.id),\n );\n\n form.setFields([\n {\n name: attribute.id,\n errors:\n attribute.required && newBackendValues.length === 0\n ? [t('errors.standard_field_required')]\n : [],\n },\n ]);\n\n setBackendValues(newBackendValues);\n }\n\n if (result.status === APICallStatus.ERROR) {\n form.setFields([\n {\n name: attribute.id,\n errors: [t('error.error_occurred')],\n },\n ]);\n }\n },\n actionButtonLabel: label,\n SelectTreeNodeModal: isModalHidden ? null : (\n <SelectTreeNodeModal\n open\n title={label}\n attribute={attribute}\n backendValues={backendValues}\n onConfirm={_addTreeNodes}\n onClose={_closeModal}\n childrenAsRecordValuePermissionFilter={childrenAsRecordValuePermissionFilter}\n dependentValuesPermissionFilter={dependentValuesPermissionFilter}\n />\n ),\n RemoveAllTreeNodes:\n !isReadOnly && backendValues.length > 1 && attribute.multiple_values && !attribute.required ? (\n <DeleteAllValuesButton\n handleDelete={_removeAllTreeNodes}\n disabled={isReadOnly}\n danger={isFieldInError}\n />\n ) : null,\n };\n};\n"]}
@@ -1,9 +1,10 @@
1
1
  import { type FunctionComponent } from 'react';
2
- import { type ChildrenAsRecordValuePermissionFilterInput } from '../../_gqlTypes';
2
+ import { type ChildrenAsRecordValuePermissionFilterInput, type DependentValuesPermissionFilterInput } from '../../_gqlTypes';
3
3
  import { type ITreeNodeWithRecord } from '../../types/trees';
4
4
  interface ISelectTreeNodeProps {
5
5
  treeId: string;
6
6
  childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;
7
+ dependentValuesPermissionFilter?: DependentValuesPermissionFilterInput;
7
8
  onSelect: (node: ITreeNodeWithRecord, selected: boolean) => void;
8
9
  onCheck?: (selection: ITreeNodeWithRecord[]) => void;
9
10
  selectedNodes?: string[];
@@ -4,12 +4,12 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
5
  import { localizedTranslation } from '@leav/utils';
6
6
  import { useSharedTranslation } from '../../hooks/useSharedTranslation';
7
- import { useTreeDataQueryQuery } from '../../_gqlTypes';
7
+ import { useTreeDataQueryQuery, } from '../../_gqlTypes';
8
8
  import { ErrorDisplay } from '../..';
9
9
  import useLang from '../../hooks/useLang';
10
10
  import { SelectTreeNodeContent } from './SelectTreeNodeContent';
11
11
  import { SelectTreeNodeContentSkeleton } from './SelectTreeNodeContentSkeleton';
12
- export const SelectTreeNode = ({ treeId, childrenAsRecordValuePermissionFilter, onSelect, onCheck, selectedNodes, disabledNodes, selectableLibraries, multiple = false, checkStrictly = true, checkable = false, canSelectRoot = false, loadRecursively = true, noPagination = false, showSelectChildrenButton = false, }) => {
12
+ export const SelectTreeNode = ({ treeId, childrenAsRecordValuePermissionFilter, dependentValuesPermissionFilter, onSelect, onCheck, selectedNodes, disabledNodes, selectableLibraries, multiple = false, checkStrictly = true, checkable = false, canSelectRoot = false, loadRecursively = true, noPagination = false, showSelectChildrenButton = false, }) => {
13
13
  const { lang } = useLang();
14
14
  const { t } = useSharedTranslation();
15
15
  const { loading, error, data } = useTreeDataQueryQuery({
@@ -24,6 +24,6 @@ export const SelectTreeNode = ({ treeId, childrenAsRecordValuePermissionFilter,
24
24
  if (!data?.trees.list[0]) {
25
25
  return _jsx(ErrorDisplay, { message: t('error.unknown_tree', { treeId }) });
26
26
  }
27
- return (_jsx(SelectTreeNodeContent, { treeData: { id: treeId, label: localizedTranslation(data.trees.list[0].label, lang) || treeId }, childrenAsRecordValuePermissionFilter: childrenAsRecordValuePermissionFilter, onCheck: onCheck, onSelect: onSelect, multiple: multiple, checkable: checkable, checkStrictly: checkStrictly, selectedNodes: selectedNodes, disabledNodes: disabledNodes, canSelectRoot: canSelectRoot, selectableLibraries: selectableLibraries, loadRecursively: loadRecursively, noPagination: noPagination, showSelectChildrenButton: showSelectChildrenButton }));
27
+ return (_jsx(SelectTreeNodeContent, { treeData: { id: treeId, label: localizedTranslation(data.trees.list[0].label, lang) || treeId }, childrenAsRecordValuePermissionFilter: childrenAsRecordValuePermissionFilter, dependentValuesPermissionFilter: dependentValuesPermissionFilter, onCheck: onCheck, onSelect: onSelect, multiple: multiple, checkable: checkable, checkStrictly: checkStrictly, selectedNodes: selectedNodes, disabledNodes: disabledNodes, canSelectRoot: canSelectRoot, selectableLibraries: selectableLibraries, loadRecursively: loadRecursively, noPagination: noPagination, showSelectChildrenButton: showSelectChildrenButton }));
28
28
  };
29
29
  //# sourceMappingURL=SelectTreeNode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTreeNode.js","sourceRoot":"","sources":["../../../src/components/SelectTreeNode/SelectTreeNode.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAkD,qBAAqB,EAAC,MAAM,eAAe,CAAC;AACrG,OAAO,EAAC,YAAY,EAAC,MAAM,OAAO,CAAC;AACnC,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAC,6BAA6B,EAAC,MAAM,iCAAiC,CAAC;AAmB9E,MAAM,CAAC,MAAM,cAAc,GAA4C,CAAC,EACpE,MAAM,EACN,qCAAqC,EACrC,QAAQ,EACR,OAAO,EACP,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,QAAQ,GAAG,KAAK,EAChB,aAAa,GAAG,IAAI,EACpB,SAAS,GAAG,KAAK,EACjB,aAAa,GAAG,KAAK,EACrB,eAAe,GAAG,IAAI,EACtB,YAAY,GAAG,KAAK,EACpB,wBAAwB,GAAG,KAAK,GACnC,EAAE,EAAE;IACD,MAAM,EAAC,IAAI,EAAC,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,qBAAqB,CAAC;QACjD,SAAS,EAAE,EAAC,MAAM,EAAC;KACtB,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,KAAC,6BAA6B,KAAG,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,KAAC,YAAY,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,KAAC,YAAY,IAAC,OAAO,EAAE,CAAC,CAAC,oBAAoB,EAAE,EAAC,MAAM,EAAC,CAAC,GAAI,CAAC;IACxE,CAAC;IAED,OAAO,CACH,KAAC,qBAAqB,IAClB,QAAQ,EAAE,EAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,EAAC,EAC7F,qCAAqC,EAAE,qCAAqC,EAC5E,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,wBAAwB,EAAE,wBAAwB,GACpD,CACL,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 {localizedTranslation} from '@leav/utils';\nimport {type FunctionComponent} from 'react';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type ChildrenAsRecordValuePermissionFilterInput, useTreeDataQueryQuery} from '_ui/_gqlTypes';\nimport {ErrorDisplay} from '../..';\nimport useLang from '../../hooks/useLang';\nimport {type ITreeNodeWithRecord} from '../../types/trees';\nimport {SelectTreeNodeContent} from './SelectTreeNodeContent';\nimport {SelectTreeNodeContentSkeleton} from './SelectTreeNodeContentSkeleton';\n\ninterface ISelectTreeNodeProps {\n treeId: string;\n childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;\n onSelect: (node: ITreeNodeWithRecord, selected: boolean) => void;\n onCheck?: (selection: ITreeNodeWithRecord[]) => void;\n selectedNodes?: string[];\n disabledNodes?: string[];\n selectableLibraries?: string[]; // all by default\n multiple?: boolean;\n checkStrictly?: boolean;\n checkable?: boolean;\n canSelectRoot?: boolean;\n loadRecursively?: boolean;\n noPagination?: boolean;\n showSelectChildrenButton?: boolean;\n}\n\nexport const SelectTreeNode: FunctionComponent<ISelectTreeNodeProps> = ({\n treeId,\n childrenAsRecordValuePermissionFilter,\n onSelect,\n onCheck,\n selectedNodes,\n disabledNodes,\n selectableLibraries,\n multiple = false,\n checkStrictly = true,\n checkable = false,\n canSelectRoot = false,\n loadRecursively = true,\n noPagination = false,\n showSelectChildrenButton = false,\n}) => {\n const {lang} = useLang();\n const {t} = useSharedTranslation();\n const {loading, error, data} = useTreeDataQueryQuery({\n variables: {treeId},\n });\n\n if (loading) {\n return <SelectTreeNodeContentSkeleton />;\n }\n\n if (error) {\n return <ErrorDisplay message={error.message} />;\n }\n\n if (!data?.trees.list[0]) {\n return <ErrorDisplay message={t('error.unknown_tree', {treeId})} />;\n }\n\n return (\n <SelectTreeNodeContent\n treeData={{id: treeId, label: localizedTranslation(data.trees.list[0].label, lang) || treeId}}\n childrenAsRecordValuePermissionFilter={childrenAsRecordValuePermissionFilter}\n onCheck={onCheck}\n onSelect={onSelect}\n multiple={multiple}\n checkable={checkable}\n checkStrictly={checkStrictly}\n selectedNodes={selectedNodes}\n disabledNodes={disabledNodes}\n canSelectRoot={canSelectRoot}\n selectableLibraries={selectableLibraries}\n loadRecursively={loadRecursively}\n noPagination={noPagination}\n showSelectChildrenButton={showSelectChildrenButton}\n />\n );\n};\n"]}
1
+ {"version":3,"file":"SelectTreeNode.js","sourceRoot":"","sources":["../../../src/components/SelectTreeNode/SelectTreeNode.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAGH,qBAAqB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,YAAY,EAAC,MAAM,OAAO,CAAC;AACnC,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAC,6BAA6B,EAAC,MAAM,iCAAiC,CAAC;AAoB9E,MAAM,CAAC,MAAM,cAAc,GAA4C,CAAC,EACpE,MAAM,EACN,qCAAqC,EACrC,+BAA+B,EAC/B,QAAQ,EACR,OAAO,EACP,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,QAAQ,GAAG,KAAK,EAChB,aAAa,GAAG,IAAI,EACpB,SAAS,GAAG,KAAK,EACjB,aAAa,GAAG,KAAK,EACrB,eAAe,GAAG,IAAI,EACtB,YAAY,GAAG,KAAK,EACpB,wBAAwB,GAAG,KAAK,GACnC,EAAE,EAAE;IACD,MAAM,EAAC,IAAI,EAAC,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,qBAAqB,CAAC;QACjD,SAAS,EAAE,EAAC,MAAM,EAAC;KACtB,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,KAAC,6BAA6B,KAAG,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,KAAC,YAAY,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,KAAC,YAAY,IAAC,OAAO,EAAE,CAAC,CAAC,oBAAoB,EAAE,EAAC,MAAM,EAAC,CAAC,GAAI,CAAC;IACxE,CAAC;IAED,OAAO,CACH,KAAC,qBAAqB,IAClB,QAAQ,EAAE,EAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,EAAC,EAC7F,qCAAqC,EAAE,qCAAqC,EAC5E,+BAA+B,EAAE,+BAA+B,EAChE,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,wBAAwB,EAAE,wBAAwB,GACpD,CACL,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 {localizedTranslation} from '@leav/utils';\nimport {type FunctionComponent} from 'react';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {\n type ChildrenAsRecordValuePermissionFilterInput,\n type DependentValuesPermissionFilterInput,\n useTreeDataQueryQuery,\n} from '_ui/_gqlTypes';\nimport {ErrorDisplay} from '../..';\nimport useLang from '../../hooks/useLang';\nimport {type ITreeNodeWithRecord} from '../../types/trees';\nimport {SelectTreeNodeContent} from './SelectTreeNodeContent';\nimport {SelectTreeNodeContentSkeleton} from './SelectTreeNodeContentSkeleton';\n\ninterface ISelectTreeNodeProps {\n treeId: string;\n childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;\n dependentValuesPermissionFilter?: DependentValuesPermissionFilterInput;\n onSelect: (node: ITreeNodeWithRecord, selected: boolean) => void;\n onCheck?: (selection: ITreeNodeWithRecord[]) => void;\n selectedNodes?: string[];\n disabledNodes?: string[];\n selectableLibraries?: string[]; // all by default\n multiple?: boolean;\n checkStrictly?: boolean;\n checkable?: boolean;\n canSelectRoot?: boolean;\n loadRecursively?: boolean;\n noPagination?: boolean;\n showSelectChildrenButton?: boolean;\n}\n\nexport const SelectTreeNode: FunctionComponent<ISelectTreeNodeProps> = ({\n treeId,\n childrenAsRecordValuePermissionFilter,\n dependentValuesPermissionFilter,\n onSelect,\n onCheck,\n selectedNodes,\n disabledNodes,\n selectableLibraries,\n multiple = false,\n checkStrictly = true,\n checkable = false,\n canSelectRoot = false,\n loadRecursively = true,\n noPagination = false,\n showSelectChildrenButton = false,\n}) => {\n const {lang} = useLang();\n const {t} = useSharedTranslation();\n const {loading, error, data} = useTreeDataQueryQuery({\n variables: {treeId},\n });\n\n if (loading) {\n return <SelectTreeNodeContentSkeleton />;\n }\n\n if (error) {\n return <ErrorDisplay message={error.message} />;\n }\n\n if (!data?.trees.list[0]) {\n return <ErrorDisplay message={t('error.unknown_tree', {treeId})} />;\n }\n\n return (\n <SelectTreeNodeContent\n treeData={{id: treeId, label: localizedTranslation(data.trees.list[0].label, lang) || treeId}}\n childrenAsRecordValuePermissionFilter={childrenAsRecordValuePermissionFilter}\n dependentValuesPermissionFilter={dependentValuesPermissionFilter}\n onCheck={onCheck}\n onSelect={onSelect}\n multiple={multiple}\n checkable={checkable}\n checkStrictly={checkStrictly}\n selectedNodes={selectedNodes}\n disabledNodes={disabledNodes}\n canSelectRoot={canSelectRoot}\n selectableLibraries={selectableLibraries}\n loadRecursively={loadRecursively}\n noPagination={noPagination}\n showSelectChildrenButton={showSelectChildrenButton}\n />\n );\n};\n"]}
@@ -1,12 +1,13 @@
1
1
  import { type FunctionComponent } from 'react';
2
2
  import { type ITreeNodeWithRecord } from '../../types';
3
- import { type ChildrenAsRecordValuePermissionFilterInput } from '../../_gqlTypes';
3
+ import { type ChildrenAsRecordValuePermissionFilterInput, type DependentValuesPermissionFilterInput } from '../../_gqlTypes';
4
4
  interface ISelectTreeNodeContentProps {
5
5
  treeData: {
6
6
  id: string;
7
7
  label: string;
8
8
  };
9
9
  childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;
10
+ dependentValuesPermissionFilter?: DependentValuesPermissionFilterInput;
10
11
  selectedNodes?: string[];
11
12
  disabledNodes?: string[];
12
13
  onSelect: (node: ITreeNodeWithRecord, selected: boolean) => void;
@@ -5,12 +5,12 @@ import { jsx as _jsx } from "react/jsx-runtime";
5
5
  import { useEffect, useState } from 'react';
6
6
  import { KitTree } from 'aristid-ds';
7
7
  import { Spin } from 'antd';
8
- import { useTreeNodeChildrenLazyQuery } from '../../_gqlTypes';
8
+ import { useTreeNodeChildrenLazyQuery, } from '../../_gqlTypes';
9
9
  import { defaultPaginationPageSize, ErrorDisplay } from '../../index';
10
10
  import { TreeNodeTitle } from './TreeNodeTitle';
11
11
  import { _isObjectSelection } from './_types';
12
12
  import { useSharedTranslation } from '../../hooks/useSharedTranslation';
13
- export const SelectTreeNodeContent = ({ treeData: tree, childrenAsRecordValuePermissionFilter, onSelect, onCheck, selectedNodes = [], disabledNodes = [], multiple = false, checkable = false, checkStrictly = true, canSelectRoot = false, selectableLibraries, loadRecursively = true, noPagination = false, showSelectChildrenButton = false, }) => {
13
+ export const SelectTreeNodeContent = ({ treeData: tree, childrenAsRecordValuePermissionFilter, dependentValuesPermissionFilter, onSelect, onCheck, selectedNodes = [], disabledNodes = [], multiple = false, checkable = false, checkStrictly = true, canSelectRoot = false, selectableLibraries, loadRecursively = true, noPagination = false, showSelectChildrenButton = false, }) => {
14
14
  const { t } = useSharedTranslation();
15
15
  const rootNode = {
16
16
  title: tree.label,
@@ -32,6 +32,9 @@ export const SelectTreeNodeContent = ({ treeData: tree, childrenAsRecordValuePer
32
32
  const _fetchTreeContent = async (parentNodeKey, offset = 0, currentTreeMap = { ...treeMap }) => {
33
33
  try {
34
34
  const { data: { treeNodeChildren }, } = await loadTreeContent({
35
+ // If dependentValuesPermissionFilter is set, we need to bypass the cache to get up-to-date data,
36
+ // because tree content depends on record values that may have changed
37
+ fetchPolicy: dependentValuesPermissionFilter ? 'no-cache' : undefined,
35
38
  variables: {
36
39
  treeId: tree.id,
37
40
  node: parentNodeKey && parentNodeKey !== tree.id ? parentNodeKey : null,
@@ -42,6 +45,7 @@ export const SelectTreeNodeContent = ({ treeData: tree, childrenAsRecordValuePer
42
45
  offset,
43
46
  },
44
47
  childrenAsRecordValuePermissionFilter,
48
+ dependentValuesPermissionFilter,
45
49
  },
46
50
  });
47
51
  const parentMapKey = parentNodeKey ?? tree.id;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTreeNodeContent.js","sourceRoot":"","sources":["../../../src/components/SelectTreeNode/SelectTreeNodeContent.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 ComponentProps, type FunctionComponent, useEffect, useState} from 'react';\nimport {KitTree} from 'aristid-ds';\nimport {Spin} from 'antd';\nimport {type EventDataNode} from 'antd/lib/tree';\nimport {type ITreeNodeWithRecord} from '_ui/types';\nimport {type ChildrenAsRecordValuePermissionFilterInput, useTreeNodeChildrenLazyQuery} from '_ui/_gqlTypes';\nimport {defaultPaginationPageSize, ErrorDisplay} from '../../index';\nimport {TreeNodeTitle} from './TreeNodeTitle';\nimport {_isObjectSelection, type ITreeMap, type ITreeMapElement} from './_types';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\n\ninterface ISelectTreeNodeContentProps {\n treeData: {id: string; label: string};\n childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;\n selectedNodes?: string[];\n disabledNodes?: string[];\n onSelect: (node: ITreeNodeWithRecord, selected: boolean) => void;\n onCheck?: (selection: ITreeNodeWithRecord[]) => void;\n multiple?: boolean;\n checkable?: boolean;\n checkStrictly?: boolean;\n canSelectRoot?: boolean;\n selectableLibraries?: string[]; // all by default\n loadRecursively?: boolean;\n noPagination?: boolean;\n showSelectChildrenButton?: boolean;\n}\n\nexport const SelectTreeNodeContent: FunctionComponent<ISelectTreeNodeContentProps> = ({\n treeData: tree,\n childrenAsRecordValuePermissionFilter,\n onSelect,\n onCheck,\n selectedNodes = [],\n disabledNodes = [],\n multiple = false,\n checkable = false,\n checkStrictly = true,\n canSelectRoot = false,\n selectableLibraries,\n loadRecursively = true,\n noPagination = false,\n showSelectChildrenButton = false,\n}) => {\n const {t} = useSharedTranslation();\n\n const rootNode: ITreeMapElement = {\n title: tree.label,\n record: null,\n id: tree.id,\n key: tree.id,\n isLeaf: false,\n parents: [],\n paginationOffset: 0,\n children: [],\n };\n\n // As we'll fetch children when a node is expanded, we store the whole tree content in a hash map\n // to make update easier and more efficient\n const [treeMap, setTreeMap] = useState<ITreeMap>({\n [tree.id]: rootNode,\n });\n\n const [fetchError, setFetchError] = useState<string | undefined>();\n const [loadTreeContent, {error, called}] = useTreeNodeChildrenLazyQuery();\n\n const _fetchTreeContent = async (parentNodeKey?: string, offset = 0, currentTreeMap = {...treeMap}) => {\n try {\n const {\n data: {treeNodeChildren},\n } = await loadTreeContent({\n variables: {\n treeId: tree.id,\n node: parentNodeKey && parentNodeKey !== tree.id ? parentNodeKey : null,\n pagination: noPagination\n ? undefined\n : {\n limit: defaultPaginationPageSize,\n offset,\n },\n childrenAsRecordValuePermissionFilter,\n },\n });\n\n const parentMapKey = parentNodeKey ?? tree.id;\n const totalCount = treeNodeChildren.totalCount;\n const parentElement = currentTreeMap[parentMapKey];\n const showMoreKey = '__showMore' + parentMapKey + offset;\n\n const parentPath = parentElement?.parents ?? [];\n const currentParents = [...parentPath, parentMapKey];\n\n const formattedNodes = treeNodeChildren.list.map(e => ({\n record: e.record,\n title: e.record.whoAmI.label || e.record.whoAmI.id,\n id: e.id,\n key: e.id,\n isLeaf: !e.childrenCount,\n children: [],\n parents: currentParents,\n paginationOffset: 0,\n disabled: disabledNodes.includes(e.id),\n }));\n\n const existingKeys = new Set(parentElement.children.map(child => child.key));\n const newNodes = formattedNodes.filter(node => !existingKeys.has(node.key));\n parentElement.children = [\n ...parentElement.children.filter(child => !child.key.startsWith(`__showMore${parentMapKey}`)),\n ...newNodes,\n ];\n\n for (const node of formattedNodes) {\n currentTreeMap[node.key] = node as ITreeMapElement;\n parentElement.paginationOffset = offset;\n }\n\n if (!noPagination && totalCount > parentElement.paginationOffset + defaultPaginationPageSize) {\n const showMoreElement: ITreeMapElement = {\n isShowMore: true,\n record: null,\n title: t('tree-node-selection.show_more'),\n id: parentMapKey,\n key: showMoreKey,\n isLeaf: false,\n children: [],\n paginationOffset: 0,\n };\n parentElement.children.push(showMoreElement);\n }\n\n const newOffset = offset + defaultPaginationPageSize;\n if (treeNodeChildren.totalCount > newOffset) {\n await _fetchTreeContent(parentNodeKey, newOffset, currentTreeMap);\n }\n\n if (loadRecursively) {\n for (const node of formattedNodes) {\n if (!node.isLeaf) {\n await _fetchTreeContent(node.key, 0, currentTreeMap);\n }\n }\n }\n\n setTreeMap(currentTreeMap);\n setFetchError(undefined);\n } catch (err) {\n setFetchError((err as Error).message);\n }\n };\n\n useEffect(() => {\n _fetchTreeContent(undefined, 0);\n }, []);\n\n /**\n * In strict mode, loadData handler is called twice\n * https://github.com/ant-design/ant-design/issues/54497\n */\n const _handleLoadData: ComponentProps<typeof KitTree>['loadData'] = async nodeData => {\n const {id, isShowMore} = nodeData as EventDataNode<ITreeMapElement>;\n\n // Handle offset if we get here through the \"show more\" element\n const currentNodeOffset = treeMap[id]?.paginationOffset ?? 0;\n const paginationOffset = isShowMore\n ? (treeMap[id]?.paginationOffset ?? 0) + defaultPaginationPageSize\n : currentNodeOffset;\n\n if (id === tree.id && !isShowMore) {\n // Root has already been loaded\n return;\n }\n\n await _fetchTreeContent(id, paginationOffset);\n };\n\n const _handleSelect: ComponentProps<typeof KitTree>['onSelect'] = (_, e) => {\n // Prevent selecting when clicking on select all children button\n if (e.nativeEvent.target instanceof HTMLButtonElement) {\n return;\n }\n // If user clicked on the text \"show more\", we load more children instead of selecting the node\n if ('isShowMore' in e.node && e.node.isShowMore) {\n _handleLoadData(e.node);\n return;\n }\n\n const node = treeMap[e.node.key];\n const isRoot = node.id === tree.id;\n\n if (\n (!canSelectRoot && isRoot) ||\n (!isRoot && selectableLibraries && !selectableLibraries.includes(node.record.whoAmI.library.id))\n ) {\n return;\n }\n\n const getAllDescendants = (nodeId: string): string[] =>\n treeMap[nodeId].children.reduce<string[]>(\n (acc, child) => [...acc, child.id, ...getAllDescendants(child.id)],\n [],\n );\n\n if (node) {\n if (checkable) {\n const isDeselecting = selectedNodes.includes(node.id);\n\n if (isDeselecting && isRoot) {\n _handleCheck([], null);\n } else if (isDeselecting) {\n const nodeToDeselect = [node.id, ...node.parents, ...getAllDescendants(node.id)];\n const selectionToKeep = selectedNodes.filter(\n selectedNode => !nodeToDeselect.includes(selectedNode),\n );\n\n _handleCheck(selectionToKeep, null);\n } else if (isRoot) {\n _handleCheck([...getAllDescendants(tree.id), tree.id], null);\n } else {\n _handleCheck([...selectedNodes, node.id], null);\n }\n } else {\n onSelect(node, e.selected);\n }\n }\n };\n\n const _handleCheck: ComponentProps<typeof KitTree>['onCheck'] = selection => {\n if (!canSelectRoot && Array.isArray(selection) && selection.includes(tree.id)) {\n return;\n }\n\n const checkedKeys = _isObjectSelection(selection) ? selection.checked : selection;\n const nodes = checkedKeys.map(key => treeMap[key]);\n\n onCheck(nodes);\n };\n\n if (!called) {\n return <Spin />;\n }\n\n if (error || fetchError) {\n return <ErrorDisplay message={error?.message ?? fetchError} />;\n }\n\n return (\n <KitTree\n checkStrictly={checkStrictly}\n treeData={[treeMap[rootNode.key]]}\n loadData={loadRecursively ? undefined : _handleLoadData}\n multiple={multiple}\n checkable={checkable}\n defaultExpandedKeys={selectedNodes.length > 0 ? [...selectedNodes, tree.id] : [tree.id]}\n selectedKeys={selectedNodes}\n checkedKeys={selectedNodes}\n titleRender={node => (\n <TreeNodeTitle\n checkable={checkable}\n disabledNodes={disabledNodes}\n loadRecursively={loadRecursively}\n node={node as ITreeMapElement}\n onSelect={onSelect}\n selectedNodes={selectedNodes}\n showSelectChildrenButton={showSelectChildrenButton}\n />\n )}\n onSelect={_handleSelect}\n onCheck={_handleCheck}\n />\n );\n};\n"]}
1
+ {"version":3,"file":"SelectTreeNodeContent.js","sourceRoot":"","sources":["../../../src/components/SelectTreeNode/SelectTreeNodeContent.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 ComponentProps, type FunctionComponent, useEffect, useState} from 'react';\nimport {KitTree} from 'aristid-ds';\nimport {Spin} from 'antd';\nimport {type EventDataNode} from 'antd/lib/tree';\nimport {type ITreeNodeWithRecord} from '_ui/types';\nimport {\n type ChildrenAsRecordValuePermissionFilterInput,\n type DependentValuesPermissionFilterInput,\n useTreeNodeChildrenLazyQuery,\n} from '_ui/_gqlTypes';\nimport {defaultPaginationPageSize, ErrorDisplay} from '../../index';\nimport {TreeNodeTitle} from './TreeNodeTitle';\nimport {_isObjectSelection, type ITreeMap, type ITreeMapElement} from './_types';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\n\ninterface ISelectTreeNodeContentProps {\n treeData: {id: string; label: string};\n childrenAsRecordValuePermissionFilter?: ChildrenAsRecordValuePermissionFilterInput;\n dependentValuesPermissionFilter?: DependentValuesPermissionFilterInput;\n selectedNodes?: string[];\n disabledNodes?: string[];\n onSelect: (node: ITreeNodeWithRecord, selected: boolean) => void;\n onCheck?: (selection: ITreeNodeWithRecord[]) => void;\n multiple?: boolean;\n checkable?: boolean;\n checkStrictly?: boolean;\n canSelectRoot?: boolean;\n selectableLibraries?: string[]; // all by default\n loadRecursively?: boolean;\n noPagination?: boolean;\n showSelectChildrenButton?: boolean;\n}\n\nexport const SelectTreeNodeContent: FunctionComponent<ISelectTreeNodeContentProps> = ({\n treeData: tree,\n childrenAsRecordValuePermissionFilter,\n dependentValuesPermissionFilter,\n onSelect,\n onCheck,\n selectedNodes = [],\n disabledNodes = [],\n multiple = false,\n checkable = false,\n checkStrictly = true,\n canSelectRoot = false,\n selectableLibraries,\n loadRecursively = true,\n noPagination = false,\n showSelectChildrenButton = false,\n}) => {\n const {t} = useSharedTranslation();\n\n const rootNode: ITreeMapElement = {\n title: tree.label,\n record: null,\n id: tree.id,\n key: tree.id,\n isLeaf: false,\n parents: [],\n paginationOffset: 0,\n children: [],\n };\n\n // As we'll fetch children when a node is expanded, we store the whole tree content in a hash map\n // to make update easier and more efficient\n const [treeMap, setTreeMap] = useState<ITreeMap>({\n [tree.id]: rootNode,\n });\n\n const [fetchError, setFetchError] = useState<string | undefined>();\n const [loadTreeContent, {error, called}] = useTreeNodeChildrenLazyQuery();\n\n const _fetchTreeContent = async (parentNodeKey?: string, offset = 0, currentTreeMap = {...treeMap}) => {\n try {\n const {\n data: {treeNodeChildren},\n } = await loadTreeContent({\n // If dependentValuesPermissionFilter is set, we need to bypass the cache to get up-to-date data,\n // because tree content depends on record values that may have changed\n fetchPolicy: dependentValuesPermissionFilter ? 'no-cache' : undefined,\n variables: {\n treeId: tree.id,\n node: parentNodeKey && parentNodeKey !== tree.id ? parentNodeKey : null,\n pagination: noPagination\n ? undefined\n : {\n limit: defaultPaginationPageSize,\n offset,\n },\n childrenAsRecordValuePermissionFilter,\n dependentValuesPermissionFilter,\n },\n });\n\n const parentMapKey = parentNodeKey ?? tree.id;\n const totalCount = treeNodeChildren.totalCount;\n const parentElement = currentTreeMap[parentMapKey];\n const showMoreKey = '__showMore' + parentMapKey + offset;\n\n const parentPath = parentElement?.parents ?? [];\n const currentParents = [...parentPath, parentMapKey];\n\n const formattedNodes = treeNodeChildren.list.map(e => ({\n record: e.record,\n title: e.record.whoAmI.label || e.record.whoAmI.id,\n id: e.id,\n key: e.id,\n isLeaf: !e.childrenCount,\n children: [],\n parents: currentParents,\n paginationOffset: 0,\n disabled: disabledNodes.includes(e.id),\n }));\n\n const existingKeys = new Set(parentElement.children.map(child => child.key));\n const newNodes = formattedNodes.filter(node => !existingKeys.has(node.key));\n parentElement.children = [\n ...parentElement.children.filter(child => !child.key.startsWith(`__showMore${parentMapKey}`)),\n ...newNodes,\n ];\n\n for (const node of formattedNodes) {\n currentTreeMap[node.key] = node as ITreeMapElement;\n parentElement.paginationOffset = offset;\n }\n\n if (!noPagination && totalCount > parentElement.paginationOffset + defaultPaginationPageSize) {\n const showMoreElement: ITreeMapElement = {\n isShowMore: true,\n record: null,\n title: t('tree-node-selection.show_more'),\n id: parentMapKey,\n key: showMoreKey,\n isLeaf: false,\n children: [],\n paginationOffset: 0,\n };\n parentElement.children.push(showMoreElement);\n }\n\n const newOffset = offset + defaultPaginationPageSize;\n if (treeNodeChildren.totalCount > newOffset) {\n await _fetchTreeContent(parentNodeKey, newOffset, currentTreeMap);\n }\n\n if (loadRecursively) {\n for (const node of formattedNodes) {\n if (!node.isLeaf) {\n await _fetchTreeContent(node.key, 0, currentTreeMap);\n }\n }\n }\n\n setTreeMap(currentTreeMap);\n setFetchError(undefined);\n } catch (err) {\n setFetchError((err as Error).message);\n }\n };\n\n useEffect(() => {\n _fetchTreeContent(undefined, 0);\n }, []);\n\n /**\n * In strict mode, loadData handler is called twice\n * https://github.com/ant-design/ant-design/issues/54497\n */\n const _handleLoadData: ComponentProps<typeof KitTree>['loadData'] = async nodeData => {\n const {id, isShowMore} = nodeData as EventDataNode<ITreeMapElement>;\n\n // Handle offset if we get here through the \"show more\" element\n const currentNodeOffset = treeMap[id]?.paginationOffset ?? 0;\n const paginationOffset = isShowMore\n ? (treeMap[id]?.paginationOffset ?? 0) + defaultPaginationPageSize\n : currentNodeOffset;\n\n if (id === tree.id && !isShowMore) {\n // Root has already been loaded\n return;\n }\n\n await _fetchTreeContent(id, paginationOffset);\n };\n\n const _handleSelect: ComponentProps<typeof KitTree>['onSelect'] = (_, e) => {\n // Prevent selecting when clicking on select all children button\n if (e.nativeEvent.target instanceof HTMLButtonElement) {\n return;\n }\n // If user clicked on the text \"show more\", we load more children instead of selecting the node\n if ('isShowMore' in e.node && e.node.isShowMore) {\n _handleLoadData(e.node);\n return;\n }\n\n const node = treeMap[e.node.key];\n const isRoot = node.id === tree.id;\n\n if (\n (!canSelectRoot && isRoot) ||\n (!isRoot && selectableLibraries && !selectableLibraries.includes(node.record.whoAmI.library.id))\n ) {\n return;\n }\n\n const getAllDescendants = (nodeId: string): string[] =>\n treeMap[nodeId].children.reduce<string[]>(\n (acc, child) => [...acc, child.id, ...getAllDescendants(child.id)],\n [],\n );\n\n if (node) {\n if (checkable) {\n const isDeselecting = selectedNodes.includes(node.id);\n\n if (isDeselecting && isRoot) {\n _handleCheck([], null);\n } else if (isDeselecting) {\n const nodeToDeselect = [node.id, ...node.parents, ...getAllDescendants(node.id)];\n const selectionToKeep = selectedNodes.filter(\n selectedNode => !nodeToDeselect.includes(selectedNode),\n );\n\n _handleCheck(selectionToKeep, null);\n } else if (isRoot) {\n _handleCheck([...getAllDescendants(tree.id), tree.id], null);\n } else {\n _handleCheck([...selectedNodes, node.id], null);\n }\n } else {\n onSelect(node, e.selected);\n }\n }\n };\n\n const _handleCheck: ComponentProps<typeof KitTree>['onCheck'] = selection => {\n if (!canSelectRoot && Array.isArray(selection) && selection.includes(tree.id)) {\n return;\n }\n\n const checkedKeys = _isObjectSelection(selection) ? selection.checked : selection;\n const nodes = checkedKeys.map(key => treeMap[key]);\n\n onCheck(nodes);\n };\n\n if (!called) {\n return <Spin />;\n }\n\n if (error || fetchError) {\n return <ErrorDisplay message={error?.message ?? fetchError} />;\n }\n\n return (\n <KitTree\n checkStrictly={checkStrictly}\n treeData={[treeMap[rootNode.key]]}\n loadData={loadRecursively ? undefined : _handleLoadData}\n multiple={multiple}\n checkable={checkable}\n defaultExpandedKeys={selectedNodes.length > 0 ? [...selectedNodes, tree.id] : [tree.id]}\n selectedKeys={selectedNodes}\n checkedKeys={selectedNodes}\n titleRender={node => (\n <TreeNodeTitle\n checkable={checkable}\n disabledNodes={disabledNodes}\n loadRecursively={loadRecursively}\n node={node as ITreeMapElement}\n onSelect={onSelect}\n selectedNodes={selectedNodes}\n showSelectChildrenButton={showSelectChildrenButton}\n />\n )}\n onSelect={_handleSelect}\n onCheck={_handleCheck}\n />\n );\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leav/ui",
3
- "version": "1.6.0-a54099d3",
3
+ "version": "1.6.0-b54abb33",
4
4
  "description": "Shared React components and hooks",
5
5
  "scripts": {
6
6
  "prepublishOnly": "yarn build",