@leav/ui 1.6.0-0f019af0 → 1.6.0-12dfa0f6
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/README.md +13 -12
- package/dist/__mocks__/react-i18next.d.ts +1 -1
- package/dist/_gqlTypes/index.d.ts +408 -27
- package/dist/_gqlTypes/index.js +241 -0
- package/dist/_gqlTypes/index.js.map +1 -1
- package/dist/_queries/attributes/attributeDetailsFragment.js +5 -0
- package/dist/_queries/attributes/attributeDetailsFragment.js.map +1 -1
- package/dist/components/AttributesSelectionList/SelectedAttributesList/SelectedAttributesList.js +20 -12
- package/dist/components/AttributesSelectionList/SelectedAttributesList/SelectedAttributesList.js.map +1 -1
- package/dist/components/AttributesSelectionList/reducer/__mocks__/attributesSelectionListStateContext.d.ts +1 -1
- package/dist/components/Explorer/Explorer.js +2 -2
- package/dist/components/Explorer/Explorer.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.d.ts +2 -4
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.js +18 -16
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js +2 -2
- package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/useListEditableAttributeHook.js +9 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/useListEditableAttributeHook.js.map +1 -1
- package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.d.ts +10 -3
- package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.js +16 -6
- package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.js.map +1 -1
- package/dist/components/Filters/filter-items/EmptyValueCheckbox.js +4 -4
- package/dist/components/Filters/filter-items/EmptyValueCheckbox.js.map +1 -1
- package/dist/components/LibraryItemsList/FiltersPanel/Filter/Filter.d.ts +1 -3
- package/dist/components/LibraryItemsList/FiltersPanel/Filter/Filter.js +6 -2
- package/dist/components/LibraryItemsList/FiltersPanel/Filter/Filter.js.map +1 -1
- package/dist/components/LibraryItemsList/FiltersPanel/FiltersPanel.js +15 -17
- package/dist/components/LibraryItemsList/FiltersPanel/FiltersPanel.js.map +1 -1
- package/dist/components/LibraryItemsList/LibraryItemsListTable/ChooseTableColumns/ChooseTableColumns.js +0 -6
- package/dist/components/LibraryItemsList/LibraryItemsListTable/ChooseTableColumns/ChooseTableColumns.js.map +1 -1
- package/dist/components/LibraryItemsList/ViewPanel/View/View.d.ts +1 -3
- package/dist/components/LibraryItemsList/ViewPanel/View/View.js +6 -2
- package/dist/components/LibraryItemsList/ViewPanel/View/View.js.map +1 -1
- package/dist/components/LibraryItemsList/ViewPanel/ViewPanel.js +36 -14
- package/dist/components/LibraryItemsList/ViewPanel/ViewPanel.js.map +1 -1
- package/dist/components/RecordEdition/EditRecord/EditRecord.d.ts +1 -0
- package/dist/components/RecordEdition/EditRecord/EditRecord.js +3 -3
- package/dist/components/RecordEdition/EditRecord/EditRecord.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/antdUtils.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/hooks/__mocks__/useDeleteValueMutation.d.ts +1 -1
- package/dist/components/RecordEdition/EditRecordContent/hooks/__mocks__/useSaveValueMutation.d.ts +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.d.ts +1 -11
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.js +8 -95
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/_types.d.ts +8 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/_types.js +2 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/_types.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/LinkFieldExplorer.d.ts +6 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/LinkFieldExplorer.js +77 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/LinkFieldExplorer.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record → explorer/link-record}/useExplorerLinkRecords.d.ts +5 -7
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record → explorer/link-record}/useExplorerLinkRecords.js +3 -10
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/link-record/useExplorerLinkRecords.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record → explorer/link-record}/useLinkRecords.d.ts +5 -6
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record → explorer/link-record}/useLinkRecords.js +18 -14
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/link-record/useLinkRecords.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/{ExplorerWrapper.d.ts → InputExtraAlignLeft.d.ts} +1 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record/ActionButton.js → shared/InputExtraAlignLeft.js} +4 -4
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputExtraAlignLeft.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputWrapper.d.ts +3 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputWrapper.js +31 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputWrapper.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.d.ts +3 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.js +8 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/LinkFieldTags.d.ts +3 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/LinkFieldTags.js +56 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/LinkFieldTags.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.d.ts +15 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.js +64 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/unlink-record/useUnlinkRecord.d.ts +19 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/unlink-record/useUnlinkRecord.js +43 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/unlink-record/useUnlinkRecord.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/unlink-all-records/useUnlinkAllRecords.d.ts +16 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/unlink-all-records/useUnlinkAllRecords.js +27 -0
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/unlink-all-records/useUnlinkAllRecords.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.d.ts +1 -0
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js +2 -2
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js.map +1 -1
- package/dist/components/RecordEdition/hooks/useGetSubmitButtons.js +2 -2
- package/dist/components/RecordEdition/hooks/useGetSubmitButtons.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.d.ts +2 -1
- package/dist/hooks/useIFrameMessenger/messageHandlers.js +8 -0
- package/dist/hooks/useIFrameMessenger/messageHandlers.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/schema.d.ts +3 -3
- package/dist/hooks/useIFrameMessenger/schema.js +1 -1
- package/dist/hooks/useIFrameMessenger/schema.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/types.d.ts +21 -1
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +1 -0
- package/dist/hooks/useIFrameMessengerClient/iFrameMessengerClientContext.d.ts +1 -0
- package/dist/hooks/useIFrameMessengerClient/useIFrameMessengerClient.d.ts +1 -0
- package/dist/locales/en/shared.json +6 -3
- package/dist/locales/fr/shared.json +7 -4
- package/package.json +24 -23
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/ActionButton.d.ts +0 -3
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/ActionButton.js.map +0 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/useExplorerLinkRecords.js.map +0 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/useLinkRecords.js.map +0 -1
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/ExplorerWrapper.js +0 -13
- package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/ExplorerWrapper.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { APICallStatus } from '
|
|
1
|
+
import { APICallStatus } from '../../../../_types';
|
|
2
2
|
import { AntForm } from 'aristid-ds';
|
|
3
|
-
import { useSharedTranslation } from '
|
|
3
|
+
import { useSharedTranslation } from '../../../../../../../hooks/useSharedTranslation';
|
|
4
4
|
import { ErrorTypes } from '@leav/utils';
|
|
5
|
-
export const useExplorerLinkRecords = ({ attribute, backendValues, setBackendValues
|
|
5
|
+
export const useExplorerLinkRecords = ({ attribute, backendValues, setBackendValues }) => {
|
|
6
6
|
const { t } = useSharedTranslation();
|
|
7
7
|
const form = AntForm.useFormInstance();
|
|
8
8
|
const removeValues = (filterFn, useIdValue = false) => {
|
|
@@ -27,12 +27,6 @@ export const useExplorerLinkRecords = ({ attribute, backendValues, setBackendVal
|
|
|
27
27
|
]);
|
|
28
28
|
setBackendValues(previousBackendValues => previousBackendValues.filter(backendValue => filterFn(useIdValue ? backendValue.id_value : backendValue.linkValue.id)));
|
|
29
29
|
};
|
|
30
|
-
const handleDeleteAllValues = async () => {
|
|
31
|
-
const deleteRes = await onDeleteMultipleValues(attribute.id, backendValues.filter(backendValue => backendValue.id_value), null);
|
|
32
|
-
if (deleteRes.status === APICallStatus.SUCCESS) {
|
|
33
|
-
removeValues();
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
30
|
const handleExplorerRemoveValue = (item) => {
|
|
37
31
|
removeValues(id => id !== item.itemId);
|
|
38
32
|
};
|
|
@@ -75,7 +69,6 @@ export const useExplorerLinkRecords = ({ attribute, backendValues, setBackendVal
|
|
|
75
69
|
}
|
|
76
70
|
};
|
|
77
71
|
return {
|
|
78
|
-
handleDeleteAllValues,
|
|
79
72
|
handleExplorerRemoveValue,
|
|
80
73
|
handleExplorerMassDeactivateValues,
|
|
81
74
|
handleExplorerLinkValue,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useExplorerLinkRecords.js","sourceRoot":"","sources":["../../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/link-record/useExplorerLinkRecords.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type RecordFilterInput, type RecordFormAttributeLinkAttributeFragment} from '_ui/_gqlTypes';\nimport {APICallStatus, type ISubmitMultipleResult} from '../../../../_types';\nimport {type Dispatch, type SetStateAction} from 'react';\nimport {type IItemData, type MassSelection} from '_ui/components/Explorer/_types';\nimport {AntForm} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type RecordFormElementsValueLinkValue} from '_ui/hooks/useGetRecordForm';\nimport {ErrorTypes} from '@leav/utils';\n\ninterface IUseExplorerLinkRecordsProps {\n attribute: RecordFormAttributeLinkAttributeFragment;\n backendValues: RecordFormElementsValueLinkValue[];\n setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;\n}\n\nexport const useExplorerLinkRecords = ({attribute, backendValues, setBackendValues}: IUseExplorerLinkRecordsProps) => {\n const {t} = useSharedTranslation();\n\n const form = AntForm.useFormInstance();\n\n const removeValues = (filterFn?: (id: string) => boolean, useIdValue: boolean = false) => {\n if (!filterFn) {\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 return;\n }\n\n const newBackendValues = backendValues.filter(backendValue =>\n filterFn(useIdValue ? backendValue.id_value : backendValue.linkValue.id),\n );\n\n form.setFieldValue(\n attribute.id,\n newBackendValues.map(({linkValue}) => linkValue.id),\n );\n\n form.setFields([\n {\n name: attribute.id,\n errors:\n attribute.required && newBackendValues.length === 0 ? [t('errors.standard_field_required')] : [],\n },\n ]);\n\n setBackendValues(previousBackendValues =>\n previousBackendValues.filter(backendValue =>\n filterFn(useIdValue ? backendValue.id_value : backendValue.linkValue.id),\n ),\n );\n };\n\n const handleExplorerRemoveValue = (item: IItemData) => {\n removeValues(id => id !== item.itemId);\n };\n\n const handleExplorerMassDeactivateValues = (\n _massSelectedFilter: RecordFilterInput[],\n massSelection: MassSelection,\n ) => {\n removeValues(idValue => !massSelection.includes(idValue), true);\n };\n\n const handleExplorerLinkValue = (saveValuesResult: ISubmitMultipleResult) => {\n if (saveValuesResult.status === APICallStatus.SUCCESS) {\n const saveLinkValues = saveValuesResult.values as unknown as RecordFormElementsValueLinkValue[];\n\n form.setFieldValue(attribute.id, [\n ...backendValues.map(({linkValue}) => linkValue.id),\n ...saveLinkValues.map(({linkValue}) => linkValue.id),\n ]);\n\n form.setFields([\n {\n name: attribute.id,\n errors: [],\n },\n ]);\n\n setBackendValues(previousBackendValues => [...previousBackendValues, ...saveLinkValues]);\n }\n\n if (saveValuesResult.status === APICallStatus.ERROR && saveValuesResult.errors) {\n const attributeError = saveValuesResult.errors.filter(err => err.attribute === attribute.id)?.[0];\n\n if (attributeError) {\n const errorMessage =\n attributeError.type === ErrorTypes.VALIDATION_ERROR\n ? attributeError.message\n : t(`errors.${attributeError.type}`);\n\n form.setFields([\n {\n name: attribute.id,\n errors: [errorMessage],\n },\n ]);\n }\n }\n };\n\n const handleExplorerCreateValue = ({\n recordIdCreated,\n saveValuesResultOnLink,\n }: {\n recordIdCreated: string;\n saveValuesResultOnLink?: ISubmitMultipleResult;\n }) => {\n if (saveValuesResultOnLink) {\n handleExplorerLinkValue(saveValuesResultOnLink);\n }\n };\n\n return {\n handleExplorerRemoveValue,\n handleExplorerMassDeactivateValues,\n handleExplorerLinkValue,\n handleExplorerCreateValue,\n };\n};\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Explorer } from '
|
|
1
|
+
import { Explorer } from '../../../../../../../components/Explorer';
|
|
2
2
|
import { type ComponentProps, type Dispatch, type SetStateAction } from 'react';
|
|
3
|
-
import { type DeleteMultipleValuesFunc } from '
|
|
4
|
-
import { type JoinLibraryContextFragment, type RecordFormAttributeLinkAttributeFragment } from '
|
|
5
|
-
import { type RecordFormElementsValueLinkValue } from '
|
|
3
|
+
import { type DeleteMultipleValuesFunc } from '../../../../_types';
|
|
4
|
+
import { type JoinLibraryContextFragment, type RecordFormAttributeLinkAttributeFragment } from '../../../../../../../_gqlTypes';
|
|
5
|
+
import { type RecordFormElementsValueLinkValue } from '../../../../../../../hooks/useGetRecordForm';
|
|
6
6
|
interface ILinkRecords {
|
|
7
7
|
libraryId: string;
|
|
8
8
|
recordId: string;
|
|
@@ -18,8 +18,7 @@ interface ILinkRecords {
|
|
|
18
18
|
hasNoValue: boolean;
|
|
19
19
|
onDeleteMultipleValues: DeleteMultipleValuesFunc;
|
|
20
20
|
}
|
|
21
|
-
export declare const useLinkRecords: ({ libraryId, recordId, editionFormId, isFormCreationMode, attribute, joinLibraryContext, columnsToDisplay, backendValues, setBackendValues, isReadOnly,
|
|
22
|
-
UnlinkAllRecords: JSX.Element;
|
|
21
|
+
export declare const useLinkRecords: ({ libraryId, recordId, editionFormId, isFormCreationMode, attribute, joinLibraryContext, columnsToDisplay, backendValues, setBackendValues, isReadOnly, hasNoValue, }: ILinkRecords) => {
|
|
23
22
|
LinkRecordsExplorer: JSX.Element;
|
|
24
23
|
};
|
|
25
24
|
export {};
|
|
@@ -2,29 +2,37 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
3
3
|
// This file is released under LGPL V3
|
|
4
4
|
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
5
|
-
import { Explorer } from '
|
|
5
|
+
import { Explorer } from '../../../../../../../components/Explorer';
|
|
6
6
|
import { useEffect, useState } from 'react';
|
|
7
|
-
import {
|
|
8
|
-
import { DeleteAllValuesButton } from '../../shared/DeleteAllValuesButton';
|
|
9
|
-
import { AntForm, KitSpace, KitTooltip } from 'aristid-ds';
|
|
7
|
+
import { AntForm, KitButton, KitSpace, KitTooltip } from 'aristid-ds';
|
|
10
8
|
import { useExplorerLinkRecords } from './useExplorerLinkRecords';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { useEditRecordModal } from '../../../../../../components/RecordEdition/EditRecordModal/useEditRecordModal';
|
|
9
|
+
import { useSharedTranslation } from '../../../../../../../hooks/useSharedTranslation';
|
|
10
|
+
import { useEditRecordModal } from '../../../../../../../components/RecordEdition/EditRecordModal/useEditRecordModal';
|
|
14
11
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
15
12
|
import { faEye, faPlus } from '@fortawesome/free-solid-svg-icons';
|
|
13
|
+
import { INPUT_MAX_HEIGHT } from '../../../../formConstants';
|
|
14
|
+
import styled from 'styled-components';
|
|
16
15
|
const _shouldUpdateExplorerActions = (ref, explorerActions) => ref?.createAction?.disabled !== explorerActions?.createAction?.disabled ||
|
|
17
16
|
ref?.linkAction?.disabled !== explorerActions?.linkAction?.disabled ||
|
|
18
17
|
ref?.totalCount !== explorerActions?.totalCount;
|
|
19
|
-
|
|
18
|
+
const ActionButton = styled(KitButton) `
|
|
19
|
+
margin-top: ${props => (props.$hasNoValue ? 0 : 'calc((var(--general-spacing-xs)) * 1px)')};
|
|
20
|
+
`;
|
|
21
|
+
const ExplorerWrapper = styled.div `
|
|
22
|
+
max-height: ${INPUT_MAX_HEIGHT};
|
|
23
|
+
|
|
24
|
+
> div {
|
|
25
|
+
max-height: ${INPUT_MAX_HEIGHT};
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
export const useLinkRecords = ({ libraryId, recordId, editionFormId, isFormCreationMode, attribute, joinLibraryContext, columnsToDisplay, backendValues, setBackendValues, isReadOnly, hasNoValue, }) => {
|
|
20
29
|
const { t } = useSharedTranslation();
|
|
21
30
|
const form = AntForm.useFormInstance();
|
|
22
31
|
const [explorerActions, setExplorerActions] = useState(null);
|
|
23
|
-
const {
|
|
32
|
+
const { handleExplorerCreateValue, handleExplorerLinkValue, handleExplorerMassDeactivateValues, handleExplorerRemoveValue, } = useExplorerLinkRecords({
|
|
24
33
|
attribute,
|
|
25
34
|
backendValues,
|
|
26
35
|
setBackendValues,
|
|
27
|
-
onDeleteMultipleValues,
|
|
28
36
|
});
|
|
29
37
|
const _handleExplorerRef = (ref) => {
|
|
30
38
|
if (_shouldUpdateExplorerActions(ref, explorerActions)) {
|
|
@@ -52,10 +60,6 @@ export const useLinkRecords = ({ libraryId, recordId, editionFormId, isFormCreat
|
|
|
52
60
|
}, []);
|
|
53
61
|
const { EditRecordModal, openEditRecordModal } = useEditRecordModal();
|
|
54
62
|
return {
|
|
55
|
-
UnlinkAllRecords: !isReadOnly &&
|
|
56
|
-
backendValues.length > 1 &&
|
|
57
|
-
attribute.multiple_values &&
|
|
58
|
-
!attribute.required && (_jsx(DeleteAllValuesButton, { handleDelete: handleDeleteAllValues, disabled: isReadOnly, danger: isFieldInError })),
|
|
59
63
|
LinkRecordsExplorer: recordId && (_jsxs(_Fragment, { children: [_jsx(ExplorerWrapper, { children: _jsx(Explorer, { ref: _handleExplorerRef, defaultViewSettings: {
|
|
60
64
|
attributesIds: columnsToDisplay,
|
|
61
65
|
}, entrypoint: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLinkRecords.js","sourceRoot":"","sources":["../../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/link-record/useLinkRecords.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 {Explorer} from '_ui/components/Explorer';\nimport {type IExplorerRef} from '_ui/components/Explorer/Explorer';\nimport {type ComponentProps, type Dispatch, type SetStateAction, useEffect, useState} from 'react';\nimport {type DeleteMultipleValuesFunc} from '../../../../_types';\nimport {type JoinLibraryContextFragment, type RecordFormAttributeLinkAttributeFragment} from '_ui/_gqlTypes';\nimport {type RecordFormElementsValueLinkValue} from '_ui/hooks/useGetRecordForm';\nimport {AntForm, KitButton, KitSpace, KitTooltip} from 'aristid-ds';\nimport {useExplorerLinkRecords} from './useExplorerLinkRecords';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useEditRecordModal} from '_ui/components/RecordEdition/EditRecordModal/useEditRecordModal';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faEye, faPlus} from '@fortawesome/free-solid-svg-icons';\nimport {INPUT_MAX_HEIGHT} from '../../../../formConstants';\nimport styled from 'styled-components';\n\ninterface ILinkRecords {\n libraryId: string;\n recordId: string;\n editionFormId: string;\n isFormCreationMode: boolean;\n attribute: RecordFormAttributeLinkAttributeFragment;\n joinLibraryContext: JoinLibraryContextFragment;\n columnsToDisplay: ComponentProps<typeof Explorer>['defaultViewSettings']['attributesIds'];\n backendValues: RecordFormElementsValueLinkValue[];\n setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;\n isReadOnly: boolean;\n isFieldInError: boolean;\n hasNoValue: boolean;\n onDeleteMultipleValues: DeleteMultipleValuesFunc;\n}\n\nconst _shouldUpdateExplorerActions = (ref: IExplorerRef, explorerActions: IExplorerRef) =>\n ref?.createAction?.disabled !== explorerActions?.createAction?.disabled ||\n ref?.linkAction?.disabled !== explorerActions?.linkAction?.disabled ||\n ref?.totalCount !== explorerActions?.totalCount;\n\nconst ActionButton = styled(KitButton)<{$hasNoValue: boolean}>`\n margin-top: ${props => (props.$hasNoValue ? 0 : 'calc((var(--general-spacing-xs)) * 1px)')};\n`;\n\nconst ExplorerWrapper = styled.div`\n max-height: ${INPUT_MAX_HEIGHT};\n\n > div {\n max-height: ${INPUT_MAX_HEIGHT};\n }\n`;\n\nexport const useLinkRecords = ({\n libraryId,\n recordId,\n editionFormId,\n isFormCreationMode,\n attribute,\n joinLibraryContext,\n columnsToDisplay,\n backendValues,\n setBackendValues,\n isReadOnly,\n hasNoValue,\n}: ILinkRecords) => {\n const {t} = useSharedTranslation();\n const form = AntForm.useFormInstance();\n const [explorerActions, setExplorerActions] = useState<IExplorerRef | null>(null);\n\n const {\n handleExplorerCreateValue,\n handleExplorerLinkValue,\n handleExplorerMassDeactivateValues,\n handleExplorerRemoveValue,\n } = useExplorerLinkRecords({\n attribute,\n backendValues,\n setBackendValues,\n });\n\n const _handleExplorerRef = (ref: IExplorerRef) => {\n if (_shouldUpdateExplorerActions(ref, explorerActions)) {\n setExplorerActions({\n createAction: ref?.createAction,\n linkAction: ref?.linkAction,\n totalCount: ref?.totalCount,\n });\n }\n };\n\n const _getExplorerItemActions = (): Array<'remove'> => {\n if (isReadOnly) {\n return [];\n }\n\n if (\n (!attribute.multiple_values && attribute.required) ||\n (attribute.multiple_values && backendValues.length === 1 && attribute.required)\n ) {\n return [];\n }\n\n return ['remove'];\n };\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 {EditRecordModal, openEditRecordModal} = useEditRecordModal();\n\n return {\n LinkRecordsExplorer: recordId && (\n <>\n <ExplorerWrapper>\n <Explorer\n ref={_handleExplorerRef}\n defaultViewSettings={{\n attributesIds: columnsToDisplay,\n }}\n entrypoint={{\n type: 'link',\n parentLibraryId: libraryId,\n parentRecordId: recordId,\n linkAttributeId: attribute.id,\n }}\n defaultCallbacks={{\n item: {\n remove: handleExplorerRemoveValue,\n },\n mass: {\n deactivate: handleExplorerMassDeactivateValues,\n },\n primary: {\n link: handleExplorerLinkValue,\n create: handleExplorerCreateValue,\n },\n }}\n showTitle={false}\n showSearch={false}\n selectionMode={attribute.multiple_values ? 'multiple' : 'simple'}\n disableSelection={\n isReadOnly ||\n !attribute.multiple_values ||\n (attribute.required && attribute.multiple_values && backendValues.length === 1)\n }\n defaultActionsForItem={_getExplorerItemActions()}\n itemActions={[\n {\n label: t('explorer.edit-item'),\n icon: <FontAwesomeIcon icon={faEye} />,\n useItemActionOnRowClick: true,\n callback: item => {\n openEditRecordModal({\n library: item.libraryId,\n record: {\n id: item.itemId,\n label: item.whoAmI?.label,\n subLabel: item.whoAmI?.subLabel,\n color: item.whoAmI?.color,\n library: {id: item.libraryId},\n },\n editionFormId,\n });\n },\n },\n ]}\n joinLibraryContext={joinLibraryContext}\n hidePrimaryActions\n hideTableHeader\n />\n </ExplorerWrapper>\n {!isReadOnly && (\n <KitSpace size=\"xs\" style={{padding: '1rem'}}>\n <KitTooltip title={explorerActions?.linkAction?.label}>\n <ActionButton\n type=\"secondary\"\n size=\"m\"\n $hasNoValue={hasNoValue}\n icon={<FontAwesomeIcon icon={faPlus} />}\n disabled={\n isReadOnly || (attribute.multiple_values && explorerActions?.linkAction?.disabled)\n }\n onClick={explorerActions?.linkAction?.callback}\n aria-label={explorerActions?.linkAction?.label}\n />\n </KitTooltip>\n </KitSpace>\n )}\n {EditRecordModal}\n </>\n ),\n };\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const InputExtraAlignLeft: import("styled-components").IStyledComponent<"web", {
|
|
2
2
|
ref?: import("react").LegacyRef<HTMLDivElement>;
|
|
3
3
|
key?: import("react").Key | null | undefined;
|
|
4
4
|
defaultChecked?: boolean | undefined;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
2
2
|
// This file is released under LGPL V3
|
|
3
3
|
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
|
-
import { KitButton } from 'aristid-ds';
|
|
5
4
|
import styled from 'styled-components';
|
|
6
|
-
export const
|
|
7
|
-
margin-
|
|
5
|
+
export const InputExtraAlignLeft = styled.div `
|
|
6
|
+
margin-right: auto;
|
|
7
|
+
line-height: 12px;
|
|
8
8
|
`;
|
|
9
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=InputExtraAlignLeft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputExtraAlignLeft.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputExtraAlignLeft.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;CAG5C,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 styled from 'styled-components';\n\nexport const InputExtraAlignLeft = styled.div`\n margin-right: auto;\n line-height: 12px;\n`;\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const InputWrapper: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<import("aristid-ds/dist/Kit/DataEntry/InputWrapper/types").IKitInputWrapper & import("react").RefAttributes<HTMLDivElement>, {
|
|
2
|
+
$readonlyBackground: boolean;
|
|
3
|
+
}>> & import("react").ForwardRefExoticComponent<import("aristid-ds/dist/Kit/DataEntry/InputWrapper/types").IKitInputWrapper & import("react").RefAttributes<HTMLDivElement>>;
|
package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputWrapper.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
2
|
+
// This file is released under LGPL V3
|
|
3
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
|
+
import { KitInputWrapper } from 'aristid-ds';
|
|
5
|
+
import styled, { css } from 'styled-components';
|
|
6
|
+
export const InputWrapper = styled(KitInputWrapper) `
|
|
7
|
+
${props => props.$readonlyBackground &&
|
|
8
|
+
css `
|
|
9
|
+
.kit-input-wrapper-content {
|
|
10
|
+
background-color: var(--general-utilities-neutral-light);
|
|
11
|
+
}
|
|
12
|
+
`}
|
|
13
|
+
|
|
14
|
+
&.disabled {
|
|
15
|
+
.kit-input-wrapper-content {
|
|
16
|
+
background-color: var(--general-utilities-neutral-light);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&.error:not(.disabled) {
|
|
21
|
+
.kit-input-wrapper-content {
|
|
22
|
+
background-color: var(--general-utilities-error-light);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.ant-empty-image,
|
|
27
|
+
.ant-empty-description {
|
|
28
|
+
display: none;
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
//# sourceMappingURL=InputWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputWrapper.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputWrapper.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,MAAM,EAAE,EAAC,GAAG,EAAC,MAAM,mBAAmB,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,CAAgC;MAC7E,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,mBAAmB;IACzB,GAAG,CAAA;;;;SAIF;;;;;;;;;;;;;;;;;;CAkBR,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 {KitInputWrapper} from 'aristid-ds';\nimport styled, {css} from 'styled-components';\n\nexport const InputWrapper = styled(KitInputWrapper)<{$readonlyBackground: boolean}>`\n ${props =>\n props.$readonlyBackground &&\n css`\n .kit-input-wrapper-content {\n background-color: var(--general-utilities-neutral-light);\n }\n `}\n\n &.disabled {\n .kit-input-wrapper-content {\n background-color: var(--general-utilities-neutral-light);\n }\n }\n\n &.error:not(.disabled) {\n .kit-input-wrapper-content {\n background-color: var(--general-utilities-error-light);\n }\n }\n\n .ant-empty-image,\n .ant-empty-description {\n display: none;\n }\n`;\n"]}
|
package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
2
|
+
// This file is released under LGPL V3
|
|
3
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
|
+
import styled from 'styled-components';
|
|
5
|
+
export const Wrapper = styled.div `
|
|
6
|
+
margin-bottom: ${props => (props.$metadataEdit ? 0 : '1.5em')};
|
|
7
|
+
`;
|
|
8
|
+
//# sourceMappingURL=Wrapper.js.map
|
package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Wrapper.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAA0B;qBACtC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;CAChE,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 styled from 'styled-components';\n\nexport const Wrapper = styled.div<{$metadataEdit: boolean}>`\n margin-bottom: ${props => (props.$metadataEdit ? 0 : '1.5em')};\n`;\n"]}
|
package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/LinkFieldTags.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
3
|
+
// This file is released under LGPL V3
|
|
4
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { AntForm, KitIdCard, KitSpace, KitTag } from 'aristid-ds';
|
|
7
|
+
import { LINK_FIELD_ID_PREFIX } from '../../../../../../constants';
|
|
8
|
+
import { localizedTranslation } from '@leav/utils';
|
|
9
|
+
import { useLang } from '../../../../../../hooks';
|
|
10
|
+
import { ComputeIndicator } from '../../shared/ComputeIndicator';
|
|
11
|
+
import { computeCalculatedFlags, computeInheritedFlags } from '../../shared/calculatedInheritedFlags';
|
|
12
|
+
import { useUnlinkAllRecords } from '../unlink-all-records/useUnlinkAllRecords';
|
|
13
|
+
import { useUnlinkRecord } from './unlink-record/useUnlinkRecord';
|
|
14
|
+
import { useLinkRecord } from './link-record/useLinkRecord';
|
|
15
|
+
import { Wrapper } from '../shared/Wrapper';
|
|
16
|
+
import { InputExtraAlignLeft } from '../shared/InputExtraAlignLeft';
|
|
17
|
+
import { InputWrapper } from '../shared/InputWrapper';
|
|
18
|
+
export const LinkFieldTags = ({ element, readonly, onValueSubmit, onValueDelete, onDeleteMultipleValues, metadataEdit = false, }) => {
|
|
19
|
+
const { lang } = useLang();
|
|
20
|
+
const { settings, attribute, } = element;
|
|
21
|
+
const [backendValues, setBackendValues] = useState(element.values);
|
|
22
|
+
const calculatedFlags = computeCalculatedFlags(backendValues);
|
|
23
|
+
const inheritedFlags = computeInheritedFlags(backendValues);
|
|
24
|
+
const label = localizedTranslation(settings.label, lang);
|
|
25
|
+
const form = AntForm.useFormInstance();
|
|
26
|
+
const fieldErrors = form.getFieldError(attribute.id);
|
|
27
|
+
const isFieldInError = fieldErrors.length > 0;
|
|
28
|
+
// TODO: Temporary const that should be removed (and all it's usages) when we will have a proper way to override multiple values
|
|
29
|
+
const tmpCantOverrideValues = attribute.multiple_values &&
|
|
30
|
+
(calculatedFlags.calculatedValues?.length > 1 || inheritedFlags.inheritedValues?.length > 1);
|
|
31
|
+
const isReadOnly = attribute.readonly || !attribute.permissions.edit_value || readonly || tmpCantOverrideValues;
|
|
32
|
+
const { UnlinkAllRecordsButton } = useUnlinkAllRecords({
|
|
33
|
+
attribute,
|
|
34
|
+
backendValues,
|
|
35
|
+
setBackendValues,
|
|
36
|
+
onDeleteMultipleValues,
|
|
37
|
+
isReadOnly,
|
|
38
|
+
isFieldInError,
|
|
39
|
+
});
|
|
40
|
+
const { canUnlinkRecord, unlinkRecord } = useUnlinkRecord({
|
|
41
|
+
attribute,
|
|
42
|
+
backendValues,
|
|
43
|
+
isReadOnly,
|
|
44
|
+
setBackendValues,
|
|
45
|
+
onValueDelete,
|
|
46
|
+
});
|
|
47
|
+
const { LinkRecordButton } = useLinkRecord({
|
|
48
|
+
attribute,
|
|
49
|
+
isReadOnly,
|
|
50
|
+
onValueSubmit,
|
|
51
|
+
backendValues,
|
|
52
|
+
setBackendValues,
|
|
53
|
+
});
|
|
54
|
+
return (_jsx(Wrapper, { "$metadataEdit": metadataEdit, children: _jsx(AntForm.Item, { name: attribute.id, noStyle: true, children: _jsx(InputWrapper, { id: LINK_FIELD_ID_PREFIX + attribute.id, label: label, required: attribute.required, bordered: true, status: isFieldInError ? 'error' : undefined, helper: isFieldInError ? String(fieldErrors[0]) : undefined, extra: _jsxs(_Fragment, { children: [_jsx(InputExtraAlignLeft, { children: _jsx(ComputeIndicator, { calculatedFlags: calculatedFlags, inheritedFlags: inheritedFlags }) }), UnlinkAllRecordsButton] }), "$readonlyBackground": isReadOnly, children: _jsxs(KitSpace, { direction: "vertical", children: [_jsx(KitSpace, { direction: "horizontal", size: "xxs", wrap: true, children: backendValues.map(value => (_jsx(KitTag, { type: "secondary", onClose: canUnlinkRecord ? () => unlinkRecord(value.id_value) : undefined, children: _jsx(KitIdCard, { description: value.linkValue.whoAmI?.label }) }, value.id_value))) }), LinkRecordButton] }) }) }) }));
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=LinkFieldTags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkFieldTags.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/LinkFieldTags.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 {useState, type FunctionComponent} from 'react';\nimport {type LinkFieldProps} from '../_types';\nimport {type RecordFormAttributeLinkAttributeFragment} from '_ui/_gqlTypes';\nimport {AntForm, KitIdCard, KitSpace, KitTag} from 'aristid-ds';\nimport {LINK_FIELD_ID_PREFIX} from '_ui/constants';\nimport {localizedTranslation} from '@leav/utils';\nimport {useLang} from '_ui/hooks';\nimport {ComputeIndicator} from '../../shared/ComputeIndicator';\nimport {type RecordFormElementsValueLinkValue} from '_ui/hooks/useGetRecordForm';\nimport {computeCalculatedFlags, computeInheritedFlags} from '../../shared/calculatedInheritedFlags';\nimport {useUnlinkAllRecords} from '../unlink-all-records/useUnlinkAllRecords';\nimport {useUnlinkRecord} from './unlink-record/useUnlinkRecord';\nimport {useLinkRecord} from './link-record/useLinkRecord';\nimport {Wrapper} from '../shared/Wrapper';\nimport {InputExtraAlignLeft} from '../shared/InputExtraAlignLeft';\nimport {InputWrapper} from '../shared/InputWrapper';\n\nexport const LinkFieldTags: FunctionComponent<LinkFieldProps> = ({\n element,\n readonly,\n onValueSubmit,\n onValueDelete,\n onDeleteMultipleValues,\n metadataEdit = false,\n}) => {\n const {lang} = useLang();\n\n const {\n settings,\n attribute,\n }: {\n settings: typeof element.settings;\n attribute?: RecordFormAttributeLinkAttributeFragment;\n } = element;\n\n const [backendValues, setBackendValues] = useState<RecordFormElementsValueLinkValue[]>(element.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 const isFieldInError = fieldErrors.length > 0;\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 const isReadOnly = attribute.readonly || !attribute.permissions.edit_value || readonly || tmpCantOverrideValues;\n\n const {UnlinkAllRecordsButton} = useUnlinkAllRecords({\n attribute,\n backendValues,\n setBackendValues,\n onDeleteMultipleValues,\n isReadOnly,\n isFieldInError,\n });\n\n const {canUnlinkRecord, unlinkRecord} = useUnlinkRecord({\n attribute,\n backendValues,\n isReadOnly,\n setBackendValues,\n onValueDelete,\n });\n\n const {LinkRecordButton} = useLinkRecord({\n attribute,\n isReadOnly,\n onValueSubmit,\n backendValues,\n setBackendValues,\n });\n\n return (\n <Wrapper $metadataEdit={metadataEdit}>\n <AntForm.Item name={attribute.id} noStyle>\n <InputWrapper\n id={LINK_FIELD_ID_PREFIX + attribute.id}\n label={label}\n required={attribute.required}\n bordered\n status={isFieldInError ? 'error' : undefined}\n helper={isFieldInError ? String(fieldErrors[0]) : undefined}\n extra={\n <>\n <InputExtraAlignLeft>\n <ComputeIndicator calculatedFlags={calculatedFlags} inheritedFlags={inheritedFlags} />\n </InputExtraAlignLeft>\n {UnlinkAllRecordsButton}\n </>\n }\n $readonlyBackground={isReadOnly}\n >\n <KitSpace direction=\"vertical\">\n <KitSpace direction=\"horizontal\" size=\"xxs\" wrap>\n {backendValues.map(value => (\n <KitTag\n key={value.id_value}\n type=\"secondary\"\n onClose={canUnlinkRecord ? () => unlinkRecord(value.id_value) : undefined}\n >\n <KitIdCard description={value.linkValue.whoAmI?.label} />\n </KitTag>\n ))}\n </KitSpace>\n {LinkRecordButton}\n </KitSpace>\n </InputWrapper>\n </AntForm.Item>\n </Wrapper>\n );\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type RecordFormAttributeLinkAttributeFragment } from '../../../../../../../_gqlTypes';
|
|
2
|
+
import { type SubmitValueFunc } from '../../../../../../../components/RecordEdition/EditRecordContent/_types';
|
|
3
|
+
import { type Dispatch, type SetStateAction } from 'react';
|
|
4
|
+
import { type RecordFormElementsValueLinkValue } from '../../../../../../../hooks/useGetRecordForm';
|
|
5
|
+
interface IUseLinkRecordProps {
|
|
6
|
+
attribute: RecordFormAttributeLinkAttributeFragment;
|
|
7
|
+
isReadOnly: boolean;
|
|
8
|
+
onValueSubmit: SubmitValueFunc;
|
|
9
|
+
backendValues: RecordFormElementsValueLinkValue[];
|
|
10
|
+
setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;
|
|
11
|
+
}
|
|
12
|
+
export declare const useLinkRecord: ({ attribute, isReadOnly, onValueSubmit, backendValues, setBackendValues, }: IUseLinkRecordProps) => {
|
|
13
|
+
LinkRecordButton: JSX.Element;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
3
|
+
// This file is released under LGPL V3
|
|
4
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
5
|
+
import { faPlus } from '@fortawesome/free-solid-svg-icons';
|
|
6
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
7
|
+
import { LINK_RECORDS_MODAL_CLASSNAME } from '../../../../../../../components/Explorer/_constants';
|
|
8
|
+
import { APICallStatus, } from '../../../../../../../components/RecordEdition/EditRecordContent/_types';
|
|
9
|
+
import { SelectRecordForLinkModal } from '../../../../../../../components/SelectRecordForLinkModal';
|
|
10
|
+
import { TOOLTIP_DEFAULT_DELAY_IN_SECONDS } from '../../../../../../../constants';
|
|
11
|
+
import { AntForm, KitButton, KitTooltip } from 'aristid-ds';
|
|
12
|
+
import { useState } from 'react';
|
|
13
|
+
import { useSharedTranslation } from '../../../../../../../hooks/useSharedTranslation';
|
|
14
|
+
export const useLinkRecord = ({ attribute, isReadOnly, onValueSubmit, backendValues, setBackendValues, }) => {
|
|
15
|
+
const [isSelectRecordForLinkModalOpen, setIsSelectRecordForLinkModalOpen] = useState(false);
|
|
16
|
+
const { t } = useSharedTranslation();
|
|
17
|
+
const antdForm = AntForm.useFormInstance();
|
|
18
|
+
const _buildValueToSubmit = (recordId) => ({
|
|
19
|
+
id: recordId,
|
|
20
|
+
whoAmI: { id: recordId, library: { id: attribute.linked_library?.id } },
|
|
21
|
+
});
|
|
22
|
+
const _handleLinkRecord = async (data) => {
|
|
23
|
+
let submitRes;
|
|
24
|
+
if (attribute.multiple_values) {
|
|
25
|
+
submitRes = await onValueSubmit(data.records.list.map(record => ({ value: _buildValueToSubmit(record.id), idValue: null, attribute })), null);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
submitRes = await onValueSubmit([
|
|
29
|
+
{
|
|
30
|
+
value: _buildValueToSubmit(data.records.list[0].id),
|
|
31
|
+
idValue: backendValues[0]?.id_value ?? null,
|
|
32
|
+
attribute,
|
|
33
|
+
},
|
|
34
|
+
], null);
|
|
35
|
+
}
|
|
36
|
+
if (submitRes.status === APICallStatus.SUCCESS) {
|
|
37
|
+
const linkValues = submitRes.values;
|
|
38
|
+
if (attribute.multiple_values) {
|
|
39
|
+
setBackendValues(previousBackendValues => [...previousBackendValues, ...linkValues]);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
setBackendValues([linkValues[0]]);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (submitRes.status === APICallStatus.ERROR) {
|
|
46
|
+
antdForm.setFields([
|
|
47
|
+
{
|
|
48
|
+
name: attribute.id,
|
|
49
|
+
errors: [submitRes.error],
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const isReplacementMode = backendValues.length > 0 && !attribute.multiple_values;
|
|
55
|
+
return {
|
|
56
|
+
LinkRecordButton: !isReadOnly ? (_jsxs(_Fragment, { children: [_jsx(KitTooltip, { title: isReplacementMode ? t('global.replace') : t('global.add'), mouseEnterDelay: TOOLTIP_DEFAULT_DELAY_IN_SECONDS, children: _jsx(KitButton, { type: "secondary", size: "m", icon: _jsx(FontAwesomeIcon, { icon: faPlus }), onClick: () => {
|
|
57
|
+
setIsSelectRecordForLinkModalOpen(true);
|
|
58
|
+
} }) }), _jsx(SelectRecordForLinkModal, { className: LINK_RECORDS_MODAL_CLASSNAME, open: isSelectRecordForLinkModalOpen, childLibraryId: attribute.linked_library?.id, onSelectionCompleted: async (data) => {
|
|
59
|
+
await _handleLinkRecord(data);
|
|
60
|
+
setIsSelectRecordForLinkModalOpen(false);
|
|
61
|
+
}, columnsToDisplay: [], replacementMode: isReplacementMode, selectionMode: !attribute.multiple_values ? 'simple' : 'multiple', hideSelectAllAction: true, valuesList: attribute.linkValuesList?.values?.map(value => value.id), allowFreeEntry: attribute.linkValuesList?.allowFreeEntry, isMultivalue: attribute.multiple_values, onClose: () => setIsSelectRecordForLinkModalOpen(false) })] })) : undefined,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=useLinkRecord.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLinkRecord.js","sourceRoot":"","sources":["../../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.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 {faPlus} from '@fortawesome/free-solid-svg-icons';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {type ExplorerSelectionIdsQuery, type RecordFormAttributeLinkAttributeFragment} from '_ui/_gqlTypes';\nimport {LINK_RECORDS_MODAL_CLASSNAME} from '_ui/components/Explorer/_constants';\nimport {\n APICallStatus,\n type ISubmitMultipleResult,\n type SubmitValueFunc,\n} from '_ui/components/RecordEdition/EditRecordContent/_types';\nimport {SelectRecordForLinkModal} from '_ui/components/SelectRecordForLinkModal';\nimport {TOOLTIP_DEFAULT_DELAY_IN_SECONDS} from '_ui/constants';\nimport {AntForm, KitButton, KitTooltip} from 'aristid-ds';\nimport {type Dispatch, type SetStateAction, useState} from 'react';\nimport {type RecordFormElementsValueLinkValue} from '_ui/hooks/useGetRecordForm';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\n\ninterface IUseLinkRecordProps {\n attribute: RecordFormAttributeLinkAttributeFragment;\n isReadOnly: boolean;\n onValueSubmit: SubmitValueFunc;\n backendValues: RecordFormElementsValueLinkValue[];\n setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;\n}\n\nexport const useLinkRecord = ({\n attribute,\n isReadOnly,\n onValueSubmit,\n backendValues,\n setBackendValues,\n}: IUseLinkRecordProps) => {\n const [isSelectRecordForLinkModalOpen, setIsSelectRecordForLinkModalOpen] = useState(false);\n const {t} = useSharedTranslation();\n const antdForm = AntForm.useFormInstance();\n\n const _buildValueToSubmit = (recordId: string) => ({\n id: recordId,\n whoAmI: {id: recordId, library: {id: attribute.linked_library?.id}},\n });\n\n const _handleLinkRecord = async (data: ExplorerSelectionIdsQuery) => {\n let submitRes: ISubmitMultipleResult;\n\n if (attribute.multiple_values) {\n submitRes = await onValueSubmit(\n data.records.list.map(record => ({value: _buildValueToSubmit(record.id), idValue: null, attribute})),\n null,\n );\n } else {\n submitRes = await onValueSubmit(\n [\n {\n value: _buildValueToSubmit(data.records.list[0].id),\n idValue: backendValues[0]?.id_value ?? null,\n attribute,\n },\n ],\n null,\n );\n }\n\n if (submitRes.status === APICallStatus.SUCCESS) {\n const linkValues = submitRes.values as unknown as RecordFormElementsValueLinkValue[];\n\n if (attribute.multiple_values) {\n setBackendValues(previousBackendValues => [...previousBackendValues, ...linkValues]);\n } else {\n setBackendValues([linkValues[0]]);\n }\n }\n\n if (submitRes.status === APICallStatus.ERROR) {\n antdForm.setFields([\n {\n name: attribute.id,\n errors: [submitRes.error],\n },\n ]);\n }\n };\n\n const isReplacementMode = backendValues.length > 0 && !attribute.multiple_values;\n\n return {\n LinkRecordButton: !isReadOnly ? (\n <>\n <KitTooltip\n title={isReplacementMode ? t('global.replace') : t('global.add')}\n mouseEnterDelay={TOOLTIP_DEFAULT_DELAY_IN_SECONDS}\n >\n <KitButton\n type=\"secondary\"\n size=\"m\"\n icon={<FontAwesomeIcon icon={faPlus} />}\n onClick={() => {\n setIsSelectRecordForLinkModalOpen(true);\n }}\n />\n </KitTooltip>\n <SelectRecordForLinkModal\n className={LINK_RECORDS_MODAL_CLASSNAME}\n open={isSelectRecordForLinkModalOpen}\n childLibraryId={attribute.linked_library?.id}\n onSelectionCompleted={async data => {\n await _handleLinkRecord(data);\n setIsSelectRecordForLinkModalOpen(false);\n }}\n columnsToDisplay={[]} // TODO: One day, we should be able to choose the columns to display from a given viewId\n replacementMode={isReplacementMode}\n selectionMode={!attribute.multiple_values ? 'simple' : 'multiple'}\n hideSelectAllAction={true}\n valuesList={attribute.linkValuesList?.values?.map(value => value.id)}\n allowFreeEntry={attribute.linkValuesList?.allowFreeEntry}\n isMultivalue={attribute.multiple_values}\n onClose={() => setIsSelectRecordForLinkModalOpen(false)}\n />\n </>\n ) : undefined,\n };\n};\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type DeleteValueFunc } from '../../../../../../../components/RecordEdition/EditRecordContent/_types';
|
|
2
|
+
import { type RecordFormAttributeLinkAttributeFragment } from '../../../../../../../_gqlTypes';
|
|
3
|
+
import { type RecordFormElementsValueLinkValue } from '../../../../../../../hooks/useGetRecordForm';
|
|
4
|
+
import { type Dispatch, type SetStateAction } from 'react';
|
|
5
|
+
interface IUseUnlinkRecordProps {
|
|
6
|
+
attribute: RecordFormAttributeLinkAttributeFragment;
|
|
7
|
+
backendValues: RecordFormElementsValueLinkValue[];
|
|
8
|
+
isReadOnly: boolean;
|
|
9
|
+
setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;
|
|
10
|
+
onValueDelete: DeleteValueFunc;
|
|
11
|
+
}
|
|
12
|
+
export declare const useUnlinkRecord: ({ attribute, backendValues, isReadOnly, setBackendValues, onValueDelete, }: IUseUnlinkRecordProps) => {
|
|
13
|
+
canUnlinkRecord: boolean;
|
|
14
|
+
unlinkRecord: (idValue: string) => {
|
|
15
|
+
destroy: () => void;
|
|
16
|
+
update: (configUpdate: import("aristid-ds/dist/Kit/Feedback/Modal/types").ConfigUpdate) => void;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
2
|
+
// This file is released under LGPL V3
|
|
3
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
|
+
import { BREAK_TWO_LINES } from '../../../../../../../components/Explorer/_constants';
|
|
5
|
+
import { APICallStatus } from '../../../../../../../components/RecordEdition/EditRecordContent/_types';
|
|
6
|
+
import { useSharedTranslation } from '../../../../../../../hooks/useSharedTranslation';
|
|
7
|
+
import { AntForm, KitModal } from 'aristid-ds';
|
|
8
|
+
export const useUnlinkRecord = ({ attribute, backendValues, isReadOnly, setBackendValues, onValueDelete, }) => {
|
|
9
|
+
const { t } = useSharedTranslation();
|
|
10
|
+
const antdForm = AntForm.useFormInstance();
|
|
11
|
+
const handleUnlinkRecord = async (idValue) => {
|
|
12
|
+
const deleteRes = await onValueDelete({ id_value: idValue }, attribute.id);
|
|
13
|
+
if (deleteRes.status === APICallStatus.SUCCESS) {
|
|
14
|
+
setBackendValues(previousBackendValues => previousBackendValues.filter(backendValue => backendValue.id_value !== idValue));
|
|
15
|
+
}
|
|
16
|
+
if (deleteRes.status === APICallStatus.ERROR) {
|
|
17
|
+
antdForm.setFields([
|
|
18
|
+
{
|
|
19
|
+
name: attribute.id,
|
|
20
|
+
errors: [deleteRes.error],
|
|
21
|
+
},
|
|
22
|
+
]);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const canUnlinkRecord = !isReadOnly && (!attribute.required || (attribute.required && backendValues.length > 1));
|
|
26
|
+
return {
|
|
27
|
+
canUnlinkRecord,
|
|
28
|
+
unlinkRecord: (idValue) => KitModal.confirm({
|
|
29
|
+
width: '100%',
|
|
30
|
+
style: { content: { width: '90vw', maxWidth: '656px' } },
|
|
31
|
+
type: 'confirm',
|
|
32
|
+
icon: false,
|
|
33
|
+
title: t('record_edition.delete_link'),
|
|
34
|
+
content: t('record_edition.delete_link_description') + BREAK_TWO_LINES + t('global.are_you_sure'),
|
|
35
|
+
okText: t('global.confirm') ?? undefined,
|
|
36
|
+
cancelText: t('global.cancel') ?? undefined,
|
|
37
|
+
onOk: async () => {
|
|
38
|
+
await handleUnlinkRecord(idValue);
|
|
39
|
+
},
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=useUnlinkRecord.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUnlinkRecord.js","sourceRoot":"","sources":["../../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/unlink-record/useUnlinkRecord.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,aAAa,EAAuB,MAAM,uDAAuD,CAAC;AAG1G,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAC;AAU7C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC5B,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,aAAa,GACO,EAAE,EAAE;IACxB,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAE3C,MAAM,kBAAkB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,EAAC,QAAQ,EAAE,OAAO,EAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;QAEzE,IAAI,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;YAC7C,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,CACrC,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,KAAK,OAAO,CAAC,CAClF,CAAC;QACN,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;YAC3C,QAAQ,CAAC,SAAS,CAAC;gBACf;oBACI,IAAI,EAAE,SAAS,CAAC,EAAE;oBAClB,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC5B;aACJ,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEjH,OAAO;QACH,eAAe;QACf,YAAY,EAAE,CAAC,OAAe,EAAE,EAAE,CAC9B,QAAQ,CAAC,OAAO,CAAC;YACb,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,EAAC,OAAO,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAC,EAAC;YACpD,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,CAAC,CAAC,4BAA4B,CAAC;YACtC,OAAO,EAAE,CAAC,CAAC,wCAAwC,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC,qBAAqB,CAAC;YACjG,MAAM,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,SAAS;YACxC,UAAU,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,SAAS;YAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;SACJ,CAAC;KACT,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 {BREAK_TWO_LINES} from '_ui/components/Explorer/_constants';\nimport {APICallStatus, type DeleteValueFunc} from '_ui/components/RecordEdition/EditRecordContent/_types';\nimport {type RecordFormAttributeLinkAttributeFragment} from '_ui/_gqlTypes';\nimport {type RecordFormElementsValueLinkValue} from '_ui/hooks/useGetRecordForm';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {AntForm, KitModal} from 'aristid-ds';\nimport {type Dispatch, type SetStateAction} from 'react';\n\ninterface IUseUnlinkRecordProps {\n attribute: RecordFormAttributeLinkAttributeFragment;\n backendValues: RecordFormElementsValueLinkValue[];\n isReadOnly: boolean;\n setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;\n onValueDelete: DeleteValueFunc;\n}\nexport const useUnlinkRecord = ({\n attribute,\n backendValues,\n isReadOnly,\n setBackendValues,\n onValueDelete,\n}: IUseUnlinkRecordProps) => {\n const {t} = useSharedTranslation();\n const antdForm = AntForm.useFormInstance();\n\n const handleUnlinkRecord = async (idValue: string) => {\n const deleteRes = await onValueDelete({id_value: idValue}, attribute.id);\n\n if (deleteRes.status === APICallStatus.SUCCESS) {\n setBackendValues(previousBackendValues =>\n previousBackendValues.filter(backendValue => backendValue.id_value !== idValue),\n );\n }\n\n if (deleteRes.status === APICallStatus.ERROR) {\n antdForm.setFields([\n {\n name: attribute.id,\n errors: [deleteRes.error],\n },\n ]);\n }\n };\n\n const canUnlinkRecord = !isReadOnly && (!attribute.required || (attribute.required && backendValues.length > 1));\n\n return {\n canUnlinkRecord,\n unlinkRecord: (idValue: string) =>\n KitModal.confirm({\n width: '100%',\n style: {content: {width: '90vw', maxWidth: '656px'}},\n type: 'confirm',\n icon: false,\n title: t('record_edition.delete_link'),\n content: t('record_edition.delete_link_description') + BREAK_TWO_LINES + t('global.are_you_sure'),\n okText: t('global.confirm') ?? undefined,\n cancelText: t('global.cancel') ?? undefined,\n onOk: async () => {\n await handleUnlinkRecord(idValue);\n },\n }),\n };\n};\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Dispatch, type SetStateAction } from 'react';
|
|
2
|
+
import { type RecordFormAttributeLinkAttributeFragment } from '../../../../../../_gqlTypes';
|
|
3
|
+
import { type RecordFormElementsValueLinkValue } from '../../../../../../hooks/useGetRecordForm';
|
|
4
|
+
import { type DeleteMultipleValuesFunc } from '../../../_types';
|
|
5
|
+
interface IUseUnlinkAllRecordsProps {
|
|
6
|
+
attribute: RecordFormAttributeLinkAttributeFragment;
|
|
7
|
+
backendValues: RecordFormElementsValueLinkValue[];
|
|
8
|
+
setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;
|
|
9
|
+
onDeleteMultipleValues: DeleteMultipleValuesFunc;
|
|
10
|
+
isReadOnly: boolean;
|
|
11
|
+
isFieldInError: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const useUnlinkAllRecords: ({ attribute, backendValues, setBackendValues, onDeleteMultipleValues, isReadOnly, isFieldInError, }: IUseUnlinkAllRecordsProps) => {
|
|
14
|
+
UnlinkAllRecordsButton: JSX.Element;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { AntForm } from 'aristid-ds';
|
|
3
|
+
import { useSharedTranslation } from '../../../../../../hooks/useSharedTranslation';
|
|
4
|
+
import { APICallStatus } from '../../../_types';
|
|
5
|
+
import { DeleteAllValuesButton } from '../../shared/DeleteAllValuesButton';
|
|
6
|
+
export const useUnlinkAllRecords = ({ attribute, backendValues, setBackendValues, onDeleteMultipleValues, isReadOnly, isFieldInError, }) => {
|
|
7
|
+
const { t } = useSharedTranslation();
|
|
8
|
+
const form = AntForm.useFormInstance();
|
|
9
|
+
const handleDeleteAllValues = async () => {
|
|
10
|
+
const deleteRes = await onDeleteMultipleValues(attribute.id, backendValues.filter(backendValue => backendValue.id_value), null);
|
|
11
|
+
if (deleteRes.status === APICallStatus.SUCCESS) {
|
|
12
|
+
form.setFieldValue(attribute.id, []);
|
|
13
|
+
form.setFields([
|
|
14
|
+
{
|
|
15
|
+
name: attribute.id,
|
|
16
|
+
errors: attribute.required ? [t('errors.standard_field_required')] : [],
|
|
17
|
+
},
|
|
18
|
+
]);
|
|
19
|
+
setBackendValues([]);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const shouldDisplayUnlinkAll = !isReadOnly && backendValues.length > 1 && attribute.multiple_values && !attribute.required;
|
|
23
|
+
return {
|
|
24
|
+
UnlinkAllRecordsButton: shouldDisplayUnlinkAll && (_jsx(DeleteAllValuesButton, { handleDelete: handleDeleteAllValues, disabled: isReadOnly, danger: isFieldInError })),
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useUnlinkAllRecords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUnlinkAllRecords.js","sourceRoot":"","sources":["../../../../../../../src/components/RecordEdition/EditRecordContent/uiElements/LinkField/unlink-all-records/useUnlinkAllRecords.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAC;AACnC,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAGpE,OAAO,EAAC,aAAa,EAAgC,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAC,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AAWzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAChC,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,cAAc,GACU,EAAE,EAAE;IAC5B,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAEvC,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;QACrC,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAC1C,SAAS,CAAC,EAAE,EACZ,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC3D,IAAI,CACP,CAAC;QAEF,IAAI,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;YAC7C,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;IACL,CAAC,CAAC;IAEF,MAAM,sBAAsB,GACxB,CAAC,UAAU,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;IAEhG,OAAO;QACH,sBAAsB,EAAE,sBAAsB,IAAI,CAC9C,KAAC,qBAAqB,IAAC,YAAY,EAAE,qBAAqB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,GAAI,CAC/G;KACJ,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type Dispatch, type SetStateAction} from 'react';\nimport {AntForm} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type RecordFormAttributeLinkAttributeFragment} from '_ui/_gqlTypes';\nimport {type RecordFormElementsValueLinkValue} from '_ui/hooks/useGetRecordForm';\nimport {APICallStatus, type DeleteMultipleValuesFunc} from '../../../_types';\nimport {DeleteAllValuesButton} from '../../shared/DeleteAllValuesButton';\n\ninterface IUseUnlinkAllRecordsProps {\n attribute: RecordFormAttributeLinkAttributeFragment;\n backendValues: RecordFormElementsValueLinkValue[];\n setBackendValues: Dispatch<SetStateAction<RecordFormElementsValueLinkValue[]>>;\n onDeleteMultipleValues: DeleteMultipleValuesFunc;\n isReadOnly: boolean;\n isFieldInError: boolean;\n}\n\nexport const useUnlinkAllRecords = ({\n attribute,\n backendValues,\n setBackendValues,\n onDeleteMultipleValues,\n isReadOnly,\n isFieldInError,\n}: IUseUnlinkAllRecordsProps) => {\n const {t} = useSharedTranslation();\n const form = AntForm.useFormInstance();\n\n const handleDeleteAllValues = async () => {\n const deleteRes = await onDeleteMultipleValues(\n attribute.id,\n backendValues.filter(backendValue => backendValue.id_value),\n null,\n );\n\n if (deleteRes.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\n const shouldDisplayUnlinkAll =\n !isReadOnly && backendValues.length > 1 && attribute.multiple_values && !attribute.required;\n\n return {\n UnlinkAllRecordsButton: shouldDisplayUnlinkAll && (\n <DeleteAllValuesButton handleDelete={handleDeleteAllValues} disabled={isReadOnly} danger={isFieldInError} />\n ),\n };\n};\n"]}
|