@strapi/content-manager 0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db → 0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ConfigurationForm/Fields.js +300 -204
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +34 -30
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +36 -32
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +253 -0
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +236 -3
- package/dist/admin/components/Widgets.mjs.map +1 -1
- package/dist/admin/history/components/VersionContent.js +24 -3
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionContent.mjs +25 -4
- package/dist/admin/history/components/VersionContent.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +6 -0
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +7 -1
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +7 -6
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +8 -7
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/index.js +47 -8
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +47 -9
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/layout.js +1 -27
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +2 -9
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +90 -74
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +92 -76
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.js +36 -0
- package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs +34 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js +83 -70
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +85 -72
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +15 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +16 -4
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +158 -106
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +161 -109
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +46 -26
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +46 -26
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +40 -11
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +41 -12
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +103 -0
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +103 -1
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +227 -132
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +4 -1
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js +13 -3
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
- package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
- package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +231 -69
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +233 -71
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +9 -0
- package/dist/admin/preview/utils/constants.js.map +1 -0
- package/dist/admin/preview/utils/constants.mjs +7 -0
- package/dist/admin/preview/utils/constants.mjs.map +1 -0
- package/dist/admin/preview/utils/script.js +300 -0
- package/dist/admin/preview/utils/script.js.map +1 -0
- package/dist/admin/preview/utils/script.mjs +298 -0
- package/dist/admin/preview/utils/script.mjs.map +1 -0
- package/dist/admin/preview/utils/usePreviewInputManager.js +93 -0
- package/dist/admin/preview/utils/usePreviewInputManager.js.map +1 -0
- package/dist/admin/preview/utils/usePreviewInputManager.mjs +72 -0
- package/dist/admin/preview/utils/usePreviewInputManager.mjs.map +1 -0
- package/dist/admin/services/api.js +3 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +3 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +32 -16
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +32 -16
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/services/homepage.js +11 -2
- package/dist/admin/services/homepage.js.map +1 -1
- package/dist/admin/services/homepage.mjs +11 -3
- package/dist/admin/services/homepage.mjs.map +1 -1
- package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
- package/dist/admin/src/components/Widgets.d.ts +2 -1
- package/dist/admin/src/exports.d.ts +1 -0
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/Blocker.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -7
- package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +7 -0
- package/dist/admin/src/preview/utils/script.d.ts +23 -0
- package/dist/admin/src/preview/utils/usePreviewInputManager.d.ts +3 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +23 -17
- package/dist/admin/src/services/homepage.d.ts +6 -2
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/src/utils/validation.d.ts +1 -0
- package/dist/admin/translations/en.json.js +7 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +7 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +5 -2
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +5 -2
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +10 -2
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +10 -2
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/utils/validation.js +19 -7
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +19 -7
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +11 -1
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +11 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +2 -2
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +2 -2
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +14 -2
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs +14 -2
- package/dist/server/controllers/validation/index.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js +23 -19
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +23 -19
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/homepage/controllers/homepage.js +5 -0
- package/dist/server/homepage/controllers/homepage.js.map +1 -1
- package/dist/server/homepage/controllers/homepage.mjs +5 -0
- package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
- package/dist/server/homepage/routes/homepage.js +11 -0
- package/dist/server/homepage/routes/homepage.js.map +1 -1
- package/dist/server/homepage/routes/homepage.mjs +11 -0
- package/dist/server/homepage/routes/homepage.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +86 -46
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +86 -46
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/preview/services/preview-config.js +5 -1
- package/dist/server/preview/services/preview-config.js.map +1 -1
- package/dist/server/preview/services/preview-config.mjs +5 -1
- package/dist/server/preview/services/preview-config.mjs.map +1 -1
- package/dist/server/preview/services/preview.js +4 -0
- package/dist/server/preview/services/preview.js.map +1 -1
- package/dist/server/preview/services/preview.mjs +4 -0
- package/dist/server/preview/services/preview.mjs.map +1 -1
- package/dist/server/services/data-mapper.js +4 -1
- package/dist/server/services/data-mapper.js.map +1 -1
- package/dist/server/services/data-mapper.mjs +4 -1
- package/dist/server/services/data-mapper.mjs.map +1 -1
- package/dist/server/services/document-manager.js +8 -1
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +8 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +3 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +3 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js +1 -1
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
- package/dist/server/services/utils/configuration/layouts.js +1 -1
- package/dist/server/services/utils/configuration/layouts.js.map +1 -1
- package/dist/server/services/utils/configuration/layouts.mjs +1 -1
- package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.js +8 -0
- package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
- package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +11 -0
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +11 -0
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/index.d.ts +6 -1
- package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/index.d.ts +7 -0
- package/dist/server/src/homepage/index.d.ts.map +1 -1
- package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts +4 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/index.d.ts +7 -0
- package/dist/server/src/homepage/services/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +8 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +1 -0
- 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 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +1 -0
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +8 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +0 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +13 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/package.json +11 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Preview.js","sources":["../../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n Blocker,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, IconButton, Portal } from '@strapi/design-system';\nimport { ArrowLineLeft } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { PreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreviewContextValue {\n url: string;\n title: string;\n document: NonNullable<ReturnType<UseDocument>['document']>;\n meta: NonNullable<ReturnType<UseDocument>['meta']>;\n schema: NonNullable<ReturnType<UseDocument>['schema']>;\n layout: EditLayout;\n onPreview: () => void;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\nconst PreviewPage = () => {\n const location = useLocation();\n const { formatMessage } = useIntl();\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);\n\n // Read all the necessary data from the URL to find the right preview URL\n const {\n slug: model,\n id: documentId,\n collectionType,\n } = useParams<{\n slug: UID.ContentType;\n id: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n status?: string;\n }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!model) {\n throw new Error('Could not find model in url params');\n }\n\n // Only collection types must have a documentId\n if (collectionType === COLLECTION_TYPES && !documentId) {\n throw new Error('Could not find documentId in url params');\n }\n\n const previewUrlResponse = useGetPreviewUrlQuery({\n params: {\n contentType: model,\n },\n query: {\n documentId,\n locale: params.locale,\n status: params.status as GetPreviewUrl.Request['query']['status'],\n },\n });\n const documentResponse = useDocument({\n model,\n collectionType,\n documentId,\n params,\n });\n const documentLayoutResponse = useDocumentLayout(model);\n\n const isLoading =\n previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;\n if (isLoading && !documentResponse.document?.documentId) {\n return <Page.Loading />;\n }\n\n const initialValues = documentResponse.getInitialFormValues();\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\n ) {\n return <Page.Error />;\n }\n\n if (!previewUrlResponse.data?.data?.url) {\n return <Page.NoData />;\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n const onPreview = () => {\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiUpdate' },\n // The iframe origin is safe to use since it must be provided through the allowedOrigins config\n new URL(iframeRef.current.src).origin\n );\n };\n\n const hasAdvancedPreview = window.strapi.features.isEnabled('cms-advanced-preview');\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentTitle,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrl}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n layout={documentLayoutResponse.edit}\n onPreview={onPreview}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== 'draft'\n }\n initialValues={documentResponse.getInitialFormValues()}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n height=\"100%\"\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n {({ resetForm }) => (\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n <Blocker onProceed={resetForm} />\n <PreviewHeader />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n {hasAdvancedPreview && (\n <Box\n overflow=\"auto\"\n width={isSideEditorOpen ? '50%' : 0}\n borderWidth=\"0 1px 0 0\"\n borderColor=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n // Remove horizontal padding when the editor is closed or it won't fully disappear\n paddingLeft={isSideEditorOpen ? 6 : 0}\n paddingRight={isSideEditorOpen ? 6 : 0}\n transition=\"all 0.2s ease-in-out\"\n >\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={documentResponse}\n hasBackground={false}\n />\n </Box>\n )}\n\n <Box position=\"relative\" flex={1} height=\"100%\" overflow=\"hidden\">\n <Box\n data-testid=\"preview-iframe\"\n ref={iframeRef}\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width=\"100%\"\n height=\"100%\"\n borderWidth={0}\n tag=\"iframe\"\n />\n {hasAdvancedPreview && (\n <IconButton\n variant=\"tertiary\"\n label={formatMessage(\n isSideEditorOpen\n ? {\n id: 'content-manager.preview.content.close-editor',\n defaultMessage: 'Close editor',\n }\n : {\n id: 'content-manager.preview.content.open-editor',\n defaultMessage: 'Open editor',\n }\n )}\n onClick={() => setIsSideEditorOpen((prev) => !prev)}\n position=\"absolute\"\n top={2}\n left={2}\n >\n <AnimatedArrow isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n )}\n </Box>\n </Flex>\n </Flex>\n )}\n </FormContext>\n </PreviewProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedPreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedPreviewPageImpl = () => {\n const { slug: model } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC([\n { action: 'plugin::content-manager.explorer.read', subject: model },\n { action: 'plugin::content-manager.explorer.update', subject: model },\n { action: 'plugin::content-manager.explorer.publish', subject: model },\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !model) {\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Protect\n permissions={permissions.filter((permission) =>\n permission.action.includes('explorer.read')\n )}\n >\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedPreviewPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedPreviewPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedPreviewPage, usePreviewContext };\n"],"names":["PreviewProvider","usePreviewContext","createContext","AnimatedArrow","styled","ArrowLineLeft","props","isSideEditorOpen","PreviewPage","location","useLocation","formatMessage","useIntl","iframeRef","React","useRef","setIsSideEditorOpen","useState","slug","model","id","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","Error","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","status","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","document","_jsx","Page","Loading","initialValues","getInitialFormValues","error","meta","schema","data","url","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","options","yupSchema","createYupSchema","attributes","components","abortEarly","previewUrl","onPreview","current","contentWindow","postMessage","type","URL","src","origin","hasAdvancedPreview","window","strapi","features","isEnabled","_jsxs","_Fragment","Title","defaultMessage","title","layout","FormContext","method","disabled","initialErrors","state","forceValidation","height","validate","resetForm","Flex","direction","alignItems","Blocker","onProceed","PreviewHeader","flex","overflow","Box","width","borderWidth","borderColor","paddingTop","paddingBottom","paddingLeft","paddingRight","transition","FormLayout","hasBackground","position","data-testid","ref","tag","IconButton","variant","label","onClick","prev","top","left","ProtectedPreviewPageImpl","permissions","useRBAC","action","subject","zIndex","background","Protect","filter","permission","includes","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Preview.js","sources":["../../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n FocusTrap,\n IconButton,\n Popover,\n Portal,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { ArrowLineLeft } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { Blocker } from '../../pages/EditView/components/Blocker';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { handleInvisibleAttributes } from '../../pages/EditView/utils/data';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { PreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\nimport { previewScript } from '../utils/script';\n\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEVICES = [\n {\n name: 'desktop',\n label: {\n id: 'content-manager.preview.device.desktop',\n defaultMessage: 'Desktop',\n },\n width: '100%',\n height: '100%',\n },\n {\n name: 'mobile',\n label: {\n id: 'content-manager.preview.device.mobile',\n defaultMessage: 'Mobile',\n },\n width: '375px',\n height: '667px',\n },\n];\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreviewContextValue {\n url: string;\n title: string;\n document: NonNullable<ReturnType<UseDocument>['document']>;\n meta: NonNullable<ReturnType<UseDocument>['meta']>;\n schema: NonNullable<ReturnType<UseDocument>['schema']>;\n layout: EditLayout;\n onPreview: () => void;\n iframeRef: React.RefObject<HTMLIFrameElement>;\n isSideEditorOpen: boolean;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * VisualEditingPopover\n * -----------------------------------------------------------------------------------------------*/\n\nconst VisualEditingPopover = ({\n popoverField,\n setPopoverField,\n documentResponse,\n}: {\n popoverField: PopoverField | null;\n setPopoverField: (value: PopoverField | null) => void;\n documentResponse: ReturnType<UseDocument>;\n}) => {\n const iframeRef = usePreviewContext('VisualEditingPopover', (state) => state.iframeRef);\n\n if (!popoverField || !documentResponse.schema || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n {popoverField && (\n <Box\n position={'fixed'}\n top={iframeRect.top + 'px'}\n left={iframeRect.left + 'px'}\n width={iframeRect.width + 'px'}\n height={iframeRect.height + 'px'}\n zIndex={4}\n />\n )}\n <Popover.Root\n open={popoverField != null}\n onOpenChange={(open) => !open && setPopoverField(null)}\n >\n <Popover.Trigger>\n <Box\n id=\"popover-trigger\"\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={iframeRect.top + popoverField.position.top + 'px'}\n left={iframeRect.left + popoverField.position.left + 'px'}\n />\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Box padding={4} width=\"400px\">\n <InputRenderer\n document={documentResponse}\n attribute={documentResponse.schema.attributes[popoverField.path] as any}\n label={popoverField.path}\n name={popoverField.path}\n type={documentResponse.schema.attributes[popoverField.path].type}\n visible={true}\n />\n </Box>\n </Popover.Content>\n </Popover.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ $isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.$isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\ninterface PopoverField {\n path: string;\n position: DOMRect;\n}\n\nconst PreviewPage = () => {\n const location = useLocation();\n const { formatMessage } = useIntl();\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);\n\n // Read all the necessary data from the URL to find the right preview URL\n const {\n slug: model,\n id: documentId,\n collectionType,\n } = useParams<{\n slug: UID.ContentType;\n id: string;\n collectionType: string;\n }>();\n const [\n {\n query: { field: _field, ...query },\n },\n setQuery,\n ] = useQueryParams<{\n plugins?: Record<string, unknown>;\n status?: string;\n field?: string;\n }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const [deviceName, setDeviceName] = React.useState<(typeof DEVICES)[number]['name']>(\n DEVICES[0].name\n );\n const device = DEVICES.find((d) => d.name === deviceName) ?? DEVICES[0];\n\n const [popoverField, setPopoverField] = React.useState<PopoverField | null>(null);\n\n // Listen for ready message from iframe before injecting script\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === 'strapiReady') {\n const script = `(${previewScript.toString()})()`;\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiScript', script },\n new URL(iframeRef.current.src).origin\n );\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, []);\n\n // Listen for willEditField message from iframe\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === 'willEditField') {\n if (isSideEditorOpen) {\n setQuery({ field: event.data.payload.path }, 'push', true);\n } else {\n setPopoverField(event.data.payload);\n }\n }\n };\n\n window.addEventListener('message', handleMessage);\n return () => window.removeEventListener('message', handleMessage);\n }, [isSideEditorOpen, setQuery]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!model) {\n throw new Error('Could not find model in url params');\n }\n\n // Only collection types must have a documentId\n if (collectionType === COLLECTION_TYPES && !documentId) {\n throw new Error('Could not find documentId in url params');\n }\n\n const previewUrlResponse = useGetPreviewUrlQuery({\n params: {\n contentType: model,\n },\n query: {\n documentId,\n locale: params.locale,\n status: params.status as GetPreviewUrl.Request['query']['status'],\n },\n });\n const documentResponse = useDocument({\n model,\n collectionType,\n documentId,\n params,\n });\n const documentLayoutResponse = useDocumentLayout(model);\n\n const isLoading =\n previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;\n if (isLoading && (!documentResponse.document?.documentId || previewUrlResponse.isLoading)) {\n return <Page.Loading />;\n }\n\n const initialValues = documentResponse.getInitialFormValues();\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\n ) {\n return <Page.Error />;\n }\n\n if (!previewUrlResponse.data?.data?.url) {\n return <Page.NoData />;\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validateSync(cleanedValues, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n const onPreview = () => {\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiUpdate' },\n // The iframe origin is safe to use since it must be provided through the allowedOrigins config\n new URL(iframeRef.current.src).origin\n );\n };\n\n const hasAdvancedPreview = window.strapi.features.isEnabled('cms-advanced-preview');\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentTitle,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrl}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n layout={documentLayoutResponse.edit}\n onPreview={onPreview}\n iframeRef={iframeRef}\n isSideEditorOpen={isSideEditorOpen}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== 'draft'\n }\n initialValues={documentResponse.getInitialFormValues()}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n height=\"100%\"\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validate(cleanedValues, { abortEarly: false });\n }}\n >\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n <Blocker />\n <PreviewHeader />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n {hasAdvancedPreview && (\n <Box\n overflow=\"auto\"\n width={isSideEditorOpen ? '50%' : 0}\n borderWidth=\"0 1px 0 0\"\n borderColor=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n // Remove horizontal padding when the editor is closed or it won't fully disappear\n paddingLeft={isSideEditorOpen ? 6 : 0}\n paddingRight={isSideEditorOpen ? 6 : 0}\n transition=\"all 0.2s ease-in-out\"\n >\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={documentResponse}\n hasBackground={false}\n />\n </Box>\n )}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n height=\"100%\"\n overflow=\"hidden\"\n >\n <Flex\n direction=\"row\"\n background=\"neutral0\"\n padding={2}\n borderWidth=\"0 0 1px 0\"\n borderColor=\"neutral150\"\n >\n {hasAdvancedPreview && (\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n isSideEditorOpen\n ? {\n id: 'content-manager.preview.content.close-editor',\n defaultMessage: 'Close editor',\n }\n : {\n id: 'content-manager.preview.content.open-editor',\n defaultMessage: 'Open editor',\n }\n )}\n onClick={() => setIsSideEditorOpen((prev) => !prev)}\n >\n <AnimatedArrow $isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n )}\n <Flex justifyContent=\"center\" flex={1}>\n <SingleSelect\n value={deviceName}\n onChange={(name) => setDeviceName(name.toString())}\n aria-label={formatMessage({\n id: 'content-manager.preview.device.select',\n defaultMessage: 'Select device type',\n })}\n >\n {DEVICES.map((deviceOption) => (\n <SingleSelectOption key={deviceOption.name} value={deviceOption.name}>\n {formatMessage(deviceOption.label)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justifyContent=\"center\" background=\"neutral0\" flex={1}>\n <Box\n data-testid=\"preview-iframe\"\n ref={iframeRef}\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width={device.width}\n height={device.height}\n borderWidth={0}\n tag=\"iframe\"\n />\n </Flex>\n </Flex>\n </Flex>\n <VisualEditingPopover\n popoverField={popoverField}\n setPopoverField={setPopoverField}\n documentResponse={documentResponse}\n />\n </Flex>\n </FormContext>\n </PreviewProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedPreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedPreviewPageImpl = () => {\n const { slug: model } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC([\n { action: 'plugin::content-manager.explorer.read', subject: model },\n { action: 'plugin::content-manager.explorer.update', subject: model },\n { action: 'plugin::content-manager.explorer.publish', subject: model },\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !model) {\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Protect\n permissions={permissions.filter((permission) =>\n permission.action.includes('explorer.read')\n )}\n >\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedPreviewPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedPreviewPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedPreviewPage, usePreviewContext };\n"],"names":["DEVICES","name","label","id","defaultMessage","width","height","PreviewProvider","usePreviewContext","createContext","VisualEditingPopover","popoverField","setPopoverField","documentResponse","iframeRef","state","schema","current","iframeRect","getBoundingClientRect","_jsxs","_Fragment","_jsx","Box","position","top","left","zIndex","Popover","Root","open","onOpenChange","Trigger","Content","sideOffset","padding","InputRenderer","document","attribute","attributes","path","type","visible","AnimatedArrow","styled","ArrowLineLeft","props","$isSideEditorOpen","PreviewPage","location","useLocation","formatMessage","useIntl","React","useRef","isSideEditorOpen","setIsSideEditorOpen","useState","slug","model","documentId","collectionType","useParams","query","field","_field","setQuery","useQueryParams","params","useMemo","buildValidParams","deviceName","setDeviceName","device","find","d","useEffect","handleMessage","event","data","script","previewScript","toString","contentWindow","postMessage","URL","src","origin","window","addEventListener","removeEventListener","payload","Error","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","status","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","Page","Loading","initialValues","getInitialFormValues","error","meta","url","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","options","cleanedValues","removedAttributes","handleInvisibleAttributes","components","yupSchema","createYupSchema","abortEarly","previewUrl","onPreview","hasAdvancedPreview","strapi","features","isEnabled","Title","title","layout","FormContext","method","disabled","initialErrors","forceValidation","validate","Flex","direction","alignItems","Blocker","PreviewHeader","flex","overflow","borderWidth","borderColor","paddingTop","paddingBottom","paddingLeft","paddingRight","transition","FormLayout","hasBackground","background","IconButton","variant","onClick","prev","justifyContent","SingleSelect","value","onChange","aria-label","map","deviceOption","SingleSelectOption","data-testid","ref","tag","ProtectedPreviewPageImpl","permissions","useRBAC","action","subject","Protect","filter","permission","includes","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { createContext, useRBAC, Page, useQueryParams, Form
|
|
4
|
-
import { Portal, FocusTrap, Box, Flex, IconButton } from '@strapi/design-system';
|
|
3
|
+
import { createContext, useRBAC, Page, useQueryParams, Form } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { Portal, FocusTrap, Box, Flex, IconButton, SingleSelect, SingleSelectOption, Popover } from '@strapi/design-system';
|
|
5
5
|
import { ArrowLineLeft } from '@strapi/icons';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
7
|
import { useParams, useLocation } from 'react-router-dom';
|
|
@@ -10,18 +10,96 @@ import { COLLECTION_TYPES } from '../../constants/collections.mjs';
|
|
|
10
10
|
import { DocumentRBAC } from '../../features/DocumentRBAC.mjs';
|
|
11
11
|
import { useDocument } from '../../hooks/useDocument.mjs';
|
|
12
12
|
import { useDocumentLayout } from '../../hooks/useDocumentLayout.mjs';
|
|
13
|
+
import { Blocker } from '../../pages/EditView/components/Blocker.mjs';
|
|
13
14
|
import { FormLayout } from '../../pages/EditView/components/FormLayout.mjs';
|
|
15
|
+
import { InputRenderer as MemoizedInputRenderer } from '../../pages/EditView/components/InputRenderer.mjs';
|
|
16
|
+
import { handleInvisibleAttributes } from '../../pages/EditView/utils/data.mjs';
|
|
14
17
|
import { buildValidParams } from '../../utils/api.mjs';
|
|
15
18
|
import { createYupSchema } from '../../utils/validation.mjs';
|
|
16
19
|
import { PreviewHeader } from '../components/PreviewHeader.mjs';
|
|
17
20
|
import { useGetPreviewUrlQuery } from '../services/preview.mjs';
|
|
21
|
+
import { previewScript } from '../utils/script.mjs';
|
|
18
22
|
|
|
23
|
+
/* -------------------------------------------------------------------------------------------------
|
|
24
|
+
* Constants
|
|
25
|
+
* -----------------------------------------------------------------------------------------------*/ const DEVICES = [
|
|
26
|
+
{
|
|
27
|
+
name: 'desktop',
|
|
28
|
+
label: {
|
|
29
|
+
id: 'content-manager.preview.device.desktop',
|
|
30
|
+
defaultMessage: 'Desktop'
|
|
31
|
+
},
|
|
32
|
+
width: '100%',
|
|
33
|
+
height: '100%'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'mobile',
|
|
37
|
+
label: {
|
|
38
|
+
id: 'content-manager.preview.device.mobile',
|
|
39
|
+
defaultMessage: 'Mobile'
|
|
40
|
+
},
|
|
41
|
+
width: '375px',
|
|
42
|
+
height: '667px'
|
|
43
|
+
}
|
|
44
|
+
];
|
|
19
45
|
const [PreviewProvider, usePreviewContext] = createContext('PreviewPage');
|
|
46
|
+
/* -------------------------------------------------------------------------------------------------
|
|
47
|
+
* VisualEditingPopover
|
|
48
|
+
* -----------------------------------------------------------------------------------------------*/ const VisualEditingPopover = ({ popoverField, setPopoverField, documentResponse })=>{
|
|
49
|
+
const iframeRef = usePreviewContext('VisualEditingPopover', (state)=>state.iframeRef);
|
|
50
|
+
if (!popoverField || !documentResponse.schema || !iframeRef.current) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const iframeRect = iframeRef.current.getBoundingClientRect();
|
|
54
|
+
return /*#__PURE__*/ jsxs(Fragment, {
|
|
55
|
+
children: [
|
|
56
|
+
popoverField && /*#__PURE__*/ jsx(Box, {
|
|
57
|
+
position: 'fixed',
|
|
58
|
+
top: iframeRect.top + 'px',
|
|
59
|
+
left: iframeRect.left + 'px',
|
|
60
|
+
width: iframeRect.width + 'px',
|
|
61
|
+
height: iframeRect.height + 'px',
|
|
62
|
+
zIndex: 4
|
|
63
|
+
}),
|
|
64
|
+
/*#__PURE__*/ jsxs(Popover.Root, {
|
|
65
|
+
open: popoverField != null,
|
|
66
|
+
onOpenChange: (open)=>!open && setPopoverField(null),
|
|
67
|
+
children: [
|
|
68
|
+
/*#__PURE__*/ jsx(Popover.Trigger, {
|
|
69
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
70
|
+
id: "popover-trigger",
|
|
71
|
+
position: "fixed",
|
|
72
|
+
width: popoverField.position.width + 'px',
|
|
73
|
+
height: popoverField.position.height + 'px',
|
|
74
|
+
top: iframeRect.top + popoverField.position.top + 'px',
|
|
75
|
+
left: iframeRect.left + popoverField.position.left + 'px'
|
|
76
|
+
})
|
|
77
|
+
}),
|
|
78
|
+
/*#__PURE__*/ jsx(Popover.Content, {
|
|
79
|
+
sideOffset: 4,
|
|
80
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
81
|
+
padding: 4,
|
|
82
|
+
width: "400px",
|
|
83
|
+
children: /*#__PURE__*/ jsx(MemoizedInputRenderer, {
|
|
84
|
+
document: documentResponse,
|
|
85
|
+
attribute: documentResponse.schema.attributes[popoverField.path],
|
|
86
|
+
label: popoverField.path,
|
|
87
|
+
name: popoverField.path,
|
|
88
|
+
type: documentResponse.schema.attributes[popoverField.path].type,
|
|
89
|
+
visible: true
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
})
|
|
93
|
+
]
|
|
94
|
+
})
|
|
95
|
+
]
|
|
96
|
+
});
|
|
97
|
+
};
|
|
20
98
|
/* -------------------------------------------------------------------------------------------------
|
|
21
99
|
* PreviewPage
|
|
22
100
|
* -----------------------------------------------------------------------------------------------*/ const AnimatedArrow = styled(ArrowLineLeft)`
|
|
23
101
|
will-change: transform;
|
|
24
|
-
rotate: ${(props)=>props
|
|
102
|
+
rotate: ${(props)=>props.$isSideEditorOpen ? '0deg' : '180deg'};
|
|
25
103
|
transition: rotate 0.2s ease-in-out;
|
|
26
104
|
`;
|
|
27
105
|
const PreviewPage = ()=>{
|
|
@@ -31,10 +109,48 @@ const PreviewPage = ()=>{
|
|
|
31
109
|
const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);
|
|
32
110
|
// Read all the necessary data from the URL to find the right preview URL
|
|
33
111
|
const { slug: model, id: documentId, collectionType } = useParams();
|
|
34
|
-
const [{ query }] = useQueryParams();
|
|
112
|
+
const [{ query: { field: _field, ...query } }, setQuery] = useQueryParams();
|
|
35
113
|
const params = React.useMemo(()=>buildValidParams(query), [
|
|
36
114
|
query
|
|
37
115
|
]);
|
|
116
|
+
const [deviceName, setDeviceName] = React.useState(DEVICES[0].name);
|
|
117
|
+
const device = DEVICES.find((d)=>d.name === deviceName) ?? DEVICES[0];
|
|
118
|
+
const [popoverField, setPopoverField] = React.useState(null);
|
|
119
|
+
// Listen for ready message from iframe before injecting script
|
|
120
|
+
React.useEffect(()=>{
|
|
121
|
+
const handleMessage = (event)=>{
|
|
122
|
+
if (event.data?.type === 'strapiReady') {
|
|
123
|
+
const script = `(${previewScript.toString()})()`;
|
|
124
|
+
iframeRef?.current?.contentWindow?.postMessage({
|
|
125
|
+
type: 'strapiScript',
|
|
126
|
+
script
|
|
127
|
+
}, new URL(iframeRef.current.src).origin);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
window.addEventListener('message', handleMessage);
|
|
131
|
+
return ()=>{
|
|
132
|
+
window.removeEventListener('message', handleMessage);
|
|
133
|
+
};
|
|
134
|
+
}, []);
|
|
135
|
+
// Listen for willEditField message from iframe
|
|
136
|
+
React.useEffect(()=>{
|
|
137
|
+
const handleMessage = (event)=>{
|
|
138
|
+
if (event.data?.type === 'willEditField') {
|
|
139
|
+
if (isSideEditorOpen) {
|
|
140
|
+
setQuery({
|
|
141
|
+
field: event.data.payload.path
|
|
142
|
+
}, 'push', true);
|
|
143
|
+
} else {
|
|
144
|
+
setPopoverField(event.data.payload);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
window.addEventListener('message', handleMessage);
|
|
149
|
+
return ()=>window.removeEventListener('message', handleMessage);
|
|
150
|
+
}, [
|
|
151
|
+
isSideEditorOpen,
|
|
152
|
+
setQuery
|
|
153
|
+
]);
|
|
38
154
|
if (!collectionType) {
|
|
39
155
|
throw new Error('Could not find collectionType in url params');
|
|
40
156
|
}
|
|
@@ -63,7 +179,7 @@ const PreviewPage = ()=>{
|
|
|
63
179
|
});
|
|
64
180
|
const documentLayoutResponse = useDocumentLayout(model);
|
|
65
181
|
const isLoading = previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;
|
|
66
|
-
if (isLoading && !documentResponse.document?.documentId) {
|
|
182
|
+
if (isLoading && (!documentResponse.document?.documentId || previewUrlResponse.isLoading)) {
|
|
67
183
|
return /*#__PURE__*/ jsx(Page.Loading, {});
|
|
68
184
|
}
|
|
69
185
|
const initialValues = documentResponse.getInitialFormValues();
|
|
@@ -75,11 +191,17 @@ const PreviewPage = ()=>{
|
|
|
75
191
|
}
|
|
76
192
|
const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
|
|
77
193
|
const validateSync = (values, options)=>{
|
|
194
|
+
const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {
|
|
195
|
+
schema: documentResponse.schema,
|
|
196
|
+
initialValues,
|
|
197
|
+
components: documentResponse.components
|
|
198
|
+
});
|
|
78
199
|
const yupSchema = createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
|
|
79
200
|
status: documentResponse.document?.status,
|
|
201
|
+
removedAttributes,
|
|
80
202
|
...options
|
|
81
203
|
});
|
|
82
|
-
return yupSchema.validateSync(
|
|
204
|
+
return yupSchema.validateSync(cleanedValues, {
|
|
83
205
|
abortEarly: false
|
|
84
206
|
});
|
|
85
207
|
};
|
|
@@ -109,6 +231,8 @@ const PreviewPage = ()=>{
|
|
|
109
231
|
schema: documentResponse.schema,
|
|
110
232
|
layout: documentLayoutResponse.edit,
|
|
111
233
|
onPreview: onPreview,
|
|
234
|
+
iframeRef: iframeRef,
|
|
235
|
+
isSideEditorOpen: isSideEditorOpen,
|
|
112
236
|
children: /*#__PURE__*/ jsx(Form, {
|
|
113
237
|
method: "PUT",
|
|
114
238
|
disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
|
|
@@ -116,52 +240,101 @@ const PreviewPage = ()=>{
|
|
|
116
240
|
initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
|
|
117
241
|
height: "100%",
|
|
118
242
|
validate: (values, options)=>{
|
|
243
|
+
const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {
|
|
244
|
+
schema: documentResponse.schema,
|
|
245
|
+
initialValues,
|
|
246
|
+
components: documentResponse.components
|
|
247
|
+
});
|
|
119
248
|
const yupSchema = createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
|
|
120
249
|
status: documentResponse.document?.status,
|
|
250
|
+
removedAttributes,
|
|
121
251
|
...options
|
|
122
252
|
});
|
|
123
|
-
return yupSchema.validate(
|
|
253
|
+
return yupSchema.validate(cleanedValues, {
|
|
124
254
|
abortEarly: false
|
|
125
255
|
});
|
|
126
256
|
},
|
|
127
|
-
children:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
257
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
258
|
+
direction: "column",
|
|
259
|
+
height: "100%",
|
|
260
|
+
alignItems: "stretch",
|
|
261
|
+
children: [
|
|
262
|
+
/*#__PURE__*/ jsx(Blocker, {}),
|
|
263
|
+
/*#__PURE__*/ jsx(PreviewHeader, {}),
|
|
264
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
265
|
+
flex: 1,
|
|
266
|
+
overflow: "auto",
|
|
267
|
+
alignItems: "stretch",
|
|
268
|
+
children: [
|
|
269
|
+
hasAdvancedPreview && /*#__PURE__*/ jsx(Box, {
|
|
270
|
+
overflow: "auto",
|
|
271
|
+
width: isSideEditorOpen ? '50%' : 0,
|
|
272
|
+
borderWidth: "0 1px 0 0",
|
|
273
|
+
borderColor: "neutral150",
|
|
274
|
+
paddingTop: 6,
|
|
275
|
+
paddingBottom: 6,
|
|
276
|
+
// Remove horizontal padding when the editor is closed or it won't fully disappear
|
|
277
|
+
paddingLeft: isSideEditorOpen ? 6 : 0,
|
|
278
|
+
paddingRight: isSideEditorOpen ? 6 : 0,
|
|
279
|
+
transition: "all 0.2s ease-in-out",
|
|
280
|
+
children: /*#__PURE__*/ jsx(FormLayout, {
|
|
281
|
+
layout: documentLayoutResponse.edit.layout,
|
|
282
|
+
document: documentResponse,
|
|
283
|
+
hasBackground: false
|
|
284
|
+
})
|
|
285
|
+
}),
|
|
286
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
287
|
+
direction: "column",
|
|
288
|
+
alignItems: "stretch",
|
|
289
|
+
flex: 1,
|
|
290
|
+
height: "100%",
|
|
291
|
+
overflow: "hidden",
|
|
292
|
+
children: [
|
|
293
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
294
|
+
direction: "row",
|
|
295
|
+
background: "neutral0",
|
|
296
|
+
padding: 2,
|
|
297
|
+
borderWidth: "0 0 1px 0",
|
|
298
|
+
borderColor: "neutral150",
|
|
299
|
+
children: [
|
|
300
|
+
hasAdvancedPreview && /*#__PURE__*/ jsx(IconButton, {
|
|
301
|
+
variant: "ghost",
|
|
302
|
+
label: formatMessage(isSideEditorOpen ? {
|
|
303
|
+
id: 'content-manager.preview.content.close-editor',
|
|
304
|
+
defaultMessage: 'Close editor'
|
|
305
|
+
} : {
|
|
306
|
+
id: 'content-manager.preview.content.open-editor',
|
|
307
|
+
defaultMessage: 'Open editor'
|
|
308
|
+
}),
|
|
309
|
+
onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
|
|
310
|
+
children: /*#__PURE__*/ jsx(AnimatedArrow, {
|
|
311
|
+
$isSideEditorOpen: isSideEditorOpen
|
|
312
|
+
})
|
|
313
|
+
}),
|
|
314
|
+
/*#__PURE__*/ jsx(Flex, {
|
|
315
|
+
justifyContent: "center",
|
|
316
|
+
flex: 1,
|
|
317
|
+
children: /*#__PURE__*/ jsx(SingleSelect, {
|
|
318
|
+
value: deviceName,
|
|
319
|
+
onChange: (name)=>setDeviceName(name.toString()),
|
|
320
|
+
"aria-label": formatMessage({
|
|
321
|
+
id: 'content-manager.preview.device.select',
|
|
322
|
+
defaultMessage: 'Select device type'
|
|
323
|
+
}),
|
|
324
|
+
children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsx(SingleSelectOption, {
|
|
325
|
+
value: deviceOption.name,
|
|
326
|
+
children: formatMessage(deviceOption.label)
|
|
327
|
+
}, deviceOption.name))
|
|
328
|
+
})
|
|
329
|
+
})
|
|
330
|
+
]
|
|
331
|
+
}),
|
|
332
|
+
/*#__PURE__*/ jsx(Flex, {
|
|
333
|
+
direction: "column",
|
|
334
|
+
justifyContent: "center",
|
|
335
|
+
background: "neutral0",
|
|
336
|
+
flex: 1,
|
|
337
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
165
338
|
"data-testid": "preview-iframe",
|
|
166
339
|
ref: iframeRef,
|
|
167
340
|
src: previewUrl,
|
|
@@ -169,34 +342,23 @@ const PreviewPage = ()=>{
|
|
|
169
342
|
id: 'content-manager.preview.panel.title',
|
|
170
343
|
defaultMessage: 'Preview'
|
|
171
344
|
}),
|
|
172
|
-
width:
|
|
173
|
-
height:
|
|
345
|
+
width: device.width,
|
|
346
|
+
height: device.height,
|
|
174
347
|
borderWidth: 0,
|
|
175
348
|
tag: "iframe"
|
|
176
|
-
}, previewUrl)
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
left: 2,
|
|
190
|
-
children: /*#__PURE__*/ jsx(AnimatedArrow, {
|
|
191
|
-
isSideEditorOpen: isSideEditorOpen
|
|
192
|
-
})
|
|
193
|
-
})
|
|
194
|
-
]
|
|
195
|
-
})
|
|
196
|
-
]
|
|
197
|
-
})
|
|
198
|
-
]
|
|
199
|
-
})
|
|
349
|
+
}, previewUrl)
|
|
350
|
+
})
|
|
351
|
+
]
|
|
352
|
+
})
|
|
353
|
+
]
|
|
354
|
+
}),
|
|
355
|
+
/*#__PURE__*/ jsx(VisualEditingPopover, {
|
|
356
|
+
popoverField: popoverField,
|
|
357
|
+
setPopoverField: setPopoverField,
|
|
358
|
+
documentResponse: documentResponse
|
|
359
|
+
})
|
|
360
|
+
]
|
|
361
|
+
})
|
|
200
362
|
})
|
|
201
363
|
})
|
|
202
364
|
]
|