@strapi/content-manager 5.61.1 → 5.62.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/components/ConfigurationForm/Fields.js +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +3 -3
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/features/I18nSharedFieldsLock.js +54 -0
- package/dist/admin/features/I18nSharedFieldsLock.js.map +1 -0
- package/dist/admin/features/I18nSharedFieldsLock.mjs +31 -0
- package/dist/admin/features/I18nSharedFieldsLock.mjs.map +1 -0
- package/dist/admin/history/components/VersionInputRenderer.js +7 -2
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs +7 -3
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.js +27 -8
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.mjs +29 -10
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
- package/dist/admin/hooks/useDocument.js +11 -13
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +11 -13
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/hooks/useI18nFieldLock.js +169 -0
- package/dist/admin/hooks/useI18nFieldLock.js.map +1 -0
- package/dist/admin/hooks/useI18nFieldLock.mjs +140 -0
- package/dist/admin/hooks/useI18nFieldLock.mjs.map +1 -0
- package/dist/admin/hooks/usePersistentQueryParams.js +16 -3
- package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
- package/dist/admin/hooks/usePersistentQueryParams.mjs +16 -3
- package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
- package/dist/admin/index.js +5 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/modules/app.js +8 -1
- package/dist/admin/modules/app.js.map +1 -1
- package/dist/admin/modules/app.mjs +8 -2
- package/dist/admin/modules/app.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +129 -127
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +129 -127
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +11 -4
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +12 -5
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +31 -21
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +32 -22
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.js +98 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.mjs +96 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.js +1103 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.mjs +1077 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.js +211 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.mjs +183 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js +84 -41
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs +86 -43
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +86 -20
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +89 -23
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +5 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +5 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +142 -22
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +143 -23
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.js +402 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.mjs +389 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +84 -33
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +85 -34
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +17 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +18 -5
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +54 -6
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +54 -6
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +11 -9
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +12 -10
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +9 -4
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +9 -4
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +66 -63
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +66 -63
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +7 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +7 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +14 -9
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +14 -9
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/forms.js +34 -0
- package/dist/admin/pages/EditView/utils/forms.js.map +1 -1
- package/dist/admin/pages/EditView/utils/forms.mjs +34 -1
- package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +2 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +2 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +7 -6
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +7 -6
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +11 -2
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +13 -4
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +15 -5
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +16 -7
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +18 -8
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/components/InputPopover.mjs +19 -9
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +5 -16
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +5 -16
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/fieldUtils.js +2 -0
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
- package/dist/admin/preview/utils/fieldUtils.mjs +2 -1
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
- package/dist/admin/services/api.js +2 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +2 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +21 -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/services/relations.js +47 -1
- package/dist/admin/services/relations.js.map +1 -1
- package/dist/admin/services/relations.mjs +47 -2
- package/dist/admin/services/relations.mjs.map +1 -1
- package/dist/admin/src/exports.d.ts +2 -0
- package/dist/admin/src/features/I18nSharedFieldsLock.d.ts +22 -0
- package/dist/admin/src/history/components/VersionInputRenderer.d.ts +7 -1
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useI18nFieldLock.d.ts +61 -0
- package/dist/admin/src/modules/app.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/AddComponentMenu.d.ts +15 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/ComponentCopyModal.d.ts +58 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/CopiedComponents.d.ts +41 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/Initializer.d.ts +7 -3
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/utils/componentCopy.d.ts +115 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +6 -3
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.d.ts +2 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +5 -1
- package/dist/admin/src/pages/EditView/utils/forms.d.ts +13 -2
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +12 -3
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +1 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +25 -21
- package/dist/admin/src/services/homepage.d.ts +1 -1
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +5 -3
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/translations/en.json.js +41 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +41 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/controllers/relations.js +4 -2
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +4 -2
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/utils/metadata.js +3 -1
- package/dist/server/controllers/utils/metadata.js.map +1 -1
- package/dist/server/controllers/utils/metadata.mjs +3 -1
- package/dist/server/controllers/utils/metadata.mjs.map +1 -1
- package/dist/server/history/services/utils.js +3 -1
- package/dist/server/history/services/utils.js.map +1 -1
- package/dist/server/history/services/utils.mjs +3 -1
- package/dist/server/history/services/utils.mjs.map +1 -1
- package/dist/server/homepage/services/homepage-query-utils.js +14 -0
- package/dist/server/homepage/services/homepage-query-utils.js.map +1 -1
- package/dist/server/homepage/services/homepage-query-utils.mjs +14 -1
- package/dist/server/homepage/services/homepage-query-utils.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +1 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +2 -2
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/mcp/sanitizers/shape-relations.js +1 -3
- package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -1
- package/dist/server/mcp/sanitizers/shape-relations.mjs +1 -3
- package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.js +2 -1
- package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.mjs +2 -1
- package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
- package/dist/server/services/document-manager.js +3 -2
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +3 -2
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +92 -4
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +92 -4
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/permission-checker.js +20 -8
- package/dist/server/services/permission-checker.js.map +1 -1
- package/dist/server/services/permission-checker.mjs +20 -8
- package/dist/server/services/permission-checker.mjs.map +1 -1
- package/dist/server/services/uid.js +2 -1
- package/dist/server/services/uid.js.map +1 -1
- package/dist/server/services/uid.mjs +2 -1
- package/dist/server/services/uid.mjs.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage-query-utils.d.ts +6 -0
- package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +21 -7
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +5 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +21 -7
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts +6 -5
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/uid.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +7 -0
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/single-types.d.ts +4 -0
- package/dist/shared/contracts/single-types.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [liveText, setLiveText] = React.useState('');\n const [openComponentKey, setOpenComponentKey] = React.useState<string | null>(null);\n\n const {\n currentDocument: { components, isLoading },\n } = useDocumentContext('DynamicZone');\n\n const disabled = disabledProp || isLoading;\n const addFieldRow = useForm('DynamicZone', (state) => state.addFieldRow);\n const removeFieldRow = useForm('DynamicZone', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('DynamicZone', (state) => state.moveFieldRow);\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: string;\n };\n\n const { value: rawValue, error } = useField<Array<DzWithTempKey>>(name);\n // `value` can be `null` (for example after closing a relation modal). Match\n // RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n /**\n * Track the previous value array to detect when a new component is added.\n * When the array grows, we find the newly added item and force its accordion open.\n * This mirrors the same pattern used in RepeatableComponent.\n */\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((v) => v.__temp_key__));\n const newItem = value.find((v) => !prevKeys.has(v.__temp_key__));\n if (newItem) {\n setOpenComponentKey(newItem.__temp_key__);\n }\n } else if (openComponentKey !== null) {\n // Component was removed before forceOpen was handled — clear stale key\n const currentKeys = new Set(value.map((v) => v.__temp_key__));\n if (!currentKeys.has(openComponentKey)) {\n setOpenComponentKey(null);\n }\n }\n }, [value, prevValue, openComponentKey]);\n\n const handleForceOpenHandled = React.useCallback(() => {\n setOpenComponentKey(null);\n }, []);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const componentSchema = components[componentUid];\n\n if (!componentSchema) {\n return acc;\n }\n\n const { category, info } = componentSchema;\n\n const component = {\n uid: componentUid,\n displayName: info.displayName,\n icon: info.icon,\n preview: info.preview,\n };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = React.useCallback(\n (uid: string, position?: number) => {\n const schema = components[uid];\n\n if (!schema) {\n return;\n }\n\n setAddComponentIsOpen(false);\n\n const form = createDefaultForm(schema, components);\n const transformations = flow(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n },\n [addFieldRow, components, name]\n );\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleRemoveComponent = React.useCallback(\n (currentIndex: number) => {\n removeFieldRow(name, currentIndex);\n },\n [name, removeFieldRow]\n );\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={{ initial: 4, medium: 6 }}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n totalLength={dynamicDisplayedComponentsLength}\n forceOpen={openComponentKey === field.__temp_key__}\n onForceOpenHandled={handleForceOpenHandled}\n >\n {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n />\n </Flex>\n </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","liveText","setLiveText","openComponentKey","setOpenComponentKey","currentDocument","components","isLoading","useDocumentContext","addFieldRow","useForm","state","removeFieldRow","moveFieldRow","value","rawValue","error","useField","useMemo","Array","isArray","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItem","find","has","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","preview","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","flow","transformDocument","data","__component","handleClickOpenPicker","prev","type","message","id","getTranslation","handleMoveComponent","newIndex","currentIndex","defaultMessage","item","handleCancel","index","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","initial","medium","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","totalLength","forceOpen","onForceOpenHandled","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Field.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { type AnyData, transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentCopyModal } from '../Component/ComponentCopyModal';\nimport { useCopiedComponents } from '../Component/CopiedComponents';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [componentUidToCopy, setComponentUidToCopy] = React.useState<string | null>(null);\n const [liveText, setLiveText] = React.useState('');\n const [openComponentKey, setOpenComponentKey] = React.useState<string | null>(null);\n // The components copied from another entry are flagged until the form is saved.\n const { isCopied, insertCopies } = useCopiedComponents(name);\n\n const {\n currentDocumentMeta,\n currentDocument: { components, isLoading },\n } = useDocumentContext('DynamicZone');\n const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;\n\n const disabled = disabledProp || isLoading;\n const addFieldRow = useForm('DynamicZone', (state) => state.addFieldRow);\n const removeFieldRow = useForm('DynamicZone', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('DynamicZone', (state) => state.moveFieldRow);\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: string;\n };\n\n const { value: rawValue, error } = useField<Array<DzWithTempKey>>(name);\n // `value` can be `null` (for example after closing a relation modal). Match\n // RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n /**\n * Track the previous value array to detect when a new component is added.\n * When the array grows, we find the newly added item and force its accordion open.\n * This mirrors the same pattern used in RepeatableComponent.\n */\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((v) => v.__temp_key__));\n const newItems = value.filter((v) => !prevKeys.has(v.__temp_key__));\n\n /**\n * Copied components come in filled: they aren't scrolled into view. Like any new block\n * they open expanded, see `DynamicComponent`.\n */\n if (newItems[0] && !newItems.every((item) => isCopied(item.__temp_key__))) {\n setOpenComponentKey(newItems[0].__temp_key__);\n }\n } else if (openComponentKey !== null) {\n // Component was removed before forceOpen was handled — clear stale key\n const currentKeys = new Set(value.map((v) => v.__temp_key__));\n if (!currentKeys.has(openComponentKey)) {\n setOpenComponentKey(null);\n }\n }\n }, [value, prevValue, openComponentKey, isCopied]);\n\n const handleForceOpenHandled = React.useCallback(() => {\n setOpenComponentKey(null);\n }, []);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const componentSchema = components[componentUid];\n\n if (!componentSchema) {\n return acc;\n }\n\n const { category, info } = componentSchema;\n\n const component = {\n uid: componentUid,\n displayName: info.displayName,\n icon: info.icon,\n preview: info.preview,\n };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = React.useCallback(\n (uid: string, position?: number) => {\n const schema = components[uid];\n\n if (!schema) {\n return;\n }\n\n setAddComponentIsOpen(false);\n\n const form = createDefaultForm(schema, components);\n const transformations = flow(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n },\n [addFieldRow, components, name]\n );\n\n const handleCopyComponents = React.useCallback(\n (items: AnyData[]) => {\n // The modal doesn't let more items than there's room for be selected, this is a safety net.\n if (dynamicDisplayedComponentsLength + items.length > max) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n defaultMessage: 'You have already reached the maximum number of fields',\n }),\n });\n\n return false;\n }\n\n setAddComponentIsOpen(false);\n insertCopies(items);\n\n return true;\n },\n [dynamicDisplayedComponentsLength, formatMessage, insertCopies, max, toggleNotification]\n );\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleRemoveComponent = React.useCallback(\n (currentIndex: number) => {\n removeFieldRow(name, currentIndex);\n },\n [name, removeFieldRow]\n );\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={{ initial: 4, medium: 6 }}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n totalLength={dynamicDisplayedComponentsLength}\n forceOpen={openComponentKey === field.__temp_key__}\n onForceOpenHandled={handleForceOpenHandled}\n isCopied={isCopied(field.__temp_key__)}\n >\n {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n onClickCopyComponent={canCopyFromExisting ? setComponentUidToCopy : undefined}\n />\n {componentUidToCopy && (\n <ComponentCopyModal\n componentUid={componentUidToCopy}\n fieldLabel={formatMessage({\n id: componentUidToCopy,\n defaultMessage:\n components[componentUidToCopy]?.info.displayName ?? componentUidToCopy,\n })}\n maxSelection={max - dynamicDisplayedComponentsLength}\n mode=\"dynamiczone\"\n onClose={() => setComponentUidToCopy(null)}\n onInsert={handleCopyComponents}\n selection=\"multiple\"\n sourceFieldName={name}\n />\n )}\n </Flex>\n </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","componentUidToCopy","setComponentUidToCopy","liveText","setLiveText","openComponentKey","setOpenComponentKey","isCopied","insertCopies","useCopiedComponents","currentDocumentMeta","currentDocument","components","isLoading","useDocumentContext","canCopyFromExisting","collectionType","COLLECTION_TYPES","addFieldRow","useForm","state","removeFieldRow","moveFieldRow","value","rawValue","error","useField","useMemo","Array","isArray","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItems","filter","has","every","item","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","preview","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","flow","transformDocument","data","__component","handleCopyComponents","items","type","message","id","getTranslation","defaultMessage","handleClickOpenPicker","prev","handleMoveComponent","newIndex","currentIndex","handleCancel","index","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","initial","medium","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","totalLength","forceOpen","onForceOpenHandled","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent","onClickCopyComponent","ComponentCopyModal","fieldLabel","maxSelection","mode","onClose","onInsert","selection","sourceFieldName"],"mappings":"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"}
|
|
@@ -4,11 +4,14 @@ import { createContext, useForm, useField, useNotification } from '@strapi/admin
|
|
|
4
4
|
import { Flex, Box, VisuallyHidden } from '@strapi/design-system';
|
|
5
5
|
import flow from 'lodash/flow';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
|
+
import { COLLECTION_TYPES } from '../../../../../constants/collections.mjs';
|
|
7
8
|
import { useDocumentContext } from '../../../../../hooks/useDocumentContext.mjs';
|
|
8
9
|
import { usePrev } from '../../../../../hooks/usePrev.mjs';
|
|
9
10
|
import { getTranslation } from '../../../../../utils/translations.mjs';
|
|
10
11
|
import { transformDocument } from '../../../utils/data.mjs';
|
|
11
12
|
import { createDefaultForm } from '../../../utils/forms.mjs';
|
|
13
|
+
import { ComponentCopyModal } from '../Component/ComponentCopyModal.mjs';
|
|
14
|
+
import { useCopiedComponents } from '../Component/CopiedComponents.mjs';
|
|
12
15
|
import { useComponent, ComponentProvider } from '../ComponentContext.mjs';
|
|
13
16
|
import { AddComponentButton } from './AddComponentButton.mjs';
|
|
14
17
|
import { ComponentPicker } from './ComponentPicker.mjs';
|
|
@@ -22,9 +25,13 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
|
|
|
22
25
|
// We cannot use the default props here
|
|
23
26
|
const { max = Infinity, min = -Infinity } = attribute ?? {};
|
|
24
27
|
const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);
|
|
28
|
+
const [componentUidToCopy, setComponentUidToCopy] = React.useState(null);
|
|
25
29
|
const [liveText, setLiveText] = React.useState('');
|
|
26
30
|
const [openComponentKey, setOpenComponentKey] = React.useState(null);
|
|
27
|
-
|
|
31
|
+
// The components copied from another entry are flagged until the form is saved.
|
|
32
|
+
const { isCopied, insertCopies } = useCopiedComponents(name);
|
|
33
|
+
const { currentDocumentMeta, currentDocument: { components, isLoading } } = useDocumentContext('DynamicZone');
|
|
34
|
+
const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;
|
|
28
35
|
const disabled = disabledProp || isLoading;
|
|
29
36
|
const addFieldRow = useForm('DynamicZone', (state)=>state.addFieldRow);
|
|
30
37
|
const removeFieldRow = useForm('DynamicZone', (state)=>state.removeFieldRow);
|
|
@@ -43,9 +50,12 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
|
|
|
43
50
|
React.useEffect(()=>{
|
|
44
51
|
if (prevValue && prevValue.length < value.length) {
|
|
45
52
|
const prevKeys = new Set(prevValue.map((v)=>v.__temp_key__));
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
const newItems = value.filter((v)=>!prevKeys.has(v.__temp_key__));
|
|
54
|
+
/**
|
|
55
|
+
* Copied components come in filled: they aren't scrolled into view. Like any new block
|
|
56
|
+
* they open expanded, see `DynamicComponent`.
|
|
57
|
+
*/ if (newItems[0] && !newItems.every((item)=>isCopied(item.__temp_key__))) {
|
|
58
|
+
setOpenComponentKey(newItems[0].__temp_key__);
|
|
49
59
|
}
|
|
50
60
|
} else if (openComponentKey !== null) {
|
|
51
61
|
// Component was removed before forceOpen was handled — clear stale key
|
|
@@ -57,7 +67,8 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
|
|
|
57
67
|
}, [
|
|
58
68
|
value,
|
|
59
69
|
prevValue,
|
|
60
|
-
openComponentKey
|
|
70
|
+
openComponentKey,
|
|
71
|
+
isCopied
|
|
61
72
|
]);
|
|
62
73
|
const handleForceOpenHandled = React.useCallback(()=>{
|
|
63
74
|
setOpenComponentKey(null);
|
|
@@ -109,6 +120,28 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
|
|
|
109
120
|
components,
|
|
110
121
|
name
|
|
111
122
|
]);
|
|
123
|
+
const handleCopyComponents = React.useCallback((items)=>{
|
|
124
|
+
// The modal doesn't let more items than there's room for be selected, this is a safety net.
|
|
125
|
+
if (dynamicDisplayedComponentsLength + items.length > max) {
|
|
126
|
+
toggleNotification({
|
|
127
|
+
type: 'info',
|
|
128
|
+
message: formatMessage({
|
|
129
|
+
id: getTranslation('components.notification.info.maximum-requirement'),
|
|
130
|
+
defaultMessage: 'You have already reached the maximum number of fields'
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
setAddComponentIsOpen(false);
|
|
136
|
+
insertCopies(items);
|
|
137
|
+
return true;
|
|
138
|
+
}, [
|
|
139
|
+
dynamicDisplayedComponentsLength,
|
|
140
|
+
formatMessage,
|
|
141
|
+
insertCopies,
|
|
142
|
+
max,
|
|
143
|
+
toggleNotification
|
|
144
|
+
]);
|
|
112
145
|
const handleClickOpenPicker = ()=>{
|
|
113
146
|
if (dynamicDisplayedComponentsLength < max) {
|
|
114
147
|
setAddComponentIsOpen((prev)=>!prev);
|
|
@@ -266,6 +299,7 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
|
|
|
266
299
|
totalLength: dynamicDisplayedComponentsLength,
|
|
267
300
|
forceOpen: openComponentKey === field.__temp_key__,
|
|
268
301
|
onForceOpenHandled: handleForceOpenHandled,
|
|
302
|
+
isCopied: isCopied(field.__temp_key__),
|
|
269
303
|
children: children
|
|
270
304
|
})
|
|
271
305
|
}, field.__temp_key__))
|
|
@@ -285,7 +319,21 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
|
|
|
285
319
|
/*#__PURE__*/ jsx(ComponentPicker, {
|
|
286
320
|
dynamicComponentsByCategory: dynamicComponentsByCategory,
|
|
287
321
|
isOpen: addComponentIsOpen,
|
|
288
|
-
onClickAddComponent: handleAddComponent
|
|
322
|
+
onClickAddComponent: handleAddComponent,
|
|
323
|
+
onClickCopyComponent: canCopyFromExisting ? setComponentUidToCopy : undefined
|
|
324
|
+
}),
|
|
325
|
+
componentUidToCopy && /*#__PURE__*/ jsx(ComponentCopyModal, {
|
|
326
|
+
componentUid: componentUidToCopy,
|
|
327
|
+
fieldLabel: formatMessage({
|
|
328
|
+
id: componentUidToCopy,
|
|
329
|
+
defaultMessage: components[componentUidToCopy]?.info.displayName ?? componentUidToCopy
|
|
330
|
+
}),
|
|
331
|
+
maxSelection: max - dynamicDisplayedComponentsLength,
|
|
332
|
+
mode: "dynamiczone",
|
|
333
|
+
onClose: ()=>setComponentUidToCopy(null),
|
|
334
|
+
onInsert: handleCopyComponents,
|
|
335
|
+
selection: "multiple",
|
|
336
|
+
sourceFieldName: name
|
|
289
337
|
})
|
|
290
338
|
]
|
|
291
339
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [liveText, setLiveText] = React.useState('');\n const [openComponentKey, setOpenComponentKey] = React.useState<string | null>(null);\n\n const {\n currentDocument: { components, isLoading },\n } = useDocumentContext('DynamicZone');\n\n const disabled = disabledProp || isLoading;\n const addFieldRow = useForm('DynamicZone', (state) => state.addFieldRow);\n const removeFieldRow = useForm('DynamicZone', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('DynamicZone', (state) => state.moveFieldRow);\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: string;\n };\n\n const { value: rawValue, error } = useField<Array<DzWithTempKey>>(name);\n // `value` can be `null` (for example after closing a relation modal). Match\n // RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n /**\n * Track the previous value array to detect when a new component is added.\n * When the array grows, we find the newly added item and force its accordion open.\n * This mirrors the same pattern used in RepeatableComponent.\n */\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((v) => v.__temp_key__));\n const newItem = value.find((v) => !prevKeys.has(v.__temp_key__));\n if (newItem) {\n setOpenComponentKey(newItem.__temp_key__);\n }\n } else if (openComponentKey !== null) {\n // Component was removed before forceOpen was handled — clear stale key\n const currentKeys = new Set(value.map((v) => v.__temp_key__));\n if (!currentKeys.has(openComponentKey)) {\n setOpenComponentKey(null);\n }\n }\n }, [value, prevValue, openComponentKey]);\n\n const handleForceOpenHandled = React.useCallback(() => {\n setOpenComponentKey(null);\n }, []);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const componentSchema = components[componentUid];\n\n if (!componentSchema) {\n return acc;\n }\n\n const { category, info } = componentSchema;\n\n const component = {\n uid: componentUid,\n displayName: info.displayName,\n icon: info.icon,\n preview: info.preview,\n };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = React.useCallback(\n (uid: string, position?: number) => {\n const schema = components[uid];\n\n if (!schema) {\n return;\n }\n\n setAddComponentIsOpen(false);\n\n const form = createDefaultForm(schema, components);\n const transformations = flow(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n },\n [addFieldRow, components, name]\n );\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleRemoveComponent = React.useCallback(\n (currentIndex: number) => {\n removeFieldRow(name, currentIndex);\n },\n [name, removeFieldRow]\n );\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={{ initial: 4, medium: 6 }}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n totalLength={dynamicDisplayedComponentsLength}\n forceOpen={openComponentKey === field.__temp_key__}\n onForceOpenHandled={handleForceOpenHandled}\n >\n {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n />\n </Flex>\n </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","liveText","setLiveText","openComponentKey","setOpenComponentKey","currentDocument","components","isLoading","useDocumentContext","addFieldRow","useForm","state","removeFieldRow","moveFieldRow","value","rawValue","error","useField","useMemo","Array","isArray","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItem","find","has","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","preview","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","flow","transformDocument","data","__component","handleClickOpenPicker","prev","type","message","id","getTranslation","handleMoveComponent","newIndex","currentIndex","defaultMessage","item","handleCancel","index","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","initial","medium","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","totalLength","forceOpen","onForceOpenHandled","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Field.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { type AnyData, transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentCopyModal } from '../Component/ComponentCopyModal';\nimport { useCopiedComponents } from '../Component/CopiedComponents';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [componentUidToCopy, setComponentUidToCopy] = React.useState<string | null>(null);\n const [liveText, setLiveText] = React.useState('');\n const [openComponentKey, setOpenComponentKey] = React.useState<string | null>(null);\n // The components copied from another entry are flagged until the form is saved.\n const { isCopied, insertCopies } = useCopiedComponents(name);\n\n const {\n currentDocumentMeta,\n currentDocument: { components, isLoading },\n } = useDocumentContext('DynamicZone');\n const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;\n\n const disabled = disabledProp || isLoading;\n const addFieldRow = useForm('DynamicZone', (state) => state.addFieldRow);\n const removeFieldRow = useForm('DynamicZone', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('DynamicZone', (state) => state.moveFieldRow);\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: string;\n };\n\n const { value: rawValue, error } = useField<Array<DzWithTempKey>>(name);\n // `value` can be `null` (for example after closing a relation modal). Match\n // RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n /**\n * Track the previous value array to detect when a new component is added.\n * When the array grows, we find the newly added item and force its accordion open.\n * This mirrors the same pattern used in RepeatableComponent.\n */\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((v) => v.__temp_key__));\n const newItems = value.filter((v) => !prevKeys.has(v.__temp_key__));\n\n /**\n * Copied components come in filled: they aren't scrolled into view. Like any new block\n * they open expanded, see `DynamicComponent`.\n */\n if (newItems[0] && !newItems.every((item) => isCopied(item.__temp_key__))) {\n setOpenComponentKey(newItems[0].__temp_key__);\n }\n } else if (openComponentKey !== null) {\n // Component was removed before forceOpen was handled — clear stale key\n const currentKeys = new Set(value.map((v) => v.__temp_key__));\n if (!currentKeys.has(openComponentKey)) {\n setOpenComponentKey(null);\n }\n }\n }, [value, prevValue, openComponentKey, isCopied]);\n\n const handleForceOpenHandled = React.useCallback(() => {\n setOpenComponentKey(null);\n }, []);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const componentSchema = components[componentUid];\n\n if (!componentSchema) {\n return acc;\n }\n\n const { category, info } = componentSchema;\n\n const component = {\n uid: componentUid,\n displayName: info.displayName,\n icon: info.icon,\n preview: info.preview,\n };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = React.useCallback(\n (uid: string, position?: number) => {\n const schema = components[uid];\n\n if (!schema) {\n return;\n }\n\n setAddComponentIsOpen(false);\n\n const form = createDefaultForm(schema, components);\n const transformations = flow(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n },\n [addFieldRow, components, name]\n );\n\n const handleCopyComponents = React.useCallback(\n (items: AnyData[]) => {\n // The modal doesn't let more items than there's room for be selected, this is a safety net.\n if (dynamicDisplayedComponentsLength + items.length > max) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n defaultMessage: 'You have already reached the maximum number of fields',\n }),\n });\n\n return false;\n }\n\n setAddComponentIsOpen(false);\n insertCopies(items);\n\n return true;\n },\n [dynamicDisplayedComponentsLength, formatMessage, insertCopies, max, toggleNotification]\n );\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleRemoveComponent = React.useCallback(\n (currentIndex: number) => {\n removeFieldRow(name, currentIndex);\n },\n [name, removeFieldRow]\n );\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={{ initial: 4, medium: 6 }}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n totalLength={dynamicDisplayedComponentsLength}\n forceOpen={openComponentKey === field.__temp_key__}\n onForceOpenHandled={handleForceOpenHandled}\n isCopied={isCopied(field.__temp_key__)}\n >\n {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n onClickCopyComponent={canCopyFromExisting ? setComponentUidToCopy : undefined}\n />\n {componentUidToCopy && (\n <ComponentCopyModal\n componentUid={componentUidToCopy}\n fieldLabel={formatMessage({\n id: componentUidToCopy,\n defaultMessage:\n components[componentUidToCopy]?.info.displayName ?? componentUidToCopy,\n })}\n maxSelection={max - dynamicDisplayedComponentsLength}\n mode=\"dynamiczone\"\n onClose={() => setComponentUidToCopy(null)}\n onInsert={handleCopyComponents}\n selection=\"multiple\"\n sourceFieldName={name}\n />\n )}\n </Flex>\n </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","componentUidToCopy","setComponentUidToCopy","liveText","setLiveText","openComponentKey","setOpenComponentKey","isCopied","insertCopies","useCopiedComponents","currentDocumentMeta","currentDocument","components","isLoading","useDocumentContext","canCopyFromExisting","collectionType","COLLECTION_TYPES","addFieldRow","useForm","state","removeFieldRow","moveFieldRow","value","rawValue","error","useField","useMemo","Array","isArray","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItems","filter","has","every","item","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","preview","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","flow","transformDocument","data","__component","handleCopyComponents","items","type","message","id","getTranslation","defaultMessage","handleClickOpenPicker","prev","handleMoveComponent","newIndex","currentIndex","handleCancel","index","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","initial","medium","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","totalLength","forceOpen","onForceOpenHandled","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent","onClickCopyComponent","ComponentCopyModal","fieldLabel","maxSelection","mode","onClose","onInsert","selection","sourceFieldName"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoCA,MAAM,CAACA,mBAAAA,EAAqBC,cAAAA,CAAe,GAAGC,cAC5C,aAAA,EACA;IACEC,eAAAA,EAAiB;AACnB,CAAA;AAWF,MAAMC,WAAAA,GAAc,CAAC,EACnBC,SAAS,EACTC,QAAAA,EAAUC,YAAY,EACtBC,IAAI,EACJC,KAAK,EACLC,WAAW,EACXC,IAAI,EACJC,WAAW,KAAK,EAChBC,QAAQ,EACS,GAAA;;IAEjB,MAAM,EAAEC,GAAAA,GAAMC,QAAQ,EAAEC,GAAAA,GAAM,CAACD,QAAQ,EAAE,GAAGV,SAAAA,IAAa,EAAC;AAE1D,IAAA,MAAM,CAACY,kBAAAA,EAAoBC,qBAAAA,CAAsB,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AACnE,IAAA,MAAM,CAACC,kBAAAA,EAAoBC,qBAAAA,CAAsB,GAAGH,KAAAA,CAAMC,QAAQ,CAAgB,IAAA,CAAA;AAClF,IAAA,MAAM,CAACG,QAAAA,EAAUC,WAAAA,CAAY,GAAGL,KAAAA,CAAMC,QAAQ,CAAC,EAAA,CAAA;AAC/C,IAAA,MAAM,CAACK,gBAAAA,EAAkBC,mBAAAA,CAAoB,GAAGP,KAAAA,CAAMC,QAAQ,CAAgB,IAAA,CAAA;;AAE9E,IAAA,MAAM,EAAEO,QAAQ,EAAEC,YAAY,EAAE,GAAGC,mBAAAA,CAAoBlB,IAAAA,CAAAA;IAEvD,MAAM,EACJmB,mBAAmB,EACnBC,eAAAA,EAAiB,EAAEC,UAAU,EAAEC,SAAS,EAAE,EAC3C,GAAGC,kBAAAA,CAAmB,aAAA,CAAA;IACvB,MAAMC,mBAAAA,GAAsBL,mBAAAA,CAAoBM,cAAc,KAAKC,gBAAAA;AAEnE,IAAA,MAAM/B,WAAWC,YAAAA,IAAgB0B,SAAAA;AACjC,IAAA,MAAMK,cAAcC,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,MAAMF,WAAW,CAAA;AACvE,IAAA,MAAMG,iBAAiBF,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,MAAMC,cAAc,CAAA;AAC7E,IAAA,MAAMC,eAAeH,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,MAAME,YAAY,CAAA;AAOzE,IAAA,MAAM,EAAEC,KAAAA,EAAOC,QAAQ,EAAEC,KAAK,EAAE,GAAGC,QAAAA,CAA+BnC,IAAAA,CAAAA;;;IAGlE,MAAMgC,KAAAA,GAAQxB,KAAAA,CAAM4B,OAAO,CAAC,IAAOC,KAAAA,CAAMC,OAAO,CAACL,QAAAA,CAAAA,GAAYA,QAAAA,GAAW,EAAE,EAAG;AAACA,QAAAA;AAAS,KAAA,CAAA;AAEvF;;;;MAKA,MAAMM,YAAYC,OAAAA,CAAQR,KAAAA,CAAAA;AAE1BxB,IAAAA,KAAAA,CAAMiC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIF,aAAaA,SAAAA,CAAUG,MAAM,GAAGV,KAAAA,CAAMU,MAAM,EAAE;YAChD,MAAMC,QAAAA,GAAW,IAAIC,GAAAA,CAAIL,SAAAA,CAAUM,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,YAAY,CAAA,CAAA;YAC5D,MAAMC,QAAAA,GAAWhB,KAAAA,CAAMiB,MAAM,CAAC,CAACH,CAAAA,GAAM,CAACH,QAAAA,CAASO,GAAG,CAACJ,CAAAA,CAAEC,YAAY,CAAA,CAAA;AAEjE;;;AAGC,UACD,IAAIC,QAAQ,CAAC,CAAA,CAAE,IAAI,CAACA,QAAAA,CAASG,KAAK,CAAC,CAACC,IAAAA,GAASpC,QAAAA,CAASoC,IAAAA,CAAKL,YAAY,CAAA,CAAA,EAAI;AACzEhC,gBAAAA,mBAAAA,CAAoBiC,QAAQ,CAAC,CAAA,CAAE,CAACD,YAAY,CAAA;AAC9C,YAAA;QACF,CAAA,MAAO,IAAIjC,qBAAqB,IAAA,EAAM;;YAEpC,MAAMuC,WAAAA,GAAc,IAAIT,GAAAA,CAAIZ,KAAAA,CAAMa,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,YAAY,CAAA,CAAA;AAC3D,YAAA,IAAI,CAACM,WAAAA,CAAYH,GAAG,CAACpC,gBAAAA,CAAAA,EAAmB;gBACtCC,mBAAAA,CAAoB,IAAA,CAAA;AACtB,YAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACiB,QAAAA,KAAAA;AAAOO,QAAAA,SAAAA;AAAWzB,QAAAA,gBAAAA;AAAkBE,QAAAA;AAAS,KAAA,CAAA;IAEjD,MAAMsC,sBAAAA,GAAyB9C,KAAAA,CAAM+C,WAAW,CAAC,IAAA;QAC/CxC,mBAAAA,CAAoB,IAAA,CAAA;AACtB,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,MAAMyC,2BAAAA,GAA8BhD,KAAAA,CAAM4B,OAAO,CAAC,IAAA;AAChD,QAAA,OAAO1C,UAAU2B,UAAU,CAACoC,MAAM,CAEhC,CAACC,GAAAA,EAAKC,YAAAA,GAAAA;YACN,MAAMC,eAAAA,GAAkBvC,UAAU,CAACsC,YAAAA,CAAa;AAEhD,YAAA,IAAI,CAACC,eAAAA,EAAiB;gBACpB,OAAOF,GAAAA;AACT,YAAA;AAEA,YAAA,MAAM,EAAEG,QAAQ,EAAEC,IAAI,EAAE,GAAGF,eAAAA;AAE3B,YAAA,MAAMG,SAAAA,GAAY;gBAChBC,GAAAA,EAAKL,YAAAA;AACLM,gBAAAA,WAAAA,EAAaH,KAAKG,WAAW;AAC7BC,gBAAAA,IAAAA,EAAMJ,KAAKI,IAAI;AACfC,gBAAAA,OAAAA,EAASL,KAAKK;AAChB,aAAA;AAEA,YAAA,IAAI,CAACT,GAAG,CAACG,QAAAA,CAAS,EAAE;gBAClBH,GAAG,CAACG,QAAAA,CAAS,GAAG,EAAE;AACpB,YAAA;YAEAH,GAAG,CAACG,SAAS,GAAG;AAAIH,gBAAAA,GAAAA,GAAG,CAACG,QAAAA,CAAS;AAAEE,gBAAAA;AAAU,aAAA;YAE7C,OAAOL,GAAAA;AACT,QAAA,CAAA,EAAG,EAAC,CAAA;IACN,CAAA,EAAG;AAAChE,QAAAA,SAAAA,CAAU2B,UAAU;AAAEA,QAAAA;AAAW,KAAA,CAAA;IAErC,MAAM,EAAE+C,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAE/B,MAAMC,gCAAAA,GAAmCxC,MAAMU,MAAM;AAErD,IAAA,MAAM+B,kBAAAA,GAAqBjE,KAAAA,CAAM+C,WAAW,CAC1C,CAACS,GAAAA,EAAaU,QAAAA,GAAAA;QACZ,MAAMC,MAAAA,GAAStD,UAAU,CAAC2C,GAAAA,CAAI;AAE9B,QAAA,IAAI,CAACW,MAAAA,EAAQ;AACX,YAAA;AACF,QAAA;QAEApE,qBAAAA,CAAsB,KAAA,CAAA;QAEtB,MAAMqE,IAAAA,GAAOC,kBAAkBF,MAAAA,EAAQtD,UAAAA,CAAAA;AACvC,QAAA,MAAMyD,kBAAkBC,IAAAA,CAAKC,iBAAAA,CAAkBL,QAAQtD,UAAAA,CAAAA,EAAa,CAAC4D,QAAU;AAC7E,gBAAA,GAAGA,IAAI;gBACPC,WAAAA,EAAalB;aACf,CAAA,CAAA;AAEA,QAAA,MAAMiB,OAAOH,eAAAA,CAAgBF,IAAAA,CAAAA;AAE7BjD,QAAAA,WAAAA,CAAY3B,MAAMiF,IAAAA,EAAMP,QAAAA,CAAAA;IAC1B,CAAA,EACA;AAAC/C,QAAAA,WAAAA;AAAaN,QAAAA,UAAAA;AAAYrB,QAAAA;AAAK,KAAA,CAAA;AAGjC,IAAA,MAAMmF,oBAAAA,GAAuB3E,KAAAA,CAAM+C,WAAW,CAC5C,CAAC6B,KAAAA,GAAAA;;AAEC,QAAA,IAAIZ,gCAAAA,GAAmCY,KAAAA,CAAM1C,MAAM,GAAGvC,GAAAA,EAAK;YACzDmE,kBAAAA,CAAmB;gBACjBe,IAAAA,EAAM,MAAA;AACNC,gBAAAA,OAAAA,EAASlB,aAAAA,CAAc;AACrBmB,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,kDAAA,CAAA;oBACnBC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;YAEA,OAAO,KAAA;AACT,QAAA;QAEAlF,qBAAAA,CAAsB,KAAA,CAAA;QACtBU,YAAAA,CAAamE,KAAAA,CAAAA;QAEb,OAAO,IAAA;IACT,CAAA,EACA;AAACZ,QAAAA,gCAAAA;AAAkCJ,QAAAA,aAAAA;AAAenD,QAAAA,YAAAA;AAAcd,QAAAA,GAAAA;AAAKmE,QAAAA;AAAmB,KAAA,CAAA;AAG1F,IAAA,MAAMoB,qBAAAA,GAAwB,IAAA;AAC5B,QAAA,IAAIlB,mCAAmCrE,GAAAA,EAAK;YAC1CI,qBAAAA,CAAsB,CAACoF,OAAS,CAACA,IAAAA,CAAAA;QACnC,CAAA,MAAO;YACLrB,kBAAAA,CAAmB;gBACjBe,IAAAA,EAAM,MAAA;AACNC,gBAAAA,OAAAA,EAASlB,aAAAA,CAAc;AACrBmB,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,kDAAA;AACrB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMI,mBAAAA,GAAsBpF,KAAAA,CAAM+C,WAAW,CAC3C,CAACsC,QAAAA,EAAkBC,YAAAA,GAAAA;AACjBjF,QAAAA,WAAAA,CACEuD,aAAAA,CACE;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;AACErC,YAAAA,IAAAA,EAAM,CAAA,EAAGpD,IAAAA,CAAK,CAAC,EAAE8F,YAAAA,CAAAA,CAAc;AAC/BpB,YAAAA,QAAAA,EAAU,GAAGmB,QAAAA,GAAW,CAAA,CAAE,IAAI,EAAE7D,KAAAA,CAAMU,MAAM,CAAA;AAC9C,SAAA,CAAA,CAAA;AAIJX,QAAAA,YAAAA,CAAa/B,MAAM8F,YAAAA,EAAcD,QAAAA,CAAAA;IACnC,CAAA,EACA;AAACzB,QAAAA,aAAAA;AAAerC,QAAAA,YAAAA;AAAc/B,QAAAA,IAAAA;AAAMgC,QAAAA,KAAAA,CAAMU;AAAO,KAAA,CAAA;AAGnD,IAAA,MAAMqD,YAAAA,GAAevF,KAAAA,CAAM+C,WAAW,CACpC,CAACyC,KAAAA,GAAAA;AACCnF,QAAAA,WAAAA,CACEuD,aAAAA,CACE;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,iBAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;AACErC,YAAAA,IAAAA,EAAM,CAAA,EAAGpD,IAAAA,CAAK,CAAC,EAAEgG,KAAAA,CAAAA;AACnB,SAAA,CAAA,CAAA;IAGN,CAAA,EACA;AAAC5B,QAAAA,aAAAA;AAAepE,QAAAA;AAAK,KAAA,CAAA;AAGvB,IAAA,MAAMiG,cAAAA,GAAiBzF,KAAAA,CAAM+C,WAAW,CACtC,CAACyC,KAAAA,GAAAA;AACCnF,QAAAA,WAAAA,CACEuD,aAAAA,CACE;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,eAAA,CAAA;YACnBC,cAAAA,EAAgB,CAAC,sIAAsI;SACzJ,EACA;AACErC,YAAAA,IAAAA,EAAM,CAAA,EAAGpD,IAAAA,CAAK,CAAC,EAAEgG,KAAAA,CAAAA,CAAO;AACxBtB,YAAAA,QAAAA,EAAU,GAAGsB,KAAAA,GAAQ,CAAA,CAAE,IAAI,EAAEhE,KAAAA,CAAMU,MAAM,CAAA;AAC3C,SAAA,CAAA,CAAA;IAGN,CAAA,EACA;AAAC0B,QAAAA,aAAAA;AAAepE,QAAAA,IAAAA;AAAMgC,QAAAA,KAAAA,CAAMU;AAAO,KAAA,CAAA;AAGrC,IAAA,MAAMwD,cAAAA,GAAiB1F,KAAAA,CAAM+C,WAAW,CACtC,CAACyC,KAAAA,GAAAA;AACCnF,QAAAA,WAAAA,CACEuD,aAAAA,CACE;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,eAAA,CAAA;YACnBC,cAAAA,EAAgB,CAAC,oDAAoD;SACvE,EACA;AACErC,YAAAA,IAAAA,EAAM,CAAA,EAAGpD,IAAAA,CAAK,CAAC,EAAEgG,KAAAA,CAAAA,CAAO;AACxBtB,YAAAA,QAAAA,EAAU,GAAGsB,KAAAA,GAAQ,CAAA,CAAE,IAAI,EAAEhE,KAAAA,CAAMU,MAAM,CAAA;AAC3C,SAAA,CAAA,CAAA;IAGN,CAAA,EACA;AAAC0B,QAAAA,aAAAA;AAAepE,QAAAA,IAAAA;AAAMgC,QAAAA,KAAAA,CAAMU;AAAO,KAAA,CAAA;AAGrC,IAAA,MAAMyD,qBAAAA,GAAwB3F,KAAAA,CAAM+C,WAAW,CAC7C,CAACuC,YAAAA,GAAAA;AACChE,QAAAA,cAAAA,CAAe9B,IAAAA,EAAM8F,YAAAA,CAAAA;IACvB,CAAA,EACA;AAAC9F,QAAAA,IAAAA;AAAM8B,QAAAA;AAAe,KAAA,CAAA;AAGxB,IAAA,MAAMsE,WAAWlE,KAAAA,KAAUmE,SAAAA;AAE3B,IAAA,MAAMC,iBAAAA,GAAoB,IAAA;AACxB,QAAA,IAAIhG,kBAAAA,EAAoB;AACtB,YAAA,OAAO8D,aAAAA,CAAc;gBAAEmB,EAAAA,EAAI,uBAAA;gBAAyBE,cAAAA,EAAgB;AAAQ,aAAA,CAAA;AAC9E,QAAA;QAEA,IAAIW,QAAAA,IAAY5B,mCAAmCrE,GAAAA,EAAK;AACtD,YAAA,OAAOiE,aAAAA,CACL;gBACEmB,EAAAA,EAAIC,cAAAA,CAAe,CAAC,uCAAuC,CAAC,CAAA;gBAC5DC,cAAAA,EACE;aACJ,EACA;AACEc,gBAAAA,MAAAA,EAAQ/B,gCAAAA,GAAmCrE;AAC7C,aAAA,CAAA;AAEJ,QAAA;QAEA,IAAIiG,QAAAA,IAAY5B,mCAAmCnE,GAAAA,EAAK;AACtD,YAAA,OAAO+D,aAAAA,CACL;gBACEmB,EAAAA,EAAIC,cAAAA,CAAe,CAAC,yCAAyC,CAAC,CAAA;gBAC9DC,cAAAA,EACE;aACJ,EACA;AAAEc,gBAAAA,MAAAA,EAAQlG,GAAAA,GAAMmE;AAAiC,aAAA,CAAA;AAErD,QAAA;AAEA,QAAA,OAAOJ,aAAAA,CACL;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,sCAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;AAAEe,YAAAA,aAAAA,EAAe1G,KAAAA,IAASE;AAAK,SAAA,CAAA;AAEnC,IAAA,CAAA;AAEA,IAAA,MAAMyG,QAAQC,YAAAA,CAAa,aAAA,EAAe,CAAC7E,KAAAA,GAAUA,MAAM4E,KAAK,CAAA;IAEhE,MAAME,iBAAAA,GAAoBnG,MAAMoG,KAAK,EAAA;AAErC,IAAA,qBACEC,GAAA,CAACxH,mBAAAA,EAAAA;QAAoBG,eAAe,EAAA,IAAA;AAClC,QAAA,QAAA,gBAAAsH,IAAA,CAACC,IAAAA,EAAAA;YAAKC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,SAAA;YAAUC,GAAAA,EAAK;gBAAEC,OAAAA,EAAS,CAAA;gBAAGC,MAAAA,EAAQ;AAAE,aAAA;;AACxE5C,gBAAAA,gCAAAA,GAAmC,mBAClCsC,IAAA,CAACO,GAAAA,EAAAA;;sCACCR,GAAA,CAACS,gBAAAA,EAAAA;4BACCzH,IAAAA,EAAMA,IAAAA;4BACNC,KAAAA,EAAOA,KAAAA;4BACPC,WAAAA,EAAaA,WAAAA;4BACbC,IAAAA,EAAMA,IAAAA;4BACNuH,kBAAAA,EAAoB/C,gCAAAA;4BACpBvE,QAAAA,EAAUA;;sCAEZ4G,GAAA,CAACW,cAAAA,EAAAA;4BAAejC,EAAAA,EAAIoB,iBAAAA;sCACjBvC,aAAAA,CAAc;AACbmB,gCAAAA,EAAAA,EAAIC,cAAAA,CAAe,kBAAA,CAAA;gCACnBC,cAAAA,EAAgB,CAAC,mCAAmC;AACtD,6BAAA;;sCAEFoB,GAAA,CAACW,cAAAA,EAAAA;4BAAeC,WAAAA,EAAU,WAAA;AAAa7G,4BAAAA,QAAAA,EAAAA;;sCACvCiG,GAAA,CAACa,IAAAA,EAAAA;4BAAGC,kBAAAA,EAAkBhB,iBAAAA;AACnB3E,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMa,GAAG,CAAC,CAAC+E,KAAAA,EAAO5B,sBACjBa,GAAA,CAACgB,iBAAAA,EAAAA;AAECpB,oCAAAA,KAAAA,EAAOA,KAAAA,GAAQ,CAAA;AACfzC,oCAAAA,GAAAA,EAAK4D,MAAM1C,WAAW;;AAEtBK,oCAAAA,EAAAA,EAAIqC,MAAMrC,EAAE;oCACZF,IAAAA,EAAK,aAAA;AAEL,oCAAA,QAAA,gBAAAwB,GAAA,CAACiB,wBAAAA,EAAAA;wCACCnI,QAAAA,EAAUA,QAAAA;wCACVK,IAAAA,EAAMA,IAAAA;wCACNgG,KAAAA,EAAOA,KAAAA;AACPrC,wCAAAA,YAAAA,EAAciE,MAAM1C,WAAW;wCAC/B6C,eAAAA,EAAiBnC,mBAAAA;wCACjBoC,sBAAAA,EAAwB7B,qBAAAA;wCACxB8B,QAAAA,EAAUlC,YAAAA;wCACVmC,UAAAA,EAAYhC,cAAAA;wCACZiC,UAAAA,EAAYlC,cAAAA;wCACZmC,cAAAA,EAAgB3D,kBAAAA;wCAChBjB,2BAAAA,EAA6BA,2BAAAA;wCAC7B6E,WAAAA,EAAa7D,gCAAAA;wCACb8D,SAAAA,EAAWxH,gBAAAA,KAAqB8G,MAAM7E,YAAY;wCAClDwF,kBAAAA,EAAoBjF,sBAAAA;wCACpBtC,QAAAA,EAAUA,QAAAA,CAAS4G,MAAM7E,YAAY,CAAA;AAEpC7C,wCAAAA,QAAAA,EAAAA;;AAxBE0H,iCAAAA,EAAAA,KAAAA,CAAM7E,YAAY,CAAA;;;;8BA+BjC8D,GAAA,CAACE,IAAAA,EAAAA;oBAAKyB,cAAAA,EAAe,QAAA;AACnB,oBAAA,QAAA,gBAAA3B,GAAA,CAAC4B,kBAAAA,EAAAA;wBACCrC,QAAAA,EAAUA,QAAAA;wBACVsC,UAAAA,EAAY/I,QAAAA;wBACZgJ,MAAAA,EAAQrI,kBAAAA;wBACRsI,OAAAA,EAASlD,qBAAAA;AAERY,wBAAAA,QAAAA,EAAAA,iBAAAA;;;8BAGLO,GAAA,CAACgC,eAAAA,EAAAA;oBACCrF,2BAAAA,EAA6BA,2BAAAA;oBAC7BmF,MAAAA,EAAQrI,kBAAAA;oBACRwI,mBAAAA,EAAqBrE,kBAAAA;AACrBsE,oBAAAA,oBAAAA,EAAsBvH,sBAAsBb,qBAAAA,GAAwB0F;;AAErE3F,gBAAAA,kBAAAA,kBACCmG,GAAA,CAACmC,kBAAAA,EAAAA;oBACCrF,YAAAA,EAAcjD,kBAAAA;AACduI,oBAAAA,UAAAA,EAAY7E,aAAAA,CAAc;wBACxBmB,EAAAA,EAAI7E,kBAAAA;AACJ+E,wBAAAA,cAAAA,EACEpE,UAAU,CAACX,kBAAAA,CAAmB,EAAEoD,KAAKG,WAAAA,IAAevD;AACxD,qBAAA,CAAA;AACAwI,oBAAAA,YAAAA,EAAc/I,GAAAA,GAAMqE,gCAAAA;oBACpB2E,IAAAA,EAAK,aAAA;AACLC,oBAAAA,OAAAA,EAAS,IAAMzI,qBAAAA,CAAsB,IAAA,CAAA;oBACrC0I,QAAAA,EAAUlE,oBAAAA;oBACVmE,SAAAA,EAAU,UAAA;oBACVC,eAAAA,EAAiBvJ;;;;;AAM7B;;;;"}
|
|
@@ -12,6 +12,7 @@ var styledComponents = require('styled-components');
|
|
|
12
12
|
var collections = require('../../../../../constants/collections.js');
|
|
13
13
|
var plugin = require('../../../../../constants/plugin.js');
|
|
14
14
|
var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
|
|
15
|
+
var I18nSharedFieldsLock = require('../../../../../features/I18nSharedFieldsLock.js');
|
|
15
16
|
var useDocument = require('../../../../../hooks/useDocument.js');
|
|
16
17
|
var useDocumentLayout = require('../../../../../hooks/useDocumentLayout.js');
|
|
17
18
|
var documents = require('../../../../../services/documents.js');
|
|
@@ -442,8 +443,7 @@ const RelationModal = ({ children })=>{
|
|
|
442
443
|
marginRight: 1,
|
|
443
444
|
children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowLeft, {})
|
|
444
445
|
}),
|
|
445
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.
|
|
446
|
-
tag: "span",
|
|
446
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Title, {
|
|
447
447
|
fontWeight: 600,
|
|
448
448
|
children: isCreating ? formatMessage({
|
|
449
449
|
id: 'content-manager.relation.create',
|
|
@@ -720,13 +720,15 @@ const StyledRelationLink = styledComponents.styled(reactRouterDom.Link)`
|
|
|
720
720
|
return /*#__PURE__*/ jsxRuntime.jsx(DocumentRBAC.DocumentRBAC, {
|
|
721
721
|
permissions: permissions,
|
|
722
722
|
model: currentDocumentMeta.model,
|
|
723
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
723
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(I18nSharedFieldsLock.I18nSharedFieldsLock, {
|
|
724
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(RelationModalFormBody, {
|
|
725
|
+
currentDocument: currentDocument,
|
|
726
|
+
documentTitle: documentTitle,
|
|
727
|
+
hasDraftAndPublished: hasDraftAndPublished,
|
|
728
|
+
layout: documentLayoutResponse.edit.layout,
|
|
729
|
+
plugins: plugins,
|
|
730
|
+
props: props
|
|
731
|
+
})
|
|
730
732
|
})
|
|
731
733
|
});
|
|
732
734
|
};
|