@leav/ui 1.9.0-ce48a072 → 1.9.0-d5f0656e
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 +103 -20
- package/dist/_gqlTypes/index.js +46 -11
- package/dist/_gqlTypes/index.js.map +1 -1
- package/dist/_queries/records/createRecordMutation.js +2 -2
- package/dist/_queries/records/createRecordMutation.js.map +1 -1
- package/dist/components/Explorer/Explorer.js +22 -12
- package/dist/components/Explorer/Explorer.js.map +1 -1
- package/dist/components/Explorer/ExplorerToolbar.js +2 -1
- package/dist/components/Explorer/ExplorerToolbar.js.map +1 -1
- package/dist/components/Explorer/_queries/useExplorerCountData.d.ts +16 -0
- package/dist/components/Explorer/_queries/useExplorerCountData.js +26 -0
- package/dist/components/Explorer/_queries/useExplorerCountData.js.map +1 -0
- package/dist/components/Explorer/actions-mass/ResultsCount.d.ts +10 -0
- package/dist/components/Explorer/actions-mass/ResultsCount.js +8 -0
- package/dist/components/Explorer/actions-mass/ResultsCount.js.map +1 -0
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.d.ts +9 -2
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.js +18 -4
- package/dist/components/Explorer/actions-mass/edit-attribute/useCountValuesOccurrencesHook.js.map +1 -1
- package/dist/components/Explorer/actions-mass/useMassActions.d.ts +5 -3
- package/dist/components/Explorer/actions-mass/useMassActions.js +19 -13
- package/dist/components/Explorer/actions-mass/useMassActions.js.map +1 -1
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.d.ts +3 -1
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.js +5 -1
- package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.js.map +1 -1
- package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.js +1 -1
- package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.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/_types.d.ts +4 -0
- package/dist/components/RecordEdition/EditRecordContent/_types.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordModal/EditRecordModal.js +28 -17
- package/dist/components/RecordEdition/EditRecordModal/EditRecordModal.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.d.ts +1 -0
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js +30 -18
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordPage/ErrorComponent.d.ts +2 -0
- package/dist/components/RecordEdition/EditRecordPage/ErrorComponent.js +11 -0
- package/dist/components/RecordEdition/EditRecordPage/ErrorComponent.js.map +1 -0
- package/dist/components/RecordEdition/EditRecordPage/getInitialRecordValues.d.ts +2 -0
- package/dist/components/RecordEdition/EditRecordPage/getInitialRecordValues.js +35 -0
- package/dist/components/RecordEdition/EditRecordPage/getInitialRecordValues.js.map +1 -0
- package/dist/components/RecordEdition/_types.d.ts +1 -1
- package/dist/components/RecordEdition/_types.js.map +1 -1
- package/dist/components/RecordEdition/hooks/useGetSubmitButtons.d.ts +1 -1
- package/dist/components/RecordEdition/hooks/useGetSubmitButtons.js +6 -2
- package/dist/components/RecordEdition/hooks/useGetSubmitButtons.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/schema.d.ts +2 -2
- package/dist/hooks/useIFrameMessenger/schema.js +1 -1
- package/dist/hooks/useIFrameMessenger/schema.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/types.d.ts +5 -0
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/dist/locales/en/shared.json +2 -2
- package/dist/locales/fr/shared.json +2 -2
- package/package.json +7 -11
|
@@ -3,10 +3,10 @@ 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 { useEffect, useRef, useState } from 'react';
|
|
6
|
-
import { KitButton, KitDivider, KitSpace, KitTypography } from 'aristid-ds';
|
|
6
|
+
import { KitButton, KitDivider, KitLoader, KitSpace, KitTypography } from 'aristid-ds';
|
|
7
7
|
import styled from 'styled-components';
|
|
8
8
|
import { useSharedTranslation } from '../../../hooks/useSharedTranslation';
|
|
9
|
-
import { usePurgeRecordMutation } from '../../../_gqlTypes';
|
|
9
|
+
import { useCreateRecordMutation, usePurgeRecordMutation } from '../../../_gqlTypes';
|
|
10
10
|
import { EditRecord } from '../EditRecord';
|
|
11
11
|
import { useGetSubmitButtons } from '../hooks/useGetSubmitButtons';
|
|
12
12
|
import { useForm } from 'antd/lib/form/Form';
|
|
@@ -14,10 +14,11 @@ import { useCreateCancelConfirm } from '../hooks/useCreateCancelConfirm';
|
|
|
14
14
|
import { EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS } from '../constants';
|
|
15
15
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
16
16
|
import { faXmark } from '@fortawesome/free-solid-svg-icons';
|
|
17
|
-
import { APICallStatus } from '../EditRecordContent/_types';
|
|
18
|
-
import useExecuteCreateEmptyRecordMutation from '../EditRecordContent/hooks/useCreateEmptyRecordMutation';
|
|
19
17
|
import { createPortal } from 'react-dom';
|
|
20
18
|
import { SUBMIT_BUTTONS_PORTAL } from '../../../constants';
|
|
19
|
+
import { ErrorBoundary } from '../../../components/ErrorBoundary';
|
|
20
|
+
import { ErrorComponent } from './ErrorComponent';
|
|
21
|
+
import { useGetInitialRecordValues } from './getInitialRecordValues';
|
|
21
22
|
const Header = styled.div `
|
|
22
23
|
grid-area: title;
|
|
23
24
|
align-self: center;
|
|
@@ -29,13 +30,15 @@ const Header = styled.div `
|
|
|
29
30
|
align-items: center;
|
|
30
31
|
`;
|
|
31
32
|
const emptyFunction = () => null;
|
|
32
|
-
export const EditRecordPage = ({ record, library, creationFormId, editionFormId, onCreate, onCreateAndEdit, valuesVersion, title, showHeader = true, submitButtons = ['create'], withInfoButton, onClose = emptyFunction, enableSidebar, showSidebar, sidebarContainer, isSubmitButtonsPortal = false, removePadding = false, }) => {
|
|
33
|
+
export const EditRecordPage = ({ record, library, creationFormId, editionFormId, onCreate, onCreateAndEdit, valuesVersion, title, showHeader = true, submitButtons = ['create'], withInfoButton, onClose = emptyFunction, enableSidebar, showSidebar, sidebarContainer, forceDisableSidebarInAppStudio, isSubmitButtonsPortal = false, removePadding = false, }) => {
|
|
33
34
|
const { t } = useSharedTranslation();
|
|
34
35
|
const [currentRecord, setCurrentRecord] = useState(record);
|
|
35
|
-
const
|
|
36
|
+
const clickedSubmitButton = useRef(null);
|
|
36
37
|
const formElementId = useRef(window.crypto.randomUUID());
|
|
37
38
|
const [isCreation, setIsCreation] = useState(!record);
|
|
38
|
-
const
|
|
39
|
+
const [isReady, setIsReady] = useState(!!record);
|
|
40
|
+
const [isError, setIsError] = useState(false);
|
|
41
|
+
const [createRecord] = useCreateRecordMutation();
|
|
39
42
|
const [purgeRecordMutation] = usePurgeRecordMutation();
|
|
40
43
|
const [formId, setFormId] = useState(isCreation ? (creationFormId ?? 'creation') : (editionFormId ?? 'edition'));
|
|
41
44
|
const [formCreateButtonsContainer, setFormCreateButtonsContainer] = useState();
|
|
@@ -49,19 +52,28 @@ export const EditRecordPage = ({ record, library, creationFormId, editionFormId,
|
|
|
49
52
|
}, []);
|
|
50
53
|
useEffect(() => {
|
|
51
54
|
const createEmptyRecordFunction = async () => {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
const values = useGetInitialRecordValues();
|
|
56
|
+
const { data } = await createRecord({
|
|
57
|
+
variables: {
|
|
58
|
+
library,
|
|
59
|
+
skipActivate: true,
|
|
60
|
+
data: { values },
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const recordId = data?.createRecord.record?.id;
|
|
64
|
+
setCurrentRecord(data?.createRecord.record.whoAmI ?? null);
|
|
65
|
+
if (!recordId) {
|
|
66
|
+
setIsError(true);
|
|
67
|
+
return;
|
|
56
68
|
}
|
|
57
|
-
|
|
69
|
+
setIsReady(true);
|
|
58
70
|
};
|
|
59
|
-
if (isCreation) {
|
|
71
|
+
if (isCreation && !isReady) {
|
|
60
72
|
createEmptyRecordFunction();
|
|
61
73
|
}
|
|
62
74
|
}, []);
|
|
63
75
|
const _handleClickSubmit = (button) => {
|
|
64
|
-
|
|
76
|
+
clickedSubmitButton.current = button;
|
|
65
77
|
};
|
|
66
78
|
const _purgeRecordOnCreationCancel = () => purgeRecordMutation({
|
|
67
79
|
errorPolicy: 'ignore',
|
|
@@ -77,7 +89,6 @@ export const EditRecordPage = ({ record, library, creationFormId, editionFormId,
|
|
|
77
89
|
return onClose();
|
|
78
90
|
};
|
|
79
91
|
const showCancelConfirm = useCreateCancelConfirm(_closeAfterConfirm);
|
|
80
|
-
const displayedSubmitButtons = useGetSubmitButtons(submitButtons, formElementId.current, isCreation, _handleClickSubmit);
|
|
81
92
|
const [antdForm] = useForm();
|
|
82
93
|
const _handleClose = () => {
|
|
83
94
|
if (isCreation) {
|
|
@@ -91,21 +102,22 @@ export const EditRecordPage = ({ record, library, creationFormId, editionFormId,
|
|
|
91
102
|
return onClose();
|
|
92
103
|
};
|
|
93
104
|
const closeButtonLabel = isCreation ? t('global.cancel') : t('global.close');
|
|
105
|
+
const displayedSubmitButtons = useGetSubmitButtons(submitButtons, formElementId.current, isCreation, _handleClickSubmit, _handleClose);
|
|
94
106
|
const _handleCreate = (newRecord) => {
|
|
95
107
|
setCurrentRecord(newRecord);
|
|
96
|
-
if (onCreateAndEdit && clickedSubmitButton === 'createAndEdit') {
|
|
108
|
+
if (onCreateAndEdit && clickedSubmitButton.current === 'createAndEdit') {
|
|
97
109
|
setFormId(editionFormId ?? 'edition');
|
|
98
110
|
setIsCreation(false);
|
|
99
111
|
onCreateAndEdit(newRecord);
|
|
100
112
|
return;
|
|
101
113
|
}
|
|
102
|
-
if (onCreate && clickedSubmitButton === 'create') {
|
|
114
|
+
if (onCreate && clickedSubmitButton.current === 'create') {
|
|
103
115
|
onCreate(newRecord);
|
|
104
116
|
return;
|
|
105
117
|
}
|
|
106
118
|
};
|
|
107
119
|
return (_jsxs(_Fragment, { children: [showHeader && (_jsxs(_Fragment, { children: [_jsxs(Header, { children: [title !== undefined ? (title) : (_jsx(KitTypography.Title, { level: "h2", style: { margin: 0 }, children: currentRecord?.label ?? t('record_edition.new_record') })), _jsx("div", { id: EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS, "data-testid": EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS }), _jsx(KitButton, { onClick: _handleClose, icon: _jsx(FontAwesomeIcon, { icon: faXmark }), children: closeButtonLabel }), _jsx(KitSpace, { children: displayedSubmitButtons })] }), _jsx(KitDivider, { noMargin: true, color: "lightGrey" })] })), isSubmitButtonsPortal &&
|
|
108
120
|
formCreateButtonsContainer &&
|
|
109
|
-
createPortal(displayedSubmitButtons, formCreateButtonsContainer), _jsx(EditRecord, { antdForm: antdForm, formId: formId, isFormCreationMode: isCreation, formElementId: formElementId.current, record: currentRecord, library: library, valuesVersion: valuesVersion, onCreate: _handleCreate, containerStyle: showHeader ? { height: 'calc(100% - 82px)' } : { height: '100%' }, withInfoButton: withInfoButton, enableSidebar: enableSidebar, showSidebar: showSidebar, sidebarContainer: sidebarContainer, removePadding: removePadding })] }));
|
|
121
|
+
createPortal(displayedSubmitButtons, formCreateButtonsContainer), _jsxs(ErrorBoundary, { children: [isError && _jsx(ErrorComponent, {}), !isReady && _jsx(KitLoader, {}), isReady && (_jsx(EditRecord, { antdForm: antdForm, formId: formId, isFormCreationMode: isCreation, formElementId: formElementId.current, record: currentRecord, library: library, valuesVersion: valuesVersion, onCreate: _handleCreate, containerStyle: showHeader ? { height: 'calc(100% - 82px)' } : { height: '100%' }, withInfoButton: withInfoButton, enableSidebar: enableSidebar, forceDisableSidebarInAppStudio: forceDisableSidebarInAppStudio, showSidebar: showSidebar, sidebarContainer: sidebarContainer, removePadding: removePadding }))] })] }));
|
|
110
122
|
};
|
|
111
123
|
//# sourceMappingURL=EditRecordPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditRecordPage.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordPage/EditRecordPage.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAyC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AAC1E,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAA8B,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAClF,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAC,0CAA0C,EAAC,MAAM,cAAc,CAAC;AACxE,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,OAAO,EAAC,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,mCAAmC,MAAM,yDAAyD,CAAC;AAC1G,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAC;AAuBpD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;CASxB,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;AAEjC,MAAM,CAAC,MAAM,cAAc,GAA4C,CAAC,EACpE,MAAM,EACN,OAAO,EACP,cAAc,EACd,aAAa,EACb,QAAQ,EACR,eAAe,EACf,aAAa,EACb,KAAK,EACL,UAAU,GAAG,IAAI,EACjB,aAAa,GAAG,CAAC,QAAQ,CAAC,EAC1B,cAAc,EACd,OAAO,GAAG,aAAa,EACvB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,qBAAqB,GAAG,KAAK,EAC7B,aAAa,GAAG,KAAK,GACxB,EAAE,EAAE;IACD,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAA0C,MAAM,CAAC,CAAC;IACpG,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAC;IAC/F,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,EAAC,iBAAiB,EAAC,GAAG,mCAAmC,EAAE,CAAC;IAClE,MAAM,CAAC,mBAAmB,CAAC,GAAG,sBAAsB,EAAE,CAAC;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAChC,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,CAC7E,CAAC;IAEF,MAAM,CAAC,0BAA0B,EAAE,6BAA6B,CAAC,GAAG,QAAQ,EAAe,CAAC;IAE5F,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,qBAAqB,EAAE,CAAC;YACxB,MAAM,wBAAwB,GAAG,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;YAChF,IAAI,wBAAwB,EAAE,CAAC;gBAC3B,6BAA6B,CAAC,wBAAwB,CAAC,CAAC;YAC5D,CAAC;QACL,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,yBAAyB,GAAG,KAAK,IAAI,EAAE;YACzC,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;gBACtC,oCAAoC;gBACpC,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,gBAAgB,CAAC,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACb,yBAAyB,EAAE,CAAC;QAChC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,kBAAkB,GAAG,CAAC,MAAyB,EAAE,EAAE;QACrD,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,GAAG,EAAE,CACtC,mBAAmB,CAAC;QAChB,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE;YACP,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;YACrC,QAAQ,EAAE,aAAa,EAAE,EAAE;SAC9B;KACJ,CAAC,CAAC;IAEP,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;QAClC,IAAI,aAAa,EAAE,EAAE,IAAI,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAClD,4BAA4B,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAErE,MAAM,sBAAsB,GAAG,mBAAmB,CAC9C,aAAa,EACb,aAAa,CAAC,OAAO,EACrB,UAAU,EACV,kBAAkB,CACrB,CAAC;IACF,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,CAAC;IAE7B,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC;gBAC7B,OAAO,iBAAiB,EAAE,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACJ,4BAA4B,EAAE,CAAC;YACnC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAE7E,MAAM,aAAa,GAAG,CAAC,SAA2C,EAAE,EAAE;QAClE,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE5B,IAAI,eAAe,IAAI,mBAAmB,KAAK,eAAe,EAAE,CAAC;YAC7D,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;YACtC,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,eAAe,CAAC,SAAS,CAAC,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,QAAQ,IAAI,mBAAmB,KAAK,QAAQ,EAAE,CAAC;YAC/C,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;QACX,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACH,8BACK,UAAU,IAAI,CACX,8BACI,MAAC,MAAM,eACF,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CACnB,KAAK,CACR,CAAC,CAAC,CAAC,CACA,KAAC,aAAa,CAAC,KAAK,IAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAE,EAAC,MAAM,EAAE,CAAC,EAAC,YAC7C,aAAa,EAAE,KAAK,IAAI,CAAC,CAAC,2BAA2B,CAAC,GACrC,CACzB,EACD,cACI,EAAE,EAAE,0CAA0C,iBACjC,0CAA0C,GACzD,EACF,KAAC,SAAS,IAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,OAAO,GAAI,YACrE,gBAAgB,GACT,EACZ,KAAC,QAAQ,cAAE,sBAAsB,GAAY,IACxC,EACT,KAAC,UAAU,IAAC,QAAQ,QAAC,KAAK,EAAC,WAAW,GAAG,IAC1C,CACN,EACA,qBAAqB;gBAClB,0BAA0B;gBAC1B,YAAY,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,EACpE,KAAC,UAAU,IACP,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,UAAU,EAC9B,aAAa,EAAE,aAAa,CAAC,OAAO,EACpC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,aAAa,EACvB,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,mBAAmB,EAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,MAAM,EAAC,EAC7E,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,GAC9B,IACH,CACN,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 FunctionComponent, type ReactNode, useEffect, useRef, useState} from 'react';\nimport {KitButton, KitDivider, KitSpace, KitTypography} from 'aristid-ds';\nimport styled from 'styled-components';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type IValueVersion} from '_ui/types';\nimport {type RecordIdentityFragment, usePurgeRecordMutation} from '_ui/_gqlTypes';\nimport {EditRecord} from '../EditRecord';\nimport {type PossibleSubmitButtons, type SubmitButtonsName} from '../_types';\nimport {useGetSubmitButtons} from '../hooks/useGetSubmitButtons';\nimport {useForm} from 'antd/lib/form/Form';\nimport {useCreateCancelConfirm} from '../hooks/useCreateCancelConfirm';\nimport {EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS} from '../constants';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faXmark} from '@fortawesome/free-solid-svg-icons';\nimport {APICallStatus} from '../EditRecordContent/_types';\nimport useExecuteCreateEmptyRecordMutation from '../EditRecordContent/hooks/useCreateEmptyRecordMutation';\nimport {createPortal} from 'react-dom';\nimport {SUBMIT_BUTTONS_PORTAL} from '_ui/constants';\n\ninterface IEditRecordPageProps {\n record: RecordIdentityFragment['whoAmI'] | null;\n creationFormId?: string;\n editionFormId?: string;\n library: string;\n title?: ReactNode;\n onCreate?: (newRecord: RecordIdentityFragment['whoAmI']) => void; // Called after submitting via the \"create\" button\n onCreateAndEdit?: (newRecord: RecordIdentityFragment['whoAmI']) => void; // Called after submitting via the \"create and edit\" button\n submitButtons?: PossibleSubmitButtons;\n valuesVersion?: IValueVersion;\n showRefreshButton?: boolean;\n showHeader?: boolean;\n withInfoButton?: boolean;\n onClose?: () => void;\n showSidebar?: boolean;\n enableSidebar?: boolean;\n sidebarContainer?: HTMLElement;\n isSubmitButtonsPortal?: boolean;\n removePadding?: boolean;\n}\n\nconst Header = styled.div`\n grid-area: title;\n align-self: center;\n font-size: 1rem;\n padding: 16px 32px;\n height: 82px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst emptyFunction = () => null;\n\nexport const EditRecordPage: FunctionComponent<IEditRecordPageProps> = ({\n record,\n library,\n creationFormId,\n editionFormId,\n onCreate,\n onCreateAndEdit,\n valuesVersion,\n title,\n showHeader = true,\n submitButtons = ['create'],\n withInfoButton,\n onClose = emptyFunction,\n enableSidebar,\n showSidebar,\n sidebarContainer,\n isSubmitButtonsPortal = false,\n removePadding = false,\n}) => {\n const {t} = useSharedTranslation();\n const [currentRecord, setCurrentRecord] = useState<RecordIdentityFragment['whoAmI'] | null>(record);\n const [clickedSubmitButton, setClickedSubmitButton] = useState<SubmitButtonsName | null>(null);\n const formElementId = useRef(window.crypto.randomUUID());\n const [isCreation, setIsCreation] = useState(!record);\n const {createEmptyRecord} = useExecuteCreateEmptyRecordMutation();\n const [purgeRecordMutation] = usePurgeRecordMutation();\n const [formId, setFormId] = useState<string>(\n isCreation ? (creationFormId ?? 'creation') : (editionFormId ?? 'edition'),\n );\n\n const [formCreateButtonsContainer, setFormCreateButtonsContainer] = useState<HTMLElement>();\n\n useEffect(() => {\n if (isSubmitButtonsPortal) {\n const formCreateButtonsElement = document.getElementById(SUBMIT_BUTTONS_PORTAL);\n if (formCreateButtonsElement) {\n setFormCreateButtonsContainer(formCreateButtonsElement);\n }\n }\n }, []);\n\n useEffect(() => {\n const createEmptyRecordFunction = async () => {\n const res = await createEmptyRecord(library);\n if (res?.status === APICallStatus.ERROR) {\n // TODO : call KitNotification error\n return null;\n }\n setCurrentRecord(res?.record ?? null);\n };\n\n if (isCreation) {\n createEmptyRecordFunction();\n }\n }, []);\n\n const _handleClickSubmit = (button: SubmitButtonsName) => {\n setClickedSubmitButton(button);\n };\n\n const _purgeRecordOnCreationCancel = () =>\n purgeRecordMutation({\n errorPolicy: 'ignore',\n variables: {\n libraryId: currentRecord?.library?.id,\n recordId: currentRecord?.id,\n },\n });\n\n const _closeAfterConfirm = async () => {\n if (currentRecord?.id && currentRecord?.library?.id) {\n _purgeRecordOnCreationCancel();\n }\n return onClose();\n };\n\n const showCancelConfirm = useCreateCancelConfirm(_closeAfterConfirm);\n\n const displayedSubmitButtons = useGetSubmitButtons(\n submitButtons,\n formElementId.current,\n isCreation,\n _handleClickSubmit,\n );\n const [antdForm] = useForm();\n\n const _handleClose = () => {\n if (isCreation) {\n if (antdForm.isFieldsTouched()) {\n return showCancelConfirm();\n } else {\n _purgeRecordOnCreationCancel();\n }\n }\n\n return onClose();\n };\n\n const closeButtonLabel = isCreation ? t('global.cancel') : t('global.close');\n\n const _handleCreate = (newRecord: RecordIdentityFragment['whoAmI']) => {\n setCurrentRecord(newRecord);\n\n if (onCreateAndEdit && clickedSubmitButton === 'createAndEdit') {\n setFormId(editionFormId ?? 'edition');\n setIsCreation(false);\n onCreateAndEdit(newRecord);\n return;\n }\n\n if (onCreate && clickedSubmitButton === 'create') {\n onCreate(newRecord);\n return;\n }\n };\n\n return (\n <>\n {showHeader && (\n <>\n <Header>\n {title !== undefined ? (\n title\n ) : (\n <KitTypography.Title level=\"h2\" style={{margin: 0}}>\n {currentRecord?.label ?? t('record_edition.new_record')}\n </KitTypography.Title>\n )}\n <div\n id={EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS}\n data-testid={EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS}\n />\n <KitButton onClick={_handleClose} icon={<FontAwesomeIcon icon={faXmark} />}>\n {closeButtonLabel}\n </KitButton>\n <KitSpace>{displayedSubmitButtons}</KitSpace>\n </Header>\n <KitDivider noMargin color=\"lightGrey\" />\n </>\n )}\n {isSubmitButtonsPortal &&\n formCreateButtonsContainer &&\n createPortal(displayedSubmitButtons, formCreateButtonsContainer)}\n <EditRecord\n antdForm={antdForm}\n formId={formId}\n isFormCreationMode={isCreation}\n formElementId={formElementId.current}\n record={currentRecord}\n library={library}\n valuesVersion={valuesVersion}\n onCreate={_handleCreate}\n containerStyle={showHeader ? {height: 'calc(100% - 82px)'} : {height: '100%'}}\n withInfoButton={withInfoButton}\n enableSidebar={enableSidebar}\n showSidebar={showSidebar}\n sidebarContainer={sidebarContainer}\n removePadding={removePadding}\n />\n </>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"EditRecordPage.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordPage/EditRecordPage.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent, type ReactNode, useEffect, useMemo, useRef, useState} from 'react';\nimport {KitButton, KitDivider, KitLoader, KitSpace, KitTypography} from 'aristid-ds';\nimport styled from 'styled-components';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type IValueVersion} from '_ui/types';\nimport {type RecordIdentityFragment, useCreateRecordMutation, usePurgeRecordMutation} from '_ui/_gqlTypes';\nimport {EditRecord} from '../EditRecord';\nimport {type PossibleSubmitButtons, type SubmitButtonsName} from '../_types';\nimport {useGetSubmitButtons} from '../hooks/useGetSubmitButtons';\nimport {useForm} from 'antd/lib/form/Form';\nimport {useCreateCancelConfirm} from '../hooks/useCreateCancelConfirm';\nimport {EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS} from '../constants';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faXmark} from '@fortawesome/free-solid-svg-icons';\nimport {createPortal} from 'react-dom';\nimport {SUBMIT_BUTTONS_PORTAL} from '_ui/constants';\nimport {ErrorBoundary} from '_ui/components/ErrorBoundary';\nimport {ErrorComponent} from './ErrorComponent';\nimport {useGetInitialRecordValues} from './getInitialRecordValues';\n\ninterface IEditRecordPageProps {\n record: RecordIdentityFragment['whoAmI'] | null;\n creationFormId?: string;\n editionFormId?: string;\n library: string;\n title?: ReactNode;\n onCreate?: (newRecord: RecordIdentityFragment['whoAmI']) => void; // Called after submitting via the \"create\" button\n onCreateAndEdit?: (newRecord: RecordIdentityFragment['whoAmI']) => void; // Called after submitting via the \"create and edit\" button\n submitButtons?: PossibleSubmitButtons;\n valuesVersion?: IValueVersion;\n showRefreshButton?: boolean;\n showHeader?: boolean;\n withInfoButton?: boolean;\n onClose?: () => void;\n showSidebar?: boolean; // TODO: Should be removed when sidebar is fully removed from EditRecordPage\n enableSidebar?: boolean; // TODO: Should be removed when sidebar is fully removed from EditRecordPage\n sidebarContainer?: HTMLElement; // TODO: Should be removed when sidebar is fully removed from EditRecordPage\n forceDisableSidebarInAppStudio?: boolean; // TODO: Should be removed when sidebar is fully removed from EditRecordPage\n isSubmitButtonsPortal?: boolean;\n removePadding?: boolean;\n}\n\nconst Header = styled.div`\n grid-area: title;\n align-self: center;\n font-size: 1rem;\n padding: 16px 32px;\n height: 82px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst emptyFunction = () => null;\n\nexport const EditRecordPage: FunctionComponent<IEditRecordPageProps> = ({\n record,\n library,\n creationFormId,\n editionFormId,\n onCreate,\n onCreateAndEdit,\n valuesVersion,\n title,\n showHeader = true,\n submitButtons = ['create'],\n withInfoButton,\n onClose = emptyFunction,\n enableSidebar,\n showSidebar,\n sidebarContainer,\n forceDisableSidebarInAppStudio,\n isSubmitButtonsPortal = false,\n removePadding = false,\n}) => {\n const {t} = useSharedTranslation();\n const [currentRecord, setCurrentRecord] = useState<RecordIdentityFragment['whoAmI'] | null>(record);\n const clickedSubmitButton = useRef<SubmitButtonsName | null>(null);\n const formElementId = useRef(window.crypto.randomUUID());\n const [isCreation, setIsCreation] = useState(!record);\n const [isReady, setIsReady] = useState(!!record);\n const [isError, setIsError] = useState(false);\n const [createRecord] = useCreateRecordMutation();\n const [purgeRecordMutation] = usePurgeRecordMutation();\n const [formId, setFormId] = useState<string>(\n isCreation ? (creationFormId ?? 'creation') : (editionFormId ?? 'edition'),\n );\n const [formCreateButtonsContainer, setFormCreateButtonsContainer] = useState<HTMLElement>();\n\n useEffect(() => {\n if (isSubmitButtonsPortal) {\n const formCreateButtonsElement = document.getElementById(SUBMIT_BUTTONS_PORTAL);\n if (formCreateButtonsElement) {\n setFormCreateButtonsContainer(formCreateButtonsElement);\n }\n }\n }, []);\n\n useEffect(() => {\n const createEmptyRecordFunction = async () => {\n const values = useGetInitialRecordValues();\n const {data} = await createRecord({\n variables: {\n library,\n skipActivate: true,\n data: {values},\n },\n });\n const recordId = data?.createRecord.record?.id;\n setCurrentRecord(data?.createRecord.record.whoAmI ?? null);\n if (!recordId) {\n setIsError(true);\n return;\n }\n\n setIsReady(true);\n };\n\n if (isCreation && !isReady) {\n createEmptyRecordFunction();\n }\n }, []);\n\n const _handleClickSubmit = (button: SubmitButtonsName) => {\n clickedSubmitButton.current = button;\n };\n\n const _purgeRecordOnCreationCancel = () =>\n purgeRecordMutation({\n errorPolicy: 'ignore',\n variables: {\n libraryId: currentRecord?.library?.id,\n recordId: currentRecord?.id,\n },\n });\n\n const _closeAfterConfirm = async () => {\n if (currentRecord?.id && currentRecord?.library?.id) {\n _purgeRecordOnCreationCancel();\n }\n return onClose();\n };\n\n const showCancelConfirm = useCreateCancelConfirm(_closeAfterConfirm);\n\n const [antdForm] = useForm();\n\n const _handleClose = () => {\n if (isCreation) {\n if (antdForm.isFieldsTouched()) {\n return showCancelConfirm();\n } else {\n _purgeRecordOnCreationCancel();\n }\n }\n\n return onClose();\n };\n const closeButtonLabel = isCreation ? t('global.cancel') : t('global.close');\n\n const displayedSubmitButtons = useGetSubmitButtons(\n submitButtons,\n formElementId.current,\n isCreation,\n _handleClickSubmit,\n _handleClose,\n );\n\n const _handleCreate = (newRecord: RecordIdentityFragment['whoAmI']) => {\n setCurrentRecord(newRecord);\n\n if (onCreateAndEdit && clickedSubmitButton.current === 'createAndEdit') {\n setFormId(editionFormId ?? 'edition');\n setIsCreation(false);\n onCreateAndEdit(newRecord);\n return;\n }\n\n if (onCreate && clickedSubmitButton.current === 'create') {\n onCreate(newRecord);\n return;\n }\n };\n\n return (\n <>\n {showHeader && (\n <>\n <Header>\n {title !== undefined ? (\n title\n ) : (\n <KitTypography.Title level=\"h2\" style={{margin: 0}}>\n {currentRecord?.label ?? t('record_edition.new_record')}\n </KitTypography.Title>\n )}\n <div\n id={EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS}\n data-testid={EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS}\n />\n <KitButton onClick={_handleClose} icon={<FontAwesomeIcon icon={faXmark} />}>\n {closeButtonLabel}\n </KitButton>\n <KitSpace>{displayedSubmitButtons}</KitSpace>\n </Header>\n <KitDivider noMargin color=\"lightGrey\" />\n </>\n )}\n {isSubmitButtonsPortal &&\n formCreateButtonsContainer &&\n createPortal(displayedSubmitButtons, formCreateButtonsContainer)}\n <ErrorBoundary>\n {isError && <ErrorComponent />}\n {!isReady && <KitLoader />}\n {isReady && (\n <EditRecord\n antdForm={antdForm}\n formId={formId}\n isFormCreationMode={isCreation}\n formElementId={formElementId.current}\n record={currentRecord}\n library={library}\n valuesVersion={valuesVersion}\n onCreate={_handleCreate}\n containerStyle={showHeader ? {height: 'calc(100% - 82px)'} : {height: '100%'}}\n withInfoButton={withInfoButton}\n enableSidebar={enableSidebar}\n forceDisableSidebarInAppStudio={forceDisableSidebarInAppStudio}\n showSidebar={showSidebar}\n sidebarContainer={sidebarContainer}\n removePadding={removePadding}\n />\n )}\n </ErrorBoundary>\n </>\n );\n};\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
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 { useEffect } from 'react';
|
|
5
|
+
export const ErrorComponent = () => {
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
throw new Error();
|
|
8
|
+
}, []);
|
|
9
|
+
return null;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=ErrorComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorComponent.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordPage/ErrorComponent.tsx"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAyB,SAAS,EAAC,MAAM,OAAO,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAsB,GAAG,EAAE;IAClD,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,KAAK,EAAE,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,IAAI,CAAC;AAChB,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 FunctionComponent, useEffect} from 'react';\n\nexport const ErrorComponent: FunctionComponent = () => {\n useEffect(() => {\n throw new Error();\n }, []);\n return null;\n};\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
export const INITIAL_VALUES_QUERY_PARAMS = 'formInitialValues';
|
|
5
|
+
const removeFromQueryParams = (paramToRemove) => {
|
|
6
|
+
const searchParams = new URLSearchParams(location.search);
|
|
7
|
+
if (searchParams.get(paramToRemove)) {
|
|
8
|
+
searchParams.delete(paramToRemove);
|
|
9
|
+
const queryParams = searchParams.size > 0 ? `?${searchParams.toString()}` : '';
|
|
10
|
+
history.replaceState({}, '', `${location.pathname}${queryParams}`);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
export const useGetInitialRecordValues = () => {
|
|
14
|
+
const searchParams = new URLSearchParams(location.search);
|
|
15
|
+
const decodedParams = decodeURIComponent(searchParams.get(INITIAL_VALUES_QUERY_PARAMS) ?? '{}');
|
|
16
|
+
let initialValues = null;
|
|
17
|
+
try {
|
|
18
|
+
initialValues = JSON.parse(decodedParams);
|
|
19
|
+
removeFromQueryParams(INITIAL_VALUES_QUERY_PARAMS);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
if (!initialValues || Object.keys(initialValues).length === 0) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
const values = [];
|
|
28
|
+
Object.keys(initialValues).forEach(attributeId => {
|
|
29
|
+
initialValues[attributeId].forEach(val => {
|
|
30
|
+
values.push({ attribute: attributeId, payload: val });
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
return values;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=getInitialRecordValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getInitialRecordValues.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordPage/getInitialRecordValues.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAE/D,MAAM,qBAAqB,GAAG,CAAC,aAAqB,EAAE,EAAE;IACpD,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,QAAQ,GAAG,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC1C,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,CAAC;IAChG,IAAI,aAAa,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC;QACD,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QAC7C,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrC,MAAM,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,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\nexport const INITIAL_VALUES_QUERY_PARAMS = 'formInitialValues';\n\nconst removeFromQueryParams = (paramToRemove: string) => {\n const searchParams = new URLSearchParams(location.search);\n if (searchParams.get(paramToRemove)) {\n searchParams.delete(paramToRemove);\n const queryParams = searchParams.size > 0 ? `?${searchParams.toString()}` : '';\n history.replaceState({}, '', `${location.pathname}${queryParams}`);\n }\n};\n\nexport const useGetInitialRecordValues = () => {\n const searchParams = new URLSearchParams(location.search);\n const decodedParams = decodeURIComponent(searchParams.get(INITIAL_VALUES_QUERY_PARAMS) ?? '{}');\n let initialValues = null;\n try {\n initialValues = JSON.parse(decodedParams);\n removeFromQueryParams(INITIAL_VALUES_QUERY_PARAMS);\n } catch {\n return [];\n }\n\n if (!initialValues || Object.keys(initialValues).length === 0) {\n return [];\n }\n\n const values = [];\n Object.keys(initialValues).forEach(attributeId => {\n initialValues[attributeId].forEach(val => {\n values.push({attribute: attributeId, payload: val});\n });\n });\n\n return values;\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type SubmitButtonsName = 'create' | 'createAndEdit';
|
|
1
|
+
export type SubmitButtonsName = 'create' | 'createAndEdit' | 'closeCancel';
|
|
2
2
|
export type PossibleSubmitButtons = SubmitButtonsName[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../src/components/RecordEdition/_types.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nexport type SubmitButtonsName = 'create' | 'createAndEdit';\nexport type PossibleSubmitButtons = SubmitButtonsName[];\n"]}
|
|
1
|
+
{"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../src/components/RecordEdition/_types.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nexport type SubmitButtonsName = 'create' | 'createAndEdit' | 'closeCancel';\nexport type PossibleSubmitButtons = SubmitButtonsName[];\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { type PossibleSubmitButtons, type SubmitButtonsName } from '../_types';
|
|
2
|
-
export declare const useGetSubmitButtons: (buttons: PossibleSubmitButtons, id: string, isInCreateMode: boolean, onClickSubmit: (button: SubmitButtonsName) => void) => any[];
|
|
2
|
+
export declare const useGetSubmitButtons: (buttons: PossibleSubmitButtons, id: string, isInCreateMode: boolean, onClickSubmit: (button: SubmitButtonsName) => void, onClickCloseCancel?: () => void) => any[];
|
|
@@ -5,14 +5,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
5
5
|
import { KitButton } from 'aristid-ds';
|
|
6
6
|
import { useSharedTranslation } from '../../../hooks/useSharedTranslation';
|
|
7
7
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
8
|
-
import { faPenToSquare, faCheck } from '@fortawesome/free-solid-svg-icons';
|
|
8
|
+
import { faPenToSquare, faCheck, faXmark } from '@fortawesome/free-solid-svg-icons';
|
|
9
9
|
import { EDIT_OR_CREATE_RECORD_FORM_ID } from '../EditRecordContent/formConstants';
|
|
10
|
-
export const useGetSubmitButtons = (buttons, id, isInCreateMode, onClickSubmit) => {
|
|
10
|
+
export const useGetSubmitButtons = (buttons, id, isInCreateMode, onClickSubmit, onClickCloseCancel) => {
|
|
11
11
|
const { t } = useSharedTranslation();
|
|
12
12
|
const headerSubmitButtons = [];
|
|
13
13
|
if (!isInCreateMode) {
|
|
14
14
|
return [];
|
|
15
15
|
}
|
|
16
|
+
if (buttons.includes('closeCancel') && onClickCloseCancel) {
|
|
17
|
+
const closeButtonLabel = isInCreateMode ? t('global.cancel') : t('global.close');
|
|
18
|
+
headerSubmitButtons.push(_jsx(KitButton, { type: "secondary", icon: _jsx(FontAwesomeIcon, { icon: faXmark }), onClick: () => onClickCloseCancel?.(), size: "m", children: closeButtonLabel }, "close"));
|
|
19
|
+
}
|
|
16
20
|
if (buttons.includes('create')) {
|
|
17
21
|
headerSubmitButtons.push(_jsx(KitButton, { form: id ?? EDIT_OR_CREATE_RECORD_FORM_ID, type: !buttons.includes('createAndEdit') ? 'primary' : 'secondary', htmlType: "submit", icon: _jsx(FontAwesomeIcon, { icon: faCheck }), onClick: () => onClickSubmit('create'), size: "m", children: t('record_edition.create') }, "create"));
|
|
18
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetSubmitButtons.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/hooks/useGetSubmitButtons.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AACrC,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"useGetSubmitButtons.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/hooks/useGetSubmitButtons.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AACrC,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAC,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAC,6BAA6B,EAAC,MAAM,oCAAoC,CAAC;AAEjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,OAA8B,EAC9B,EAAU,EACV,cAAuB,EACvB,aAAkD,EAClD,kBAA+B,EACjC,EAAE;IACA,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAE/B,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACxD,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QACjF,mBAAmB,CAAC,IAAI,CACpB,KAAC,SAAS,IAEN,IAAI,EAAC,WAAW,EAChB,IAAI,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,OAAO,GAAI,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE,EAAE,EACrC,IAAI,EAAC,GAAG,YAEP,gBAAgB,IANb,OAAO,CAOH,CACf,CAAC;IACN,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,mBAAmB,CAAC,IAAI,CACpB,KAAC,SAAS,IAEN,IAAI,EAAE,EAAE,IAAI,6BAA6B,EACzC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAClE,QAAQ,EAAC,QAAQ,EACjB,IAAI,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,OAAO,GAAI,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EACtC,IAAI,EAAC,GAAG,YAEP,CAAC,CAAC,uBAAuB,CAAC,IARvB,QAAQ,CASJ,CACf,CAAC;IACN,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,mBAAmB,CAAC,IAAI,CACpB,KAAC,SAAS,IAEN,IAAI,EAAE,EAAE,IAAI,6BAA6B,EACzC,IAAI,EAAC,SAAS,EACd,QAAQ,EAAC,QAAQ,EACjB,IAAI,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,aAAa,GAAI,EAC9C,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,EAC7C,IAAI,EAAC,GAAG,YAEP,CAAC,CAAC,gCAAgC,CAAC,IARhC,eAAe,CASX,CACf,CAAC;IACN,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC/B,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 {KitButton} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type PossibleSubmitButtons, type SubmitButtonsName} from '../_types';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faPenToSquare, faCheck, faXmark} from '@fortawesome/free-solid-svg-icons';\nimport {EDIT_OR_CREATE_RECORD_FORM_ID} from '../EditRecordContent/formConstants';\n\nexport const useGetSubmitButtons = (\n buttons: PossibleSubmitButtons,\n id: string,\n isInCreateMode: boolean,\n onClickSubmit: (button: SubmitButtonsName) => void,\n onClickCloseCancel?: () => void,\n) => {\n const {t} = useSharedTranslation();\n const headerSubmitButtons = [];\n\n if (!isInCreateMode) {\n return [];\n }\n\n if (buttons.includes('closeCancel') && onClickCloseCancel) {\n const closeButtonLabel = isInCreateMode ? t('global.cancel') : t('global.close');\n headerSubmitButtons.push(\n <KitButton\n key=\"close\"\n type=\"secondary\"\n icon={<FontAwesomeIcon icon={faXmark} />}\n onClick={() => onClickCloseCancel?.()}\n size=\"m\"\n >\n {closeButtonLabel}\n </KitButton>,\n );\n }\n\n if (buttons.includes('create')) {\n headerSubmitButtons.push(\n <KitButton\n key=\"create\"\n form={id ?? EDIT_OR_CREATE_RECORD_FORM_ID}\n type={!buttons.includes('createAndEdit') ? 'primary' : 'secondary'}\n htmlType=\"submit\"\n icon={<FontAwesomeIcon icon={faCheck} />}\n onClick={() => onClickSubmit('create')}\n size=\"m\"\n >\n {t('record_edition.create')}\n </KitButton>,\n );\n }\n\n if (buttons.includes('createAndEdit')) {\n headerSubmitButtons.push(\n <KitButton\n key=\"createAndEdit\"\n form={id ?? EDIT_OR_CREATE_RECORD_FORM_ID}\n type=\"primary\"\n htmlType=\"submit\"\n icon={<FontAwesomeIcon icon={faPenToSquare} />}\n onClick={() => onClickSubmit('createAndEdit')}\n size=\"m\"\n >\n {t('record_edition.create_and_edit')}\n </KitButton>,\n );\n }\n\n return headerSubmitButtons;\n};\n"]}
|
|
@@ -44,7 +44,7 @@ export declare const iframePanelSchema: z.ZodObject<{
|
|
|
44
44
|
export declare const creationPanelSchema: z.ZodObject<{
|
|
45
45
|
type: z.ZodLiteral<"creationForm">;
|
|
46
46
|
formId: z.ZodString;
|
|
47
|
-
attributeSource: z.ZodString
|
|
47
|
+
attributeSource: z.ZodOptional<z.ZodString>;
|
|
48
48
|
isStandalone: z.ZodLiteral<true>;
|
|
49
49
|
}, z.core.$strip>;
|
|
50
50
|
export declare const baseExplorerPanelSchema: z.ZodObject<{
|
|
@@ -138,7 +138,7 @@ export declare const PanelSchema: z.ZodIntersection<z.ZodObject<{
|
|
|
138
138
|
}, z.core.$strip>, z.ZodObject<{
|
|
139
139
|
type: z.ZodLiteral<"creationForm">;
|
|
140
140
|
formId: z.ZodString;
|
|
141
|
-
attributeSource: z.ZodString
|
|
141
|
+
attributeSource: z.ZodOptional<z.ZodString>;
|
|
142
142
|
isStandalone: z.ZodLiteral<true>;
|
|
143
143
|
}, z.core.$strip>]>>;
|
|
144
144
|
export declare const PanelIFrameSchema: z.ZodIntersection<z.ZodObject<{
|
|
@@ -59,7 +59,7 @@ const editionPanelSchema = z.object({
|
|
|
59
59
|
export const creationPanelSchema = z.object({
|
|
60
60
|
type: z.literal('creationForm'),
|
|
61
61
|
formId: z.string(),
|
|
62
|
-
attributeSource: z.string(),
|
|
62
|
+
attributeSource: z.string().optional(),
|
|
63
63
|
isStandalone: z.literal(true),
|
|
64
64
|
});
|
|
65
65
|
export const baseExplorerPanelSchema = z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/hooks/useIFrameMessenger/schema.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAE1F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAErG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACxC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACzC,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzE,kBAAkB,EAAE,CAAC;SAChB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;SAC1F,QAAQ,EAAE;IACf,qBAAqB,EAAE,CAAC;SACnB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACtF,QAAQ,EAAE;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC7B,KAAK,CACF,CAAC,CAAC,MAAM,CAAC;IACL,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC,QAAQ,EAAE;IACvC,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAC/C,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3C,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CACL;KACA,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;IAC7F,OAAO,EAAE,qDAAqD;CACjE,CAAC,CAAC;AAEP,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/hooks/useIFrameMessenger/schema.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport * as z from 'zod/v4';\n\nexport const FONT_AWESOME_ICON_REGEX = /^fa-/;\n\nexport const PanelIdSchema = z.string();\nexport const LanguageSchema = z.string();\nexport const LibraryIdSchema = z.string();\nexport const FontAwesomeIconSchema = z.string().regex(FONT_AWESOME_ICON_REGEX).optional();\n\nexport const WhereSchema = z.union([z.literal('popup'), z.literal('slider'), z.literal('fullpage')]);\n\nexport const FlapPanelIdSchema = z.union([z.literal('info-history'), z.literal('thread')]);\n\nexport const ExplorerPropsSchema = z.object({\n showSearch: z.boolean().optional(),\n showFilters: z.boolean().optional(),\n showSorts: z.boolean().optional(),\n freezeView: z.boolean().optional(),\n showAttributeLabels: z.boolean().optional(),\n creationFormId: z.string().optional(),\n noPagination: z.literal(true).optional(),\n showActionsLabels: z.boolean().optional(),\n defaultPrimaryActions: z.array(z.union([z.literal('create')])).optional(),\n defaultMassActions: z\n .array(z.union([z.literal('deactivate'), z.literal('export'), z.literal('editAttribute')]))\n .optional(),\n defaultActionsForItem: z\n .array(z.union([z.literal('replaceLink'), z.literal('remove'), z.literal('activate')]))\n .optional(),\n});\n\nexport const ItemActionsSchema = z\n .array(\n z.object({\n where: WhereSchema,\n what: z.literal('record'),\n targetPanelId: PanelIdSchema.optional(),\n targetFlapPanelId: FlapPanelIdSchema.optional(),\n icon: FontAwesomeIconSchema,\n label: z.record(LanguageSchema, z.string()),\n onRowClick: z.boolean().optional(),\n }),\n )\n .refine(actions => actions.reduce((acc, action) => (action.onRowClick ? acc + 1 : acc), 0) <= 1, {\n message: 'At most one action must have onRowClick set to true',\n });\n\nexport const basePanelSchema = z.object({\n id: PanelIdSchema,\n icon: FontAwesomeIconSchema,\n name: z.record(LanguageSchema, z.string()).optional(),\n isStandalone: z.boolean().optional(),\n hideInCompactMode: z.boolean().optional(),\n});\n\nexport const iframePanelSchema = z.object({\n type: z.literal('custom'),\n iframeSource: z.string(),\n viewId: z.string().optional(),\n isSelfContaining: z.boolean().optional(),\n});\n\nconst editionPanelSchema = z.object({\n type: z.literal('editionForm'),\n formId: z.string(),\n});\n\nexport const creationPanelSchema = z.object({\n type: z.literal('creationForm'),\n formId: z.string(),\n attributeSource: z.string().optional(),\n isStandalone: z.literal(true),\n});\n\nexport const baseExplorerPanelSchema = z.object({\n type: z.literal('explorer'),\n viewId: z.string().optional(),\n actions: ItemActionsSchema,\n});\n\nexport const attributeExplorerPanelSchema = z.object({\n attributeSource: z.string(),\n deactivateOnUnlink: z.boolean().optional(),\n libraryId: LibraryIdSchema,\n explorerProps: ExplorerPropsSchema.optional(),\n});\n\nconst libraryExplorerPanelSchema = z.object({\n explorerProps: ExplorerPropsSchema.optional(),\n});\n\nconst explorerPanelSchema = baseExplorerPanelSchema.and(\n z.union([attributeExplorerPanelSchema, libraryExplorerPanelSchema]),\n);\n\nexport const PanelSchema = basePanelSchema.and(\n z.union([explorerPanelSchema, iframePanelSchema, editionPanelSchema, creationPanelSchema]),\n);\n\nexport const PanelIFrameSchema = basePanelSchema.and(iframePanelSchema);\n"]}
|
|
@@ -4,6 +4,8 @@ import { type KitNotification } from 'aristid-ds';
|
|
|
4
4
|
import { type IKitConfirmDialog } from 'aristid-ds/dist/Kit/Feedback/Modal/types';
|
|
5
5
|
import { type ToastedAlertProps } from 'aristid-ds/dist/Kit/Feedback/Alert/types';
|
|
6
6
|
import { type LibraryIdSchema, type WhereSchema, type PanelIdSchema, type PanelSchema, type PanelIFrameSchema, type FlapPanelIdSchema, type attributeExplorerPanelSchema, type baseExplorerPanelSchema } from '../../hooks/useIFrameMessenger/schema';
|
|
7
|
+
import { type AnyPrimitive } from '@leav/utils';
|
|
8
|
+
import { type IRecordIdentity, type ITreeNodeWithRecord } from '../../types';
|
|
7
9
|
export declare const packetId = "__fromIframeMessenger";
|
|
8
10
|
export interface IEncodedMessage {
|
|
9
11
|
payload: string;
|
|
@@ -67,6 +69,9 @@ export type NavigateToPanelMessage = IMessageBase & {
|
|
|
67
69
|
flapRecordId?: string;
|
|
68
70
|
flapLibraryId?: LibraryId;
|
|
69
71
|
flapPanelId?: FlapPanelId;
|
|
72
|
+
queryParams?: Record<string, string> & {
|
|
73
|
+
formInitialValues?: Record<string, Array<AnyPrimitive | IRecordIdentity | ITreeNodeWithRecord>>;
|
|
74
|
+
};
|
|
70
75
|
};
|
|
71
76
|
};
|
|
72
77
|
export type ClosePanelMessage = IMessageBase & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/useIFrameMessenger/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/useIFrameMessenger/types.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,QAAQ,GAAG,uBAAuB,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 RefObject, type ComponentProps, type Key, type JSXElementConstructor} from 'react';\nimport type * as z from 'zod/v4';\nimport {type KitNotification} from 'aristid-ds';\nimport {type IKitConfirmDialog} from 'aristid-ds/dist/Kit/Feedback/Modal/types';\nimport {type ToastedAlertProps} from 'aristid-ds/dist/Kit/Feedback/Alert/types';\nimport {\n type LibraryIdSchema,\n type WhereSchema,\n type PanelIdSchema,\n type PanelSchema,\n type PanelIFrameSchema,\n type FlapPanelIdSchema,\n type attributeExplorerPanelSchema,\n type baseExplorerPanelSchema,\n} from '_ui/hooks/useIFrameMessenger/schema';\nimport {type AnyPrimitive} from '@leav/utils';\nimport {type IRecordIdentity, type ITreeNodeWithRecord} from '_ui/types';\n\nexport const packetId = '__fromIframeMessenger';\n\nexport interface IEncodedMessage {\n payload: string;\n [packetId]: boolean;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ComponentPropsWithKey<T extends keyof JSX.IntrinsicElements | JSXElementConstructor<any>> =\n ComponentProps<T> & {\n key?: Key;\n };\n\nexport interface IMessageBase {\n __frameId?: string;\n}\n\nexport type ModalConfirmMessage = IMessageBase & {\n type: 'modal-confirm';\n id: string;\n data: IKitConfirmDialog;\n overrides?: string[];\n};\n\nexport type AlertMessage = IMessageBase & {\n type: 'alert';\n id: string;\n data: ToastedAlertProps;\n overrides?: string[];\n};\n\nexport type NotificationMessage = IMessageBase & {\n type: 'notification';\n id: string;\n data: ComponentPropsWithKey<typeof KitNotification>;\n overrides?: string[];\n};\n\nexport type ChangeLanguageMessage = IMessageBase & {\n type: 'change-language';\n language: string;\n};\n\nexport type SimpleMessage = IMessageBase & {\n type: 'message';\n id: string;\n data: unknown;\n};\n\nexport type RegisterMessage = IMessageBase & {\n type: 'register';\n id: string;\n};\n\nexport type UnregisterMessage = IMessageBase & {\n type: 'unregister';\n id: string;\n};\n\nexport type Panel = z.infer<typeof PanelSchema>;\n\nexport type AttributeExplorerPanel = Panel &\n z.infer<typeof baseExplorerPanelSchema> &\n z.infer<typeof attributeExplorerPanelSchema>;\n\nexport type LibraryId = z.infer<typeof LibraryIdSchema>;\n\nexport type PanelId = z.infer<typeof PanelIdSchema>;\n\nexport type Where = z.infer<typeof WhereSchema>;\n\nexport type PanelIFrame = z.infer<typeof PanelIFrameSchema>;\n\ntype FlapPanelId = z.infer<typeof FlapPanelIdSchema>;\n\nexport type NavigateToPanelMessage = IMessageBase & {\n type: 'navigate-to-panel';\n data: {\n where: Where;\n libraryId: LibraryId;\n panelId?: PanelId;\n recordId?: string;\n flapRecordId?: string;\n flapLibraryId?: LibraryId;\n flapPanelId?: FlapPanelId;\n queryParams?: Record<string, string> & {\n formInitialValues?: Record<string, Array<AnyPrimitive | IRecordIdentity | ITreeNodeWithRecord>>;\n };\n };\n};\n\nexport type ClosePanelMessage = IMessageBase & {\n type: 'close-panel';\n data: {\n recordId: string;\n where: string;\n recordPanelId: string;\n };\n};\n\nexport type NavigateToIframeMessage = IMessageBase & {\n type: 'navigate-to-iframe';\n data: {\n panel: PanelIFrame;\n destination: {libraryId: LibraryId};\n where: Where;\n recordId: string;\n recordPanelId: string;\n };\n};\n\nexport type MessageToPanelMessage = IMessageBase & {\n type: 'message-to-panel';\n data: {\n type: string;\n target?: string;\n payload: unknown;\n };\n};\n\nexport type OpenFlapPanelMessage = IMessageBase & {\n type: 'open-flap-panel';\n data: {\n flapRecordId: string;\n flapLibraryId: LibraryId;\n flapPanelId: FlapPanelId;\n redirectUrl?: string;\n };\n};\n\nexport type CloseFlapPanelMessage = IMessageBase & {\n type: 'close-flap-panel';\n};\n\nexport type GetUrlMessage = IMessageBase & {\n type: 'get-url';\n id: string;\n data: {\n onGetUrl: (url: string) => void;\n flapParams?: {\n flapRecordId: string;\n flapLibraryId: LibraryId;\n flapPanelId: FlapPanelId;\n };\n panelParams?: {\n recordId: string;\n where: Where;\n recordPanelId: PanelId;\n };\n };\n overrides?: string[];\n};\n\nexport type GetPanelConfigMessage = IMessageBase & {\n type: 'get-panel-config';\n id: string;\n data: {\n panelId?: string;\n onGetPanelConfig: (data: PanelIFrame) => void;\n };\n overrides?: string[];\n};\n\nexport type MessageToParent =\n | ModalConfirmMessage\n | AlertMessage\n | NotificationMessage\n | SimpleMessage\n | RegisterMessage\n | UnregisterMessage\n | NavigateToPanelMessage\n | ClosePanelMessage\n | NavigateToIframeMessage\n | MessageToPanelMessage\n | OpenFlapPanelMessage\n | CloseFlapPanelMessage\n | GetUrlMessage\n | GetPanelConfigMessage;\n\nexport type MessageFromParent =\n | (IMessageBase & {\n type: 'on-call-callback';\n path: string;\n data: unknown;\n })\n | ChangeLanguageMessage;\n\nexport type Message = MessageToParent | MessageFromParent;\n\nexport type MessageHandler<T = Message> = (message: T, dispatch: MessageDispatcher<T>) => void;\nexport type MessageDispatcher<T = Message> = (message: T, frameId?: string) => void;\n\nexport type CallCbFunction = (path: string, data: unknown, frameId: string) => void;\n\nexport type CallbackFunction = (...args: never[]) => void;\nexport type Callbacks = Record<string, Record<string, CallbackFunction>>;\n\nexport type MessageToPanelMessageHandler = (data: MessageToPanelMessage['data']['payload']) => void;\nexport type AddMessageToPanelMessageHandler = (type: string, handler: MessageToPanelMessageHandler) => void;\n\nexport interface IUseIFrameMessengerOptions {\n ref?: RefObject<HTMLIFrameElement>;\n id?: string;\n handlers?: {\n onModalConfirm?: (\n data: ModalConfirmMessage['data'],\n id: string,\n dispatch: MessageDispatcher,\n callCb: CallCbFunction,\n ) => void;\n onAlert?: (data: AlertMessage['data'], id: string, dispatch: MessageDispatcher, callCb: CallCbFunction) => void;\n onNotification?: (\n data: NotificationMessage['data'],\n id: string,\n dispatch: MessageDispatcher,\n callCb: CallCbFunction,\n ) => void;\n onMessage?: (data: unknown, id: string, dispatch: MessageDispatcher, callCb: CallCbFunction) => void;\n onNavigateToPanel?: (data: NavigateToPanelMessage['data']) => void;\n onClosePanel?: (data: ClosePanelMessage['data']) => void;\n onNavigateToIframe?: (data: NavigateToIframeMessage['data']) => void;\n onOpenFlapPanel?: (data: OpenFlapPanelMessage['data']) => void;\n onGetUrl?: (data: GetUrlMessage['data']) => void;\n onGetPanelConfig?: (\n data: GetPanelConfigMessage['data'],\n id: string,\n dispatch: MessageDispatcher,\n callCb: CallCbFunction,\n ) => void;\n onCloseFlapPanel?: () => void;\n };\n}\n"]}
|
|
@@ -746,8 +746,8 @@
|
|
|
746
746
|
"copied": "Copied"
|
|
747
747
|
},
|
|
748
748
|
"massAction": {
|
|
749
|
-
"
|
|
750
|
-
"
|
|
749
|
+
"results_one": "result",
|
|
750
|
+
"results_other": "results",
|
|
751
751
|
"selectedItems_one": "{{count, number}} selected",
|
|
752
752
|
"selectedItems_other": "{{count, number}} selected",
|
|
753
753
|
"deactivate": "Deactivate",
|
|
@@ -746,8 +746,8 @@
|
|
|
746
746
|
"copied": "Copié"
|
|
747
747
|
},
|
|
748
748
|
"massAction": {
|
|
749
|
-
"
|
|
750
|
-
"
|
|
749
|
+
"results_one": "résultat",
|
|
750
|
+
"results_other": "résultats",
|
|
751
751
|
"selectedItems_one": "{{count, number}} sélectionné",
|
|
752
752
|
"selectedItems_other": "{{count, number}} sélectionnés",
|
|
753
753
|
"deactivate": "Supprimer",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leav/ui",
|
|
3
|
-
"version": "1.9.0-
|
|
3
|
+
"version": "1.9.0-d5f0656e",
|
|
4
4
|
"description": "Shared React components and hooks",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepublishOnly": "yarn build",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"@babel/preset-env": "7.29.0",
|
|
29
29
|
"@babel/preset-react": "7.28.5",
|
|
30
30
|
"@graphql-codegen/add": "5.0.3",
|
|
31
|
-
"@graphql-codegen/cli": "6.1.
|
|
32
|
-
"@graphql-codegen/typescript": "5.0.
|
|
33
|
-
"@graphql-codegen/typescript-operations": "5.0.
|
|
31
|
+
"@graphql-codegen/cli": "6.1.2",
|
|
32
|
+
"@graphql-codegen/typescript": "5.0.8",
|
|
33
|
+
"@graphql-codegen/typescript-operations": "5.0.8",
|
|
34
34
|
"@graphql-codegen/typescript-react-apollo": "4.4.0",
|
|
35
35
|
"@testing-library/jest-dom": "5.17.0",
|
|
36
36
|
"@testing-library/react": "14.3.1",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@types/react": "18.2.14",
|
|
45
45
|
"@types/react-dom": "18.2.6",
|
|
46
46
|
"@types/react-table": "7.7.20",
|
|
47
|
-
"aristid-ds": "15.0.0-
|
|
47
|
+
"aristid-ds": "15.0.0-6a7cc18",
|
|
48
48
|
"babel-jest": "29.7.0",
|
|
49
49
|
"graphql": "16.12.0",
|
|
50
50
|
"i18next": "22.5.1",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
64
|
"@apollo/client": ">=3.8.1",
|
|
65
|
-
"aristid-ds": "15.0.0-
|
|
65
|
+
"aristid-ds": "15.0.0-6a7cc18",
|
|
66
66
|
"i18next": ">=22.5.1",
|
|
67
67
|
"react": "^18.2.0",
|
|
68
68
|
"react-dom": "^18.2.0",
|
|
@@ -73,13 +73,9 @@
|
|
|
73
73
|
"@ant-design/icons": "5.6.1",
|
|
74
74
|
"@ckeditor/ckeditor5-build-inline": "39.0.2",
|
|
75
75
|
"@ckeditor/ckeditor5-react": "6.3.0",
|
|
76
|
-
"@dnd-kit/core": "6.1
|
|
76
|
+
"@dnd-kit/core": "6.3.1",
|
|
77
77
|
"@dnd-kit/sortable": "8.0.0",
|
|
78
78
|
"@dnd-kit/utilities": "3.2.2",
|
|
79
|
-
"@fortawesome/fontawesome-svg-core": "7.0.1",
|
|
80
|
-
"@fortawesome/free-regular-svg-icons": "7.0.1",
|
|
81
|
-
"@fortawesome/free-solid-svg-icons": "7.0.1",
|
|
82
|
-
"@fortawesome/react-fontawesome": "3.0.2",
|
|
83
79
|
"@leav/utils": "1.9.0",
|
|
84
80
|
"@uidotdev/usehooks": "2.4.1",
|
|
85
81
|
"dayjs": "^1.11.13",
|