@strapi/content-manager 5.59.0 → 5.61.0
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/constants/customOrder.js +14 -0
- package/dist/admin/constants/customOrder.js.map +1 -0
- package/dist/admin/constants/customOrder.mjs +10 -0
- package/dist/admin/constants/customOrder.mjs.map +1 -0
- package/dist/admin/history/components/VersionInputRenderer.js +2 -1
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs +2 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/hooks/useDocument.js +22 -11
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +22 -11
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
- package/dist/admin/hooks/useHasBeenNearViewport.js +70 -0
- package/dist/admin/hooks/useHasBeenNearViewport.js.map +1 -0
- package/dist/admin/hooks/useHasBeenNearViewport.mjs +46 -0
- package/dist/admin/hooks/useHasBeenNearViewport.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +102 -32
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +104 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +20 -17
- 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 +20 -17
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +15 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +17 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +21 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +22 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +2 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +4 -7
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +4 -7
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +46 -10
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +47 -11
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +201 -50
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +202 -52
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +3 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.js +31 -2
- package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs +31 -2
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +196 -132
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +196 -132
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/CustomOrder.js +571 -0
- package/dist/admin/pages/ListView/components/CustomOrder.js.map +1 -0
- package/dist/admin/pages/ListView/components/CustomOrder.mjs +546 -0
- package/dist/admin/pages/ListView/components/CustomOrder.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableActions.js +4 -1
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +4 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.js +2 -1
- package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.mjs +2 -1
- package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
- package/dist/admin/preview/utils/getPreviewUrlStatus.js +17 -0
- package/dist/admin/preview/utils/getPreviewUrlStatus.js.map +1 -0
- package/dist/admin/preview/utils/getPreviewUrlStatus.mjs +15 -0
- package/dist/admin/preview/utils/getPreviewUrlStatus.mjs.map +1 -0
- package/dist/admin/services/documents.js +22 -1
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +21 -2
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/constants/customOrder.d.ts +8 -0
- package/dist/admin/src/exports.d.ts +1 -1
- package/dist/admin/src/history/components/VersionInputRenderer.d.ts +3 -1
- package/dist/admin/src/hooks/useDocument.d.ts +4 -0
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +6 -2
- package/dist/admin/src/hooks/useHasBeenNearViewport.d.ts +13 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.d.ts +13 -1
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +11 -1
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -0
- package/dist/admin/src/pages/ListView/components/CustomOrder.d.ts +72 -0
- package/dist/admin/src/preview/utils/getPreviewUrlStatus.d.ts +6 -0
- package/dist/admin/src/services/documents.d.ts +10 -2
- package/dist/admin/translations/en.json.js +9 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +9 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/audit-logs.js +36 -0
- package/dist/server/audit-logs.js.map +1 -0
- package/dist/server/audit-logs.mjs +33 -0
- package/dist/server/audit-logs.mjs.map +1 -0
- package/dist/server/bootstrap.js +8 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +8 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +8 -0
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +8 -0
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +15 -0
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +16 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/index.js +3 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs +2 -0
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/controllers/relations.js +53 -17
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +54 -18
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +10 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +10 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/validation/model-configuration.js +2 -1
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +2 -1
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/custom-order/constants.js +21 -0
- package/dist/server/custom-order/constants.js.map +1 -0
- package/dist/server/custom-order/constants.mjs +17 -0
- package/dist/server/custom-order/constants.mjs.map +1 -0
- package/dist/server/custom-order/controllers/custom-order.js +77 -0
- package/dist/server/custom-order/controllers/custom-order.js.map +1 -0
- package/dist/server/custom-order/controllers/custom-order.mjs +75 -0
- package/dist/server/custom-order/controllers/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/controllers/index.js +10 -0
- package/dist/server/custom-order/controllers/index.js.map +1 -0
- package/dist/server/custom-order/controllers/index.mjs +8 -0
- package/dist/server/custom-order/controllers/index.mjs.map +1 -0
- package/dist/server/custom-order/index.js +71 -0
- package/dist/server/custom-order/index.js.map +1 -0
- package/dist/server/custom-order/index.mjs +69 -0
- package/dist/server/custom-order/index.mjs.map +1 -0
- package/dist/server/custom-order/routes/custom-order.js +38 -0
- package/dist/server/custom-order/routes/custom-order.js.map +1 -0
- package/dist/server/custom-order/routes/custom-order.mjs +36 -0
- package/dist/server/custom-order/routes/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/routes/index.js +13 -0
- package/dist/server/custom-order/routes/index.js.map +1 -0
- package/dist/server/custom-order/routes/index.mjs +11 -0
- package/dist/server/custom-order/routes/index.mjs.map +1 -0
- package/dist/server/custom-order/services/custom-order.js +286 -0
- package/dist/server/custom-order/services/custom-order.js.map +1 -0
- package/dist/server/custom-order/services/custom-order.mjs +284 -0
- package/dist/server/custom-order/services/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/services/document-middleware.js +83 -0
- package/dist/server/custom-order/services/document-middleware.js.map +1 -0
- package/dist/server/custom-order/services/document-middleware.mjs +81 -0
- package/dist/server/custom-order/services/document-middleware.mjs.map +1 -0
- package/dist/server/custom-order/services/index.js +10 -0
- package/dist/server/custom-order/services/index.js.map +1 -0
- package/dist/server/custom-order/services/index.mjs +8 -0
- package/dist/server/custom-order/services/index.mjs.map +1 -0
- package/dist/server/custom-order/services/utils.js +152 -0
- package/dist/server/custom-order/services/utils.js.map +1 -0
- package/dist/server/custom-order/services/utils.mjs +148 -0
- package/dist/server/custom-order/services/utils.mjs.map +1 -0
- package/dist/server/custom-order/utils.js +13 -0
- package/dist/server/custom-order/utils.js.map +1 -0
- package/dist/server/custom-order/utils.mjs +10 -0
- package/dist/server/custom-order/utils.mjs.map +1 -0
- package/dist/server/history/constants.js +2 -1
- package/dist/server/history/constants.js.map +1 -1
- package/dist/server/history/constants.mjs +2 -1
- package/dist/server/history/constants.mjs.map +1 -1
- package/dist/server/history/controllers/history-version.js +6 -2
- package/dist/server/history/controllers/history-version.js.map +1 -1
- package/dist/server/history/controllers/history-version.mjs +6 -2
- package/dist/server/history/controllers/history-version.mjs.map +1 -1
- package/dist/server/history/services/history.js +24 -7
- package/dist/server/history/services/history.js.map +1 -1
- package/dist/server/history/services/history.mjs +25 -8
- package/dist/server/history/services/history.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js +2 -16
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +2 -16
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/mcp/schemas/filters-schema.js +10 -2
- package/dist/server/mcp/schemas/filters-schema.js.map +1 -1
- package/dist/server/mcp/schemas/filters-schema.mjs +10 -2
- package/dist/server/mcp/schemas/filters-schema.mjs.map +1 -1
- package/dist/server/preview/controllers/validation/preview.js +1 -1
- package/dist/server/preview/controllers/validation/preview.js.map +1 -1
- package/dist/server/preview/controllers/validation/preview.mjs +2 -2
- package/dist/server/preview/controllers/validation/preview.mjs.map +1 -1
- package/dist/server/register.js +4 -0
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +4 -0
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/index.js +3 -1
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs +2 -0
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/content-types.js +2 -2
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +2 -2
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/document-manager.js +13 -0
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +14 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +1 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +1 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +2 -0
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/utils/configuration/settings.js +2 -1
- package/dist/server/services/utils/configuration/settings.js.map +1 -1
- package/dist/server/services/utils/configuration/settings.mjs +2 -1
- package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
- package/dist/server/src/audit-logs.d.ts +40 -0
- package/dist/server/src/audit-logs.d.ts.map +1 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +21 -3
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts +19 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/custom-order/constants.d.ts +18 -0
- package/dist/server/src/custom-order/constants.d.ts.map +1 -0
- package/dist/server/src/custom-order/controllers/custom-order.d.ts +8 -0
- package/dist/server/src/custom-order/controllers/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/controllers/index.d.ts +3 -0
- package/dist/server/src/custom-order/controllers/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/index.d.ts +8 -0
- package/dist/server/src/custom-order/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/routes/custom-order.d.ts +4 -0
- package/dist/server/src/custom-order/routes/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/routes/index.d.ts +10 -0
- package/dist/server/src/custom-order/routes/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/custom-order.d.ts +43 -0
- package/dist/server/src/custom-order/services/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/document-middleware.d.ts +16 -0
- package/dist/server/src/custom-order/services/document-middleware.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/index.d.ts +24 -0
- package/dist/server/src/custom-order/services/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/utils.d.ts +34 -0
- package/dist/server/src/custom-order/services/utils.d.ts.map +1 -0
- package/dist/server/src/custom-order/utils.d.ts +6 -0
- package/dist/server/src/custom-order/utils.d.ts.map +1 -0
- package/dist/server/src/history/constants.d.ts.map +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +22 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts +1 -3
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -3
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/shared/contracts/content-types.d.ts +5 -0
- package/dist/shared/contracts/content-types.d.ts.map +1 -1
- package/dist/shared/contracts/custom-order.d.ts +33 -0
- package/dist/shared/contracts/custom-order.d.ts.map +1 -0
- package/dist/shared/contracts/custom-order.js +3 -0
- package/dist/shared/contracts/custom-order.js.map +1 -0
- package/dist/shared/contracts/custom-order.mjs +2 -0
- package/dist/shared/contracts/custom-order.mjs.map +1 -0
- package/dist/shared/contracts/history-versions.d.ts +0 -1
- package/dist/shared/contracts/history-versions.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/index.js +2 -0
- package/dist/shared/contracts/index.js.map +1 -1
- package/dist/shared/contracts/index.mjs +2 -0
- package/dist/shared/contracts/index.mjs.map +1 -1
- package/package.json +10 -10
package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicComponent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout, useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\nconst EMPTY_DYNAMIC_COMPONENTS_BY_CATEGORY: NonNullable<\n DynamicComponentProps['dynamicComponentsByCategory']\n> = {};\n\ninterface DynamicComponentProps\n extends\n Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid?: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: (index: number) => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n totalLength: number;\n children?: (props: InputRendererProps) => React.ReactNode;\n /**\n * When true, the component's accordion will be forced open and scrolled into view.\n * Used by the parent DynamicZone to auto-expand newly added components.\n */\n forceOpen?: boolean;\n /**\n * Called after the forceOpen has been handled (accordion opened + scrolled),\n * so the parent can clear the forced state.\n */\n onForceOpenHandled?: () => void;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = EMPTY_DYNAMIC_COMPONENTS_BY_CATEGORY,\n onAddComponent,\n totalLength,\n children,\n forceOpen,\n onForceOpenHandled,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const isDesktop = useIsDesktop();\n\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const { mainField = 'id' } = componentUid ? (components[componentUid]?.settings ?? {}) : {};\n\n const mainFieldValue = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.${mainField}`)\n );\n\n const displayedValue = mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n const displayTitle = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n const { icon, displayName } = React.useMemo(() => {\n if (!componentUid) {\n return {\n icon: null,\n displayName: formatMessage({\n id: getTranslation('components.DynamicZone.unknown-component'),\n defaultMessage: 'Unknown component',\n }),\n };\n }\n\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return {\n icon,\n displayName: formatMessage({\n id: componentUid,\n defaultMessage: displayName || componentUid,\n }),\n };\n }, [componentUid, dynamicComponentsByCategory, formatMessage]);\n\n const tempKey = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.__temp_key__`)\n ) as string | undefined;\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n id: tempKey,\n displayedValue: `${displayName} ${displayTitle}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const accordionValue = React.useId();\n\n /**\n * Ref for the component container `<li>`, used to scroll the newly added\n * component into view when `forceOpen` is set by the parent.\n */\n const componentRef = React.useRef<HTMLLIElement>(null);\n\n const componentPath = `${name}.${index}`;\n const hasValue = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath) != null\n );\n const isNewItem = useForm(\n 'DynamicComponent',\n (state) => getIn<{ id?: unknown }>(state.values, componentPath)?.id == null\n );\n const rawError = useForm('DynamicComponent', (state) => getIn(state.errors, componentPath));\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>(\n isNewItem ? accordionValue : ''\n );\n\n React.useEffect(() => {\n if (rawError && hasValue) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, hasValue, accordionValue]);\n\n /**\n * When the parent flags this component as newly added via `forceOpen`,\n * expand the accordion and scroll it into view so the user can immediately\n * start editing. Once handled, notify the parent so it can clear the flag.\n */\n React.useEffect(() => {\n if (forceOpen) {\n setCollapseToOpen(accordionValue);\n requestAnimationFrame(() => {\n componentRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n onForceOpenHandled?.();\n });\n }\n }, [forceOpen, accordionValue, onForceOpenHandled]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleRemoveCurrentComponent = React.useCallback(() => {\n onRemoveComponentClick(index);\n }, [onRemoveComponentClick, index]);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: displayTitle }\n )}\n onClick={handleRemoveCurrentComponent}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index - 1, index);\n }}\n disabled={!canMoveUp}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index + 1, index);\n }}\n disabled={!canMoveDown}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index + 1)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = displayTitle ? `${displayName} ${displayTitle}` : displayName;\n\n return (\n <ComponentContainer ref={componentRef} tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <DynamicComponentFields\n componentUid={componentUid}\n index={index}\n layout={componentUid ? components[componentUid]?.layout : undefined}\n name={name}\n >\n {children}\n </DynamicComponentFields>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\ninterface DynamicComponentFieldsProps extends Pick<DynamicComponentProps, 'children'> {\n componentUid?: string;\n index: number;\n layout?: EditFieldLayout[][];\n name: string;\n}\n\nconst DynamicComponentFields = React.memo(\n ({ children, componentUid, index, layout, name }: DynamicComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={{ initial: 4, medium: 6 }}>\n <Grid.Root gap={4}>\n {layout?.map((row) => {\n return (\n <Grid.Item\n col={12}\n key={row.map((field) => field.name).join('.')}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <ResponsiveGridRoot gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({\n ...fieldWithTranslatedLabel,\n name: fieldName,\n })\n ) : (\n <InputRenderer {...fieldWithTranslatedLabel} name={fieldName} />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n }\n);\n\nDynamicComponentFields.displayName = 'DynamicComponentFields';\n\nconst MemoizedDynamicComponent = React.memo(DynamicComponent);\n\nexport { MemoizedDynamicComponent as DynamicComponent };\nexport type { DynamicComponentProps };\n"],"names":["EMPTY_DYNAMIC_COMPONENTS_BY_CATEGORY","DynamicComponent","componentUid","disabled","index","name","onRemoveComponentClick","onMoveComponent","onGrabItem","onDropItem","onCancel","dynamicComponentsByCategory","onAddComponent","totalLength","children","forceOpen","onForceOpenHandled","formatMessage","useIntl","currentDocumentMeta","useDocumentContext","isDesktop","useIsDesktop","edit","components","useDocumentLayout","model","mainField","settings","mainFieldValue","useForm","state","getIn","values","displayedValue","String","trim","displayTitle","length","icon","displayName","React","useMemo","id","getTranslation","defaultMessage","category","split","find","component","uid","tempKey","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","type","ItemTypes","DYNAMIC_ZONE","item","onMoveItem","useEffect","getEmptyImage","captureDraggingState","accordionValue","useId","componentRef","useRef","componentPath","hasValue","isNewItem","rawError","errors","collapseToOpen","setCollapseToOpen","useState","requestAnimationFrame","current","scrollIntoView","behavior","block","composedBoxRefs","useComposedRefs","canMoveUp","canMoveDown","handleRemoveCurrentComponent","useCallback","accordionActions","_jsxs","_Fragment","_jsx","IconButton","variant","label","onClick","Trash","e","stopPropagation","data-handler-id","ref","onKeyDown","Drag","ArrowUp","ArrowDown","Menu","Root","Trigger","size","endIcon","paddingLeft","paddingRight","tag","More","aria-hidden","focusable","Content","SubRoot","SubTrigger","SubContent","Object","entries","map","Fragment","Label","upperFirst","Item","onSelect","accordionTitle","ComponentContainer","width","Flex","justifyContent","Rectangle","background","StyledBox","hasRadius","Preview","Accordion","value","onValueChange","Header","COMPONENT_ICONS","dashboard","Actions","AccordionContentRadius","DynamicComponentFields","layout","undefined","styled","Box","theme","shadows","tableShadow","spaces","span","colors","primary100","primary500","memo","padding","initial","medium","Grid","gap","row","col","xs","direction","alignItems","ResponsiveGridRoot","field","fieldName","fieldWithTranslatedLabel","ResponsiveGridItem","s","InputRenderer","join","MemoizedDynamicComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DynamicComponent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout, useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\nconst EMPTY_DYNAMIC_COMPONENTS_BY_CATEGORY: NonNullable<\n DynamicComponentProps['dynamicComponentsByCategory']\n> = {};\n\ninterface DynamicComponentProps\n extends\n Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid?: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: (index: number) => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n totalLength: number;\n children?: (props: InputRendererProps) => React.ReactNode;\n /**\n * When true, the component's accordion will be forced open and scrolled into view.\n * Used by the parent DynamicZone to auto-expand newly added components.\n */\n forceOpen?: boolean;\n /**\n * Called after the forceOpen has been handled (accordion opened + scrolled),\n * so the parent can clear the forced state.\n */\n onForceOpenHandled?: () => void;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = EMPTY_DYNAMIC_COMPONENTS_BY_CATEGORY,\n onAddComponent,\n totalLength,\n children,\n forceOpen,\n onForceOpenHandled,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const isDesktop = useIsDesktop();\n\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const { mainField = 'id' } = componentUid ? (components[componentUid]?.settings ?? {}) : {};\n\n const mainFieldValue = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.${mainField}`)\n );\n\n const displayedValue = mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n const displayTitle = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n const { icon, displayName } = React.useMemo(() => {\n if (!componentUid) {\n return {\n icon: null,\n displayName: formatMessage({\n id: getTranslation('components.DynamicZone.unknown-component'),\n defaultMessage: 'Unknown component',\n }),\n };\n }\n\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return {\n icon,\n displayName: formatMessage({\n id: componentUid,\n defaultMessage: displayName || componentUid,\n }),\n };\n }, [componentUid, dynamicComponentsByCategory, formatMessage]);\n\n const tempKey = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.__temp_key__`)\n ) as string | undefined;\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n id: tempKey,\n displayedValue: `${displayName} ${displayTitle}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const accordionValue = React.useId();\n\n /**\n * Ref for the component container `<li>`, used to scroll the newly added\n * component into view when `forceOpen` is set by the parent.\n */\n const componentRef = React.useRef<HTMLLIElement>(null);\n\n const componentPath = `${name}.${index}`;\n const hasValue = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath) != null\n );\n const isNewItem = useForm(\n 'DynamicComponent',\n (state) => getIn<{ id?: unknown }>(state.values, componentPath)?.id == null\n );\n const rawError = useForm('DynamicComponent', (state) => getIn(state.errors, componentPath));\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>(\n isNewItem ? accordionValue : ''\n );\n\n React.useEffect(() => {\n if (rawError && hasValue) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, hasValue, accordionValue]);\n\n /**\n * When the parent flags this component as newly added via `forceOpen`,\n * expand the accordion and scroll it into view so the user can immediately\n * start editing. Once handled, notify the parent so it can clear the flag.\n */\n React.useEffect(() => {\n if (forceOpen) {\n setCollapseToOpen(accordionValue);\n requestAnimationFrame(() => {\n componentRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n onForceOpenHandled?.();\n });\n }\n }, [forceOpen, accordionValue, onForceOpenHandled]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleRemoveCurrentComponent = React.useCallback(() => {\n onRemoveComponentClick(index);\n }, [onRemoveComponentClick, index]);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: displayTitle }\n )}\n onClick={handleRemoveCurrentComponent}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index - 1, index);\n }}\n disabled={!canMoveUp}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index + 1, index);\n }}\n disabled={!canMoveDown}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index + 1)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = displayTitle ? `${displayName} ${displayTitle}` : displayName;\n\n return (\n <ComponentContainer ref={componentRef} tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <DynamicComponentFields\n componentUid={componentUid}\n index={index}\n layout={componentUid ? components[componentUid]?.layout : undefined}\n name={name}\n >\n {children}\n </DynamicComponentFields>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\ninterface DynamicComponentFieldsProps extends Pick<DynamicComponentProps, 'children'> {\n componentUid?: string;\n index: number;\n layout?: EditFieldLayout[][];\n name: string;\n}\n\nconst DynamicComponentFields = React.memo(\n ({ children, componentUid, index, layout, name }: DynamicComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={{ initial: 4, medium: 6 }}>\n <Grid.Root gap={4}>\n {layout?.map((row) => {\n return (\n <Grid.Item\n col={12}\n key={row.map((field) => field.name).join('.')}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <ResponsiveGridRoot gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({\n ...fieldWithTranslatedLabel,\n size,\n name: fieldName,\n })\n ) : (\n <InputRenderer\n {...fieldWithTranslatedLabel}\n size={size}\n name={fieldName}\n />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n }\n);\n\nDynamicComponentFields.displayName = 'DynamicComponentFields';\n\nconst MemoizedDynamicComponent = React.memo(DynamicComponent);\n\nexport { MemoizedDynamicComponent as DynamicComponent };\nexport type { DynamicComponentProps };\n"],"names":["EMPTY_DYNAMIC_COMPONENTS_BY_CATEGORY","DynamicComponent","componentUid","disabled","index","name","onRemoveComponentClick","onMoveComponent","onGrabItem","onDropItem","onCancel","dynamicComponentsByCategory","onAddComponent","totalLength","children","forceOpen","onForceOpenHandled","formatMessage","useIntl","currentDocumentMeta","useDocumentContext","isDesktop","useIsDesktop","edit","components","useDocumentLayout","model","mainField","settings","mainFieldValue","useForm","state","getIn","values","displayedValue","String","trim","displayTitle","length","icon","displayName","React","useMemo","id","getTranslation","defaultMessage","category","split","find","component","uid","tempKey","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","type","ItemTypes","DYNAMIC_ZONE","item","onMoveItem","useEffect","getEmptyImage","captureDraggingState","accordionValue","useId","componentRef","useRef","componentPath","hasValue","isNewItem","rawError","errors","collapseToOpen","setCollapseToOpen","useState","requestAnimationFrame","current","scrollIntoView","behavior","block","composedBoxRefs","useComposedRefs","canMoveUp","canMoveDown","handleRemoveCurrentComponent","useCallback","accordionActions","_jsxs","_Fragment","_jsx","IconButton","variant","label","onClick","Trash","e","stopPropagation","data-handler-id","ref","onKeyDown","Drag","ArrowUp","ArrowDown","Menu","Root","Trigger","size","endIcon","paddingLeft","paddingRight","tag","More","aria-hidden","focusable","Content","SubRoot","SubTrigger","SubContent","Object","entries","map","Fragment","Label","upperFirst","Item","onSelect","accordionTitle","ComponentContainer","width","Flex","justifyContent","Rectangle","background","StyledBox","hasRadius","Preview","Accordion","value","onValueChange","Header","COMPONENT_ICONS","dashboard","Actions","AccordionContentRadius","DynamicComponentFields","layout","undefined","styled","Box","theme","shadows","tableShadow","spaces","span","colors","primary100","primary500","memo","padding","initial","medium","Grid","gap","row","col","xs","direction","alignItems","ResponsiveGridRoot","field","fieldName","fieldWithTranslatedLabel","ResponsiveGridItem","s","InputRenderer","join","MemoizedDynamicComponent"],"mappings":"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"}
|
|
@@ -11,18 +11,15 @@ var reactRouterDom = require('react-router-dom');
|
|
|
11
11
|
var styledComponents = require('styled-components');
|
|
12
12
|
var collections = require('../../../../../constants/collections.js');
|
|
13
13
|
var plugin = require('../../../../../constants/plugin.js');
|
|
14
|
-
var
|
|
15
|
-
require('date-fns');
|
|
16
|
-
var DocumentStatus = require('../../DocumentStatus.js');
|
|
14
|
+
var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
|
|
17
15
|
var useDocument = require('../../../../../hooks/useDocument.js');
|
|
18
|
-
require('@strapi/admin/strapi-admin/ee');
|
|
19
|
-
require('../../../../../preview/pages/Preview.js');
|
|
20
|
-
var documents = require('../../../../../services/documents.js');
|
|
21
16
|
var useDocumentLayout = require('../../../../../hooks/useDocumentLayout.js');
|
|
22
|
-
var
|
|
17
|
+
var documents = require('../../../../../services/documents.js');
|
|
18
|
+
var api = require('../../../../../utils/api.js');
|
|
23
19
|
var objects = require('../../../../../utils/objects.js');
|
|
24
20
|
var validation = require('../../../../../utils/validation.js');
|
|
25
21
|
var DocumentActions = require('../../DocumentActions.js');
|
|
22
|
+
var DocumentStatus = require('../../DocumentStatus.js');
|
|
26
23
|
var FormLayout = require('../../FormLayout.js');
|
|
27
24
|
var ComponentContext = require('../ComponentContext.js');
|
|
28
25
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelationModal.js","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 type StrapiAppContextValue,\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 { generateNKeysBetween } from 'fractional-indexing';\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, useDocumentRBAC } 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 { setIn } from '../../../../../utils/objects';\nimport { createYupSchema } from '../../../../../utils/validation';\nimport { DocumentActionButton } from '../../../components/DocumentActions';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { FormLayout, type FormLayoutProps } 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\n/**\n * A local \"connect\" edit waiting to be applied to a document that isn't the modal's current one.\n * Needed because every level of a nested relation-on-the-fly chain (root document aside) shares\n * one Form instance whose values get wholesale-replaced by fresh initialValues on every\n * `documentHistory` navigation — writing the field directly while a different level is current\n * would land on the wrong document and then immediately be discarded. Instead the patch is stashed\n * here, keyed by the target document, and merged back into that document's initialValues once it\n * becomes current again (see `RelationModal`'s `initialValues` below).\n */\ninterface PendingConnectPatch {\n fieldToConnect: string;\n relationValue: AnyData;\n componentUIDPath?: string;\n componentUID?: string;\n}\n\nconst getDocumentHistoryKey = (meta: Pick<DocumentMeta, 'model' | 'documentId'>) =>\n `${meta.model}::${meta.documentId}`;\n\nconst EMPTY_PENDING_CONNECTS: PendingConnectPatch[] = [];\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 // Sets a field directly on the parent's own (live, unsaved) form state, so connecting a\n // newly-created relation doesn't require persisting the whole parent document to the server.\n setParentFormValue?: (path: string, value: unknown) => void;\n pendingConnects: Record<string, PendingConnectPatch[]>;\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 setParentFormValue?: (path: string, value: unknown) => void;\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 // Present when the document being connected belongs to a NESTED parent (one still further\n // up `documentHistory`, not the root document) — see `pendingConnects` on `State`.\n connectPatch?: PendingConnectPatch;\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 | {\n type: 'CLEAR_PENDING_CONNECTS';\n payload: { documentMeta: Pick<DocumentMeta, 'model' | 'documentId'> };\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 setParentFormValue: action.payload.setParentFormValue,\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 setParentFormValue: hasToResetDocumentHistory\n ? undefined\n : action.payload.setParentFormValue,\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 pendingConnects: {},\n };\n case 'GO_TO_CREATED_RELATION': {\n // Anything beyond the second-to-last history entry is a nested parent still open further up\n // the stack — the root document (outside documentHistory entirely) is handled directly via\n // setParentFormValue instead, since its Form never gets replaced by modal navigation.\n const nestedParentMeta =\n state.documentHistory.length >= 2 ? state.documentHistory.at(-2) : undefined;\n const pendingConnects =\n nestedParentMeta && action.payload.connectPatch\n ? {\n ...state.pendingConnects,\n [getDocumentHistoryKey(nestedParentMeta)]: [\n ...(state.pendingConnects[getDocumentHistoryKey(nestedParentMeta)] ?? []),\n action.payload.connectPatch,\n ],\n }\n : state.pendingConnects;\n\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 setParentFormValue: undefined,\n pendingConnects,\n };\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 setParentFormValue: undefined,\n pendingConnects: {},\n };\n case 'SET_HAS_UNSAVED_CHANGES':\n return {\n ...state,\n hasUnsavedChanges: action.payload.hasUnsavedChanges,\n };\n case 'CLEAR_PENDING_CONNECTS': {\n const key = getDocumentHistoryKey(action.payload.documentMeta);\n\n if (!(key in state.pendingConnects)) {\n return state;\n }\n\n const pendingConnects = { ...state.pendingConnects };\n delete pendingConnects[key];\n\n return { ...state, pendingConnects };\n }\n default:\n return state;\n }\n}\n\n/**\n * Whether any relation-on-the-fly modal is currently open, anywhere on the page.\n *\n * The modal's React context (`RelationModalProvider`, below) only reaches the modal's own subtree\n * (the relation field that renders it), so components mounted outside that subtree — like the\n * background entry's save/publish buttons in the side panel — can't read `state.isModalOpen` from\n * context. This module-level counter is the cross-tree signal those components use instead, so\n * they can tell a relation modal is open and suppress their own keyboard shortcuts while it is.\n */\nlet openRelationModalCount = 0;\n\nconst isAnyRelationModalOpen = () => openRelationModalCount > 0;\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 pendingConnects: {},\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 const { isModalOpen } = state;\n React.useEffect(() => {\n if (!isModalOpen) {\n return;\n }\n\n openRelationModalCount += 1;\n\n return () => {\n openRelationModalCount -= 1;\n };\n }, [isModalOpen]);\n\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\n/**\n * Pre-fill the inverse relation with the parent that opened create-on-the-fly.\n * One-way relations have no inverse; unsaved parents have no documentId.\n */\nconst prefillParentRelation = ({\n initialValues,\n fieldToConnect,\n childSchema,\n parentDocument,\n parentModel,\n}: {\n initialValues?: AnyData;\n fieldToConnect?: string;\n childSchema?: { attributes?: Record<string, unknown> };\n parentDocument?: Record<string, unknown>;\n parentModel?: string;\n}): AnyData | undefined => {\n const documentId = parentDocument?.documentId;\n // mappedBy/inversedBy names a top-level attribute, not a component path.\n const parentFieldName = fieldToConnect;\n\n if (!initialValues || typeof documentId !== 'string' || !documentId || !parentFieldName) {\n return initialValues;\n }\n\n const inverseField = Object.entries(childSchema?.attributes ?? {}).find(([, attribute]) => {\n const relation = attribute as {\n type?: string;\n target?: string;\n inversedBy?: string;\n mappedBy?: string;\n };\n\n return (\n relation.type === 'relation' &&\n relation.target === parentModel &&\n (relation.inversedBy === parentFieldName || relation.mappedBy === parentFieldName)\n );\n })?.[0];\n\n if (!inverseField) {\n return initialValues;\n }\n\n const id = parentDocument.id ?? documentId;\n\n return {\n ...initialValues,\n [inverseField]: {\n connect: [\n {\n ...Object.fromEntries(\n Object.entries(parentDocument).filter(\n ([, value]) =>\n value === null || ['string', 'number', 'boolean'].includes(typeof value)\n )\n ),\n id,\n documentId,\n apiData: {\n id,\n documentId,\n locale: parentDocument.locale,\n isTemporary: true,\n },\n __temp_key__: generateNKeysBetween(null, null, 1)[0],\n },\n ],\n disconnect: [],\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 const rootDocumentMeta = useRelationModal('RelationModalForm', (state) => state.rootDocumentMeta);\n const parentDocumentMeta = state.documentHistory.at(-2) ?? rootDocumentMeta;\n const parentDocument = useDocument(parentDocumentMeta, {\n skip: !isCreating || !state.fieldToConnect,\n });\n\n const pendingConnectsForCurrent =\n useRelationModal(\n 'RelationModalForm',\n (state) => state.state.pendingConnects[getDocumentHistoryKey(currentDocumentMeta)],\n false\n ) ?? EMPTY_PENDING_CONNECTS;\n\n // Re-apply any local \"connect\" edits recorded for this document while a nested child was open,\n // since navigating here just replaced the Form's values with a fresh, patch-less snapshot.\n const initialValues = React.useMemo(() => {\n const baseInitialValues = prefillParentRelation({\n initialValues: currentDocument.getInitialFormValues(isCreating),\n fieldToConnect: isCreating ? state.fieldToConnect : undefined,\n childSchema: currentDocument.schema,\n parentDocument: parentDocument.document,\n parentModel: parentDocumentMeta.model,\n });\n\n // The document (and its default values) may still be loading, e.g. right after navigating\n // back to a document that now has a real documentId. Let the loading guard below handle it\n // instead of trying to patch a value that doesn't exist yet.\n if (!baseInitialValues) {\n return baseInitialValues;\n }\n\n return pendingConnectsForCurrent.reduce((values, patch) => {\n const withRelation = setIn(values, patch.fieldToConnect, patch.relationValue);\n\n return patch.componentUIDPath && patch.componentUID !== undefined\n ? setIn(withRelation, patch.componentUIDPath, patch.componentUID)\n : withRelation;\n }, baseInitialValues);\n }, [\n currentDocument,\n isCreating,\n state.fieldToConnect,\n parentDocument.document,\n parentDocumentMeta.model,\n pendingConnectsForCurrent,\n ]);\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={initialValues}\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 setParentFormValue: state.setParentFormValue,\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 <RelationModalFormBody\n currentDocument={currentDocument}\n documentTitle={documentTitle}\n hasDraftAndPublished={hasDraftAndPublished}\n layout={documentLayoutResponse.edit.layout}\n plugins={plugins}\n props={props}\n />\n </DocumentRBAC>\n );\n};\n\ninterface RelationModalFormBodyProps {\n currentDocument: ReturnType<UseDocument>;\n documentTitle: string;\n hasDraftAndPublished: boolean;\n layout: FormLayoutProps['layout'];\n plugins: StrapiAppContextValue['plugins'];\n props: DocumentActionProps;\n}\n\n/**\n * Rendered as the child of `DocumentRBAC` so it can wait on `useDocumentRBAC`'s `isLoading`\n * before showing the document actions and form — otherwise fields briefly render as\n * not-allowed while permissions are still resolving.\n */\nconst RelationModalFormBody = ({\n currentDocument,\n documentTitle,\n hasDraftAndPublished,\n layout,\n plugins,\n props,\n}: RelationModalFormBodyProps) => {\n const { formatMessage } = useIntl();\n const isLoadingActionsRBAC = useDocumentRBAC('RelationModalFormBody', (state) => state.isLoading);\n\n if (isLoadingActionsRBAC) {\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 return (\n <>\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 layout={layout} document={currentDocument} hasBackground={false} />\n </Box>\n </Flex>\n </>\n );\n};\n\nexport {\n reducer,\n RelationModalRenderer,\n useRelationModal,\n isAnyRelationModalOpen,\n getFullPageUrl,\n generateCreateUrl,\n prefillParentRelation,\n RelationModalFormBody,\n};\nexport type { State, Action, RelationOpenMode, PendingConnectPatch, RelationModalFormBodyProps };\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","getDocumentHistoryKey","meta","EMPTY_PENDING_CONNECTS","reducer","state","action","type","hasUnsavedChanges","payload","shouldBypassConfirmation","confirmDialogIntent","document","fieldToConnect","fieldToConnectUID","getParentFormValues","setParentFormValue","lastItemDocumentHistory","documentHistory","at","hasToResetDocumentHistory","isModalOpen","slice","pendingConnects","nestedParentMeta","length","connectPatch","key","documentMeta","openRelationModalCount","isAnyRelationModalOpen","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","useEffect","_jsx","RelationModal","relation","RelationModalTrigger","NestedRelationRenderer","RelationModalRenderer","isNested","generateCreateUrl","prefillParentRelation","initialValues","childSchema","parentDocument","parentModel","parentFieldName","inverseField","Object","entries","attributes","find","attribute","target","inversedBy","mappedBy","id","connect","fromEntries","filter","value","includes","apiData","isTemporary","__temp_key__","generateNKeysBetween","disconnect","formatMessage","useIntl","navigate","useNavigate","parentDocumentMeta","skip","pendingConnectsForCurrent","baseInitialValues","getInitialFormValues","schema","reduce","values","patch","withRelation","setIn","relationValue","componentUIDPath","componentUID","ComponentProvider","level","uid","_jsxs","Root","open","onOpenChange","Header","gap","Flex","justifyContent","alignItems","width","IconButton","withTooltip","label","defaultMessage","variant","disabled","onClick","marginRight","ArrowLeft","Typography","tag","fontWeight","ArrowsOut","Body","FormContext","method","validate","options","yupSchema","createYupSchema","components","status","abortEarly","RelationModalBody","pathname","search","useLocation","triggerRefetchDocument","useLazyGetDocumentQuery","modified","useForm","isSubmitting","handleCloseModal","handleRedirection","editViewUrl","fullPageUrl","isRootDocumentUrl","handleConfirm","_Fragment","RelationModalForm","Dialog","ConfirmDialog","onConfirm","onCancel","StyledRelationLink","to","rel","StyledTextButton","TextButton","theme","fontSizes","RouterLink","colors","primary600","primary700","plugins","useStrapiApp","permissions","isLoading","isLoadingPermissions","error","useRBAC","PERMISSIONS","map","subject","Loader","small","height","EmptyStateLayout","icon","WarningCircle","content","documentTitle","getTitle","mainField","hasDraftAndPublished","draftAndPublish","activeTab","DocumentRBAC","RelationModalFormBody","layout","isLoadingActionsRBAC","useDocumentRBAC","direction","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","actions","filteredActions","position","flat","primaryAction","secondaryAction","DocumentActionButton","Box","DocumentStatus","flex","overflow","paddingTop","FormLayout","hasBackground"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RelationModal.js","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 type StrapiAppContextValue,\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 { generateNKeysBetween } from 'fractional-indexing';\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 { DocumentRBAC, useDocumentRBAC } 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 { buildValidParams } from '../../../../../utils/api';\nimport { setIn } from '../../../../../utils/objects';\nimport { createYupSchema } from '../../../../../utils/validation';\nimport { DocumentActionButton } from '../../../components/DocumentActions';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { FormLayout, type FormLayoutProps } 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\n/**\n * A local \"connect\" edit waiting to be applied to a document that isn't the modal's current one.\n * Needed because every level of a nested relation-on-the-fly chain (root document aside) shares\n * one Form instance whose values get wholesale-replaced by fresh initialValues on every\n * `documentHistory` navigation — writing the field directly while a different level is current\n * would land on the wrong document and then immediately be discarded. Instead the patch is stashed\n * here, keyed by the target document, and merged back into that document's initialValues once it\n * becomes current again (see `RelationModal`'s `initialValues` below).\n */\ninterface PendingConnectPatch {\n fieldToConnect: string;\n relationValue: AnyData;\n componentUIDPath?: string;\n componentUID?: string;\n}\n\nconst getDocumentHistoryKey = (meta: Pick<DocumentMeta, 'model' | 'documentId'>) =>\n `${meta.model}::${meta.documentId}`;\n\nconst EMPTY_PENDING_CONNECTS: PendingConnectPatch[] = [];\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 // Sets a field directly on the parent's own (live, unsaved) form state, so connecting a\n // newly-created relation doesn't require persisting the whole parent document to the server.\n setParentFormValue?: (path: string, value: unknown) => void;\n pendingConnects: Record<string, PendingConnectPatch[]>;\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 setParentFormValue?: (path: string, value: unknown) => void;\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 // Present when the document being connected belongs to a NESTED parent (one still further\n // up `documentHistory`, not the root document) — see `pendingConnects` on `State`.\n connectPatch?: PendingConnectPatch;\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 | {\n type: 'CLEAR_PENDING_CONNECTS';\n payload: { documentMeta: Pick<DocumentMeta, 'model' | 'documentId'> };\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 setParentFormValue: action.payload.setParentFormValue,\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 setParentFormValue: hasToResetDocumentHistory\n ? undefined\n : action.payload.setParentFormValue,\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 pendingConnects: {},\n };\n case 'GO_TO_CREATED_RELATION': {\n // Anything beyond the second-to-last history entry is a nested parent still open further up\n // the stack — the root document (outside documentHistory entirely) is handled directly via\n // setParentFormValue instead, since its Form never gets replaced by modal navigation.\n const nestedParentMeta =\n state.documentHistory.length >= 2 ? state.documentHistory.at(-2) : undefined;\n const pendingConnects =\n nestedParentMeta && action.payload.connectPatch\n ? {\n ...state.pendingConnects,\n [getDocumentHistoryKey(nestedParentMeta)]: [\n ...(state.pendingConnects[getDocumentHistoryKey(nestedParentMeta)] ?? []),\n action.payload.connectPatch,\n ],\n }\n : state.pendingConnects;\n\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 setParentFormValue: undefined,\n pendingConnects,\n };\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 setParentFormValue: undefined,\n pendingConnects: {},\n };\n case 'SET_HAS_UNSAVED_CHANGES':\n return {\n ...state,\n hasUnsavedChanges: action.payload.hasUnsavedChanges,\n };\n case 'CLEAR_PENDING_CONNECTS': {\n const key = getDocumentHistoryKey(action.payload.documentMeta);\n\n if (!(key in state.pendingConnects)) {\n return state;\n }\n\n const pendingConnects = { ...state.pendingConnects };\n delete pendingConnects[key];\n\n return { ...state, pendingConnects };\n }\n default:\n return state;\n }\n}\n\n/**\n * Whether any relation-on-the-fly modal is currently open, anywhere on the page.\n *\n * The modal's React context (`RelationModalProvider`, below) only reaches the modal's own subtree\n * (the relation field that renders it), so components mounted outside that subtree — like the\n * background entry's save/publish buttons in the side panel — can't read `state.isModalOpen` from\n * context. This module-level counter is the cross-tree signal those components use instead, so\n * they can tell a relation modal is open and suppress their own keyboard shortcuts while it is.\n */\nlet openRelationModalCount = 0;\n\nconst isAnyRelationModalOpen = () => openRelationModalCount > 0;\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 pendingConnects: {},\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 const { isModalOpen } = state;\n React.useEffect(() => {\n if (!isModalOpen) {\n return;\n }\n\n openRelationModalCount += 1;\n\n return () => {\n openRelationModalCount -= 1;\n };\n }, [isModalOpen]);\n\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\n/**\n * Pre-fill the inverse relation with the parent that opened create-on-the-fly.\n * One-way relations have no inverse; unsaved parents have no documentId.\n */\nconst prefillParentRelation = ({\n initialValues,\n fieldToConnect,\n childSchema,\n parentDocument,\n parentModel,\n}: {\n initialValues?: AnyData;\n fieldToConnect?: string;\n childSchema?: { attributes?: Record<string, unknown> };\n parentDocument?: Record<string, unknown>;\n parentModel?: string;\n}): AnyData | undefined => {\n const documentId = parentDocument?.documentId;\n // mappedBy/inversedBy names a top-level attribute, not a component path.\n const parentFieldName = fieldToConnect;\n\n if (!initialValues || typeof documentId !== 'string' || !documentId || !parentFieldName) {\n return initialValues;\n }\n\n const inverseField = Object.entries(childSchema?.attributes ?? {}).find(([, attribute]) => {\n const relation = attribute as {\n type?: string;\n target?: string;\n inversedBy?: string;\n mappedBy?: string;\n };\n\n return (\n relation.type === 'relation' &&\n relation.target === parentModel &&\n (relation.inversedBy === parentFieldName || relation.mappedBy === parentFieldName)\n );\n })?.[0];\n\n if (!inverseField) {\n return initialValues;\n }\n\n const id = parentDocument.id ?? documentId;\n\n return {\n ...initialValues,\n [inverseField]: {\n connect: [\n {\n ...Object.fromEntries(\n Object.entries(parentDocument).filter(\n ([, value]) =>\n value === null || ['string', 'number', 'boolean'].includes(typeof value)\n )\n ),\n id,\n documentId,\n apiData: {\n id,\n documentId,\n locale: parentDocument.locale,\n isTemporary: true,\n },\n __temp_key__: generateNKeysBetween(null, null, 1)[0],\n },\n ],\n disconnect: [],\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 const rootDocumentMeta = useRelationModal('RelationModalForm', (state) => state.rootDocumentMeta);\n const parentDocumentMeta = state.documentHistory.at(-2) ?? rootDocumentMeta;\n const parentDocument = useDocument(parentDocumentMeta, {\n skip: !isCreating || !state.fieldToConnect,\n });\n\n const pendingConnectsForCurrent =\n useRelationModal(\n 'RelationModalForm',\n (state) => state.state.pendingConnects[getDocumentHistoryKey(currentDocumentMeta)],\n false\n ) ?? EMPTY_PENDING_CONNECTS;\n\n // Re-apply any local \"connect\" edits recorded for this document while a nested child was open,\n // since navigating here just replaced the Form's values with a fresh, patch-less snapshot.\n const initialValues = React.useMemo(() => {\n const baseInitialValues = prefillParentRelation({\n initialValues: currentDocument.getInitialFormValues(isCreating),\n fieldToConnect: isCreating ? state.fieldToConnect : undefined,\n childSchema: currentDocument.schema,\n parentDocument: parentDocument.document,\n parentModel: parentDocumentMeta.model,\n });\n\n // The document (and its default values) may still be loading, e.g. right after navigating\n // back to a document that now has a real documentId. Let the loading guard below handle it\n // instead of trying to patch a value that doesn't exist yet.\n if (!baseInitialValues) {\n return baseInitialValues;\n }\n\n return pendingConnectsForCurrent.reduce((values, patch) => {\n const withRelation = setIn(values, patch.fieldToConnect, patch.relationValue);\n\n return patch.componentUIDPath && patch.componentUID !== undefined\n ? setIn(withRelation, patch.componentUIDPath, patch.componentUID)\n : withRelation;\n }, baseInitialValues);\n }, [\n currentDocument,\n isCreating,\n state.fieldToConnect,\n parentDocument.document,\n parentDocumentMeta.model,\n pendingConnectsForCurrent,\n ]);\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={initialValues}\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 setParentFormValue: state.setParentFormValue,\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 <RelationModalFormBody\n currentDocument={currentDocument}\n documentTitle={documentTitle}\n hasDraftAndPublished={hasDraftAndPublished}\n layout={documentLayoutResponse.edit.layout}\n plugins={plugins}\n props={props}\n />\n </DocumentRBAC>\n );\n};\n\ninterface RelationModalFormBodyProps {\n currentDocument: ReturnType<UseDocument>;\n documentTitle: string;\n hasDraftAndPublished: boolean;\n layout: FormLayoutProps['layout'];\n plugins: StrapiAppContextValue['plugins'];\n props: DocumentActionProps;\n}\n\n/**\n * Rendered as the child of `DocumentRBAC` so it can wait on `useDocumentRBAC`'s `isLoading`\n * before showing the document actions and form — otherwise fields briefly render as\n * not-allowed while permissions are still resolving.\n */\nconst RelationModalFormBody = ({\n currentDocument,\n documentTitle,\n hasDraftAndPublished,\n layout,\n plugins,\n props,\n}: RelationModalFormBodyProps) => {\n const { formatMessage } = useIntl();\n const isLoadingActionsRBAC = useDocumentRBAC('RelationModalFormBody', (state) => state.isLoading);\n\n if (isLoadingActionsRBAC) {\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 return (\n <>\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 layout={layout} document={currentDocument} hasBackground={false} />\n </Box>\n </Flex>\n </>\n );\n};\n\nexport {\n reducer,\n RelationModalRenderer,\n useRelationModal,\n isAnyRelationModalOpen,\n getFullPageUrl,\n generateCreateUrl,\n prefillParentRelation,\n RelationModalFormBody,\n};\nexport type { State, Action, RelationOpenMode, PendingConnectPatch, RelationModalFormBodyProps };\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","getDocumentHistoryKey","meta","EMPTY_PENDING_CONNECTS","reducer","state","action","type","hasUnsavedChanges","payload","shouldBypassConfirmation","confirmDialogIntent","document","fieldToConnect","fieldToConnectUID","getParentFormValues","setParentFormValue","lastItemDocumentHistory","documentHistory","at","hasToResetDocumentHistory","isModalOpen","slice","pendingConnects","nestedParentMeta","length","connectPatch","key","documentMeta","openRelationModalCount","isAnyRelationModalOpen","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","useEffect","_jsx","RelationModal","relation","RelationModalTrigger","NestedRelationRenderer","RelationModalRenderer","isNested","generateCreateUrl","prefillParentRelation","initialValues","childSchema","parentDocument","parentModel","parentFieldName","inverseField","Object","entries","attributes","find","attribute","target","inversedBy","mappedBy","id","connect","fromEntries","filter","value","includes","apiData","isTemporary","__temp_key__","generateNKeysBetween","disconnect","formatMessage","useIntl","navigate","useNavigate","parentDocumentMeta","skip","pendingConnectsForCurrent","baseInitialValues","getInitialFormValues","schema","reduce","values","patch","withRelation","setIn","relationValue","componentUIDPath","componentUID","ComponentProvider","level","uid","_jsxs","Root","open","onOpenChange","Header","gap","Flex","justifyContent","alignItems","width","IconButton","withTooltip","label","defaultMessage","variant","disabled","onClick","marginRight","ArrowLeft","Typography","tag","fontWeight","ArrowsOut","Body","FormContext","method","validate","options","yupSchema","createYupSchema","components","status","abortEarly","RelationModalBody","pathname","search","useLocation","triggerRefetchDocument","useLazyGetDocumentQuery","modified","useForm","isSubmitting","handleCloseModal","handleRedirection","editViewUrl","fullPageUrl","isRootDocumentUrl","handleConfirm","_Fragment","RelationModalForm","Dialog","ConfirmDialog","onConfirm","onCancel","StyledRelationLink","to","rel","StyledTextButton","TextButton","theme","fontSizes","RouterLink","colors","primary600","primary700","plugins","useStrapiApp","permissions","isLoading","isLoadingPermissions","error","useRBAC","PERMISSIONS","map","subject","Loader","small","height","EmptyStateLayout","icon","WarningCircle","content","documentTitle","getTitle","mainField","hasDraftAndPublished","draftAndPublish","activeTab","DocumentRBAC","RelationModalFormBody","layout","isLoadingActionsRBAC","useDocumentRBAC","direction","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","actions","filteredActions","position","flat","primaryAction","secondaryAction","DocumentActionButton","Box","DocumentStatus","flex","overflow","paddingTop","FormLayout","hasBackground"],"mappings":"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"}
|
|
@@ -9,18 +9,15 @@ import { useNavigate, Link, useLocation } from 'react-router-dom';
|
|
|
9
9
|
import { styled } from 'styled-components';
|
|
10
10
|
import { COLLECTION_TYPES, SINGLE_TYPES } from '../../../../../constants/collections.mjs';
|
|
11
11
|
import { PERMISSIONS } from '../../../../../constants/plugin.mjs';
|
|
12
|
-
import {
|
|
13
|
-
import 'date-fns';
|
|
14
|
-
import { DocumentStatus } from '../../DocumentStatus.mjs';
|
|
12
|
+
import { DocumentRBAC, useDocumentRBAC } from '../../../../../features/DocumentRBAC.mjs';
|
|
15
13
|
import { useDoc, useDocument } from '../../../../../hooks/useDocument.mjs';
|
|
16
|
-
import '@strapi/admin/strapi-admin/ee';
|
|
17
|
-
import '../../../../../preview/pages/Preview.mjs';
|
|
18
|
-
import { useLazyGetDocumentQuery } from '../../../../../services/documents.mjs';
|
|
19
14
|
import { useDocumentLayout } from '../../../../../hooks/useDocumentLayout.mjs';
|
|
20
|
-
import {
|
|
15
|
+
import { useLazyGetDocumentQuery } from '../../../../../services/documents.mjs';
|
|
16
|
+
import { buildValidParams } from '../../../../../utils/api.mjs';
|
|
21
17
|
import { setIn } from '../../../../../utils/objects.mjs';
|
|
22
18
|
import { createYupSchema } from '../../../../../utils/validation.mjs';
|
|
23
19
|
import { DocumentActionButton } from '../../DocumentActions.mjs';
|
|
20
|
+
import { DocumentStatus } from '../../DocumentStatus.mjs';
|
|
24
21
|
import { FormLayout } from '../../FormLayout.mjs';
|
|
25
22
|
import { ComponentProvider } from '../ComponentContext.mjs';
|
|
26
23
|
|