@leav/ui 0.4.0-2b240f6 → 0.4.0-347facc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_gqlTypes/index.d.ts +939 -19
- package/dist/_gqlTypes/index.js +132 -3
- package/dist/_gqlTypes/index.js.map +1 -1
- package/dist/_queries/records/activateRecordsMutation.d.ts +1 -0
- package/dist/_queries/records/activateRecordsMutation.js +15 -0
- package/dist/_queries/records/activateRecordsMutation.js.map +1 -0
- package/dist/_queries/records/getRecordFormQuery.js +9 -0
- package/dist/_queries/records/getRecordFormQuery.js.map +1 -1
- package/dist/components/Explorer/DataView.d.ts +2 -1
- package/dist/components/Explorer/DataView.js +13 -10
- package/dist/components/Explorer/DataView.js.map +1 -1
- package/dist/components/Explorer/Explorer.d.ts +5 -4
- package/dist/components/Explorer/Explorer.js +7 -5
- package/dist/components/Explorer/Explorer.js.map +1 -1
- package/dist/components/Explorer/_queries/useExplorerData.js +7 -3
- package/dist/components/Explorer/_queries/useExplorerData.js.map +1 -1
- package/dist/components/Explorer/_types.d.ts +4 -2
- package/dist/components/Explorer/_types.js.map +1 -1
- package/dist/components/Explorer/actions-item/{useRemoveItemAction.d.ts → useEditStatusItemAction.d.ts} +2 -2
- package/dist/components/Explorer/actions-item/{useRemoveItemAction.js → useEditStatusItemAction.js} +71 -24
- package/dist/components/Explorer/actions-item/useEditStatusItemAction.js.map +1 -0
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.d.ts +3 -1
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.js +14 -6
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.js.map +1 -1
- package/dist/components/Explorer/useViewSettingsReducer.js +6 -2
- package/dist/components/Explorer/useViewSettingsReducer.js.map +1 -1
- package/dist/components/LibraryItemsList/FiltersPanel/Filter/Filter.js +2 -2
- package/dist/components/LibraryItemsList/FiltersPanel/Filter/Filter.js.map +1 -1
- package/dist/components/LinkSelect/LinkSelect.d.ts +7 -4
- package/dist/components/LinkSelect/LinkSelect.js +60 -16
- package/dist/components/LinkSelect/LinkSelect.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.js +6 -4
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record-in-creation/useLinkRecordsInCreation.js +2 -2
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record-in-creation/useLinkRecordsInCreation.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record-in-edition/useLinkRecordsInEdition.d.ts +3 -2
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record-in-edition/useLinkRecordsInEdition.js +235 -48
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record-in-edition/useLinkRecordsInEdition.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardField.js +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardField.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/TreeField.js +4 -3
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/TreeField.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeItem.d.ts +2 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeItem.js +2 -2
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeItem.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/useDisplayTreeNode.d.ts +2 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/useDisplayTreeNode.js +2 -2
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/useDisplayTreeNode.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.d.ts +21 -2
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.js +8 -5
- package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordModal/EditRecordModal.d.ts +1 -0
- package/dist/components/RecordEdition/EditRecordModal/EditRecordModal.js +2 -2
- package/dist/components/RecordEdition/EditRecordModal/EditRecordModal.js.map +1 -1
- package/dist/components/RecordEdition/index.d.ts +1 -0
- package/dist/components/RecordEdition/index.js +1 -0
- package/dist/components/RecordEdition/index.js.map +1 -1
- package/dist/components/SelectRecordForLinkModal/SelectRecordForLinkModal.d.ts +2 -1
- package/dist/components/SelectRecordForLinkModal/SelectRecordForLinkModal.js +2 -2
- package/dist/components/SelectRecordForLinkModal/SelectRecordForLinkModal.js.map +1 -1
- package/dist/components/{SelectTreeNodeModal/SelectTreeNodeModal.d.ts → SelectTreeNodeModalOld/SelectTreeNodeModalOld.d.ts} +1 -1
- package/dist/components/{SelectTreeNodeModal/SelectTreeNodeModal.js → SelectTreeNodeModalOld/SelectTreeNodeModalOld.js} +4 -2
- package/dist/components/SelectTreeNodeModalOld/SelectTreeNodeModalOld.js.map +1 -0
- package/dist/components/SelectTreeNodeModalOld/index.d.ts +1 -0
- package/dist/components/{SelectTreeNodeModal → SelectTreeNodeModalOld}/index.js +1 -1
- package/dist/components/SelectTreeNodeModalOld/index.js.map +1 -0
- package/dist/components/ValuesVersionConfigurator/VersionTree/VersionTree.js +2 -2
- package/dist/components/ValuesVersionConfigurator/VersionTree/VersionTree.js.map +1 -1
- package/dist/components/index.d.ts +1 -2
- package/dist/components/index.js +1 -2
- package/dist/components/index.js.map +1 -1
- package/dist/contexts/LangContext/LangContext.d.ts +1 -2
- package/dist/contexts/LangContext/LangContext.js +2 -2
- package/dist/contexts/LangContext/LangContext.js.map +1 -1
- package/dist/hooks/useGetRecordForm/useGetRecordForm.js +1 -1
- package/dist/hooks/useGetRecordForm/useGetRecordForm.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.d.ts +3 -2
- package/dist/hooks/useIFrameMessenger/messageHandlers.js +12 -5
- package/dist/hooks/useIFrameMessenger/messageHandlers.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/types.d.ts +78 -9
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +2 -0
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.js +32 -12
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.js.map +1 -1
- package/dist/hooks/useRedirectToLogin/useRedirectToLogin.js +1 -1
- package/dist/hooks/useRedirectToLogin/useRedirectToLogin.js.map +1 -1
- package/dist/locales/en/shared.json +4 -0
- package/dist/locales/fr/shared.json +4 -0
- package/dist/types/attributes.d.ts +2 -1
- package/package.json +1 -1
- package/dist/components/Explorer/actions-item/useRemoveItemAction.js.map +0 -1
- package/dist/components/SelectTreeNodeModal/SelectTreeNodeModal.js.map +0 -1
- package/dist/components/SelectTreeNodeModal/index.d.ts +0 -1
- package/dist/components/SelectTreeNodeModal/index.js.map +0 -1
|
@@ -3,11 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
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 { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
6
|
-
import {
|
|
7
|
-
import { KitButton, KitDivider, KitSelect, KitSpace } from 'aristid-ds';
|
|
6
|
+
import { faMagnifyingGlass, faPlus } from '@fortawesome/free-solid-svg-icons';
|
|
7
|
+
import { KitButton, KitDivider, KitLoader, KitSelect, KitSpace } from 'aristid-ds';
|
|
8
8
|
import styled from 'styled-components';
|
|
9
|
-
import { useState } from 'react';
|
|
9
|
+
import { useEffect, useRef, useState } from 'react';
|
|
10
10
|
import { useSharedTranslation } from '../../hooks/useSharedTranslation';
|
|
11
|
+
import { useDebouncedValue } from '../../hooks/useDebouncedValue';
|
|
12
|
+
import { FaChevronDown } from 'react-icons/fa';
|
|
11
13
|
const StyledDivider = styled(KitDivider) `
|
|
12
14
|
margin: calc(var(--general-spacing-xs) * 1px);
|
|
13
15
|
`;
|
|
@@ -16,29 +18,71 @@ const StyledContainer = styled.div `
|
|
|
16
18
|
justify-content: center;
|
|
17
19
|
`;
|
|
18
20
|
const StyledKitSelect = styled(KitSelect) `
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
&.select-without-tags {
|
|
22
|
+
.ant-select-selection-overflow-item:not(.ant-select-selection-overflow-item-suffix) {
|
|
23
|
+
display: none;
|
|
24
|
+
}
|
|
21
25
|
}
|
|
22
26
|
`;
|
|
23
|
-
function LinkSelect({ tagDisplay, options, defaultValues, hideAdvancedSearch = false, onUpdateSelection,
|
|
27
|
+
function LinkSelect({ tagDisplay, options, defaultValues, hideAdvancedSearch = false, onUpdateSelection, onClickCreateButton, onBlur, onAdvanceSearch, onSearch }) {
|
|
24
28
|
const { t } = useSharedTranslation();
|
|
25
|
-
const
|
|
29
|
+
const itemsToLink = useRef(new Set());
|
|
30
|
+
const itemsToDelete = useRef(new Set());
|
|
31
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
26
32
|
const [currentSearch, setCurrentSearch] = useState('');
|
|
33
|
+
const debouncedSearch = useDebouncedValue(currentSearch, 500);
|
|
27
34
|
const [emptyResults, setEmptyResults] = useState(false);
|
|
35
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (!tagDisplay) {
|
|
38
|
+
setIsOpen(true);
|
|
39
|
+
}
|
|
40
|
+
}, [tagDisplay]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
// Call API search when debounced search value changes
|
|
43
|
+
onSearch?.(debouncedSearch).then(() => {
|
|
44
|
+
setIsLoading(false);
|
|
45
|
+
});
|
|
46
|
+
}, [debouncedSearch]);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (debouncedSearch === '') {
|
|
49
|
+
setEmptyResults(false);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
setEmptyResults(options.length === 0);
|
|
53
|
+
}
|
|
54
|
+
}, [options, debouncedSearch]);
|
|
28
55
|
const _handleChange = (selection) => {
|
|
29
|
-
onUpdateSelection(selection);
|
|
56
|
+
onUpdateSelection?.(selection);
|
|
30
57
|
};
|
|
31
58
|
const _handleSearch = (value) => {
|
|
59
|
+
setIsLoading(true);
|
|
32
60
|
setCurrentSearch(value);
|
|
33
|
-
const optionsFiltered = options.filter(option => option.label.toLowerCase().includes(value.toLowerCase()));
|
|
34
|
-
setEmptyResults(optionsFiltered.length === 0 && value !== '');
|
|
35
61
|
};
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
62
|
+
const _onClickCreateButton = () => {
|
|
63
|
+
onClickCreateButton?.(debouncedSearch);
|
|
64
|
+
};
|
|
65
|
+
const _onBlur = () => {
|
|
66
|
+
onBlur?.(itemsToLink.current, itemsToDelete.current);
|
|
67
|
+
setIsOpen(false);
|
|
68
|
+
};
|
|
69
|
+
const _onSelect = (itemId) => {
|
|
70
|
+
// remove itemToDelete if exists
|
|
71
|
+
itemsToDelete.current.delete(itemId);
|
|
72
|
+
itemsToLink.current.add(itemId);
|
|
73
|
+
};
|
|
74
|
+
const _onDeselect = (itemId) => {
|
|
75
|
+
if (itemsToLink.current.has(itemId)) {
|
|
76
|
+
// Remove item to link if exists
|
|
77
|
+
itemsToLink.current.delete(itemId);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
itemsToDelete.current.add(itemId);
|
|
81
|
+
};
|
|
82
|
+
const dropdownButtons = menu => (_jsxs("div", { className: "dropdown-custom", children: [menu, (emptyResults || !hideAdvancedSearch) && (_jsxs(_Fragment, { children: [_jsx(StyledDivider, {}), _jsx(StyledContainer, { children: isLoading ? (_jsx(KitLoader, {})) : (_jsxs(KitSpace, { align: "center", direction: "vertical", size: "xs", children: [emptyResults && (_jsx(KitButton, { type: "secondary", icon: _jsx(FontAwesomeIcon, { icon: faPlus }), onClick: _onClickCreateButton,
|
|
83
|
+
// @ts-ignore: required to avoid the click propagation that will automatically close the dropdown modal - https://aristid.atlassian.net/browse/DS-339
|
|
84
|
+
onMouseDown: e => e.preventDefault(), children: `${t('record_edition.new_record')} "${debouncedSearch}"` })), !hideAdvancedSearch && (_jsx(KitButton, { type: "tertiary", icon: _jsx(FontAwesomeIcon, { icon: faMagnifyingGlass }), onClick: () => onAdvanceSearch(), children: t('record_edition.advanced_search') }))] })) })] }))] }));
|
|
85
|
+
return (_jsx(StyledKitSelect, { className: tagDisplay ? undefined : 'select-without-tags', placeholder: t('record_edition.select'), mode: "multiple", open: isOpen, defaultValue: defaultValues, options: options, optionFilterProp: "label", filterOption: false, showSearch: true, onChange: _handleChange, onSearch: _handleSearch, onBlur: _onBlur, onFocus: () => setIsOpen(true), onDeselect: _onDeselect, onSelect: _onSelect, dropdownRender: dropdownButtons, autoFocus: !tagDisplay, allowClear: tagDisplay, suffixIcon: tagDisplay ? _jsx(FaChevronDown, {}) : _jsx("div", {}) }));
|
|
42
86
|
}
|
|
43
87
|
export default LinkSelect;
|
|
44
88
|
//# sourceMappingURL=LinkSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkSelect.js","sourceRoot":"","sources":["../../../src/components/LinkSelect/LinkSelect.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"LinkSelect.js","sourceRoot":"","sources":["../../../src/components/LinkSelect/LinkSelect.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,iBAAiB,EAAE,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAC;AACjF,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAiB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAe7C,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;;CAEvC,CAAC;AAEF,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;CAGjC,CAAC;AAEF,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;;;;;;CAMxC,CAAC;AAEF,SAAS,UAAU,CAAC,EAChB,UAAU,EACV,OAAO,EACP,aAAa,EACb,kBAAkB,GAAG,KAAK,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,MAAM,EACN,eAAe,EACf,QAAQ,EACO;IACf,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;IAEhD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,iBAAiB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,SAAS,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,SAAS,CAAC,GAAG,EAAE;QACX,sDAAsD;QACtD,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAClC,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,eAAe,KAAK,EAAE,EAAE,CAAC;YACzB,eAAe,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,eAAe,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IAE/B,MAAM,aAAa,GAAiD,CAAC,SAAmB,EAAE,EAAE;QACxF,iBAAiB,EAAE,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAiD,CAAC,KAAa,EAAE,EAAE;QAClF,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAgD,GAAG,EAAE;QAC3E,mBAAmB,EAAE,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,OAAO,GAA+C,GAAG,EAAE;QAC7D,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACrD,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAiD,CAAC,MAAc,EAAE,EAAE;QAC/E,gCAAgC;QAChC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,WAAW,GAAmD,CAAC,MAAW,EAAE,EAAE;QAChF,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,gCAAgC;YAChC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO;QACX,CAAC;QAED,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,eAAe,GAAuD,IAAI,CAAC,EAAE,CAAC,CAChF,eAAK,SAAS,EAAC,iBAAiB,aAC3B,IAAI,EACJ,CAAC,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACtC,8BACI,KAAC,aAAa,KAAG,EACjB,KAAC,eAAe,cACX,SAAS,CAAC,CAAC,CAAC,CACT,KAAC,SAAS,KAAG,CAChB,CAAC,CAAC,CAAC,CACA,MAAC,QAAQ,IAAC,KAAK,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,EAAC,IAAI,EAAC,IAAI,aAClD,YAAY,IAAI,CACb,KAAC,SAAS,IACN,IAAI,EAAC,WAAW,EAChB,IAAI,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,MAAM,GAAI,EACvC,OAAO,EAAE,oBAAoB;oCAC7B,qJAAqJ;oCACrJ,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,YAEnC,GAAG,CAAC,CAAC,2BAA2B,CAAC,KAAK,eAAe,GAAG,GACjD,CACf,EACA,CAAC,kBAAkB,IAAI,CACpB,KAAC,SAAS,IACN,IAAI,EAAC,UAAU,EACf,IAAI,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,iBAAiB,GAAI,EAClD,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,YAE/B,CAAC,CAAC,gCAAgC,CAAC,GAC5B,CACf,IACM,CACd,GACa,IACnB,CACN,IACC,CACT,CAAC;IAEF,OAAO,CACH,KAAC,eAAe,IACZ,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,EACzD,WAAW,EAAE,CAAC,CAAC,uBAAuB,CAAC,EACvC,IAAI,EAAC,UAAU,EACf,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAC,OAAO,EACxB,YAAY,EAAE,KAAK,EACnB,UAAU,QACV,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAC9B,UAAU,EAAE,WAAW,EACvB,QAAQ,EAAE,SAAS,EACnB,cAAc,EAAE,eAAe,EAC/B,SAAS,EAAE,CAAC,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAC,aAAa,KAAG,CAAC,CAAC,CAAC,eAAO,GACtD,CACL,CAAC;AACN,CAAC;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -43,7 +43,7 @@ const KitInputWrapperStyled = styled(KitInputWrapper) `
|
|
|
43
43
|
const LinkField = ({ element, readonly, formIdToLoad, pendingValues, onDeleteMultipleValues, onValueSubmit, onValueDelete, metadataEdit = false }) => {
|
|
44
44
|
const { state, dispatch } = useEditRecordReducer();
|
|
45
45
|
const { lang } = useLang();
|
|
46
|
-
const { settings, attribute } = element;
|
|
46
|
+
const { settings, attribute, joinLibraryContext } = element;
|
|
47
47
|
const attributesPendingDefaultValues = pendingValues?.[attribute.id]
|
|
48
48
|
? Object.values(pendingValues?.[attribute.id])
|
|
49
49
|
: [];
|
|
@@ -55,7 +55,7 @@ const LinkField = ({ element, readonly, formIdToLoad, pendingValues, onDeleteMul
|
|
|
55
55
|
const label = localizedTranslation(settings.label, lang);
|
|
56
56
|
const fieldErrors = form.getFieldError(attribute.id);
|
|
57
57
|
const columnsToDisplay = settings.columns?.map(({ id }) => id);
|
|
58
|
-
const isReadOnly = attribute.readonly || readonly;
|
|
58
|
+
const isReadOnly = attribute.readonly || !attribute.permissions.edit_value || readonly;
|
|
59
59
|
const isFieldInError = fieldErrors.length > 0;
|
|
60
60
|
useEffect(() => {
|
|
61
61
|
setAttributePendingValues(pendingValues?.[attribute.id]
|
|
@@ -75,7 +75,8 @@ const LinkField = ({ element, readonly, formIdToLoad, pendingValues, onDeleteMul
|
|
|
75
75
|
'.kit-modal-wrapper',
|
|
76
76
|
`.${CREATE_RECORD_MODAL_CLASSNAME}`,
|
|
77
77
|
`.${LINK_RECORDS_MODAL_CLASSNAME}`,
|
|
78
|
-
`.${EDIT_RECORD_MODAL_CLASSNAME}
|
|
78
|
+
`.${EDIT_RECORD_MODAL_CLASSNAME}`,
|
|
79
|
+
'.kit-select-dropdown-content'
|
|
79
80
|
]
|
|
80
81
|
});
|
|
81
82
|
const { UnlinkAllRecordsInCreation, LinkRecordsInCreation } = useLinkRecordsInCreation({
|
|
@@ -94,6 +95,7 @@ const LinkField = ({ element, readonly, formIdToLoad, pendingValues, onDeleteMul
|
|
|
94
95
|
libraryId: state.libraryId,
|
|
95
96
|
recordId: state.record?.id,
|
|
96
97
|
attribute,
|
|
98
|
+
joinLibraryContext,
|
|
97
99
|
columnsToDisplay,
|
|
98
100
|
backendValues,
|
|
99
101
|
setBackendValues,
|
|
@@ -106,7 +108,7 @@ const LinkField = ({ element, readonly, formIdToLoad, pendingValues, onDeleteMul
|
|
|
106
108
|
hasNoValue: backendValues.length === 0,
|
|
107
109
|
onDeleteMultipleValues
|
|
108
110
|
});
|
|
109
|
-
return (_jsx(Wrapper, { "$metadataEdit": metadataEdit, children: _jsx(AntForm.Item, { name: attribute.id, noStyle: true, children: _jsx(KitInputWrapperStyled, { id: LINK_FIELD_ID_PREFIX + attribute.id, label: label, required: attribute.required, bordered: true, disabled: isReadOnly, status: isFieldInError ? 'error' : undefined, helper: isFieldInError ? String(fieldErrors[0]) : undefined, extra: _jsxs(_Fragment, { children: [_jsx(KitInputExtraAlignLeft, { children: _jsx(ComputeIndicator, { calculatedFlags: calculatedFlags, inheritedFlags: inheritedFlags }) }), formIdToLoad === 'creation' ? UnlinkAllRecordsInCreation : UnlinkAllRecordsInEdition] }), children: formIdToLoad === 'creation' ? LinkRecordsInCreation : LinkRecordsInEditionExplorer }) }) }));
|
|
111
|
+
return (_jsx(Wrapper, { "$metadataEdit": metadataEdit, children: _jsx(AntForm.Item, { name: attribute.id, noStyle: true, children: _jsx(KitInputWrapperStyled, { id: LINK_FIELD_ID_PREFIX + attribute.id, "data-testid": "link-field", label: label, required: attribute.required, bordered: true, disabled: isReadOnly, status: isFieldInError ? 'error' : undefined, helper: isFieldInError ? String(fieldErrors[0]) : undefined, extra: _jsxs(_Fragment, { children: [_jsx(KitInputExtraAlignLeft, { children: _jsx(ComputeIndicator, { calculatedFlags: calculatedFlags, inheritedFlags: inheritedFlags }) }), formIdToLoad === 'creation' ? UnlinkAllRecordsInCreation : UnlinkAllRecordsInEdition] }), children: formIdToLoad === 'creation' ? LinkRecordsInCreation : LinkRecordsInEditionExplorer }) }) }));
|
|
110
112
|
};
|
|
111
113
|
export default LinkField;
|
|
112
114
|
//# sourceMappingURL=LinkField.js.map
|
package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkField.js","sourceRoot":"","sources":["../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AACjD,OAAO,EAAoB,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,qEAAqE,CAAC;AAKzG,OAAO,EAAC,OAAO,EAAE,eAAe,EAAC,MAAM,YAAY,CAAC;AACpD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,oBAAoB,EAAC,MAAM,eAAe,CAAC;AACnD,OAAO,EAAC,sBAAsB,EAAE,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AACjG,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAC,6BAA6B,EAAC,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAC,wBAAwB,EAAC,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAC,uBAAuB,EAAC,MAAM,kDAAkD,CAAC;AACzF,OAAO,EACH,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC/B,MAAM,oCAAoC,CAAC;AAK5C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAA0B;qBAC/B,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;CAChE,CAAC;AAEF,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAA;;;CAGxC,CAAC;AAEF,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;;;;;;;;;;;;;;;;;CAiBpD,CAAC;AAWF,MAAM,SAAS,GAAsC,CAAC,EAClD,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,YAAY,GAAG,KAAK,EACvB,EAAE,EAAE;IACD,MAAM,EAAC,KAAK,EAAE,QAAQ,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACjD,MAAM,EAAC,IAAI,EAAC,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,EACF,QAAQ,EACR,SAAS,
|
|
1
|
+
{"version":3,"file":"LinkField.js","sourceRoot":"","sources":["../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -90,14 +90,14 @@ export const useLinkRecordsInCreation = ({ attribute, libraryId, pendingValues,
|
|
|
90
90
|
icon: _jsx(FaPlus, {}),
|
|
91
91
|
label: t('explorer.create-one'),
|
|
92
92
|
callback: () => openCreateRecordModal(libraryId),
|
|
93
|
-
disabled: isReadOnly
|
|
93
|
+
disabled: isReadOnly
|
|
94
94
|
}, linkButtonProps: {
|
|
95
95
|
icon: _jsx(FaList, {}),
|
|
96
96
|
label: attribute.multiple_values || hasNoSelectedRecord
|
|
97
97
|
? t('explorer.add-existing-item')
|
|
98
98
|
: t('record_edition.replace-by-existing-item'),
|
|
99
99
|
callback: openRecordSelectorModal,
|
|
100
|
-
disabled: isReadOnly
|
|
100
|
+
disabled: isReadOnly
|
|
101
101
|
}, hasNoValue: hasNoSelectedRecord }), CreateRecordModal, RecordSelectorModal, EditRecordModal] }))
|
|
102
102
|
};
|
|
103
103
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLinkRecordsInCreation.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record-in-creation/useLinkRecordsInCreation.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useLinkRecordsInCreation.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record-in-creation/useLinkRecordsInCreation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Explorer } from '../../../../../../components/Explorer';
|
|
2
2
|
import { ComponentProps, Dispatch, SetStateAction } from 'react';
|
|
3
3
|
import { DeleteMultipleValuesFunc } from '../../../_types';
|
|
4
|
-
import { RecordFormAttributeLinkAttributeFragment } from '../../../../../../_gqlTypes';
|
|
4
|
+
import { JoinLibraryContextFragment, RecordFormAttributeLinkAttributeFragment } from '../../../../../../_gqlTypes';
|
|
5
5
|
import { RecordFormElementsValueLinkValue } from '../../../../../../hooks/useGetRecordForm';
|
|
6
6
|
import { IEditRecordReducerActions, IRecordPropertyWithAttribute } from '../../../../../../components/RecordEdition/editRecordReducer/editRecordReducer';
|
|
7
7
|
interface ILinkRecordsInCreationProps {
|
|
8
8
|
libraryId: string;
|
|
9
9
|
recordId: string;
|
|
10
10
|
attribute: RecordFormAttributeLinkAttributeFragment;
|
|
11
|
+
joinLibraryContext: JoinLibraryContextFragment;
|
|
11
12
|
columnsToDisplay: ComponentProps<typeof Explorer>['defaultViewSettings']['attributesIds'];
|
|
12
13
|
backendValues: RecordFormElementsValueLinkValue[];
|
|
13
14
|
setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;
|
|
@@ -20,7 +21,7 @@ interface ILinkRecordsInCreationProps {
|
|
|
20
21
|
hasNoValue: boolean;
|
|
21
22
|
onDeleteMultipleValues: DeleteMultipleValuesFunc;
|
|
22
23
|
}
|
|
23
|
-
export declare const useLinkRecordsInEdition: ({ libraryId, recordId, attribute, columnsToDisplay, backendValues, setBackendValues, activeAttribute, dispatch, isHookUsed, isReadOnly, isFieldInError, tagDisplayMode,
|
|
24
|
+
export declare const useLinkRecordsInEdition: ({ libraryId, recordId, attribute, joinLibraryContext, columnsToDisplay, backendValues, setBackendValues, activeAttribute, dispatch, isHookUsed, isReadOnly, isFieldInError, tagDisplayMode, onDeleteMultipleValues }: ILinkRecordsInCreationProps) => {
|
|
24
25
|
UnlinkAllRecordsInEdition: JSX.Element;
|
|
25
26
|
LinkRecordsInEditionExplorer: JSX.Element;
|
|
26
27
|
};
|
|
@@ -4,41 +4,122 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
4
4
|
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
5
5
|
import { Explorer } from '../../../../../../components/Explorer';
|
|
6
6
|
import { useEffect, useState } from 'react';
|
|
7
|
-
import { FaList } from 'react-icons/fa';
|
|
8
7
|
import { useSharedTranslation } from '../../../../../../hooks/useSharedTranslation';
|
|
9
8
|
import { ExplorerWrapper } from '../shared/ExplorerWrapper';
|
|
10
|
-
import { LinkActionsButtons } from '../shared/LinkActionsButtons';
|
|
11
9
|
import { DeleteAllValuesButton } from '../../shared/DeleteAllValuesButton';
|
|
12
|
-
import {
|
|
10
|
+
import { AttributeType, RecordFilterCondition, RecordFilterOperator, useGetLibraryByIdQuery, useGetJoinLibraryMandatoryAttributeValuesLazyQuery, useGetRecordsFromLibraryQuery } from '../../../../../../_gqlTypes';
|
|
11
|
+
import useSaveValueBatchMutation from '../../../../../../components/RecordEdition/EditRecordContent/hooks/useExecuteSaveValueBatchMutation';
|
|
12
|
+
import { AntForm, KitButton } from 'aristid-ds';
|
|
13
13
|
import { EditRecordReducerActionsTypes } from '../../../../../../components/RecordEdition/editRecordReducer/editRecordReducer';
|
|
14
14
|
import { useLinkRecords } from './useLinkRecords';
|
|
15
|
-
import { useGetRecordValuesQuery } from '../../../../../../hooks/useGetRecordValuesQuery/useGetRecordValuesQuery';
|
|
16
15
|
import LinkSelect from '../../../../../../components/LinkSelect';
|
|
16
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
17
|
+
import { faPlus } from '@fortawesome/free-solid-svg-icons';
|
|
18
|
+
import { SelectTreeNodeModal } from '../../TreeField/manage-tree-node-selection/SelectTreeNodeModal';
|
|
19
|
+
import _ from 'lodash';
|
|
17
20
|
const _shouldUpdateExplorerActions = (ref, explorerActions) => ref?.createAction?.disabled !== explorerActions?.createAction?.disabled ||
|
|
18
21
|
ref?.linkAction?.disabled !== explorerActions?.linkAction?.disabled ||
|
|
19
22
|
ref?.totalCount !== explorerActions?.totalCount;
|
|
20
|
-
export const useLinkRecordsInEdition = ({ libraryId, recordId, attribute, columnsToDisplay, backendValues, setBackendValues, activeAttribute, dispatch, isHookUsed, isReadOnly, isFieldInError, tagDisplayMode,
|
|
23
|
+
export const useLinkRecordsInEdition = ({ libraryId, recordId, attribute, joinLibraryContext, columnsToDisplay, backendValues, setBackendValues, activeAttribute, dispatch, isHookUsed, isReadOnly, isFieldInError, tagDisplayMode, onDeleteMultipleValues }) => {
|
|
21
24
|
const { t } = useSharedTranslation();
|
|
22
|
-
const [explorerActions, setExplorerActions] = useState(null);
|
|
23
25
|
const form = AntForm.useFormInstance();
|
|
26
|
+
const [isExplorerAddButtonClicked, setIsExplorerAddButtonClicked] = useState(false);
|
|
27
|
+
const [explorerActions, setExplorerActions] = useState(null);
|
|
28
|
+
const [fullTextSearchAttributes, setFullTextSearchAttributes] = useState([]);
|
|
29
|
+
const [linkedIds, setLinkIds] = useState([]);
|
|
30
|
+
const [selectOptions, setSelectOptions] = useState([]);
|
|
31
|
+
/**
|
|
32
|
+
* Keys is joined record id (e.g. thematic), values is join record Id (e.g. structure_item)
|
|
33
|
+
* Necessary to get the id_value of the link when we want to delete a value
|
|
34
|
+
*/
|
|
35
|
+
const [joinedRecordIdsMap, setJoinedRecordIdsMap] = useState(null);
|
|
24
36
|
const { handleDeleteAllValues, handleExplorerCreateValue, handleExplorerLinkValue, handleExplorerMassDeactivateValues, handleExplorerRemoveValue } = useLinkRecords({
|
|
25
37
|
attribute,
|
|
26
38
|
backendValues,
|
|
27
39
|
setBackendValues,
|
|
28
40
|
onDeleteMultipleValues
|
|
29
41
|
});
|
|
42
|
+
const _getLibraryId = () => (joinLibraryContext?.mandatoryAttribute &&
|
|
43
|
+
'linked_library' in joinLibraryContext.mandatoryAttribute &&
|
|
44
|
+
joinLibraryContext.mandatoryAttribute.linked_library?.id) ||
|
|
45
|
+
attribute.linked_library.id;
|
|
46
|
+
// Query to get all records from the linked library
|
|
47
|
+
// Network-only is useful to avoid caching, we have a side effect otherwise
|
|
48
|
+
// When the record is created, if we call getRecordsFromLibrary(), the previous records are returned
|
|
49
|
+
const { data: libraryItems, refetch: getRecordsFromLibrary } = useGetRecordsFromLibraryQuery({
|
|
50
|
+
fetchPolicy: 'network-only',
|
|
51
|
+
variables: {
|
|
52
|
+
libraryId: _getLibraryId(),
|
|
53
|
+
pagination: { limit: 10, offset: 0 }
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
// Function to get the library configuration
|
|
57
|
+
const { data: libraryLinked } = useGetLibraryByIdQuery({
|
|
58
|
+
variables: {
|
|
59
|
+
id: _getLibraryId()
|
|
60
|
+
}
|
|
61
|
+
});
|
|
30
62
|
useEffect(() => {
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
63
|
+
if (libraryLinked) {
|
|
64
|
+
setFullTextSearchAttributes(libraryLinked.libraries.list[0].fullTextAttributes);
|
|
65
|
+
}
|
|
66
|
+
}, [libraryLinked]);
|
|
67
|
+
// For each record in backendValues, get the id of the record linked by the mandatory attribute
|
|
68
|
+
// Will create a map of joined record ids to their corresponding link ids in joinedRecordIdsMap
|
|
69
|
+
const [getJoinLibraryMandatoryAttributeValues, { data: mandatoryAttributeValues }] = useGetJoinLibraryMandatoryAttributeValuesLazyQuery({
|
|
70
|
+
fetchPolicy: 'no-cache'
|
|
71
|
+
});
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (mandatoryAttributeValues) {
|
|
74
|
+
const _joinedRecordIdsMap = mandatoryAttributeValues?.records?.list.reduce((acc, record) => {
|
|
75
|
+
const joinedRecordId = record.property[0]?.payload?.id;
|
|
76
|
+
if (joinedRecordId) {
|
|
77
|
+
acc[joinedRecordId] = record.id;
|
|
37
78
|
}
|
|
38
|
-
|
|
79
|
+
return acc;
|
|
80
|
+
}, {});
|
|
81
|
+
const linkIds = Object.keys(_joinedRecordIdsMap);
|
|
82
|
+
setJoinedRecordIdsMap(_joinedRecordIdsMap);
|
|
83
|
+
setLinkIds(linkIds);
|
|
39
84
|
}
|
|
40
|
-
}, []);
|
|
85
|
+
}, [mandatoryAttributeValues]);
|
|
86
|
+
// Function to refetch data with current parameters
|
|
87
|
+
const getRecordsRefetch = (customVariables = {}) => getRecordsFromLibrary({
|
|
88
|
+
libraryId: _getLibraryId(),
|
|
89
|
+
pagination: { limit: 10, offset: 0 },
|
|
90
|
+
...customVariables
|
|
91
|
+
});
|
|
41
92
|
useEffect(() => {
|
|
93
|
+
// will be set by specific useEffect on joinLinkOrTreeValue after getLinkOrTreeAttributeValueOfRecord
|
|
94
|
+
if (backendValues.length) {
|
|
95
|
+
if (joinLibraryContext?.mandatoryAttribute?.id) {
|
|
96
|
+
const filteredJoinRecords = backendValues.reduce((acc, value, index) => {
|
|
97
|
+
// Add OR operator between filters (except before the first filter)
|
|
98
|
+
if (index > 0) {
|
|
99
|
+
acc.push({ operator: RecordFilterOperator.OR });
|
|
100
|
+
}
|
|
101
|
+
acc.push({
|
|
102
|
+
condition: RecordFilterCondition.EQUAL,
|
|
103
|
+
field: 'id',
|
|
104
|
+
value: value.linkValue.id
|
|
105
|
+
});
|
|
106
|
+
return acc;
|
|
107
|
+
}, []);
|
|
108
|
+
getJoinLibraryMandatoryAttributeValues({
|
|
109
|
+
variables: {
|
|
110
|
+
joinLibraryId: attribute.linked_library.id,
|
|
111
|
+
filters: filteredJoinRecords,
|
|
112
|
+
mandatoryAttributeId: joinLibraryContext.mandatoryAttribute.id
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
setLinkIds(backendValues.map(bv => bv.linkValue.id));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
setLinkIds([]);
|
|
122
|
+
}
|
|
42
123
|
if (isHookUsed && activeAttribute?.attribute.id === attribute.id) {
|
|
43
124
|
// Update active value used in the sidebar when backendValues change
|
|
44
125
|
dispatch({
|
|
@@ -46,22 +127,37 @@ export const useLinkRecordsInEdition = ({ libraryId, recordId, attribute, column
|
|
|
46
127
|
values: backendValues
|
|
47
128
|
});
|
|
48
129
|
}
|
|
49
|
-
}, [backendValues]);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
130
|
+
}, [backendValues, joinLibraryContext]);
|
|
131
|
+
// Update options for LinkSelect when libraryItems update
|
|
132
|
+
useEffect(() => {
|
|
133
|
+
if (libraryItems?.records?.list) {
|
|
134
|
+
setSelectOptions(libraryItems.records.list.map(record => ({
|
|
135
|
+
value: record.id,
|
|
136
|
+
label: record.whoAmI.label ?? record.whoAmI.id,
|
|
137
|
+
idCard: {
|
|
138
|
+
description: record.whoAmI.label ?? record.whoAmI.id,
|
|
139
|
+
avatarProps: {
|
|
140
|
+
size: 'small',
|
|
141
|
+
shape: 'square',
|
|
142
|
+
imageFit: 'contain',
|
|
143
|
+
src: record.whoAmI.preview?.small,
|
|
144
|
+
label: record.whoAmI.label ?? record.whoAmI.id
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
})));
|
|
148
|
+
}
|
|
149
|
+
}, [libraryItems]);
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
if (isHookUsed && backendValues.length === 0 && attribute.required) {
|
|
152
|
+
// Set field in error when LinkField is displayed for the first time. Otherwise, errors will be handled by _removeValues() or _handleExplorerLinkValue()
|
|
153
|
+
form.setFields([
|
|
154
|
+
{
|
|
155
|
+
name: attribute.id,
|
|
156
|
+
errors: [t('errors.standard_field_required')]
|
|
157
|
+
}
|
|
158
|
+
]);
|
|
63
159
|
}
|
|
64
|
-
})
|
|
160
|
+
}, []);
|
|
65
161
|
const _handleExplorerRef = (ref) => {
|
|
66
162
|
if (_shouldUpdateExplorerActions(ref, explorerActions)) {
|
|
67
163
|
setExplorerActions({
|
|
@@ -71,15 +167,107 @@ export const useLinkRecordsInEdition = ({ libraryId, recordId, attribute, column
|
|
|
71
167
|
});
|
|
72
168
|
}
|
|
73
169
|
};
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
170
|
+
const _openLinkSelect = () => {
|
|
171
|
+
setIsExplorerAddButtonClicked(true);
|
|
172
|
+
};
|
|
173
|
+
const { saveValues } = useSaveValueBatchMutation();
|
|
174
|
+
// eventually change Set to Array can simplify a bit that method !
|
|
175
|
+
const _onSelectionDone = async (itemsToLink, itemsToDelete) => {
|
|
176
|
+
// In case of joinLibraryContext,
|
|
177
|
+
// itemsToLink and itemsToDelete are a Set of joined record ids (e.g. thematic ids instead structure_item ids)
|
|
178
|
+
// - for insertion, backend can receive joined record ids, it is ok
|
|
179
|
+
// - but for deletion, we need the id of linked record (e.g. structure_item id), to be able to get the id_value of that link
|
|
180
|
+
// (e.g. between campaign and structure_item), so we use a map of joined record ids to their corresponding link ids
|
|
181
|
+
// (e.g. switch from thematic id to structure_item id)
|
|
182
|
+
const backendIdToDelete = joinedRecordIdsMap
|
|
183
|
+
? new Set([...itemsToDelete.values()].map(itemToDelete => joinedRecordIdsMap[itemToDelete]))
|
|
184
|
+
: itemsToDelete;
|
|
185
|
+
// If there is no value to link or to remove, return early
|
|
186
|
+
if (itemsToLink.size === 0 && itemsToDelete.size === 0) {
|
|
187
|
+
setIsExplorerAddButtonClicked(false);
|
|
188
|
+
return;
|
|
77
189
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
190
|
+
// Convert itemsToLink Set to Array once to avoid repeated conversions
|
|
191
|
+
const itemsToLinkArray = Array.from(itemsToLink);
|
|
192
|
+
// Find values to remove and prepare payload for backend
|
|
193
|
+
const valuesToRemove = backendValues.filter(bv => backendIdToDelete.has(bv.linkValue.id));
|
|
194
|
+
const idValuesToRemove = valuesToRemove.map(bv => bv.id_value);
|
|
195
|
+
// Prepare batch operation payload
|
|
196
|
+
const values = [
|
|
197
|
+
// Items to link (create new links)
|
|
198
|
+
...itemsToLinkArray.map(item => ({
|
|
199
|
+
attribute: attribute.id,
|
|
200
|
+
idValue: null,
|
|
201
|
+
value: item
|
|
202
|
+
})),
|
|
203
|
+
// Items to delete (remove existing links)
|
|
204
|
+
...idValuesToRemove.map(item => ({
|
|
205
|
+
attribute: attribute.id,
|
|
206
|
+
idValue: item,
|
|
207
|
+
value: null
|
|
208
|
+
}))
|
|
209
|
+
];
|
|
210
|
+
// Send the values to the backend
|
|
211
|
+
const res = await saveValues({ id: recordId, library: { id: libraryId } }, values, undefined, true);
|
|
212
|
+
const resValues = res.values;
|
|
213
|
+
// Update linked IDs: add new links and remove deleted ones
|
|
214
|
+
// Maybe not necessary because setBackendValues will trigger an effect to re set linkedIds !
|
|
215
|
+
const updatedLinkedIds = linkedIds.filter(id => !itemsToDelete.has(id)).concat(itemsToLinkArray);
|
|
216
|
+
setLinkIds(updatedLinkedIds);
|
|
217
|
+
// Extract newly added values from response, filter because saveValues return delete values in resValues !
|
|
218
|
+
const newlyAddedValues = resValues.filter(v =>
|
|
219
|
+
// We do not do a positive filter based on itemsToLink because in case of joinLibraryContext,
|
|
220
|
+
// we do not have the mapping between linkIds and backendValue ids.
|
|
221
|
+
// However in we know the mapping between linkIds and backendValue ids for itemsToDelete, so we do a negative filter here
|
|
222
|
+
!backendIdToDelete.has(v.linkValue.id));
|
|
223
|
+
// Update backend values: remove deleted ones and add new ones
|
|
224
|
+
setBackendValues([...backendValues.filter(bv => !backendIdToDelete.has(bv.linkValue.id)), ...newlyAddedValues]);
|
|
225
|
+
// Hide linkSelect
|
|
226
|
+
setIsExplorerAddButtonClicked(false);
|
|
227
|
+
};
|
|
228
|
+
const _onBlurLinkSelect = async (itemsToLink, itemsToDelete) => {
|
|
229
|
+
_onSelectionDone(itemsToLink, itemsToDelete);
|
|
230
|
+
};
|
|
231
|
+
const _onSelectTreeNodeConfirm = async (selectedNodes) => {
|
|
232
|
+
// Convert selectedNodes to a Set of ids
|
|
233
|
+
const itemsToLink = new Set(_.difference(selectedNodes.map(node => node.id), linkedIds));
|
|
234
|
+
const itemsToDelete = new Set(_.difference(linkedIds, selectedNodes.map(node => node.id)));
|
|
235
|
+
_onSelectionDone(itemsToLink, itemsToDelete);
|
|
236
|
+
};
|
|
237
|
+
// search records that match the text typed in the search bar
|
|
238
|
+
const _onLinkSelectSearch = async (text) => {
|
|
239
|
+
const filters = fullTextSearchAttributes.reduce((acc, attr, index) => {
|
|
240
|
+
// Add OR operator between filters (except before the first filter)
|
|
241
|
+
if (index > 0) {
|
|
242
|
+
acc.push({ operator: RecordFilterOperator.OR });
|
|
243
|
+
}
|
|
244
|
+
// Add the filter condition
|
|
245
|
+
acc.push({
|
|
246
|
+
condition: RecordFilterCondition.CONTAINS,
|
|
247
|
+
field: attr.id,
|
|
248
|
+
value: text
|
|
249
|
+
});
|
|
250
|
+
return acc;
|
|
251
|
+
}, []);
|
|
252
|
+
await getRecordsRefetch({
|
|
253
|
+
filters
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
const _onCreateLinkSelect = async () => {
|
|
257
|
+
setIsExplorerAddButtonClicked(false);
|
|
258
|
+
explorerActions?.createAction?.callback();
|
|
259
|
+
};
|
|
260
|
+
const _onDeselect = linkId => {
|
|
261
|
+
const item = backendValues.find(bv => bv.linkValue.id === linkId);
|
|
262
|
+
if (!item) {
|
|
263
|
+
return null;
|
|
81
264
|
}
|
|
82
|
-
return
|
|
265
|
+
return {
|
|
266
|
+
id_value: item.id_value,
|
|
267
|
+
libraryId,
|
|
268
|
+
attribute,
|
|
269
|
+
recordId
|
|
270
|
+
};
|
|
83
271
|
};
|
|
84
272
|
return {
|
|
85
273
|
UnlinkAllRecordsInEdition: isHookUsed &&
|
|
@@ -88,7 +276,7 @@ export const useLinkRecordsInEdition = ({ libraryId, recordId, attribute, column
|
|
|
88
276
|
!attribute.required && (_jsx(DeleteAllValuesButton, { handleDelete: handleDeleteAllValues, disabled: isReadOnly, danger: isFieldInError })),
|
|
89
277
|
LinkRecordsInEditionExplorer: isHookUsed &&
|
|
90
278
|
recordId &&
|
|
91
|
-
(tagDisplayMode ? (_jsx(LinkSelect, { tagDisplay: true, options: selectOptions, defaultValues:
|
|
279
|
+
(tagDisplayMode ? (_jsx(LinkSelect, { tagDisplay: true, options: selectOptions, defaultValues: linkedIds })) : (_jsxs(_Fragment, { children: [_jsx(ExplorerWrapper, { children: _jsx(Explorer, { ref: _handleExplorerRef, defaultViewSettings: {
|
|
92
280
|
attributesIds: columnsToDisplay
|
|
93
281
|
}, entrypoint: {
|
|
94
282
|
type: 'link',
|
|
@@ -108,17 +296,16 @@ export const useLinkRecordsInEdition = ({ libraryId, recordId, attribute, column
|
|
|
108
296
|
}
|
|
109
297
|
}, showTitle: false, showSearch: false, selectionMode: attribute.multiple_values ? 'multiple' : 'simple', disableSelection: isReadOnly ||
|
|
110
298
|
!attribute.multiple_values ||
|
|
111
|
-
(attribute.required && attribute.multiple_values && backendValues.length === 1), defaultActionsForItem:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}, hasNoValue: hasNoValue })] })))
|
|
299
|
+
(attribute.required && attribute.multiple_values && backendValues.length === 1), defaultActionsForItem: [], joinLibraryContext: joinLibraryContext, hidePrimaryActions: true, hideTableHeader: true, iconsOnlyItemActions: true }) }), _jsx(KitButton, { disabled: isReadOnly, onClick: _openLinkSelect, icon: _jsx(FontAwesomeIcon, { icon: faPlus }) }), isExplorerAddButtonClicked && (_jsxs(_Fragment, { children: [joinLibraryContext?.mandatoryAttribute.type !== AttributeType.tree && (_jsx(LinkSelect, { tagDisplay: false, options: selectOptions, defaultValues: linkedIds, onClickCreateButton: _onCreateLinkSelect, onBlur: _onBlurLinkSelect, onParentDeselect: _onDeselect, onSearch: _onLinkSelectSearch })), joinLibraryContext?.mandatoryAttribute.type === AttributeType.tree && (_jsx(SelectTreeNodeModal, { title: "title", open: true, attribute: {
|
|
300
|
+
...joinLibraryContext.mandatoryAttribute,
|
|
301
|
+
multiple_values: attribute.multiple_values
|
|
302
|
+
}, backendValues: linkedIds.map(linkId => ({
|
|
303
|
+
treeValue: {
|
|
304
|
+
id: linkId
|
|
305
|
+
}
|
|
306
|
+
})), allowInitialNodeDeselection: true, onClose: () => {
|
|
307
|
+
setIsExplorerAddButtonClicked(false);
|
|
308
|
+
}, onConfirm: _onSelectTreeNodeConfirm }))] }))] })))
|
|
122
309
|
};
|
|
123
310
|
};
|
|
124
311
|
//# sourceMappingURL=useLinkRecordsInEdition.js.map
|