@strapi/content-manager 5.51.0 → 5.51.2
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/admin/components/ConfigurationForm/Form.js +14 -16
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.mjs +14 -16
- package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +1 -1
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +1 -1
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/history/components/VersionsList.js +1 -1
- package/dist/admin/history/components/VersionsList.js.map +1 -1
- package/dist/admin/history/components/VersionsList.mjs +1 -1
- package/dist/admin/history/components/VersionsList.mjs.map +1 -1
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/layout.js +77 -7
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +58 -8
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +109 -81
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +108 -76
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +102 -7
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +84 -8
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +14 -5
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +14 -5
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +17 -16
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +17 -13
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +7 -0
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +7 -0
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +3 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +4 -0
- package/dist/admin/src/utils/previewImage.d.ts +3 -0
- package/dist/admin/translations/en.json.js +1 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +1 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/objects.js +3 -1
- package/dist/admin/utils/objects.js.map +1 -1
- package/dist/admin/utils/objects.mjs +3 -1
- package/dist/admin/utils/objects.mjs.map +1 -1
- package/dist/admin/utils/previewImage.js +14 -0
- package/dist/admin/utils/previewImage.js.map +1 -0
- package/dist/admin/utils/previewImage.mjs +12 -0
- package/dist/admin/utils/previewImage.mjs.map +1 -0
- package/dist/admin/utils/validation.js +2 -2
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +2 -2
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/utils/clone.js +1 -5
- package/dist/server/controllers/utils/clone.js.map +1 -1
- package/dist/server/controllers/utils/clone.mjs +2 -2
- package/dist/server/controllers/utils/clone.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +1 -1
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs +1 -1
- package/dist/server/controllers/validation/index.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +24 -7
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +24 -7
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/services/document-manager.js +1 -1
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +1 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +24 -2
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +24 -2
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/utils/draft.js +19 -3
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +1 -1
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +22 -6
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +1 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/components.d.ts +1 -1
- package/dist/shared/contracts/components.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +2 -2
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -46,7 +46,8 @@ function reducer(state, action) {
|
|
|
46
46
|
...state,
|
|
47
47
|
confirmDialogIntent: action.payload.document,
|
|
48
48
|
fieldToConnect: action.payload.fieldToConnect,
|
|
49
|
-
fieldToConnectUID: action.payload.fieldToConnectUID
|
|
49
|
+
fieldToConnectUID: action.payload.fieldToConnectUID,
|
|
50
|
+
getParentFormValues: action.payload.getParentFormValues
|
|
50
51
|
};
|
|
51
52
|
}
|
|
52
53
|
const lastItemDocumentHistory = state.documentHistory.at(-1);
|
|
@@ -63,7 +64,8 @@ function reducer(state, action) {
|
|
|
63
64
|
confirmDialogIntent: null,
|
|
64
65
|
isModalOpen: true,
|
|
65
66
|
fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,
|
|
66
|
-
fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID
|
|
67
|
+
fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID,
|
|
68
|
+
getParentFormValues: hasToResetDocumentHistory ? undefined : action.payload.getParentFormValues
|
|
67
69
|
};
|
|
68
70
|
case 'GO_BACK':
|
|
69
71
|
if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
|
|
@@ -104,7 +106,8 @@ function reducer(state, action) {
|
|
|
104
106
|
confirmDialogIntent: null,
|
|
105
107
|
isModalOpen: true,
|
|
106
108
|
fieldToConnect: undefined,
|
|
107
|
-
fieldToConnectUID: undefined
|
|
109
|
+
fieldToConnectUID: undefined,
|
|
110
|
+
getParentFormValues: undefined
|
|
108
111
|
};
|
|
109
112
|
case 'CANCEL_CONFIRM_DIALOG':
|
|
110
113
|
return {
|
|
@@ -123,7 +126,10 @@ function reducer(state, action) {
|
|
|
123
126
|
documentHistory: [],
|
|
124
127
|
confirmDialogIntent: null,
|
|
125
128
|
hasUnsavedChanges: false,
|
|
126
|
-
isModalOpen: false
|
|
129
|
+
isModalOpen: false,
|
|
130
|
+
fieldToConnect: undefined,
|
|
131
|
+
fieldToConnectUID: undefined,
|
|
132
|
+
getParentFormValues: undefined
|
|
127
133
|
};
|
|
128
134
|
case 'SET_HAS_UNSAVED_CHANGES':
|
|
129
135
|
return {
|
|
@@ -418,7 +424,10 @@ const RelationModal = ({ children })=>{
|
|
|
418
424
|
type: 'GO_TO_RELATION',
|
|
419
425
|
payload: {
|
|
420
426
|
document: state.confirmDialogIntent,
|
|
421
|
-
shouldBypassConfirmation: true
|
|
427
|
+
shouldBypassConfirmation: true,
|
|
428
|
+
fieldToConnect: state.fieldToConnect,
|
|
429
|
+
fieldToConnectUID: state.fieldToConnectUID,
|
|
430
|
+
getParentFormValues: state.getParentFormValues
|
|
422
431
|
}
|
|
423
432
|
});
|
|
424
433
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelationModal.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n DescriptionComponentRenderer,\n Form as FormContext,\n useRBAC,\n useStrapiApp,\n createContext,\n useForm,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Dialog,\n EmptyStateLayout,\n Flex,\n IconButton,\n Loader,\n Modal,\n Typography,\n TextButton,\n} from '@strapi/design-system';\nimport { ArrowLeft, ArrowsOut, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link as RouterLink, useLocation, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../../../constants/collections';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { buildValidParams } from '../../../../../exports';\nimport { DocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDoc, useDocument, type UseDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta } from '../../../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { useLazyGetDocumentQuery } from '../../../../../services/documents';\nimport { createYupSchema } from '../../../../../utils/validation';\nimport { DocumentActionButton } from '../../../components/DocumentActions';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { FormLayout } from '../../FormLayout';\nimport { ComponentProvider } from '../ComponentContext';\n\nimport type { RelationOpenMode } from '../../../../../../../shared/contracts/content-types';\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../../../../content-manager';\n\nexport function getCollectionType(url: string) {\n const regex = new RegExp(`(${COLLECTION_TYPES}|${SINGLE_TYPES})`);\n const match = url.match(regex);\n return match ? match[1] : undefined;\n}\n\nconst StyledModalContent = styled(Modal.Content)`\n width: 90%;\n max-width: 100%;\n height: 90%;\n max-height: 100%;\n`;\n\nconst getFullPageUrl = (currentDocumentMeta: DocumentMeta): string => {\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const queryParams = currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : '';\n\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationModalRenderer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n documentHistory: DocumentMeta[];\n confirmDialogIntent:\n | null // No dialog\n | 'close' // Close the modal\n | 'back' // Go back one document in the modal's history\n | 'navigate' // Open the document in the edit view instead of in the modal\n | DocumentMeta; // Open a specific document in the modal\n isModalOpen: boolean;\n hasUnsavedChanges: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n}\n\ntype Action =\n | {\n type: 'GO_TO_RELATION';\n payload: {\n document: DocumentMeta;\n shouldBypassConfirmation: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n };\n }\n | {\n type: 'GO_BACK';\n payload: { shouldBypassConfirmation: boolean };\n }\n | {\n type: 'GO_FULL_PAGE';\n }\n | {\n type: 'GO_TO_CREATED_RELATION';\n payload: {\n document: DocumentMeta;\n shouldBypassConfirmation: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n };\n }\n | {\n type: 'CANCEL_CONFIRM_DIALOG';\n }\n | {\n type: 'CLOSE_MODAL';\n payload: { shouldBypassConfirmation: boolean };\n }\n | {\n type: 'SET_HAS_UNSAVED_CHANGES';\n payload: { hasUnsavedChanges: boolean };\n };\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'GO_TO_RELATION':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return {\n ...state,\n confirmDialogIntent: action.payload.document,\n fieldToConnect: action.payload.fieldToConnect,\n fieldToConnectUID: action.payload.fieldToConnectUID,\n };\n }\n\n const lastItemDocumentHistory = state.documentHistory.at(-1);\n const hasToResetDocumentHistory =\n lastItemDocumentHistory && !lastItemDocumentHistory.documentId;\n return {\n ...state,\n // Reset document history if the last item has documentId undefined\n documentHistory: hasToResetDocumentHistory\n ? [action.payload.document]\n : [...state.documentHistory, action.payload.document],\n confirmDialogIntent: null,\n isModalOpen: true,\n fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,\n fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID,\n };\n case 'GO_BACK':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return { ...state, confirmDialogIntent: 'back' };\n }\n\n return {\n ...state,\n documentHistory: state.documentHistory.slice(0, -1),\n confirmDialogIntent: null,\n };\n case 'GO_FULL_PAGE':\n if (state.hasUnsavedChanges) {\n return { ...state, confirmDialogIntent: 'navigate' };\n }\n\n return {\n ...state,\n documentHistory: [],\n hasUnsavedChanges: false,\n isModalOpen: false,\n confirmDialogIntent: null,\n };\n case 'GO_TO_CREATED_RELATION':\n return {\n ...state,\n // Reset document history if the last item has documentId undefined\n documentHistory: state.documentHistory\n ? [...state.documentHistory.slice(0, -1), action.payload.document]\n : [action.payload.document],\n confirmDialogIntent: null,\n isModalOpen: true,\n fieldToConnect: undefined,\n fieldToConnectUID: undefined,\n };\n case 'CANCEL_CONFIRM_DIALOG':\n return {\n ...state,\n confirmDialogIntent: null,\n };\n case 'CLOSE_MODAL':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return { ...state, confirmDialogIntent: 'close' };\n }\n\n return {\n ...state,\n documentHistory: [],\n confirmDialogIntent: null,\n hasUnsavedChanges: false,\n isModalOpen: false,\n };\n case 'SET_HAS_UNSAVED_CHANGES':\n return {\n ...state,\n hasUnsavedChanges: action.payload.hasUnsavedChanges,\n };\n default:\n return state;\n }\n}\n\ninterface RelationModalContextValue {\n state: State;\n dispatch: React.Dispatch<Action>;\n rootDocumentMeta: DocumentMeta;\n currentDocumentMeta: DocumentMeta;\n currentDocument: ReturnType<UseDocument>;\n onPreview?: () => void;\n isCreating: boolean;\n relationOpenMode: RelationOpenMode;\n}\n\nconst [RelationModalProvider, useRelationModal] =\n createContext<RelationModalContextValue>('RelationModal');\n\nfunction isRenderProp(\n children: RelationModalRendererProps['children']\n): children is (props: {\n dispatch: (action: Action) => void;\n relationOpenMode: RelationOpenMode;\n}) => React.ReactNode {\n return typeof children === 'function';\n}\n\ntype RelationModalRendererProps =\n // Is editing\n | {\n relation: DocumentMeta;\n children: React.ReactNode;\n }\n // Is creating\n | {\n relation?: never;\n children: (props: {\n dispatch: (action: Action) => void;\n relationOpenMode: RelationOpenMode;\n }) => React.ReactNode;\n };\n\nconst RootRelationRenderer = (props: RelationModalRendererProps) => {\n const { children } = props;\n\n const [state, dispatch] = React.useReducer(reducer, {\n documentHistory: [],\n confirmDialogIntent: null,\n isModalOpen: false,\n hasUnsavedChanges: false,\n fieldToConnect: undefined,\n });\n\n const rootDocument = useDoc();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query ?? {}), [query]);\n\n const rootDocumentMeta: DocumentMeta = {\n documentId: rootDocument.document?.documentId || '',\n model: rootDocument.model,\n collectionType: rootDocument.collectionType,\n params,\n };\n\n // Get the relationOpenMode setting from the current document's layout configuration\n const documentLayoutResponse = useDocumentLayout(rootDocument.model);\n const relationOpenMode: RelationOpenMode =\n documentLayoutResponse.edit?.settings?.relationOpenMode ?? 'modal';\n\n const currentDocumentMeta = state.documentHistory.at(-1) ?? rootDocumentMeta;\n const currentDocument = useDocument(currentDocumentMeta);\n // TODO: check if we can remove the single type check\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const isCreating = !currentDocumentMeta.documentId && !isSingleType;\n /**\n * There is no parent relation, so the relation modal doesn't exist. Create it and set up all the\n * pieces that will be used by potential child relations: the context, header, form, and footer.\n */\n return (\n <RelationModalProvider\n state={state}\n dispatch={dispatch}\n rootDocumentMeta={rootDocumentMeta}\n currentDocumentMeta={currentDocumentMeta}\n currentDocument={currentDocument}\n isCreating={isCreating}\n relationOpenMode={relationOpenMode}\n >\n <RelationModal>\n {isRenderProp(children)\n ? children({ dispatch, relationOpenMode })\n : props.relation && (\n <RelationModalTrigger relation={props.relation}>{children}</RelationModalTrigger>\n )}\n </RelationModal>\n </RelationModalProvider>\n );\n};\n\nconst NestedRelationRenderer = (props: RelationModalRendererProps) => {\n const { children } = props;\n const dispatch = useRelationModal('NestedRelation', (state) => state.dispatch);\n const relationOpenMode = useRelationModal('NestedRelation', (state) => state.relationOpenMode);\n\n return isRenderProp(children)\n ? children({ dispatch, relationOpenMode })\n : props.relation && (\n <RelationModalTrigger relation={props.relation}>{children}</RelationModalTrigger>\n ); /* This is the trigger that will be rendered in the parent relation */\n};\n\n/**\n * Component responsible for rendering its children wrapped in a modal, form and context if needed\n */\nconst RelationModalRenderer = (props: RelationModalRendererProps) => {\n // We're in a nested relation if the relation modal context is not undefined\n const isNested = useRelationModal('RelationContextWrapper', (state) => state != undefined, false);\n\n return isNested ? <NestedRelationRenderer {...props} /> : <RootRelationRenderer {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationModal\n * -----------------------------------------------------------------------------------------------*/\nconst generateCreateUrl = (currentDocumentMeta: DocumentMeta) => {\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${\n currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : ''\n }`;\n};\n\nconst RelationModal = ({ children }: { children: React.ReactNode }) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const state = useRelationModal('RelationModalForm', (state) => state.state);\n const dispatch = useRelationModal('RelationModalForm', (state) => state.dispatch);\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const currentDocument = useRelationModal('RelationModalForm', (state) => state.currentDocument);\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n\n /*\n * We must wrap the modal window with Component Provider with reset values\n * to avoid inheriting id and uid from the root document and having weird\n * behaviors with simple relationships..\n */\n return (\n <ComponentProvider id={undefined} level={-1} uid={undefined} type={undefined}>\n <Modal.Root\n open={state.isModalOpen}\n onOpenChange={(open) => {\n if (!open) {\n dispatch({\n type: 'CLOSE_MODAL',\n payload: { shouldBypassConfirmation: false },\n });\n }\n }}\n >\n {children}\n <StyledModalContent>\n <Modal.Header gap={2}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Flex gap={2}>\n <IconButton\n withTooltip={false}\n label={formatMessage({ id: 'global.back', defaultMessage: 'Back' })}\n variant=\"ghost\"\n disabled={state.documentHistory.length < 2}\n onClick={() => {\n dispatch({\n type: 'GO_BACK',\n payload: { shouldBypassConfirmation: false },\n });\n }}\n marginRight={1}\n >\n <ArrowLeft />\n </IconButton>\n <Typography tag=\"span\" fontWeight={600}>\n {isCreating\n ? formatMessage({\n id: 'content-manager.relation.create',\n defaultMessage: 'Create a relation',\n })\n : formatMessage({\n id: 'content-manager.components.RelationInputModal.modal-title',\n defaultMessage: 'Edit a relation',\n })}\n </Typography>\n </Flex>\n <IconButton\n onClick={() => {\n dispatch({\n type: 'GO_FULL_PAGE',\n });\n if (!state.hasUnsavedChanges) {\n if (isCreating) {\n navigate(generateCreateUrl(currentDocumentMeta));\n } else {\n navigate(getFullPageUrl(currentDocumentMeta));\n }\n }\n }}\n variant=\"tertiary\"\n label={formatMessage({\n id: 'content-manager.components.RelationInputModal.button-fullpage',\n defaultMessage: 'Go to entry',\n })}\n >\n <ArrowsOut />\n </IconButton>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <FormContext\n method={isCreating ? 'POST' : 'PUT'}\n initialValues={currentDocument.getInitialFormValues(isCreating)}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n currentDocument.schema?.attributes,\n currentDocument.components,\n {\n status: currentDocument.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n <RelationModalBody />\n </FormContext>\n </Modal.Body>\n </StyledModalContent>\n </Modal.Root>\n </ComponentProvider>\n );\n};\n/**\n * All the main content (not header and footer) of the relation modal, plus the confirmation dialog.\n * Will be wrapped in a Modal.Body by the RelationModal component.\n * Cannot be moved directly inside RelationModal because it needs access to the context via hooks.\n */\nconst RelationModalBody = () => {\n const navigate = useNavigate();\n const { pathname, search } = useLocation();\n const { formatMessage } = useIntl();\n\n const [triggerRefetchDocument] = useLazyGetDocumentQuery();\n\n const state = useRelationModal('RelationModalForm', (state) => state.state);\n const dispatch = useRelationModal('RelationModalForm', (state) => state.dispatch);\n const rootDocumentMeta = useRelationModal('RelationModalForm', (state) => state.rootDocumentMeta);\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n\n /**\n * One-way sync the modified state from the form to the modal state.\n * It is needed because we need to consume state from the form context in order to lift it up\n * into the modal context. It is not possible otherwise because the modal needs the form state,\n * but it must be a parent of the form.\n */\n const modified = useForm('FormWatcher', (state) => state.modified);\n const isSubmitting = useForm('FormWatcher', (state) => state.isSubmitting);\n const hasUnsavedChanges = modified && !isSubmitting;\n React.useEffect(() => {\n dispatch({ type: 'SET_HAS_UNSAVED_CHANGES', payload: { hasUnsavedChanges } });\n }, [hasUnsavedChanges, dispatch]);\n\n const handleCloseModal = (shouldBypassConfirmation: boolean) => {\n dispatch({ type: 'CLOSE_MODAL', payload: { shouldBypassConfirmation } });\n\n if (shouldBypassConfirmation || !state.hasUnsavedChanges) {\n // TODO: check if we can avoid this by relying on RTK invalidatesTags.\n // If so we can delete this function and dispatch the events directly\n triggerRefetchDocument(\n // TODO check if params should be removed (as they were before)\n rootDocumentMeta,\n // Favor the cache\n true\n );\n }\n };\n\n const handleRedirection = () => {\n const editViewUrl = `${pathname}${search}`;\n const fullPageUrl = getFullPageUrl(currentDocumentMeta);\n const isRootDocumentUrl = editViewUrl.includes(fullPageUrl);\n\n if (isRootDocumentUrl) {\n handleCloseModal(true);\n } else {\n if (isCreating) {\n navigate(generateCreateUrl(currentDocumentMeta));\n } else {\n navigate(fullPageUrl);\n }\n }\n };\n\n const handleConfirm = () => {\n if (state.confirmDialogIntent === null) {\n return;\n }\n if (state.confirmDialogIntent === 'navigate') {\n handleRedirection();\n } else if (state.confirmDialogIntent === 'back') {\n dispatch({ type: 'GO_BACK', payload: { shouldBypassConfirmation: true } });\n } else if (state.confirmDialogIntent === 'close') {\n handleCloseModal(true);\n } else if ('documentId' in state.confirmDialogIntent) {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: { document: state.confirmDialogIntent, shouldBypassConfirmation: true },\n });\n }\n };\n\n return (\n <>\n <RelationModalForm />\n <Dialog.Root open={state.confirmDialogIntent != null}>\n <ConfirmDialog\n onConfirm={() => handleConfirm()}\n onCancel={() => dispatch({ type: 'CANCEL_CONFIRM_DIALOG' })}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'content-manager.components.RelationInputModal.confirmation-message',\n defaultMessage:\n 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </>\n );\n};\n\nconst RelationModalTrigger = ({\n children,\n relation,\n}: {\n children: React.ReactNode;\n relation: DocumentMeta;\n}) => {\n const dispatch = useRelationModal('ModalTrigger', (state) => state.dispatch);\n const relationOpenMode = useRelationModal('ModalTrigger', (state) => state.relationOpenMode);\n\n const fullPageUrl = getFullPageUrl(relation);\n\n if (relationOpenMode === 'newTab') {\n return (\n <StyledRelationLink to={fullPageUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </StyledRelationLink>\n );\n }\n\n if (relationOpenMode === 'page') {\n return <StyledRelationLink to={fullPageUrl}>{children}</StyledRelationLink>;\n }\n\n return (\n <StyledTextButton\n onClick={() =>\n dispatch({\n type: 'GO_TO_RELATION',\n payload: { document: relation, shouldBypassConfirmation: false },\n })\n }\n >\n {children}\n </StyledTextButton>\n );\n};\n\nconst StyledTextButton = styled(TextButton)`\n max-width: 100%;\n & > span {\n font-size: ${({ theme }) => theme.fontSizes[2]};\n width: inherit;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`;\n\nconst StyledRelationLink = styled(RouterLink)`\n max-width: 100%;\n font-size: ${({ theme }) => theme.fontSizes[2]};\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n display: block;\n color: ${({ theme }) => theme.colors.primary600};\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: ${({ theme }) => theme.colors.primary700};\n text-decoration: underline;\n }\n`;\n\n/**\n * The mini edit view for a relation that is displayed inside a modal.\n * It's complete with its header, document actions and form layout.\n */\nconst RelationModalForm = () => {\n const { formatMessage } = useIntl();\n\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n const currentDocument = useRelationModal('RelationModalForm', (state) => state.currentDocument);\n const documentLayoutResponse = useDocumentLayout(currentDocumentMeta.model);\n const plugins = useStrapiApp('RelationModalForm', (state) => state.plugins);\n\n const initialValues = isCreating\n ? currentDocument.getInitialFormValues(isCreating)\n : currentDocument.getInitialFormValues();\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: currentDocumentMeta.model,\n }))\n );\n\n const isLoading =\n isLoadingPermissions || documentLayoutResponse.isLoading || currentDocument.isLoading;\n\n if (isLoading && !currentDocument.document?.documentId) {\n return (\n <Loader small>\n {formatMessage({\n id: 'content-manager.ListViewTable.relation-loading',\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n );\n }\n\n if (\n error ||\n !currentDocumentMeta.model ||\n documentLayoutResponse.error ||\n (!isCreating && !currentDocument.document) ||\n (!isCreating && !currentDocument.meta) ||\n !currentDocument.schema ||\n !initialValues\n ) {\n return (\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <EmptyStateLayout\n icon={<WarningCircle width=\"16rem\" />}\n content={formatMessage({\n id: 'anErrorOccurred',\n defaultMessage: 'Whoops! Something went wrong. Please, try again.',\n })}\n />\n </Flex>\n );\n }\n\n const documentTitle = currentDocument.getTitle(documentLayoutResponse.edit.settings.mainField);\n const hasDraftAndPublished = currentDocument.schema?.options?.draftAndPublish ?? false;\n\n const props = {\n activeTab: 'draft',\n collectionType: currentDocumentMeta.collectionType,\n model: currentDocumentMeta.model,\n documentId: currentDocumentMeta.documentId,\n document: currentDocument.document,\n meta: currentDocument.meta,\n } satisfies DocumentActionProps;\n\n return (\n <DocumentRBAC permissions={permissions} model={currentDocumentMeta.model}>\n <Flex alignItems=\"flex-start\" direction=\"column\" gap={2}>\n <Flex width=\"100%\" justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"h2\" variant=\"alpha\">\n {documentTitle}\n </Typography>\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('relation-modal')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) => {\n return [action.position].flat().includes('relation-modal');\n });\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n {hasDraftAndPublished ? (\n <Box>\n <DocumentStatus status={currentDocument.document?.status} />\n </Box>\n ) : null}\n </Flex>\n\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\" paddingTop={7}>\n <Box overflow=\"auto\" flex={1}>\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={currentDocument}\n hasBackground={false}\n />\n </Box>\n </Flex>\n </DocumentRBAC>\n );\n};\n\nexport { reducer, RelationModalRenderer, useRelationModal, getFullPageUrl, generateCreateUrl };\nexport type { State, Action, RelationOpenMode };\n"],"names":["getCollectionType","url","regex","RegExp","COLLECTION_TYPES","SINGLE_TYPES","match","undefined","StyledModalContent","styled","Modal","Content","getFullPageUrl","currentDocumentMeta","isSingleType","collectionType","queryParams","params","locale","model","documentId","reducer","state","action","type","hasUnsavedChanges","payload","shouldBypassConfirmation","confirmDialogIntent","document","fieldToConnect","fieldToConnectUID","lastItemDocumentHistory","documentHistory","at","hasToResetDocumentHistory","isModalOpen","slice","RelationModalProvider","useRelationModal","createContext","isRenderProp","children","RootRelationRenderer","props","dispatch","React","useReducer","rootDocument","useDoc","query","useQueryParams","useMemo","buildValidParams","rootDocumentMeta","documentLayoutResponse","useDocumentLayout","relationOpenMode","edit","settings","currentDocument","useDocument","isCreating","_jsx","RelationModal","relation","RelationModalTrigger","NestedRelationRenderer","RelationModalRenderer","isNested","generateCreateUrl","formatMessage","useIntl","navigate","useNavigate","ComponentProvider","id","level","uid","_jsxs","Root","open","onOpenChange","Header","gap","Flex","justifyContent","alignItems","width","IconButton","withTooltip","label","defaultMessage","variant","disabled","length","onClick","marginRight","ArrowLeft","Typography","tag","fontWeight","ArrowsOut","Body","FormContext","method","initialValues","getInitialFormValues","validate","values","options","yupSchema","createYupSchema","schema","attributes","components","status","abortEarly","RelationModalBody","pathname","search","useLocation","triggerRefetchDocument","useLazyGetDocumentQuery","modified","useForm","isSubmitting","useEffect","handleCloseModal","handleRedirection","editViewUrl","fullPageUrl","isRootDocumentUrl","includes","handleConfirm","_Fragment","RelationModalForm","Dialog","ConfirmDialog","onConfirm","onCancel","StyledRelationLink","to","target","rel","StyledTextButton","TextButton","theme","fontSizes","RouterLink","colors","primary600","primary700","plugins","useStrapiApp","permissions","isLoading","isLoadingPermissions","error","useRBAC","PERMISSIONS","map","subject","Loader","small","meta","height","EmptyStateLayout","icon","WarningCircle","content","documentTitle","getTitle","mainField","hasDraftAndPublished","draftAndPublish","activeTab","DocumentRBAC","direction","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","actions","filteredActions","filter","position","flat","primaryAction","secondaryAction","DocumentActionButton","Box","DocumentStatus","flex","overflow","paddingTop","FormLayout","layout","hasBackground"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RelationModal.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n DescriptionComponentRenderer,\n Form as FormContext,\n useRBAC,\n useStrapiApp,\n createContext,\n useForm,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Dialog,\n EmptyStateLayout,\n Flex,\n IconButton,\n Loader,\n Modal,\n Typography,\n TextButton,\n} from '@strapi/design-system';\nimport { ArrowLeft, ArrowsOut, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link as RouterLink, useLocation, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../../../constants/collections';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { buildValidParams } from '../../../../../exports';\nimport { DocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDoc, useDocument, type UseDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta } from '../../../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { useLazyGetDocumentQuery } from '../../../../../services/documents';\nimport { createYupSchema } from '../../../../../utils/validation';\nimport { DocumentActionButton } from '../../../components/DocumentActions';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { FormLayout } from '../../FormLayout';\nimport { ComponentProvider } from '../ComponentContext';\n\nimport type { RelationOpenMode } from '../../../../../../../shared/contracts/content-types';\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../../../../content-manager';\nimport type { AnyData } from '../../../utils/data';\n\nexport function getCollectionType(url: string) {\n const regex = new RegExp(`(${COLLECTION_TYPES}|${SINGLE_TYPES})`);\n const match = url.match(regex);\n return match ? match[1] : undefined;\n}\n\nconst StyledModalContent = styled(Modal.Content)`\n width: 90%;\n max-width: 100%;\n height: 90%;\n max-height: 100%;\n`;\n\nconst getFullPageUrl = (currentDocumentMeta: DocumentMeta): string => {\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const queryParams = currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : '';\n\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationModalRenderer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n documentHistory: DocumentMeta[];\n confirmDialogIntent:\n | null // No dialog\n | 'close' // Close the modal\n | 'back' // Go back one document in the modal's history\n | 'navigate' // Open the document in the edit view instead of in the modal\n | DocumentMeta; // Open a specific document in the modal\n isModalOpen: boolean;\n hasUnsavedChanges: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n getParentFormValues?: () => AnyData;\n}\n\ntype Action =\n | {\n type: 'GO_TO_RELATION';\n payload: {\n document: DocumentMeta;\n shouldBypassConfirmation: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n getParentFormValues?: () => AnyData;\n };\n }\n | {\n type: 'GO_BACK';\n payload: { shouldBypassConfirmation: boolean };\n }\n | {\n type: 'GO_FULL_PAGE';\n }\n | {\n type: 'GO_TO_CREATED_RELATION';\n payload: {\n document: DocumentMeta;\n shouldBypassConfirmation: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n getParentFormValues?: () => AnyData;\n };\n }\n | {\n type: 'CANCEL_CONFIRM_DIALOG';\n }\n | {\n type: 'CLOSE_MODAL';\n payload: { shouldBypassConfirmation: boolean };\n }\n | {\n type: 'SET_HAS_UNSAVED_CHANGES';\n payload: { hasUnsavedChanges: boolean };\n };\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'GO_TO_RELATION':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return {\n ...state,\n confirmDialogIntent: action.payload.document,\n fieldToConnect: action.payload.fieldToConnect,\n fieldToConnectUID: action.payload.fieldToConnectUID,\n getParentFormValues: action.payload.getParentFormValues,\n };\n }\n\n const lastItemDocumentHistory = state.documentHistory.at(-1);\n const hasToResetDocumentHistory =\n lastItemDocumentHistory && !lastItemDocumentHistory.documentId;\n return {\n ...state,\n // Reset document history if the last item has documentId undefined\n documentHistory: hasToResetDocumentHistory\n ? [action.payload.document]\n : [...state.documentHistory, action.payload.document],\n confirmDialogIntent: null,\n isModalOpen: true,\n fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,\n fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID,\n getParentFormValues: hasToResetDocumentHistory\n ? undefined\n : action.payload.getParentFormValues,\n };\n case 'GO_BACK':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return { ...state, confirmDialogIntent: 'back' };\n }\n\n return {\n ...state,\n documentHistory: state.documentHistory.slice(0, -1),\n confirmDialogIntent: null,\n };\n case 'GO_FULL_PAGE':\n if (state.hasUnsavedChanges) {\n return { ...state, confirmDialogIntent: 'navigate' };\n }\n\n return {\n ...state,\n documentHistory: [],\n hasUnsavedChanges: false,\n isModalOpen: false,\n confirmDialogIntent: null,\n };\n case 'GO_TO_CREATED_RELATION':\n return {\n ...state,\n // Reset document history if the last item has documentId undefined\n documentHistory: state.documentHistory\n ? [...state.documentHistory.slice(0, -1), action.payload.document]\n : [action.payload.document],\n confirmDialogIntent: null,\n isModalOpen: true,\n fieldToConnect: undefined,\n fieldToConnectUID: undefined,\n getParentFormValues: undefined,\n };\n case 'CANCEL_CONFIRM_DIALOG':\n return {\n ...state,\n confirmDialogIntent: null,\n };\n case 'CLOSE_MODAL':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return { ...state, confirmDialogIntent: 'close' };\n }\n\n return {\n ...state,\n documentHistory: [],\n confirmDialogIntent: null,\n hasUnsavedChanges: false,\n isModalOpen: false,\n fieldToConnect: undefined,\n fieldToConnectUID: undefined,\n getParentFormValues: undefined,\n };\n case 'SET_HAS_UNSAVED_CHANGES':\n return {\n ...state,\n hasUnsavedChanges: action.payload.hasUnsavedChanges,\n };\n default:\n return state;\n }\n}\n\ninterface RelationModalContextValue {\n state: State;\n dispatch: React.Dispatch<Action>;\n rootDocumentMeta: DocumentMeta;\n currentDocumentMeta: DocumentMeta;\n currentDocument: ReturnType<UseDocument>;\n onPreview?: () => void;\n isCreating: boolean;\n relationOpenMode: RelationOpenMode;\n}\n\nconst [RelationModalProvider, useRelationModal] =\n createContext<RelationModalContextValue>('RelationModal');\n\nfunction isRenderProp(\n children: RelationModalRendererProps['children']\n): children is (props: {\n dispatch: (action: Action) => void;\n relationOpenMode: RelationOpenMode;\n}) => React.ReactNode {\n return typeof children === 'function';\n}\n\ntype RelationModalRendererProps =\n // Is editing\n | {\n relation: DocumentMeta;\n children: React.ReactNode;\n }\n // Is creating\n | {\n relation?: never;\n children: (props: {\n dispatch: (action: Action) => void;\n relationOpenMode: RelationOpenMode;\n }) => React.ReactNode;\n };\n\nconst RootRelationRenderer = (props: RelationModalRendererProps) => {\n const { children } = props;\n\n const [state, dispatch] = React.useReducer(reducer, {\n documentHistory: [],\n confirmDialogIntent: null,\n isModalOpen: false,\n hasUnsavedChanges: false,\n fieldToConnect: undefined,\n });\n\n const rootDocument = useDoc();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query ?? {}), [query]);\n\n const rootDocumentMeta: DocumentMeta = {\n documentId: rootDocument.document?.documentId || '',\n model: rootDocument.model,\n collectionType: rootDocument.collectionType,\n params,\n };\n\n // Get the relationOpenMode setting from the current document's layout configuration\n const documentLayoutResponse = useDocumentLayout(rootDocument.model);\n const relationOpenMode: RelationOpenMode =\n documentLayoutResponse.edit?.settings?.relationOpenMode ?? 'modal';\n\n const currentDocumentMeta = state.documentHistory.at(-1) ?? rootDocumentMeta;\n const currentDocument = useDocument(currentDocumentMeta);\n // TODO: check if we can remove the single type check\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const isCreating = !currentDocumentMeta.documentId && !isSingleType;\n /**\n * There is no parent relation, so the relation modal doesn't exist. Create it and set up all the\n * pieces that will be used by potential child relations: the context, header, form, and footer.\n */\n return (\n <RelationModalProvider\n state={state}\n dispatch={dispatch}\n rootDocumentMeta={rootDocumentMeta}\n currentDocumentMeta={currentDocumentMeta}\n currentDocument={currentDocument}\n isCreating={isCreating}\n relationOpenMode={relationOpenMode}\n >\n <RelationModal>\n {isRenderProp(children)\n ? children({ dispatch, relationOpenMode })\n : props.relation && (\n <RelationModalTrigger relation={props.relation}>{children}</RelationModalTrigger>\n )}\n </RelationModal>\n </RelationModalProvider>\n );\n};\n\nconst NestedRelationRenderer = (props: RelationModalRendererProps) => {\n const { children } = props;\n const dispatch = useRelationModal('NestedRelation', (state) => state.dispatch);\n const relationOpenMode = useRelationModal('NestedRelation', (state) => state.relationOpenMode);\n\n return isRenderProp(children)\n ? children({ dispatch, relationOpenMode })\n : props.relation && (\n <RelationModalTrigger relation={props.relation}>{children}</RelationModalTrigger>\n ); /* This is the trigger that will be rendered in the parent relation */\n};\n\n/**\n * Component responsible for rendering its children wrapped in a modal, form and context if needed\n */\nconst RelationModalRenderer = (props: RelationModalRendererProps) => {\n // We're in a nested relation if the relation modal context is not undefined\n const isNested = useRelationModal('RelationContextWrapper', (state) => state != undefined, false);\n\n return isNested ? <NestedRelationRenderer {...props} /> : <RootRelationRenderer {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationModal\n * -----------------------------------------------------------------------------------------------*/\nconst generateCreateUrl = (currentDocumentMeta: DocumentMeta) => {\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${\n currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : ''\n }`;\n};\n\nconst RelationModal = ({ children }: { children: React.ReactNode }) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const state = useRelationModal('RelationModalForm', (state) => state.state);\n const dispatch = useRelationModal('RelationModalForm', (state) => state.dispatch);\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const currentDocument = useRelationModal('RelationModalForm', (state) => state.currentDocument);\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n\n /*\n * We must wrap the modal window with Component Provider with reset values\n * to avoid inheriting id and uid from the root document and having weird\n * behaviors with simple relationships..\n */\n return (\n <ComponentProvider id={undefined} level={-1} uid={undefined} type={undefined}>\n <Modal.Root\n open={state.isModalOpen}\n onOpenChange={(open) => {\n if (!open) {\n dispatch({\n type: 'CLOSE_MODAL',\n payload: { shouldBypassConfirmation: false },\n });\n }\n }}\n >\n {children}\n <StyledModalContent>\n <Modal.Header gap={2}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Flex gap={2}>\n <IconButton\n withTooltip={false}\n label={formatMessage({ id: 'global.back', defaultMessage: 'Back' })}\n variant=\"ghost\"\n disabled={state.documentHistory.length < 2}\n onClick={() => {\n dispatch({\n type: 'GO_BACK',\n payload: { shouldBypassConfirmation: false },\n });\n }}\n marginRight={1}\n >\n <ArrowLeft />\n </IconButton>\n <Typography tag=\"span\" fontWeight={600}>\n {isCreating\n ? formatMessage({\n id: 'content-manager.relation.create',\n defaultMessage: 'Create a relation',\n })\n : formatMessage({\n id: 'content-manager.components.RelationInputModal.modal-title',\n defaultMessage: 'Edit a relation',\n })}\n </Typography>\n </Flex>\n <IconButton\n onClick={() => {\n dispatch({\n type: 'GO_FULL_PAGE',\n });\n if (!state.hasUnsavedChanges) {\n if (isCreating) {\n navigate(generateCreateUrl(currentDocumentMeta));\n } else {\n navigate(getFullPageUrl(currentDocumentMeta));\n }\n }\n }}\n variant=\"tertiary\"\n label={formatMessage({\n id: 'content-manager.components.RelationInputModal.button-fullpage',\n defaultMessage: 'Go to entry',\n })}\n >\n <ArrowsOut />\n </IconButton>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <FormContext\n method={isCreating ? 'POST' : 'PUT'}\n initialValues={currentDocument.getInitialFormValues(isCreating)}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n currentDocument.schema?.attributes,\n currentDocument.components,\n {\n status: currentDocument.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n <RelationModalBody />\n </FormContext>\n </Modal.Body>\n </StyledModalContent>\n </Modal.Root>\n </ComponentProvider>\n );\n};\n/**\n * All the main content (not header and footer) of the relation modal, plus the confirmation dialog.\n * Will be wrapped in a Modal.Body by the RelationModal component.\n * Cannot be moved directly inside RelationModal because it needs access to the context via hooks.\n */\nconst RelationModalBody = () => {\n const navigate = useNavigate();\n const { pathname, search } = useLocation();\n const { formatMessage } = useIntl();\n\n const [triggerRefetchDocument] = useLazyGetDocumentQuery();\n\n const state = useRelationModal('RelationModalForm', (state) => state.state);\n const dispatch = useRelationModal('RelationModalForm', (state) => state.dispatch);\n const rootDocumentMeta = useRelationModal('RelationModalForm', (state) => state.rootDocumentMeta);\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n\n /**\n * One-way sync the modified state from the form to the modal state.\n * It is needed because we need to consume state from the form context in order to lift it up\n * into the modal context. It is not possible otherwise because the modal needs the form state,\n * but it must be a parent of the form.\n */\n const modified = useForm('FormWatcher', (state) => state.modified);\n const isSubmitting = useForm('FormWatcher', (state) => state.isSubmitting);\n const hasUnsavedChanges = modified && !isSubmitting;\n React.useEffect(() => {\n dispatch({ type: 'SET_HAS_UNSAVED_CHANGES', payload: { hasUnsavedChanges } });\n }, [hasUnsavedChanges, dispatch]);\n\n const handleCloseModal = (shouldBypassConfirmation: boolean) => {\n dispatch({ type: 'CLOSE_MODAL', payload: { shouldBypassConfirmation } });\n\n if (shouldBypassConfirmation || !state.hasUnsavedChanges) {\n // TODO: check if we can avoid this by relying on RTK invalidatesTags.\n // If so we can delete this function and dispatch the events directly\n triggerRefetchDocument(\n // TODO check if params should be removed (as they were before)\n rootDocumentMeta,\n // Favor the cache\n true\n );\n }\n };\n\n const handleRedirection = () => {\n const editViewUrl = `${pathname}${search}`;\n const fullPageUrl = getFullPageUrl(currentDocumentMeta);\n const isRootDocumentUrl = editViewUrl.includes(fullPageUrl);\n\n if (isRootDocumentUrl) {\n handleCloseModal(true);\n } else {\n if (isCreating) {\n navigate(generateCreateUrl(currentDocumentMeta));\n } else {\n navigate(fullPageUrl);\n }\n }\n };\n\n const handleConfirm = () => {\n if (state.confirmDialogIntent === null) {\n return;\n }\n if (state.confirmDialogIntent === 'navigate') {\n handleRedirection();\n } else if (state.confirmDialogIntent === 'back') {\n dispatch({ type: 'GO_BACK', payload: { shouldBypassConfirmation: true } });\n } else if (state.confirmDialogIntent === 'close') {\n handleCloseModal(true);\n } else if ('documentId' in state.confirmDialogIntent) {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: {\n document: state.confirmDialogIntent,\n shouldBypassConfirmation: true,\n fieldToConnect: state.fieldToConnect,\n fieldToConnectUID: state.fieldToConnectUID,\n getParentFormValues: state.getParentFormValues,\n },\n });\n }\n };\n\n return (\n <>\n <RelationModalForm />\n <Dialog.Root open={state.confirmDialogIntent != null}>\n <ConfirmDialog\n onConfirm={() => handleConfirm()}\n onCancel={() => dispatch({ type: 'CANCEL_CONFIRM_DIALOG' })}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'content-manager.components.RelationInputModal.confirmation-message',\n defaultMessage:\n 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </>\n );\n};\n\nconst RelationModalTrigger = ({\n children,\n relation,\n}: {\n children: React.ReactNode;\n relation: DocumentMeta;\n}) => {\n const dispatch = useRelationModal('ModalTrigger', (state) => state.dispatch);\n const relationOpenMode = useRelationModal('ModalTrigger', (state) => state.relationOpenMode);\n\n const fullPageUrl = getFullPageUrl(relation);\n\n if (relationOpenMode === 'newTab') {\n return (\n <StyledRelationLink to={fullPageUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </StyledRelationLink>\n );\n }\n\n if (relationOpenMode === 'page') {\n return <StyledRelationLink to={fullPageUrl}>{children}</StyledRelationLink>;\n }\n\n return (\n <StyledTextButton\n onClick={() =>\n dispatch({\n type: 'GO_TO_RELATION',\n payload: { document: relation, shouldBypassConfirmation: false },\n })\n }\n >\n {children}\n </StyledTextButton>\n );\n};\n\nconst StyledTextButton = styled(TextButton)`\n max-width: 100%;\n & > span {\n font-size: ${({ theme }) => theme.fontSizes[2]};\n width: inherit;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`;\n\nconst StyledRelationLink = styled(RouterLink)`\n max-width: 100%;\n font-size: ${({ theme }) => theme.fontSizes[2]};\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n display: block;\n color: ${({ theme }) => theme.colors.primary600};\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: ${({ theme }) => theme.colors.primary700};\n text-decoration: underline;\n }\n`;\n\n/**\n * The mini edit view for a relation that is displayed inside a modal.\n * It's complete with its header, document actions and form layout.\n */\nconst RelationModalForm = () => {\n const { formatMessage } = useIntl();\n\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n const currentDocument = useRelationModal('RelationModalForm', (state) => state.currentDocument);\n const documentLayoutResponse = useDocumentLayout(currentDocumentMeta.model);\n const plugins = useStrapiApp('RelationModalForm', (state) => state.plugins);\n\n const initialValues = isCreating\n ? currentDocument.getInitialFormValues(isCreating)\n : currentDocument.getInitialFormValues();\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: currentDocumentMeta.model,\n }))\n );\n\n const isLoading =\n isLoadingPermissions || documentLayoutResponse.isLoading || currentDocument.isLoading;\n\n if (isLoading && !currentDocument.document?.documentId) {\n return (\n <Loader small>\n {formatMessage({\n id: 'content-manager.ListViewTable.relation-loading',\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n );\n }\n\n if (\n error ||\n !currentDocumentMeta.model ||\n documentLayoutResponse.error ||\n (!isCreating && !currentDocument.document) ||\n (!isCreating && !currentDocument.meta) ||\n !currentDocument.schema ||\n !initialValues\n ) {\n return (\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <EmptyStateLayout\n icon={<WarningCircle width=\"16rem\" />}\n content={formatMessage({\n id: 'anErrorOccurred',\n defaultMessage: 'Whoops! Something went wrong. Please, try again.',\n })}\n />\n </Flex>\n );\n }\n\n const documentTitle = currentDocument.getTitle(documentLayoutResponse.edit.settings.mainField);\n const hasDraftAndPublished = currentDocument.schema?.options?.draftAndPublish ?? false;\n\n const props = {\n activeTab: 'draft',\n collectionType: currentDocumentMeta.collectionType,\n model: currentDocumentMeta.model,\n documentId: currentDocumentMeta.documentId,\n document: currentDocument.document,\n meta: currentDocument.meta,\n } satisfies DocumentActionProps;\n\n return (\n <DocumentRBAC permissions={permissions} model={currentDocumentMeta.model}>\n <Flex alignItems=\"flex-start\" direction=\"column\" gap={2}>\n <Flex width=\"100%\" justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"h2\" variant=\"alpha\">\n {documentTitle}\n </Typography>\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('relation-modal')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) => {\n return [action.position].flat().includes('relation-modal');\n });\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n {hasDraftAndPublished ? (\n <Box>\n <DocumentStatus status={currentDocument.document?.status} />\n </Box>\n ) : null}\n </Flex>\n\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\" paddingTop={7}>\n <Box overflow=\"auto\" flex={1}>\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={currentDocument}\n hasBackground={false}\n />\n </Box>\n </Flex>\n </DocumentRBAC>\n );\n};\n\nexport { reducer, RelationModalRenderer, useRelationModal, getFullPageUrl, generateCreateUrl };\nexport type { State, Action, RelationOpenMode };\n"],"names":["getCollectionType","url","regex","RegExp","COLLECTION_TYPES","SINGLE_TYPES","match","undefined","StyledModalContent","styled","Modal","Content","getFullPageUrl","currentDocumentMeta","isSingleType","collectionType","queryParams","params","locale","model","documentId","reducer","state","action","type","hasUnsavedChanges","payload","shouldBypassConfirmation","confirmDialogIntent","document","fieldToConnect","fieldToConnectUID","getParentFormValues","lastItemDocumentHistory","documentHistory","at","hasToResetDocumentHistory","isModalOpen","slice","RelationModalProvider","useRelationModal","createContext","isRenderProp","children","RootRelationRenderer","props","dispatch","React","useReducer","rootDocument","useDoc","query","useQueryParams","useMemo","buildValidParams","rootDocumentMeta","documentLayoutResponse","useDocumentLayout","relationOpenMode","edit","settings","currentDocument","useDocument","isCreating","_jsx","RelationModal","relation","RelationModalTrigger","NestedRelationRenderer","RelationModalRenderer","isNested","generateCreateUrl","formatMessage","useIntl","navigate","useNavigate","ComponentProvider","id","level","uid","_jsxs","Root","open","onOpenChange","Header","gap","Flex","justifyContent","alignItems","width","IconButton","withTooltip","label","defaultMessage","variant","disabled","length","onClick","marginRight","ArrowLeft","Typography","tag","fontWeight","ArrowsOut","Body","FormContext","method","initialValues","getInitialFormValues","validate","values","options","yupSchema","createYupSchema","schema","attributes","components","status","abortEarly","RelationModalBody","pathname","search","useLocation","triggerRefetchDocument","useLazyGetDocumentQuery","modified","useForm","isSubmitting","useEffect","handleCloseModal","handleRedirection","editViewUrl","fullPageUrl","isRootDocumentUrl","includes","handleConfirm","_Fragment","RelationModalForm","Dialog","ConfirmDialog","onConfirm","onCancel","StyledRelationLink","to","target","rel","StyledTextButton","TextButton","theme","fontSizes","RouterLink","colors","primary600","primary700","plugins","useStrapiApp","permissions","isLoading","isLoadingPermissions","error","useRBAC","PERMISSIONS","map","subject","Loader","small","meta","height","EmptyStateLayout","icon","WarningCircle","content","documentTitle","getTitle","mainField","hasDraftAndPublished","draftAndPublish","activeTab","DocumentRBAC","direction","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","actions","filteredActions","filter","position","flat","primaryAction","secondaryAction","DocumentActionButton","Box","DocumentStatus","flex","overflow","paddingTop","FormLayout","layout","hasBackground"],"mappings":"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"}
|
|
@@ -6,7 +6,6 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
|
6
6
|
var designSystem = require('@strapi/design-system');
|
|
7
7
|
var Icons = require('@strapi/icons');
|
|
8
8
|
var fractionalIndexing = require('fractional-indexing');
|
|
9
|
-
var pipe = require('lodash/fp/pipe');
|
|
10
9
|
var reactDndHtml5Backend = require('react-dnd-html5-backend');
|
|
11
10
|
var reactIntl = require('react-intl');
|
|
12
11
|
var reactWindow = require('react-window');
|
|
@@ -20,14 +19,13 @@ var useDocument = require('../../../../../hooks/useDocument.js');
|
|
|
20
19
|
var useDocumentContext = require('../../../../../hooks/useDocumentContext.js');
|
|
21
20
|
var useDragAndDrop = require('../../../../../hooks/useDragAndDrop.js');
|
|
22
21
|
var relations = require('../../../../../services/relations.js');
|
|
22
|
+
var objects = require('../../../../../utils/objects.js');
|
|
23
23
|
var relations$1 = require('../../../../../utils/relations.js');
|
|
24
24
|
var translations = require('../../../../../utils/translations.js');
|
|
25
25
|
var DocumentStatus = require('../../DocumentStatus.js');
|
|
26
26
|
var ComponentContext = require('../ComponentContext.js');
|
|
27
27
|
var RelationModal = require('./RelationModal.js');
|
|
28
28
|
|
|
29
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
30
|
-
|
|
31
29
|
function _interopNamespace(e) {
|
|
32
30
|
if (e && e.__esModule) return e;
|
|
33
31
|
var n = Object.create(null);
|
|
@@ -47,7 +45,6 @@ function _interopNamespace(e) {
|
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
50
|
-
var pipe__default = /*#__PURE__*/_interopDefault(pipe);
|
|
51
48
|
|
|
52
49
|
/**
|
|
53
50
|
* Remove a relation, whether it's been already saved or not.
|
|
@@ -185,10 +182,11 @@ const EMPTY_RELATION_RESULTS = [];
|
|
|
185
182
|
};
|
|
186
183
|
/**
|
|
187
184
|
* Tidy up our data.
|
|
188
|
-
*/ const
|
|
189
|
-
const transformedRels = transformations([
|
|
185
|
+
*/ const withoutConnected = removeConnected(ctx)([
|
|
190
186
|
...serverData
|
|
191
187
|
]);
|
|
188
|
+
const withoutDisconnected = removeDisconnected(ctx)(withoutConnected);
|
|
189
|
+
const transformedRels = addLabelAndHref(ctx)(withoutDisconnected);
|
|
192
190
|
/**
|
|
193
191
|
* Connect items (e.g. from fill-from-locale) may lack href/label. Ensure they have them
|
|
194
192
|
* so ListItem's getCollectionType(href) and display work correctly.
|
|
@@ -502,6 +500,10 @@ const RelationModalWithContext = ({ relation, name, placeholder, hasNextPage, is
|
|
|
502
500
|
const canCreate = DocumentRBAC.useDocumentRBAC('RelationModalWrapper', (state)=>state.canCreate);
|
|
503
501
|
const fieldRef = strapiAdmin.useFocusInputField(name);
|
|
504
502
|
const componentUID = ComponentContext.useComponent('RelationsField', (state)=>state.uid);
|
|
503
|
+
const getParentFormValues = strapiAdmin.useForm('RelationModalWrapper', (state)=>state.getValues);
|
|
504
|
+
const getParentFormValuesWithCurrentRelation = ()=>{
|
|
505
|
+
return objects.setIn(getParentFormValues(), name, fieldValue);
|
|
506
|
+
};
|
|
505
507
|
const handleLoadMore = ()=>{
|
|
506
508
|
if (!data || !data.pagination) {
|
|
507
509
|
return;
|
|
@@ -542,7 +544,8 @@ const RelationModalWithContext = ({ relation, name, placeholder, hasNextPage, is
|
|
|
542
544
|
document: relation,
|
|
543
545
|
shouldBypassConfirmation: false,
|
|
544
546
|
fieldToConnect: name,
|
|
545
|
-
fieldToConnectUID: componentUID
|
|
547
|
+
fieldToConnectUID: componentUID,
|
|
548
|
+
getParentFormValues: getParentFormValuesWithCurrentRelation
|
|
546
549
|
}
|
|
547
550
|
});
|
|
548
551
|
}
|
|
@@ -696,7 +699,7 @@ const RelationsList = ({ data, serverData, disabled, name, isLoading, relationTy
|
|
|
696
699
|
const position = currentIndex === 0 ? {
|
|
697
700
|
start: true
|
|
698
701
|
} : relationInFront ? {
|
|
699
|
-
before: relationInFront.documentId,
|
|
702
|
+
before: relationInFront.documentId ?? relationInFront.apiData?.documentId,
|
|
700
703
|
locale: relationInFront.locale,
|
|
701
704
|
status: 'publishedAt' in relationInFront && relationInFront.publishedAt ? 'published' : 'draft'
|
|
702
705
|
} : {
|
|
@@ -704,14 +707,12 @@ const RelationsList = ({ data, serverData, disabled, name, isLoading, relationTy
|
|
|
704
707
|
};
|
|
705
708
|
const relationWithPosition = {
|
|
706
709
|
...relation,
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
position
|
|
714
|
-
}
|
|
710
|
+
apiData: {
|
|
711
|
+
id: relation.id,
|
|
712
|
+
documentId: relation.documentId ?? relation.apiData?.documentId ?? '',
|
|
713
|
+
locale: relation.locale || relation.apiData?.locale,
|
|
714
|
+
isTemporary: relation.apiData?.isTemporary,
|
|
715
|
+
position
|
|
715
716
|
}
|
|
716
717
|
};
|
|
717
718
|
return [
|