@leav/ui 1.9.0-1 → 1.9.0-3dd39b32
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 +3 -11
- package/dist/_gqlTypes/index.js +3 -3
- 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/ExplorerToolbar.js +2 -1
- package/dist/components/Explorer/ExplorerToolbar.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 +27 -16
- package/dist/components/RecordEdition/EditRecordModal/EditRecordModal.js.map +1 -1
- package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js +28 -16
- 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/hooks/useIFrameMessenger/types.d.ts +5 -0
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/package.json +4 -4
|
@@ -5,8 +5,8 @@ import { gql } from '@apollo/client';
|
|
|
5
5
|
import { recordIdentityFragment } from '../../gqlFragments';
|
|
6
6
|
const createRecordMutation = gql `
|
|
7
7
|
${recordIdentityFragment}
|
|
8
|
-
mutation CREATE_RECORD($library: ID!, $data: CreateRecordDataInput) {
|
|
9
|
-
createRecord(library: $library, data: $data) {
|
|
8
|
+
mutation CREATE_RECORD($library: ID!, $skipActivate: Boolean, $data: CreateRecordDataInput) {
|
|
9
|
+
createRecord(library: $library, skipActivate: $skipActivate, data: $data) {
|
|
10
10
|
record {
|
|
11
11
|
...RecordIdentity
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRecordMutation.js","sourceRoot":"","sources":["../../../src/_queries/records/createRecordMutation.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AAEtE,OAAO,EAAC,GAAG,EAAC,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,oBAAoB,CAAC;AAE1D,MAAM,oBAAoB,GAAG,GAAG,CAAA;MAC1B,sBAAsB;;;;;;;;;;;;;;CAc3B,CAAC;AAEF,eAAe,oBAAoB,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\n\nimport {gql} from '@apollo/client';\nimport {recordIdentityFragment} from '../../gqlFragments';\n\nconst createRecordMutation = gql`\n ${recordIdentityFragment}\n mutation CREATE_RECORD($library: ID!, $data: CreateRecordDataInput) {\n createRecord(library: $library, data: $data) {\n record {\n ...RecordIdentity\n }\n valuesErrors {\n type\n attribute\n input\n message\n }\n }\n }\n`;\n\nexport default createRecordMutation;\n"]}
|
|
1
|
+
{"version":3,"file":"createRecordMutation.js","sourceRoot":"","sources":["../../../src/_queries/records/createRecordMutation.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AAEtE,OAAO,EAAC,GAAG,EAAC,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAC,sBAAsB,EAAC,MAAM,oBAAoB,CAAC;AAE1D,MAAM,oBAAoB,GAAG,GAAG,CAAA;MAC1B,sBAAsB;;;;;;;;;;;;;;CAc3B,CAAC;AAEF,eAAe,oBAAoB,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\n\nimport {gql} from '@apollo/client';\nimport {recordIdentityFragment} from '../../gqlFragments';\n\nconst createRecordMutation = gql`\n ${recordIdentityFragment}\n mutation CREATE_RECORD($library: ID!, $skipActivate: Boolean, $data: CreateRecordDataInput) {\n createRecord(library: $library, skipActivate: $skipActivate, data: $data) {\n record {\n ...RecordIdentity\n }\n valuesErrors {\n type\n attribute\n input\n message\n }\n }\n }\n`;\n\nexport default createRecordMutation;\n"]}
|
|
@@ -3,7 +3,8 @@ import { useSharedTranslation } from '../../hooks/useSharedTranslation';
|
|
|
3
3
|
import { ExplorerFiltersAndSorts } from './ExplorerFiltersAndSorts';
|
|
4
4
|
import styled from 'styled-components';
|
|
5
5
|
const ExplorerToolbarListStyled = styled.ul `
|
|
6
|
-
padding: calc(var(--general-spacing-xs) * 1px)
|
|
6
|
+
padding: calc(var(--general-spacing-xs) * 1px) calc(var(--general-spacing-xs) * 1px)
|
|
7
|
+
calc(var(--general-spacing-xs) * 1px) calc(var(--general-spacing-s) * 1px);
|
|
7
8
|
margin: 0;
|
|
8
9
|
margin-bottom: calc(var(--general-spacing-s) * 1px);
|
|
9
10
|
background: var(--general-colors-neutral-grey-100);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExplorerToolbar.js","sourceRoot":"","sources":["../../../src/components/Explorer/ExplorerToolbar.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAClE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,yBAAyB,GAAG,MAAM,CAAC,EAAE,CAAA
|
|
1
|
+
{"version":3,"file":"ExplorerToolbar.js","sourceRoot":"","sources":["../../../src/components/Explorer/ExplorerToolbar.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAClE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,yBAAyB,GAAG,MAAM,CAAC,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;CAwB1C,CAAC;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAKzB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAQvB,CAAC,EACF,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,QAAQ,GACX,EAAE,EAAE;IACD,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,OAAO,CACH,MAAC,yBAAyB,kBAAa,CAAC,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,aAC/F,KAAC,OAAO,cACH,CAAC,mBAAmB,IAAI,CACrB,KAAC,uBAAuB,IACpB,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,kBAAkB,EAAE,kBAAkB,GACxC,CACL,GACK,EACV,KAAC,OAAO,cAAE,QAAQ,GAAW,IACL,CAC/B,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 ReactNode, type FunctionComponent} from 'react';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {ExplorerFiltersAndSorts} from './ExplorerFiltersAndSorts';\nimport styled from 'styled-components';\n\nconst ExplorerToolbarListStyled = styled.ul`\n padding: calc(var(--general-spacing-xs) * 1px) calc(var(--general-spacing-xs) * 1px)\n calc(var(--general-spacing-xs) * 1px) calc(var(--general-spacing-s) * 1px);\n margin: 0;\n margin-bottom: calc(var(--general-spacing-s) * 1px);\n background: var(--general-colors-neutral-grey-100);\n border-radius: calc(var(--general-border-radius-s) * 1px);\n list-style: none;\n display: flex;\n overflow: auto;\n align-items: center;\n gap: calc(var(--general-spacing-xxs) * 1px);\n white-space: nowrap;\n min-height: 26px; // height of the filter chip\n justify-content: space-between;\n\n &.headless {\n margin-bottom: 0;\n }\n\n & > div:last-of-type {\n flex-shrink: 0;\n align-self: start;\n }\n`;\n\nconst Section = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: calc(var(--general-spacing-xxs) * 1px);\n`;\n\nexport const ExplorerToolbar: FunctionComponent<{\n isMassSelectionAll: boolean;\n showFilters: boolean;\n showSorts: boolean;\n headless: boolean;\n canRemoveFilters: boolean;\n selectAllButton: ReactNode | null;\n viewSettingsLoading: boolean;\n}> = ({\n isMassSelectionAll,\n showFilters,\n showSorts,\n headless,\n canRemoveFilters,\n selectAllButton,\n viewSettingsLoading,\n children,\n}) => {\n const {t} = useSharedTranslation();\n\n return (\n <ExplorerToolbarListStyled aria-label={t('explorer.toolbar')} className={headless ? 'headless' : ''}>\n <Section>\n {!viewSettingsLoading && (\n <ExplorerFiltersAndSorts\n selectAllButton={selectAllButton}\n showFilters={showFilters}\n showSorts={showSorts}\n canRemoveFilters={canRemoveFilters}\n isMassSelectionAll={isMassSelectionAll}\n />\n )}\n </Section>\n <Section>{children}</Section>\n </ExplorerToolbarListStyled>\n );\n};\n"]}
|
|
@@ -56,6 +56,10 @@ export type SubmittedValue = ISubmittedValueStandard | ISubmittedValueLink | ISu
|
|
|
56
56
|
export type SubmitValueFunc = (values: SubmittedValue[], version: IValueVersion) => Promise<ISubmitMultipleResult>;
|
|
57
57
|
export type DeleteValueFunc = (value: ValueInput | null, attribute: string) => Promise<IDeleteValueResult>;
|
|
58
58
|
export type CreateEmptyRecordFunc = (library: string) => Promise<ICreateRecordResult>;
|
|
59
|
+
export type CreateRecordFunc = (library: string, skipActivate?: boolean, data?: {
|
|
60
|
+
values: Array<Omit<IValueToSubmit, 'idValue'>>;
|
|
61
|
+
version: IValueVersion;
|
|
62
|
+
}) => Promise<ICreateRecordResult>;
|
|
59
63
|
export type DeleteMultipleValuesFunc = (attribute: string, values: RecordProperty[], version: IValueVersion) => Promise<ISubmitMultipleResult>;
|
|
60
64
|
export type MetadataSubmitValueFunc = (value: RecordProperty, attribute: RecordFormAttributeFragment, metadata: IKeyValue<AnyPrimitive>) => Promise<ISubmitMultipleResult>;
|
|
61
65
|
export interface ISubmittedValueBase {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordContent/_types.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,oCAAmB,CAAA;IACnB,gCAAe,CAAA;IACf,oCAAmB,CAAA;AACvB,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;
|
|
1
|
+
{"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordContent/_types.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,oCAAmB,CAAA;IACnB,gCAAe,CAAA;IACf,oCAAmB,CAAA;AACvB,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AA4GD,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IACzB,4CAAuB,CAAA;IACvB,wCAAmB,CAAA;AACvB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B","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} from 'react';\nimport {\n type AnyPrimitive,\n type FormFieldTypes,\n type FormUIElementTypes,\n type IRequiredFieldsSettings,\n type IKeyValue,\n type Override,\n} from '@leav/utils';\nimport {type RecordFormElementsValue} from '_ui/hooks/useGetRecordForm';\nimport {type IRecordIdentity, type IRecordIdentityWhoAmI} from '_ui/types/records';\nimport {type ITreeNodeWithRecord} from '_ui/types/trees';\nimport {type IValueVersion} from '_ui/types/values';\nimport {\n type RecordFormAttributeFragment,\n type SaveValueBatchMutation,\n type CreateRecordMutation,\n type RecordFormElementFragment,\n type RecordIdentityFragment,\n type ValueDetailsFragment,\n type ValueInput,\n} from '_ui/_gqlTypes';\nimport {type RecordProperty} from '_ui/_queries/records/getRecordPropertiesQuery';\nimport {type FormInstance} from 'antd/lib/form/Form';\nimport {type GetRecordColumnsValuesRecord} from '_ui/_queries/records/getRecordColumnsValues';\n\nexport interface IValueToSubmit {\n attribute: string;\n value: AnyPrimitive | null;\n idValue: string | null;\n metadata?: IKeyValue<AnyPrimitive>;\n}\n\nexport enum APICallStatus {\n SUCCESS = 'SUCCESS',\n ERROR = 'ERROR',\n PARTIAL = 'PARTIAL',\n}\n\nexport type FieldSubmitMultipleFunc = (\n record: IRecordIdentityWhoAmI,\n values: IValueToSubmit[],\n version?: IValueVersion,\n deleteEmpty?: boolean,\n) => Promise<ISubmitMultipleResult>;\n\nexport interface ISubmitMultipleResult {\n status: APICallStatus;\n error?: string;\n values?: ValueDetailsFragment[];\n errors?: SaveValueBatchMutation['saveValueBatch']['errors'];\n}\n\nexport interface IDeleteValueResult {\n status: APICallStatus;\n error?: string;\n}\n\nexport interface ICreateRecordResult {\n status: APICallStatus;\n record?: RecordIdentityFragment['whoAmI'];\n errors?: CreateRecordMutation['createRecord']['valuesErrors'];\n}\n\nexport interface IRecordEditionContext {\n elements: IFormElementsByContainer;\n readOnly: boolean;\n record: IRecordIdentityWhoAmI;\n}\n\nexport interface IFormElementsByContainer {\n [containerId: string]: Array<FormElement<unknown>>;\n}\n\nexport interface ISubmittedValueStandard extends ISubmittedValueBase {\n value: AnyPrimitive;\n}\n\nexport interface ISubmittedValueLink extends ISubmittedValueBase {\n value: IRecordIdentity;\n}\n\nexport interface ISubmittedValueTree extends ISubmittedValueBase {\n value: ITreeNodeWithRecord;\n}\n\nexport type SubmittedValue = ISubmittedValueStandard | ISubmittedValueLink | ISubmittedValueTree;\n\nexport type SubmitValueFunc = (values: SubmittedValue[], version: IValueVersion) => Promise<ISubmitMultipleResult>;\nexport type DeleteValueFunc = (value: ValueInput | null, attribute: string) => Promise<IDeleteValueResult>;\nexport type CreateEmptyRecordFunc = (library: string) => Promise<ICreateRecordResult>;\nexport type CreateRecordFunc = (\n library: string,\n skipActivate?: boolean,\n data?: {\n values: Array<Omit<IValueToSubmit, 'idValue'>>;\n version: IValueVersion;\n },\n) => Promise<ICreateRecordResult>;\nexport type DeleteMultipleValuesFunc = (\n attribute: string,\n values: RecordProperty[],\n version: IValueVersion,\n) => Promise<ISubmitMultipleResult>;\n\nexport type MetadataSubmitValueFunc = (\n value: RecordProperty,\n attribute: RecordFormAttributeFragment,\n metadata: IKeyValue<AnyPrimitive>,\n) => Promise<ISubmitMultipleResult>;\n\nexport interface ISubmittedValueBase {\n attribute: RecordFormAttributeFragment;\n idValue: string;\n metadata?: IKeyValue<AnyPrimitive>;\n}\n\nexport interface IFormElementProps<SettingsType, RecordFormElements = RecordFormElementsValue> {\n element: FormElement<SettingsType, RecordFormElements>;\n readonly?: boolean;\n onValueSubmit?: SubmitValueFunc;\n onValueDelete?: DeleteValueFunc;\n onDeleteMultipleValues?: DeleteMultipleValuesFunc;\n metadataEdit?: boolean;\n isFormCreationMode?: boolean;\n}\n\nexport type FormElement<SettingsType, RecordFormElements = RecordFormElementsValue> = Override<\n RecordFormElementFragment,\n {\n settings: SettingsType;\n uiElementType: FormUIElementTypes | FormFieldTypes;\n values: RecordFormElements[];\n }\n> & {\n uiElement: FunctionComponent<\n IFormElementProps<unknown> & {\n antdForm?: FormInstance;\n computedValues?: GetRecordColumnsValuesRecord;\n }\n >;\n};\n\nexport type StandardValueTypes = AnyPrimitive;\n\nexport enum VersionFieldScope {\n INHERITED = 'INHERITED', // inherited values\n CURRENT = 'CURRENT', // values of \"current\" version, eg. the version selected in the form\n}\n\nexport interface ICommonFieldsReducerState<ValuesType, RecordFormAttributeFragmentType = RecordFormAttributeFragment> {\n record: IRecordIdentityWhoAmI;\n formElement: FormElement<IRequiredFieldsSettings>;\n attribute: RecordFormAttributeFragmentType;\n isReadOnly: boolean;\n activeScope: VersionFieldScope;\n values: {\n [scope in VersionFieldScope]: {\n version: IValueVersion;\n values: ValuesType;\n } | null;\n };\n}\n\nexport interface IProvidedByAntFormItem<\n InputFieldProps extends {value?: unknown; onChange?: unknown},\n AntNotifier extends {onChange?: unknown} = InputFieldProps,\n> {\n value?: InputFieldProps['value'];\n onChange?: AntNotifier['onChange'];\n}\n"]}
|
|
@@ -3,10 +3,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
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, KitModal, KitSpace, KitTypography } from 'aristid-ds';
|
|
6
|
+
import { KitButton, KitLoader, KitModal, 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 { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
12
12
|
import { faXmark } from '@fortawesome/free-solid-svg-icons';
|
|
@@ -14,8 +14,8 @@ import { useGetSubmitButtons } from '../hooks/useGetSubmitButtons';
|
|
|
14
14
|
import { useForm } from 'antd/lib/form/Form';
|
|
15
15
|
import { useCreateCancelConfirm } from '../hooks/useCreateCancelConfirm';
|
|
16
16
|
import { EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS } from '../constants';
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
17
|
+
import { useGetInitialRecordValues } from '../EditRecordPage/getInitialRecordValues';
|
|
18
|
+
import { ErrorComponent } from '../EditRecordPage/ErrorComponent';
|
|
19
19
|
const MODAL_HEIGHT = '80vh';
|
|
20
20
|
const MODAL_WIDTH = '90vw';
|
|
21
21
|
const MODAL_MAX_WIDTH = '656px';
|
|
@@ -60,29 +60,40 @@ export const EditRecordModal = ({ className, open, record, creationFormId, editi
|
|
|
60
60
|
const { t } = useSharedTranslation();
|
|
61
61
|
const [antdForm] = useForm();
|
|
62
62
|
const [currentRecord, setCurrentRecord] = useState(record);
|
|
63
|
-
const
|
|
64
|
-
const
|
|
63
|
+
const clickedSubmitButton = useRef(null);
|
|
64
|
+
const [createRecord] = useCreateRecordMutation();
|
|
65
65
|
const [purgeRecordMutation] = usePurgeRecordMutation();
|
|
66
66
|
const formElementId = useRef(window.crypto.randomUUID());
|
|
67
67
|
const [isCreation, setIsCreation] = useState(!record);
|
|
68
|
+
const [isReady, setIsReady] = useState(!!record);
|
|
69
|
+
const [isError, setIsError] = useState(false);
|
|
68
70
|
const [formId, setFormId] = useState(isCreation ? (creationFormId ?? 'creation') : (editionFormId ?? 'edition'));
|
|
71
|
+
const values = useGetInitialRecordValues();
|
|
69
72
|
const closeButtonLabel = isCreation ? t('global.cancel') : t('global.close');
|
|
70
73
|
const modalTitle = currentRecord?.label && currentRecord.label.trim() ? currentRecord.label : t('record_edition.new_record');
|
|
71
74
|
useEffect(() => {
|
|
72
75
|
const createEmptyRecordFunction = async () => {
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
const { data } = await createRecord({
|
|
77
|
+
variables: {
|
|
78
|
+
library,
|
|
79
|
+
skipActivate: true,
|
|
80
|
+
data: { values },
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
const recordId = data?.createRecord.record?.id;
|
|
84
|
+
setCurrentRecord(data?.createRecord.record.whoAmI ?? null);
|
|
85
|
+
if (!recordId) {
|
|
86
|
+
setIsError(true);
|
|
87
|
+
return;
|
|
77
88
|
}
|
|
78
|
-
|
|
89
|
+
setIsReady(true);
|
|
79
90
|
};
|
|
80
91
|
if (open && isCreation && !currentRecord) {
|
|
81
92
|
createEmptyRecordFunction();
|
|
82
93
|
}
|
|
83
94
|
}, [open, currentRecord]);
|
|
84
95
|
const _handleClickSubmit = (button) => {
|
|
85
|
-
|
|
96
|
+
clickedSubmitButton.current = button;
|
|
86
97
|
};
|
|
87
98
|
const _purgeRecordOnCreationCancel = () => purgeRecordMutation({
|
|
88
99
|
errorPolicy: 'ignore',
|
|
@@ -101,13 +112,13 @@ export const EditRecordModal = ({ className, open, record, creationFormId, editi
|
|
|
101
112
|
const displayedSubmitButtons = useGetSubmitButtons(submitButtons, formElementId.current, isCreation, _handleClickSubmit);
|
|
102
113
|
const _handleCreate = (newRecord) => {
|
|
103
114
|
setCurrentRecord(newRecord);
|
|
104
|
-
if (onCreateAndEdit && clickedSubmitButton === 'createAndEdit') {
|
|
115
|
+
if (onCreateAndEdit && clickedSubmitButton.current === 'createAndEdit') {
|
|
105
116
|
setFormId(editionFormId ?? 'edition');
|
|
106
117
|
setIsCreation(false);
|
|
107
118
|
onCreateAndEdit(newRecord);
|
|
108
119
|
return;
|
|
109
120
|
}
|
|
110
|
-
if (onCreate && clickedSubmitButton === 'create') {
|
|
121
|
+
if (onCreate && clickedSubmitButton.current === 'create') {
|
|
111
122
|
onCreate(newRecord);
|
|
112
123
|
return;
|
|
113
124
|
}
|
|
@@ -123,9 +134,9 @@ export const EditRecordModal = ({ className, open, record, creationFormId, editi
|
|
|
123
134
|
}
|
|
124
135
|
return onClose();
|
|
125
136
|
};
|
|
126
|
-
return (
|
|
137
|
+
return (_jsxs(KitModalStyled, { appElement: document.getElementById('root'), className: className, height: autoHeight ? 'auto' : MODAL_HEIGHT, maxHeight: autoHeight ? MODAL_HEIGHT : undefined, width: MODAL_WIDTH, isOpen: open, close: _handleClose, title: _jsxs(KitSpace, { children: [_jsx(KitTypography.Title, { level: "h2", style: { margin: 0 }, children: modalTitle }), _jsx("div", { id: EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS })] }), footer: _jsx(KitSpace, { children: [
|
|
127
138
|
_jsx(KitButton, { "aria-label": closeButtonLabel, icon: _jsx(FontAwesomeIcon, { icon: faXmark }), onClick: _handleClose, children: closeButtonLabel }, "close"),
|
|
128
139
|
...displayedSubmitButtons,
|
|
129
|
-
] }), closeIcon: _jsx(FontAwesomeIcon, { icon: faXmark }), showCloseIcon: true, destroyOnClose: true, children: _jsx(EditRecord, { antdForm: antdForm, isFormCreationMode: isCreation, formId: formId, formElementId: formElementId.current, record: currentRecord, library: library, onCreate: _handleCreate, valuesVersion: valuesVersion, showSidebar: showSidebar, enableSidebar: enableSidebar, withInfoButton: withInfoButton }) }));
|
|
140
|
+
] }), closeIcon: _jsx(FontAwesomeIcon, { icon: faXmark }), showCloseIcon: true, destroyOnClose: true, children: [isError && _jsx(ErrorComponent, {}), !isReady && _jsx(KitLoader, {}), isReady && (_jsx(EditRecord, { antdForm: antdForm, isFormCreationMode: isCreation, formId: formId, formElementId: formElementId.current, record: currentRecord, library: library, onCreate: _handleCreate, valuesVersion: valuesVersion, showSidebar: showSidebar, enableSidebar: enableSidebar, withInfoButton: withInfoButton }))] }));
|
|
130
141
|
};
|
|
131
142
|
//# sourceMappingURL=EditRecordModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditRecordModal.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordModal/EditRecordModal.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent, useEffect, useRef, useState} from 'react';\nimport {KitButton, KitModal, 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 {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faXmark} from '@fortawesome/free-solid-svg-icons';\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 useExecuteCreateEmptyRecordMutation from '../EditRecordContent/hooks/useCreateEmptyRecordMutation';\nimport {APICallStatus} from '../EditRecordContent/_types';\n\nexport interface IEditRecordModalProps {\n className?: string;\n open: boolean;\n record: RecordIdentityFragment['whoAmI'] | null;\n creationFormId?: string;\n editionFormId?: string;\n library: string;\n onClose: () => void;\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 withInfoButton?: boolean;\n valuesVersion?: IValueVersion;\n showSidebar?: boolean;\n enableSidebar?: boolean;\n autoHeight?: boolean;\n}\n\nconst MODAL_HEIGHT = '80vh';\nconst MODAL_WIDTH = '90vw';\nconst MODAL_MAX_WIDTH = '656px';\nconst MODAL_WITH_SIDEBAR_MAX_WIDTH = '900px';\n\nconst KitModalStyled = styled(KitModal)`\n && {\n & > div {\n max-width: ${MODAL_MAX_WIDTH};\n\n &:has(#edit_record_sidebar) {\n max-width: ${MODAL_WITH_SIDEBAR_MAX_WIDTH};\n }\n\n .kit-modal-header {\n border-bottom: 1px solid var(--general-utilities-border);\n\n .kit-modal-title {\n padding-right: calc(var(--general-spacing-xs) * 1px);\n\n .ant-space {\n width: 100%;\n justify-content: space-between;\n }\n }\n }\n\n .kit-modal-content-wrapper {\n padding: 0;\n\n .kit-modal-content {\n height: 100%;\n\n & > div {\n height: 100%;\n }\n }\n }\n }\n }\n`;\n\nexport const EditRecordModal: FunctionComponent<IEditRecordModalProps> = ({\n className,\n open,\n record,\n creationFormId,\n editionFormId,\n library,\n onClose,\n onCreate,\n onCreateAndEdit,\n valuesVersion,\n showSidebar,\n enableSidebar,\n submitButtons = ['create'],\n withInfoButton = true,\n autoHeight = false,\n}) => {\n const {t} = useSharedTranslation();\n const [antdForm] = useForm();\n const [currentRecord, setCurrentRecord] = useState<RecordIdentityFragment['whoAmI'] | null>(record);\n const [clickedSubmitButton, setClickedSubmitButton] = useState<SubmitButtonsName | null>(null);\n const {createEmptyRecord} = useExecuteCreateEmptyRecordMutation();\n const [purgeRecordMutation] = usePurgeRecordMutation();\n\n const formElementId = useRef(window.crypto.randomUUID());\n const [isCreation, setIsCreation] = useState(!record);\n const [formId, setFormId] = useState<string>(\n isCreation ? (creationFormId ?? 'creation') : (editionFormId ?? 'edition'),\n );\n const closeButtonLabel = isCreation ? t('global.cancel') : t('global.close');\n const modalTitle =\n currentRecord?.label && currentRecord.label.trim() ? currentRecord.label : t('record_edition.new_record');\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 (open && isCreation && !currentRecord) {\n createEmptyRecordFunction();\n }\n }, [open, currentRecord]);\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\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 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 return (\n <KitModalStyled\n appElement={document.getElementById('root')}\n className={className}\n height={autoHeight ? 'auto' : MODAL_HEIGHT}\n maxHeight={autoHeight ? MODAL_HEIGHT : undefined}\n width={MODAL_WIDTH}\n isOpen={open}\n close={_handleClose}\n title={\n <KitSpace>\n <KitTypography.Title level=\"h2\" style={{margin: 0}}>\n {modalTitle}\n </KitTypography.Title>\n <div id={EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS} />\n </KitSpace>\n }\n footer={\n <KitSpace>\n {[\n <KitButton\n aria-label={closeButtonLabel}\n key=\"close\"\n icon={<FontAwesomeIcon icon={faXmark} />}\n onClick={_handleClose}\n >\n {closeButtonLabel}\n </KitButton>,\n ...displayedSubmitButtons,\n ]}\n </KitSpace>\n }\n closeIcon={<FontAwesomeIcon icon={faXmark} />}\n showCloseIcon\n destroyOnClose\n >\n <EditRecord\n antdForm={antdForm}\n isFormCreationMode={isCreation}\n formId={formId}\n formElementId={formElementId.current}\n record={currentRecord}\n library={library}\n onCreate={_handleCreate}\n valuesVersion={valuesVersion}\n showSidebar={showSidebar}\n enableSidebar={enableSidebar}\n withInfoButton={withInfoButton}\n />\n </KitModalStyled>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"EditRecordModal.js","sourceRoot":"","sources":["../../../../src/components/RecordEdition/EditRecordModal/EditRecordModal.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent, useEffect, useRef, useState} from 'react';\nimport {KitButton, KitLoader, KitModal, 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 {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faXmark} from '@fortawesome/free-solid-svg-icons';\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 {useGetInitialRecordValues} from '../EditRecordPage/getInitialRecordValues';\nimport {ErrorComponent} from '../EditRecordPage/ErrorComponent';\n\nexport interface IEditRecordModalProps {\n className?: string;\n open: boolean;\n record: RecordIdentityFragment['whoAmI'] | null;\n creationFormId?: string;\n editionFormId?: string;\n library: string;\n onClose: () => void;\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 withInfoButton?: boolean;\n valuesVersion?: IValueVersion;\n showSidebar?: boolean;\n enableSidebar?: boolean;\n autoHeight?: boolean;\n}\n\nconst MODAL_HEIGHT = '80vh';\nconst MODAL_WIDTH = '90vw';\nconst MODAL_MAX_WIDTH = '656px';\nconst MODAL_WITH_SIDEBAR_MAX_WIDTH = '900px';\n\nconst KitModalStyled = styled(KitModal)`\n && {\n & > div {\n max-width: ${MODAL_MAX_WIDTH};\n\n &:has(#edit_record_sidebar) {\n max-width: ${MODAL_WITH_SIDEBAR_MAX_WIDTH};\n }\n\n .kit-modal-header {\n border-bottom: 1px solid var(--general-utilities-border);\n\n .kit-modal-title {\n padding-right: calc(var(--general-spacing-xs) * 1px);\n\n .ant-space {\n width: 100%;\n justify-content: space-between;\n }\n }\n }\n\n .kit-modal-content-wrapper {\n padding: 0;\n\n .kit-modal-content {\n height: 100%;\n\n & > div {\n height: 100%;\n }\n }\n }\n }\n }\n`;\n\nexport const EditRecordModal: FunctionComponent<IEditRecordModalProps> = ({\n className,\n open,\n record,\n creationFormId,\n editionFormId,\n library,\n onClose,\n onCreate,\n onCreateAndEdit,\n valuesVersion,\n showSidebar,\n enableSidebar,\n submitButtons = ['create'],\n withInfoButton = true,\n autoHeight = false,\n}) => {\n const {t} = useSharedTranslation();\n const [antdForm] = useForm();\n const [currentRecord, setCurrentRecord] = useState<RecordIdentityFragment['whoAmI'] | null>(record);\n const clickedSubmitButton = useRef<SubmitButtonsName | null>(null);\n const [createRecord] = useCreateRecordMutation();\n const [purgeRecordMutation] = usePurgeRecordMutation();\n\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 [formId, setFormId] = useState<string>(\n isCreation ? (creationFormId ?? 'creation') : (editionFormId ?? 'edition'),\n );\n const values = useGetInitialRecordValues();\n const closeButtonLabel = isCreation ? t('global.cancel') : t('global.close');\n const modalTitle =\n currentRecord?.label && currentRecord.label.trim() ? currentRecord.label : t('record_edition.new_record');\n\n useEffect(() => {\n const createEmptyRecordFunction = async () => {\n const {data} = await createRecord({\n variables: {\n library,\n skipActivate: true,\n data: {values},\n },\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 (open && isCreation && !currentRecord) {\n createEmptyRecordFunction();\n }\n }, [open, currentRecord]);\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 displayedSubmitButtons = useGetSubmitButtons(\n submitButtons,\n formElementId.current,\n isCreation,\n _handleClickSubmit,\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 const _handleClose = () => {\n if (isCreation) {\n if (antdForm.isFieldsTouched()) {\n return showCancelConfirm();\n } else {\n _purgeRecordOnCreationCancel();\n }\n }\n return onClose();\n };\n\n return (\n <KitModalStyled\n appElement={document.getElementById('root')}\n className={className}\n height={autoHeight ? 'auto' : MODAL_HEIGHT}\n maxHeight={autoHeight ? MODAL_HEIGHT : undefined}\n width={MODAL_WIDTH}\n isOpen={open}\n close={_handleClose}\n title={\n <KitSpace>\n <KitTypography.Title level=\"h2\" style={{margin: 0}}>\n {modalTitle}\n </KitTypography.Title>\n <div id={EDIT_RECORD_MODAL_HEADER_CONTAINER_BUTTONS} />\n </KitSpace>\n }\n footer={\n <KitSpace>\n {[\n <KitButton\n aria-label={closeButtonLabel}\n key=\"close\"\n icon={<FontAwesomeIcon icon={faXmark} />}\n onClick={_handleClose}\n >\n {closeButtonLabel}\n </KitButton>,\n ...displayedSubmitButtons,\n ]}\n </KitSpace>\n }\n closeIcon={<FontAwesomeIcon icon={faXmark} />}\n showCloseIcon\n destroyOnClose\n >\n {isError && <ErrorComponent />}\n {!isReady && <KitLoader />}\n {isReady && (\n <EditRecord\n antdForm={antdForm}\n isFormCreationMode={isCreation}\n formId={formId}\n formElementId={formElementId.current}\n record={currentRecord}\n library={library}\n onCreate={_handleCreate}\n valuesVersion={valuesVersion}\n showSidebar={showSidebar}\n enableSidebar={enableSidebar}\n withInfoButton={withInfoButton}\n />\n )}\n </KitModalStyled>\n );\n};\n"]}
|
|
@@ -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;
|
|
@@ -32,13 +33,16 @@ const emptyFunction = () => null;
|
|
|
32
33
|
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
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();
|
|
45
|
+
const values = useGetInitialRecordValues();
|
|
42
46
|
useEffect(() => {
|
|
43
47
|
if (isSubmitButtonsPortal) {
|
|
44
48
|
const formCreateButtonsElement = document.getElementById(SUBMIT_BUTTONS_PORTAL);
|
|
@@ -49,19 +53,27 @@ export const EditRecordPage = ({ record, library, creationFormId, editionFormId,
|
|
|
49
53
|
}, []);
|
|
50
54
|
useEffect(() => {
|
|
51
55
|
const createEmptyRecordFunction = async () => {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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',
|
|
@@ -93,19 +105,19 @@ export const EditRecordPage = ({ record, library, creationFormId, editionFormId,
|
|
|
93
105
|
const closeButtonLabel = isCreation ? t('global.cancel') : t('global.close');
|
|
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, 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, 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;\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 = 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 const values = useGetInitialRecordValues();\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 {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 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.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 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"]}
|
|
@@ -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"]}
|