@strapi/content-manager 5.49.0 → 5.50.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/layout.js +3 -1
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +5 -3
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +161 -72
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +161 -73
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +6 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/draftRelationCounts.js +117 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +2 -2
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +2 -2
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +38 -11
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +39 -12
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +9 -15
- package/dist/admin/preview/utils/constants.js.map +1 -1
- package/dist/admin/preview/utils/constants.mjs +10 -15
- package/dist/admin/preview/utils/constants.mjs.map +1 -1
- package/dist/admin/src/components/InjectionZone.d.ts +1 -2
- package/dist/admin/src/content-manager.d.ts +15 -15
- package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
- package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +8 -9
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
- package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
- package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
- package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
- package/dist/admin/src/modules/app.d.ts +5 -5
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
- package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
- package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
- package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
- package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +1 -7
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
- package/dist/admin/src/services/documents.d.ts +30 -70
- package/dist/admin/src/services/relations.d.ts +6 -20
- package/dist/admin/src/services/uid.d.ts +5 -5
- package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
- package/dist/admin/src/utils/users.d.ts +1 -1
- package/dist/admin/src/utils/validation.d.ts +1 -1
- package/dist/admin/translations/en.json.js +5 -2
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +5 -2
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ja.json.js +262 -87
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +262 -87
- package/dist/admin/translations/ja.json.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +2 -2
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +2 -2
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +2 -2
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +2 -2
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/preview/controllers/preview.js +9 -0
- package/dist/server/preview/controllers/preview.js.map +1 -1
- package/dist/server/preview/controllers/preview.mjs +9 -0
- package/dist/server/preview/controllers/preview.mjs.map +1 -1
- package/dist/server/preview/controllers/previewScript.js +1450 -0
- package/dist/server/preview/routes/preview.js +11 -0
- package/dist/server/preview/routes/preview.js.map +1 -1
- package/dist/server/preview/routes/preview.mjs +11 -0
- package/dist/server/preview/routes/preview.mjs.map +1 -1
- package/dist/server/services/document-manager.js +13 -19
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +13 -19
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/utils/draft-relations.js +9 -0
- package/dist/server/services/utils/draft-relations.js.map +1 -0
- package/dist/server/services/utils/draft-relations.mjs +7 -0
- package/dist/server/services/utils/draft-relations.mjs.map +1 -0
- package/dist/server/services/utils/draft.js +118 -25
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +118 -25
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +15 -1
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +15 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/index.d.ts +3 -3
- package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/relations.d.ts +2 -2
- package/dist/server/src/history/controllers/history-version.d.ts +1 -7
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/controllers/index.d.ts +2 -1
- package/dist/server/src/history/controllers/index.d.ts.map +1 -1
- package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
- package/dist/server/src/history/services/history.d.ts +0 -2
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +3 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/history/utils.d.ts +1 -18
- package/dist/server/src/history/utils.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/index.d.ts +2 -1
- package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
- package/dist/server/src/homepage/index.d.ts +4 -8
- package/dist/server/src/homepage/index.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts +3 -4
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/index.d.ts +4 -8
- package/dist/server/src/homepage/services/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +79 -85
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/permissions.d.ts +1 -1
- package/dist/server/src/mcp/permissions.d.ts.map +1 -1
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/utils.d.ts.map +1 -1
- package/dist/server/src/middlewares/routing.d.ts.map +1 -1
- package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/index.d.ts +2 -1
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/preview.d.ts +5 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -1
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +1 -16
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/services/components.d.ts +2 -2
- package/dist/server/src/services/components.d.ts.map +1 -1
- package/dist/server/src/services/configuration.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +5 -5
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts +14 -14
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +6 -6
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/field-sizes.d.ts +2 -2
- package/dist/server/src/services/field-sizes.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +78 -84
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts +12 -31
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/dist/server/src/services/populate-builder.d.ts +4 -4
- package/dist/server/src/services/populate-builder.d.ts.map +1 -1
- package/dist/server/src/services/uid.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/server/src/services/utils/count.d.ts.map +1 -1
- package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
- package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
- package/dist/server/src/services/utils/draft.d.ts +8 -7
- package/dist/server/src/services/utils/draft.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/server/src/services/utils/store.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
- package/dist/server/src/validation/zod.d.ts +1 -1
- package/dist/server/src/validation/zod.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +4 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/single-types.d.ts +4 -1
- package/dist/shared/contracts/single-types.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/admin/preview/utils/previewScript.js +0 -1068
- package/dist/admin/preview/utils/previewScript.js.map +0 -1
- package/dist/admin/preview/utils/previewScript.mjs +0 -1066
- package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
- package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentCategory.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Accordion, Box, Flex, FlexComponent, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ComponentIcon } from '../../../../../components/ComponentIcon';\n\ninterface ComponentCategoryProps {\n category: string;\n components?: Array<{\n uid: string;\n displayName: string;\n icon?: string;\n }>;\n onAddComponent: (\n componentUid: string\n ) => React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;\n variant?: Accordion.Variant;\n}\n\nconst ComponentCategory = ({\n category,\n components = [],\n variant = 'primary',\n onAddComponent,\n}: ComponentCategoryProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Accordion.Item value={category}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger>\n {formatMessage({ id: category, defaultMessage: category })}\n </Accordion.Trigger>\n </Accordion.Header>\n <ResponsiveAccordionContent>\n <Grid paddingTop={4} paddingBottom={4} paddingLeft={3} paddingRight={3}>\n {components.map(({ uid, displayName, icon }) => (\n <ComponentBox\n key={uid}\n tag=\"button\"\n type=\"button\"\n background=\"neutral100\"\n justifyContent=\"center\"\n onClick={onAddComponent(uid)}\n hasRadius\n height=\"8.4rem\"\n shrink={0}\n borderColor=\"neutral200\"\n >\n <Flex\n direction=\"column\"\n gap={1}\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n paddingLeft={2}\n paddingRight={2}\n >\n <ComponentIcon color=\"currentColor\" background=\"primary200\" icon={icon} />\n\n <Tooltip label={formatMessage({ id: uid, defaultMessage: displayName ?? uid })}>\n <Typography variant=\"pi\" fontWeight=\"bold\" ellipsis width=\"100%\">\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Typography>\n </Tooltip>\n </Flex>\n </ComponentBox>\n ))}\n </Grid>\n </ResponsiveAccordionContent>\n </Accordion.Item>\n );\n};\n\nconst ResponsiveAccordionContent = styled(Accordion.Content)`\n container-type: inline-size;\n`;\n\n/**\n * TODO:\n * JSDOM cannot handle container queries.\n * This is a temporary workaround so that tests do not fail in the CI when jestdom throws an error\n * for failing to parse the stylesheet.\n */\nconst Grid =\n process.env.NODE_ENV !== 'test'\n ? styled(Box)`\n display: grid;\n grid-template-columns: repeat(auto-fill, 100%);\n grid-gap: 12px;\n\n ${({ theme }) => theme.breakpoints.medium} {\n grid-template-columns: repeat(auto-fill, 14rem);\n grid-gap: 4px;\n }\n `\n : styled(Box)`\n display: grid;\n grid-template-columns: repeat(auto-fill, 100%);\n grid-gap: 12px;\n\n ${({ theme }) => theme.breakpoints.medium} {\n grid-gap: 4px;\n }\n `;\n\nconst ComponentBox = styled<FlexComponent<'button'>>(Flex)`\n color: ${({ theme }) => theme.colors.neutral600};\n cursor: pointer;\n\n @media (prefers-reduced-motion: no-preference) {\n transition: color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nexport { ComponentCategory };\nexport type { ComponentCategoryProps };\n"],"names":["ComponentCategory","category","components","variant","onAddComponent","formatMessage","useIntl","_jsxs","Accordion","Item","value","_jsx","Header","Trigger","id","defaultMessage","ResponsiveAccordionContent","Grid","paddingTop","paddingBottom","paddingLeft","paddingRight","map","uid","displayName","icon","ComponentBox","tag","type","background","justifyContent","onClick","hasRadius","height","shrink","borderColor","Flex","direction","gap","alignItems","width","ComponentIcon","color","Tooltip","label","Typography","fontWeight","ellipsis","styled","Content","process","env","NODE_ENV","Box","theme","breakpoints","medium","colors","neutral600","props","motion","easings","easeOutQuad","primary200","primary100","primary600"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ComponentCategory.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Accordion, Box, Flex, FlexComponent, Tooltip, Typography } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ComponentIcon } from '../../../../../components/ComponentIcon';\n\ninterface ComponentCategoryProps {\n category: string;\n components?: Array<{\n uid: string;\n displayName: string;\n icon?: string;\n }>;\n onAddComponent: (\n componentUid: string\n ) => React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;\n variant?: Accordion.Variant;\n}\n\nconst ComponentCategory = ({\n category,\n components = [],\n variant = 'primary',\n onAddComponent,\n}: ComponentCategoryProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Accordion.Item value={category}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Accordion.Trigger>\n </Accordion.Header>\n <ResponsiveAccordionContent>\n <Grid paddingTop={4} paddingBottom={4} paddingLeft={3} paddingRight={3}>\n {components.map(({ uid, displayName, icon }) => (\n <ComponentBox\n key={uid}\n tag=\"button\"\n type=\"button\"\n background=\"neutral100\"\n justifyContent=\"center\"\n onClick={onAddComponent(uid)}\n hasRadius\n height=\"8.4rem\"\n shrink={0}\n borderColor=\"neutral200\"\n >\n <Flex\n direction=\"column\"\n gap={1}\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n paddingLeft={2}\n paddingRight={2}\n >\n <ComponentIcon color=\"currentColor\" background=\"primary200\" icon={icon} />\n\n <Tooltip label={formatMessage({ id: uid, defaultMessage: displayName ?? uid })}>\n <Typography variant=\"pi\" fontWeight=\"bold\" ellipsis width=\"100%\">\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Typography>\n </Tooltip>\n </Flex>\n </ComponentBox>\n ))}\n </Grid>\n </ResponsiveAccordionContent>\n </Accordion.Item>\n );\n};\n\nconst ResponsiveAccordionContent = styled(Accordion.Content)`\n container-type: inline-size;\n`;\n\n/**\n * TODO:\n * JSDOM cannot handle container queries.\n * This is a temporary workaround so that tests do not fail in the CI when jestdom throws an error\n * for failing to parse the stylesheet.\n */\nconst Grid =\n process.env.NODE_ENV !== 'test'\n ? styled(Box)`\n display: grid;\n grid-template-columns: repeat(auto-fill, 100%);\n grid-gap: 12px;\n\n ${({ theme }) => theme.breakpoints.medium} {\n grid-template-columns: repeat(auto-fill, 14rem);\n grid-gap: 4px;\n }\n `\n : styled(Box)`\n display: grid;\n grid-template-columns: repeat(auto-fill, 100%);\n grid-gap: 12px;\n\n ${({ theme }) => theme.breakpoints.medium} {\n grid-gap: 4px;\n }\n `;\n\nconst ComponentBox = styled<FlexComponent<'button'>>(Flex)`\n color: ${({ theme }) => theme.colors.neutral600};\n cursor: pointer;\n\n @media (prefers-reduced-motion: no-preference) {\n transition: color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nexport { ComponentCategory };\nexport type { ComponentCategoryProps };\n"],"names":["ComponentCategory","category","components","variant","onAddComponent","formatMessage","useIntl","_jsxs","Accordion","Item","value","_jsx","Header","Trigger","id","defaultMessage","upperFirst","ResponsiveAccordionContent","Grid","paddingTop","paddingBottom","paddingLeft","paddingRight","map","uid","displayName","icon","ComponentBox","tag","type","background","justifyContent","onClick","hasRadius","height","shrink","borderColor","Flex","direction","gap","alignItems","width","ComponentIcon","color","Tooltip","label","Typography","fontWeight","ellipsis","styled","Content","process","env","NODE_ENV","Box","theme","breakpoints","medium","colors","neutral600","props","motion","easings","easeOutQuad","primary200","primary100","primary600"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ var React = require('react');
|
|
|
5
5
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
6
|
var designSystem = require('@strapi/design-system');
|
|
7
7
|
var Icons = require('@strapi/icons');
|
|
8
|
+
var upperFirst = require('lodash/upperFirst');
|
|
8
9
|
var reactDndHtml5Backend = require('react-dnd-html5-backend');
|
|
9
10
|
var reactIntl = require('react-intl');
|
|
10
11
|
var styledComponents = require('styled-components');
|
|
@@ -18,6 +19,8 @@ var translations = require('../../../../../utils/translations.js');
|
|
|
18
19
|
var FormLayout = require('../../FormLayout.js');
|
|
19
20
|
var InputRenderer = require('../../InputRenderer.js');
|
|
20
21
|
|
|
22
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
|
+
|
|
21
24
|
function _interopNamespace(e) {
|
|
22
25
|
if (e && e.__esModule) return e;
|
|
23
26
|
var n = Object.create(null);
|
|
@@ -37,6 +40,7 @@ function _interopNamespace(e) {
|
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
43
|
+
var upperFirst__default = /*#__PURE__*/_interopDefault(upperFirst);
|
|
40
44
|
|
|
41
45
|
const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveComponentClick, onMoveComponent, onGrabItem, onDropItem, onCancel, dynamicComponentsByCategory = {}, onAddComponent, totalLength, children, forceOpen, onForceOpenHandled })=>{
|
|
42
46
|
const { formatMessage } = reactIntl.useIntl();
|
|
@@ -236,7 +240,7 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
|
|
|
236
240
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Label, {
|
|
237
241
|
children: formatMessage({
|
|
238
242
|
id: category,
|
|
239
|
-
defaultMessage: category
|
|
243
|
+
defaultMessage: upperFirst__default.default(category)
|
|
240
244
|
})
|
|
241
245
|
}),
|
|
242
246
|
components.map(({ displayName, uid })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
|
|
@@ -265,7 +269,7 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
|
|
|
265
269
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Label, {
|
|
266
270
|
children: formatMessage({
|
|
267
271
|
id: category,
|
|
268
|
-
defaultMessage: category
|
|
272
|
+
defaultMessage: upperFirst__default.default(category)
|
|
269
273
|
})
|
|
270
274
|
}),
|
|
271
275
|
components.map(({ displayName, uid })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicComponent.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout, useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\ninterface DynamicComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid?: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: (index: number) => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n totalLength: number;\n children?: (props: InputRendererProps) => React.ReactNode;\n /**\n * When true, the component's accordion will be forced open and scrolled into view.\n * Used by the parent DynamicZone to auto-expand newly added components.\n */\n forceOpen?: boolean;\n /**\n * Called after the forceOpen has been handled (accordion opened + scrolled),\n * so the parent can clear the forced state.\n */\n onForceOpenHandled?: () => void;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = {},\n onAddComponent,\n totalLength,\n children,\n forceOpen,\n onForceOpenHandled,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const isDesktop = useIsDesktop();\n\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const { mainField = 'id' } = componentUid ? (components[componentUid]?.settings ?? {}) : {};\n\n const mainFieldValue = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.${mainField}`)\n );\n\n const displayedValue = mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n const displayTitle = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n const { icon, displayName } = React.useMemo(() => {\n if (!componentUid) {\n return {\n icon: null,\n displayName: formatMessage({\n id: getTranslation('components.DynamicZone.unknown-component'),\n defaultMessage: 'Unknown component',\n }),\n };\n }\n\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return {\n icon,\n displayName: formatMessage({\n id: componentUid,\n defaultMessage: displayName || componentUid,\n }),\n };\n }, [componentUid, dynamicComponentsByCategory, formatMessage]);\n\n const tempKey = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.__temp_key__`)\n ) as string | undefined;\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n id: tempKey,\n displayedValue: `${displayName} ${displayTitle}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const accordionValue = React.useId();\n\n /**\n * Ref for the component container `<li>`, used to scroll the newly added\n * component into view when `forceOpen` is set by the parent.\n */\n const componentRef = React.useRef<HTMLLIElement>(null);\n\n const componentPath = `${name}.${index}`;\n const hasValue = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath) != null\n );\n const isNewItem = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath)?.id == null\n );\n const rawError = useForm('DynamicComponent', (state) => getIn(state.errors, componentPath));\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>(\n isNewItem ? accordionValue : ''\n );\n\n React.useEffect(() => {\n if (rawError && hasValue) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, hasValue, accordionValue]);\n\n /**\n * When the parent flags this component as newly added via `forceOpen`,\n * expand the accordion and scroll it into view so the user can immediately\n * start editing. Once handled, notify the parent so it can clear the flag.\n */\n React.useEffect(() => {\n if (forceOpen) {\n setCollapseToOpen(accordionValue);\n requestAnimationFrame(() => {\n componentRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n onForceOpenHandled?.();\n });\n }\n }, [forceOpen, accordionValue, onForceOpenHandled]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleRemoveCurrentComponent = React.useCallback(() => {\n onRemoveComponentClick(index);\n }, [onRemoveComponentClick, index]);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: displayTitle }\n )}\n onClick={handleRemoveCurrentComponent}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index - 1, index);\n }}\n disabled={!canMoveUp}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index + 1, index);\n }}\n disabled={!canMoveDown}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: category })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: category })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index + 1)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = displayTitle ? `${displayName} ${displayTitle}` : displayName;\n\n return (\n <ComponentContainer ref={componentRef} tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <DynamicComponentFields\n componentUid={componentUid}\n index={index}\n layout={componentUid ? components[componentUid]?.layout : undefined}\n name={name}\n >\n {children}\n </DynamicComponentFields>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\ninterface DynamicComponentFieldsProps extends Pick<DynamicComponentProps, 'children'> {\n componentUid?: string;\n index: number;\n layout?: EditFieldLayout[][];\n name: string;\n}\n\nconst DynamicComponentFields = React.memo(\n ({ children, componentUid, index, layout, name }: DynamicComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={{ initial: 4, medium: 6 }}>\n <Grid.Root gap={4}>\n {layout?.map((row, rowInd) => {\n return (\n <Grid.Item col={12} key={rowInd} xs={12} direction=\"column\" alignItems=\"stretch\">\n <ResponsiveGridRoot gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({\n ...fieldWithTranslatedLabel,\n name: fieldName,\n })\n ) : (\n <InputRenderer {...fieldWithTranslatedLabel} name={fieldName} />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n }\n);\n\nDynamicComponentFields.displayName = 'DynamicComponentFields';\n\nconst MemoizedDynamicComponent = React.memo(DynamicComponent);\n\nexport { MemoizedDynamicComponent as DynamicComponent };\nexport type { DynamicComponentProps };\n"],"names":["DynamicComponent","componentUid","disabled","index","name","onRemoveComponentClick","onMoveComponent","onGrabItem","onDropItem","onCancel","dynamicComponentsByCategory","onAddComponent","totalLength","children","forceOpen","onForceOpenHandled","formatMessage","useIntl","currentDocumentMeta","useDocumentContext","isDesktop","useIsDesktop","edit","components","useDocumentLayout","model","mainField","settings","mainFieldValue","useForm","state","getIn","values","displayedValue","String","trim","displayTitle","length","icon","displayName","React","useMemo","id","getTranslation","defaultMessage","category","split","find","component","uid","tempKey","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","type","ItemTypes","DYNAMIC_ZONE","item","onMoveItem","useEffect","getEmptyImage","captureDraggingState","accordionValue","useId","componentRef","useRef","componentPath","hasValue","isNewItem","rawError","errors","collapseToOpen","setCollapseToOpen","useState","requestAnimationFrame","current","scrollIntoView","behavior","block","composedBoxRefs","useComposedRefs","canMoveUp","canMoveDown","handleRemoveCurrentComponent","useCallback","accordionActions","_jsxs","_Fragment","_jsx","IconButton","variant","label","onClick","Trash","e","stopPropagation","data-handler-id","ref","onKeyDown","Drag","ArrowUp","ArrowDown","Menu","Root","Trigger","size","endIcon","paddingLeft","paddingRight","tag","More","aria-hidden","focusable","Content","SubRoot","SubTrigger","SubContent","Object","entries","map","Fragment","Label","Item","onSelect","accordionTitle","ComponentContainer","width","Flex","justifyContent","Rectangle","background","StyledBox","hasRadius","Preview","Accordion","value","onValueChange","Header","COMPONENT_ICONS","dashboard","Actions","AccordionContentRadius","DynamicComponentFields","layout","undefined","styled","Box","theme","shadows","tableShadow","spaces","span","colors","primary100","primary500","memo","padding","initial","medium","Grid","gap","row","rowInd","col","xs","direction","alignItems","ResponsiveGridRoot","field","fieldName","fieldWithTranslatedLabel","ResponsiveGridItem","s","InputRenderer","MemoizedDynamicComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DynamicComponent.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout, useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\ninterface DynamicComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid?: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: (index: number) => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n totalLength: number;\n children?: (props: InputRendererProps) => React.ReactNode;\n /**\n * When true, the component's accordion will be forced open and scrolled into view.\n * Used by the parent DynamicZone to auto-expand newly added components.\n */\n forceOpen?: boolean;\n /**\n * Called after the forceOpen has been handled (accordion opened + scrolled),\n * so the parent can clear the forced state.\n */\n onForceOpenHandled?: () => void;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = {},\n onAddComponent,\n totalLength,\n children,\n forceOpen,\n onForceOpenHandled,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const isDesktop = useIsDesktop();\n\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const { mainField = 'id' } = componentUid ? (components[componentUid]?.settings ?? {}) : {};\n\n const mainFieldValue = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.${mainField}`)\n );\n\n const displayedValue = mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n const displayTitle = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n const { icon, displayName } = React.useMemo(() => {\n if (!componentUid) {\n return {\n icon: null,\n displayName: formatMessage({\n id: getTranslation('components.DynamicZone.unknown-component'),\n defaultMessage: 'Unknown component',\n }),\n };\n }\n\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return {\n icon,\n displayName: formatMessage({\n id: componentUid,\n defaultMessage: displayName || componentUid,\n }),\n };\n }, [componentUid, dynamicComponentsByCategory, formatMessage]);\n\n const tempKey = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.__temp_key__`)\n ) as string | undefined;\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n id: tempKey,\n displayedValue: `${displayName} ${displayTitle}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const accordionValue = React.useId();\n\n /**\n * Ref for the component container `<li>`, used to scroll the newly added\n * component into view when `forceOpen` is set by the parent.\n */\n const componentRef = React.useRef<HTMLLIElement>(null);\n\n const componentPath = `${name}.${index}`;\n const hasValue = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath) != null\n );\n const isNewItem = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath)?.id == null\n );\n const rawError = useForm('DynamicComponent', (state) => getIn(state.errors, componentPath));\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>(\n isNewItem ? accordionValue : ''\n );\n\n React.useEffect(() => {\n if (rawError && hasValue) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, hasValue, accordionValue]);\n\n /**\n * When the parent flags this component as newly added via `forceOpen`,\n * expand the accordion and scroll it into view so the user can immediately\n * start editing. Once handled, notify the parent so it can clear the flag.\n */\n React.useEffect(() => {\n if (forceOpen) {\n setCollapseToOpen(accordionValue);\n requestAnimationFrame(() => {\n componentRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n onForceOpenHandled?.();\n });\n }\n }, [forceOpen, accordionValue, onForceOpenHandled]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleRemoveCurrentComponent = React.useCallback(() => {\n onRemoveComponentClick(index);\n }, [onRemoveComponentClick, index]);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: displayTitle }\n )}\n onClick={handleRemoveCurrentComponent}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index - 1, index);\n }}\n disabled={!canMoveUp}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index + 1, index);\n }}\n disabled={!canMoveDown}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index + 1)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = displayTitle ? `${displayName} ${displayTitle}` : displayName;\n\n return (\n <ComponentContainer ref={componentRef} tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <DynamicComponentFields\n componentUid={componentUid}\n index={index}\n layout={componentUid ? components[componentUid]?.layout : undefined}\n name={name}\n >\n {children}\n </DynamicComponentFields>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\ninterface DynamicComponentFieldsProps extends Pick<DynamicComponentProps, 'children'> {\n componentUid?: string;\n index: number;\n layout?: EditFieldLayout[][];\n name: string;\n}\n\nconst DynamicComponentFields = React.memo(\n ({ children, componentUid, index, layout, name }: DynamicComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={{ initial: 4, medium: 6 }}>\n <Grid.Root gap={4}>\n {layout?.map((row, rowInd) => {\n return (\n <Grid.Item col={12} key={rowInd} xs={12} direction=\"column\" alignItems=\"stretch\">\n <ResponsiveGridRoot gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({\n ...fieldWithTranslatedLabel,\n name: fieldName,\n })\n ) : (\n <InputRenderer {...fieldWithTranslatedLabel} name={fieldName} />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n }\n);\n\nDynamicComponentFields.displayName = 'DynamicComponentFields';\n\nconst MemoizedDynamicComponent = React.memo(DynamicComponent);\n\nexport { MemoizedDynamicComponent as DynamicComponent };\nexport type { DynamicComponentProps };\n"],"names":["DynamicComponent","componentUid","disabled","index","name","onRemoveComponentClick","onMoveComponent","onGrabItem","onDropItem","onCancel","dynamicComponentsByCategory","onAddComponent","totalLength","children","forceOpen","onForceOpenHandled","formatMessage","useIntl","currentDocumentMeta","useDocumentContext","isDesktop","useIsDesktop","edit","components","useDocumentLayout","model","mainField","settings","mainFieldValue","useForm","state","getIn","values","displayedValue","String","trim","displayTitle","length","icon","displayName","React","useMemo","id","getTranslation","defaultMessage","category","split","find","component","uid","tempKey","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","type","ItemTypes","DYNAMIC_ZONE","item","onMoveItem","useEffect","getEmptyImage","captureDraggingState","accordionValue","useId","componentRef","useRef","componentPath","hasValue","isNewItem","rawError","errors","collapseToOpen","setCollapseToOpen","useState","requestAnimationFrame","current","scrollIntoView","behavior","block","composedBoxRefs","useComposedRefs","canMoveUp","canMoveDown","handleRemoveCurrentComponent","useCallback","accordionActions","_jsxs","_Fragment","_jsx","IconButton","variant","label","onClick","Trash","e","stopPropagation","data-handler-id","ref","onKeyDown","Drag","ArrowUp","ArrowDown","Menu","Root","Trigger","size","endIcon","paddingLeft","paddingRight","tag","More","aria-hidden","focusable","Content","SubRoot","SubTrigger","SubContent","Object","entries","map","Fragment","Label","upperFirst","Item","onSelect","accordionTitle","ComponentContainer","width","Flex","justifyContent","Rectangle","background","StyledBox","hasRadius","Preview","Accordion","value","onValueChange","Header","COMPONENT_ICONS","dashboard","Actions","AccordionContentRadius","DynamicComponentFields","layout","undefined","styled","Box","theme","shadows","tableShadow","spaces","span","colors","primary100","primary500","memo","padding","initial","medium","Grid","gap","row","rowInd","col","xs","direction","alignItems","ResponsiveGridRoot","field","fieldName","fieldWithTranslatedLabel","ResponsiveGridItem","s","InputRenderer","MemoizedDynamicComponent"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { useIsDesktop, useForm } from '@strapi/admin/strapi-admin';
|
|
4
4
|
import { Box, Grid, useComposedRefs, IconButton, Menu, Flex, Accordion } from '@strapi/design-system';
|
|
5
5
|
import { Trash, Drag, ArrowUp, ArrowDown, More } from '@strapi/icons';
|
|
6
|
+
import upperFirst from 'lodash/upperFirst';
|
|
6
7
|
import { getEmptyImage } from 'react-dnd-html5-backend';
|
|
7
8
|
import { useIntl } from 'react-intl';
|
|
8
9
|
import { styled } from 'styled-components';
|
|
@@ -214,7 +215,7 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
|
|
|
214
215
|
/*#__PURE__*/ jsx(Menu.Label, {
|
|
215
216
|
children: formatMessage({
|
|
216
217
|
id: category,
|
|
217
|
-
defaultMessage: category
|
|
218
|
+
defaultMessage: upperFirst(category)
|
|
218
219
|
})
|
|
219
220
|
}),
|
|
220
221
|
components.map(({ displayName, uid })=>/*#__PURE__*/ jsx(Menu.Item, {
|
|
@@ -243,7 +244,7 @@ const DynamicComponent = ({ componentUid, disabled, index, name, onRemoveCompone
|
|
|
243
244
|
/*#__PURE__*/ jsx(Menu.Label, {
|
|
244
245
|
children: formatMessage({
|
|
245
246
|
id: category,
|
|
246
|
-
defaultMessage: category
|
|
247
|
+
defaultMessage: upperFirst(category)
|
|
247
248
|
})
|
|
248
249
|
}),
|
|
249
250
|
components.map(({ displayName, uid })=>/*#__PURE__*/ jsx(Menu.Item, {
|
package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicComponent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout, useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\ninterface DynamicComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid?: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: (index: number) => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n totalLength: number;\n children?: (props: InputRendererProps) => React.ReactNode;\n /**\n * When true, the component's accordion will be forced open and scrolled into view.\n * Used by the parent DynamicZone to auto-expand newly added components.\n */\n forceOpen?: boolean;\n /**\n * Called after the forceOpen has been handled (accordion opened + scrolled),\n * so the parent can clear the forced state.\n */\n onForceOpenHandled?: () => void;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = {},\n onAddComponent,\n totalLength,\n children,\n forceOpen,\n onForceOpenHandled,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const isDesktop = useIsDesktop();\n\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const { mainField = 'id' } = componentUid ? (components[componentUid]?.settings ?? {}) : {};\n\n const mainFieldValue = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.${mainField}`)\n );\n\n const displayedValue = mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n const displayTitle = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n const { icon, displayName } = React.useMemo(() => {\n if (!componentUid) {\n return {\n icon: null,\n displayName: formatMessage({\n id: getTranslation('components.DynamicZone.unknown-component'),\n defaultMessage: 'Unknown component',\n }),\n };\n }\n\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return {\n icon,\n displayName: formatMessage({\n id: componentUid,\n defaultMessage: displayName || componentUid,\n }),\n };\n }, [componentUid, dynamicComponentsByCategory, formatMessage]);\n\n const tempKey = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.__temp_key__`)\n ) as string | undefined;\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n id: tempKey,\n displayedValue: `${displayName} ${displayTitle}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const accordionValue = React.useId();\n\n /**\n * Ref for the component container `<li>`, used to scroll the newly added\n * component into view when `forceOpen` is set by the parent.\n */\n const componentRef = React.useRef<HTMLLIElement>(null);\n\n const componentPath = `${name}.${index}`;\n const hasValue = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath) != null\n );\n const isNewItem = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath)?.id == null\n );\n const rawError = useForm('DynamicComponent', (state) => getIn(state.errors, componentPath));\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>(\n isNewItem ? accordionValue : ''\n );\n\n React.useEffect(() => {\n if (rawError && hasValue) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, hasValue, accordionValue]);\n\n /**\n * When the parent flags this component as newly added via `forceOpen`,\n * expand the accordion and scroll it into view so the user can immediately\n * start editing. Once handled, notify the parent so it can clear the flag.\n */\n React.useEffect(() => {\n if (forceOpen) {\n setCollapseToOpen(accordionValue);\n requestAnimationFrame(() => {\n componentRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n onForceOpenHandled?.();\n });\n }\n }, [forceOpen, accordionValue, onForceOpenHandled]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleRemoveCurrentComponent = React.useCallback(() => {\n onRemoveComponentClick(index);\n }, [onRemoveComponentClick, index]);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: displayTitle }\n )}\n onClick={handleRemoveCurrentComponent}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index - 1, index);\n }}\n disabled={!canMoveUp}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index + 1, index);\n }}\n disabled={!canMoveDown}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: category })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: category })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index + 1)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = displayTitle ? `${displayName} ${displayTitle}` : displayName;\n\n return (\n <ComponentContainer ref={componentRef} tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <DynamicComponentFields\n componentUid={componentUid}\n index={index}\n layout={componentUid ? components[componentUid]?.layout : undefined}\n name={name}\n >\n {children}\n </DynamicComponentFields>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\ninterface DynamicComponentFieldsProps extends Pick<DynamicComponentProps, 'children'> {\n componentUid?: string;\n index: number;\n layout?: EditFieldLayout[][];\n name: string;\n}\n\nconst DynamicComponentFields = React.memo(\n ({ children, componentUid, index, layout, name }: DynamicComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={{ initial: 4, medium: 6 }}>\n <Grid.Root gap={4}>\n {layout?.map((row, rowInd) => {\n return (\n <Grid.Item col={12} key={rowInd} xs={12} direction=\"column\" alignItems=\"stretch\">\n <ResponsiveGridRoot gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({\n ...fieldWithTranslatedLabel,\n name: fieldName,\n })\n ) : (\n <InputRenderer {...fieldWithTranslatedLabel} name={fieldName} />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n }\n);\n\nDynamicComponentFields.displayName = 'DynamicComponentFields';\n\nconst MemoizedDynamicComponent = React.memo(DynamicComponent);\n\nexport { MemoizedDynamicComponent as DynamicComponent };\nexport type { DynamicComponentProps };\n"],"names":["DynamicComponent","componentUid","disabled","index","name","onRemoveComponentClick","onMoveComponent","onGrabItem","onDropItem","onCancel","dynamicComponentsByCategory","onAddComponent","totalLength","children","forceOpen","onForceOpenHandled","formatMessage","useIntl","currentDocumentMeta","useDocumentContext","isDesktop","useIsDesktop","edit","components","useDocumentLayout","model","mainField","settings","mainFieldValue","useForm","state","getIn","values","displayedValue","String","trim","displayTitle","length","icon","displayName","React","useMemo","id","getTranslation","defaultMessage","category","split","find","component","uid","tempKey","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","type","ItemTypes","DYNAMIC_ZONE","item","onMoveItem","useEffect","getEmptyImage","captureDraggingState","accordionValue","useId","componentRef","useRef","componentPath","hasValue","isNewItem","rawError","errors","collapseToOpen","setCollapseToOpen","useState","requestAnimationFrame","current","scrollIntoView","behavior","block","composedBoxRefs","useComposedRefs","canMoveUp","canMoveDown","handleRemoveCurrentComponent","useCallback","accordionActions","_jsxs","_Fragment","_jsx","IconButton","variant","label","onClick","Trash","e","stopPropagation","data-handler-id","ref","onKeyDown","Drag","ArrowUp","ArrowDown","Menu","Root","Trigger","size","endIcon","paddingLeft","paddingRight","tag","More","aria-hidden","focusable","Content","SubRoot","SubTrigger","SubContent","Object","entries","map","Fragment","Label","Item","onSelect","accordionTitle","ComponentContainer","width","Flex","justifyContent","Rectangle","background","StyledBox","hasRadius","Preview","Accordion","value","onValueChange","Header","COMPONENT_ICONS","dashboard","Actions","AccordionContentRadius","DynamicComponentFields","layout","undefined","styled","Box","theme","shadows","tableShadow","spaces","span","colors","primary100","primary500","memo","padding","initial","medium","Grid","gap","row","rowInd","col","xs","direction","alignItems","ResponsiveGridRoot","field","fieldName","fieldWithTranslatedLabel","ResponsiveGridItem","s","InputRenderer","MemoizedDynamicComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DynamicComponent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Accordion,\n Box,\n Flex,\n Grid,\n IconButton,\n useComposedRefs,\n Menu,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Drag, More, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { COMPONENT_ICONS } from '../../../../../components/ComponentIcon';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout, useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../../../../hooks/useDragAndDrop';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { InputRenderer, type InputRendererProps } from '../../InputRenderer';\n\nimport type { ComponentPickerProps } from './ComponentPicker';\n\ninterface DynamicComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel'>,\n Pick<ComponentPickerProps, 'dynamicComponentsByCategory'> {\n componentUid?: string;\n disabled?: boolean;\n index: number;\n name: string;\n onAddComponent: (componentUid: string, index: number) => void;\n onRemoveComponentClick: (index: number) => void;\n onMoveComponent: (dragIndex: number, hoverIndex: number) => void;\n totalLength: number;\n children?: (props: InputRendererProps) => React.ReactNode;\n /**\n * When true, the component's accordion will be forced open and scrolled into view.\n * Used by the parent DynamicZone to auto-expand newly added components.\n */\n forceOpen?: boolean;\n /**\n * Called after the forceOpen has been handled (accordion opened + scrolled),\n * so the parent can clear the forced state.\n */\n onForceOpenHandled?: () => void;\n}\n\nconst DynamicComponent = ({\n componentUid,\n disabled,\n index,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory = {},\n onAddComponent,\n totalLength,\n children,\n forceOpen,\n onForceOpenHandled,\n}: DynamicComponentProps) => {\n const { formatMessage } = useIntl();\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const isDesktop = useIsDesktop();\n\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const { mainField = 'id' } = componentUid ? (components[componentUid]?.settings ?? {}) : {};\n\n const mainFieldValue = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.${mainField}`)\n );\n\n const displayedValue = mainField === 'id' || !mainFieldValue ? '' : String(mainFieldValue).trim();\n const displayTitle = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;\n\n const { icon, displayName } = React.useMemo(() => {\n if (!componentUid) {\n return {\n icon: null,\n displayName: formatMessage({\n id: getTranslation('components.DynamicZone.unknown-component'),\n defaultMessage: 'Unknown component',\n }),\n };\n }\n\n const [category] = componentUid.split('.');\n const { icon, displayName } = (dynamicComponentsByCategory[category] ?? []).find(\n (component) => component.uid === componentUid\n ) ?? { icon: null, displayName: null };\n\n return {\n icon,\n displayName: formatMessage({\n id: componentUid,\n defaultMessage: displayName || componentUid,\n }),\n };\n }, [componentUid, dynamicComponentsByCategory, formatMessage]);\n\n const tempKey = useForm('DynamicComponent', (state) =>\n getIn(state.values, `${name}.${index}.__temp_key__`)\n ) as string | undefined;\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n index,\n id: tempKey,\n displayedValue: `${displayName} ${displayTitle}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onDropItem,\n onGrabItem,\n onCancel,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const accordionValue = React.useId();\n\n /**\n * Ref for the component container `<li>`, used to scroll the newly added\n * component into view when `forceOpen` is set by the parent.\n */\n const componentRef = React.useRef<HTMLLIElement>(null);\n\n const componentPath = `${name}.${index}`;\n const hasValue = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath) != null\n );\n const isNewItem = useForm(\n 'DynamicComponent',\n (state) => getIn(state.values, componentPath)?.id == null\n );\n const rawError = useForm('DynamicComponent', (state) => getIn(state.errors, componentPath));\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>(\n isNewItem ? accordionValue : ''\n );\n\n React.useEffect(() => {\n if (rawError && hasValue) {\n setCollapseToOpen(accordionValue);\n }\n }, [rawError, hasValue, accordionValue]);\n\n /**\n * When the parent flags this component as newly added via `forceOpen`,\n * expand the accordion and scroll it into view so the user can immediately\n * start editing. Once handled, notify the parent so it can clear the flag.\n */\n React.useEffect(() => {\n if (forceOpen) {\n setCollapseToOpen(accordionValue);\n requestAnimationFrame(() => {\n componentRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n onForceOpenHandled?.();\n });\n }\n }, [forceOpen, accordionValue, onForceOpenHandled]);\n\n const composedBoxRefs = useComposedRefs(boxRef, dropRef);\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleRemoveCurrentComponent = React.useCallback(() => {\n onRemoveComponentClick(index);\n }, [onRemoveComponentClick, index]);\n\n const accordionActions = disabled ? null : (\n <>\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n {\n id: getTranslation('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: displayTitle }\n )}\n onClick={handleRemoveCurrentComponent}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index - 1, index);\n }}\n disabled={!canMoveUp}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n onMoveComponent(index + 1, index);\n }}\n disabled={!canMoveDown}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={0} paddingRight={0}>\n <IconButton\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslation('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTranslation('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>\n {formatMessage({ id: category, defaultMessage: upperFirst(category) })}\n </Menu.Label>\n {components.map(({ displayName, uid }) => (\n <Menu.Item key={uid} onSelect={() => onAddComponent(uid, index + 1)}>\n {formatMessage({ id: uid, defaultMessage: displayName ?? uid })}\n </Menu.Item>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </>\n );\n\n const accordionTitle = displayTitle ? `${displayName} ${displayTitle}` : displayName;\n\n return (\n <ComponentContainer ref={componentRef} tag=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Root value={collapseToOpen} onValueChange={setCollapseToOpen}>\n <Accordion.Item value={accordionValue}>\n <Accordion.Header>\n <Accordion.Trigger\n icon={\n icon && COMPONENT_ICONS[icon]\n ? COMPONENT_ICONS[icon]\n : COMPONENT_ICONS.dashboard\n }\n >\n {accordionTitle}\n </Accordion.Trigger>\n <Accordion.Actions>{accordionActions}</Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <AccordionContentRadius background=\"neutral0\">\n <DynamicComponentFields\n componentUid={componentUid}\n index={index}\n layout={componentUid ? components[componentUid]?.layout : undefined}\n name={name}\n >\n {children}\n </DynamicComponentFields>\n </AccordionContentRadius>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled<BoxComponent>(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled<BoxComponent>(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled<BoxComponent>(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled<BoxComponent<'li'>>(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\ninterface DynamicComponentFieldsProps extends Pick<DynamicComponentProps, 'children'> {\n componentUid?: string;\n index: number;\n layout?: EditFieldLayout[][];\n name: string;\n}\n\nconst DynamicComponentFields = React.memo(\n ({ children, componentUid, index, layout, name }: DynamicComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={{ initial: 4, medium: 6 }}>\n <Grid.Root gap={4}>\n {layout?.map((row, rowInd) => {\n return (\n <Grid.Item col={12} key={rowInd} xs={12} direction=\"column\" alignItems=\"stretch\">\n <ResponsiveGridRoot gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldName = `${name}.${index}.${field.name}`;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.components.${componentUid}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <ResponsiveGridItem\n col={size}\n key={fieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children ? (\n children({\n ...fieldWithTranslatedLabel,\n name: fieldName,\n })\n ) : (\n <InputRenderer {...fieldWithTranslatedLabel} name={fieldName} />\n )}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n }\n);\n\nDynamicComponentFields.displayName = 'DynamicComponentFields';\n\nconst MemoizedDynamicComponent = React.memo(DynamicComponent);\n\nexport { MemoizedDynamicComponent as DynamicComponent };\nexport type { DynamicComponentProps };\n"],"names":["DynamicComponent","componentUid","disabled","index","name","onRemoveComponentClick","onMoveComponent","onGrabItem","onDropItem","onCancel","dynamicComponentsByCategory","onAddComponent","totalLength","children","forceOpen","onForceOpenHandled","formatMessage","useIntl","currentDocumentMeta","useDocumentContext","isDesktop","useIsDesktop","edit","components","useDocumentLayout","model","mainField","settings","mainFieldValue","useForm","state","getIn","values","displayedValue","String","trim","displayTitle","length","icon","displayName","React","useMemo","id","getTranslation","defaultMessage","category","split","find","component","uid","tempKey","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","type","ItemTypes","DYNAMIC_ZONE","item","onMoveItem","useEffect","getEmptyImage","captureDraggingState","accordionValue","useId","componentRef","useRef","componentPath","hasValue","isNewItem","rawError","errors","collapseToOpen","setCollapseToOpen","useState","requestAnimationFrame","current","scrollIntoView","behavior","block","composedBoxRefs","useComposedRefs","canMoveUp","canMoveDown","handleRemoveCurrentComponent","useCallback","accordionActions","_jsxs","_Fragment","_jsx","IconButton","variant","label","onClick","Trash","e","stopPropagation","data-handler-id","ref","onKeyDown","Drag","ArrowUp","ArrowDown","Menu","Root","Trigger","size","endIcon","paddingLeft","paddingRight","tag","More","aria-hidden","focusable","Content","SubRoot","SubTrigger","SubContent","Object","entries","map","Fragment","Label","upperFirst","Item","onSelect","accordionTitle","ComponentContainer","width","Flex","justifyContent","Rectangle","background","StyledBox","hasRadius","Preview","Accordion","value","onValueChange","Header","COMPONENT_ICONS","dashboard","Actions","AccordionContentRadius","DynamicComponentFields","layout","undefined","styled","Box","theme","shadows","tableShadow","spaces","span","colors","primary100","primary500","memo","padding","initial","medium","Grid","gap","row","rowInd","col","xs","direction","alignItems","ResponsiveGridRoot","field","fieldName","fieldWithTranslatedLabel","ResponsiveGridItem","s","InputRenderer","MemoizedDynamicComponent"],"mappings":"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"}
|
|
@@ -54,7 +54,12 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
|
|
|
54
54
|
const addFieldRow = strapiAdmin.useForm('DynamicZone', (state)=>state.addFieldRow);
|
|
55
55
|
const removeFieldRow = strapiAdmin.useForm('DynamicZone', (state)=>state.removeFieldRow);
|
|
56
56
|
const moveFieldRow = strapiAdmin.useForm('DynamicZone', (state)=>state.moveFieldRow);
|
|
57
|
-
const { value
|
|
57
|
+
const { value: rawValue, error } = strapiAdmin.useField(name);
|
|
58
|
+
// `value` can be `null` (for example after closing a relation modal). Match
|
|
59
|
+
// RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)
|
|
60
|
+
const value = React__namespace.useMemo(()=>Array.isArray(rawValue) ? rawValue : [], [
|
|
61
|
+
rawValue
|
|
62
|
+
]);
|
|
58
63
|
/**
|
|
59
64
|
* Track the previous value array to detect when a new component is added.
|
|
60
65
|
* When the array grows, we find the newly added item and force its accordion open.
|
|
@@ -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 pipe from 'lodash/fp/pipe';\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 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 = [], error } = useField<Array<DzWithTempKey>>(name);\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 = { uid: componentUid, displayName: info.displayName, icon: info.icon };\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 = pipe(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","error","useField","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItem","find","has","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","useMemo","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","pipe","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 pipe from 'lodash/fp/pipe';\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 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 = { uid: componentUid, displayName: info.displayName, icon: info.icon };\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 = pipe(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","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","pipe","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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"}
|
|
@@ -29,7 +29,12 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
|
|
|
29
29
|
const addFieldRow = useForm('DynamicZone', (state)=>state.addFieldRow);
|
|
30
30
|
const removeFieldRow = useForm('DynamicZone', (state)=>state.removeFieldRow);
|
|
31
31
|
const moveFieldRow = useForm('DynamicZone', (state)=>state.moveFieldRow);
|
|
32
|
-
const { value
|
|
32
|
+
const { value: rawValue, error } = useField(name);
|
|
33
|
+
// `value` can be `null` (for example after closing a relation modal). Match
|
|
34
|
+
// RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)
|
|
35
|
+
const value = React.useMemo(()=>Array.isArray(rawValue) ? rawValue : [], [
|
|
36
|
+
rawValue
|
|
37
|
+
]);
|
|
33
38
|
/**
|
|
34
39
|
* Track the previous value array to detect when a new component is added.
|
|
35
40
|
* When the array grows, we find the newly added item and force its accordion open.
|