@strapi/content-manager 5.12.2 → 5.12.4

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.
Files changed (82) hide show
  1. package/dist/admin/content-manager.js.map +1 -1
  2. package/dist/admin/content-manager.mjs.map +1 -1
  3. package/dist/admin/history/pages/History.js +1 -9
  4. package/dist/admin/history/pages/History.js.map +1 -1
  5. package/dist/admin/history/pages/History.mjs +1 -9
  6. package/dist/admin/history/pages/History.mjs.map +1 -1
  7. package/dist/admin/hooks/useDocumentActions.js +8 -1
  8. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  9. package/dist/admin/hooks/useDocumentActions.mjs +8 -1
  10. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  11. package/dist/admin/hooks/useDocumentContext.js +57 -0
  12. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  13. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  14. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  15. package/dist/admin/pages/EditView/EditViewPage.js +85 -93
  16. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  17. package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
  18. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/DocumentActions.js +28 -32
  20. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  21. package/dist/admin/pages/EditView/components/DocumentActions.mjs +32 -36
  22. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  24. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  26. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  28. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  30. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -2
  32. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -2
  34. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
  36. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
  38. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  40. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +432 -344
  44. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +432 -346
  46. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +55 -37
  48. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +57 -39
  50. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
  52. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
  54. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  56. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  58. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  59. package/dist/admin/preview/components/PreviewHeader.js +2 -5
  60. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  61. package/dist/admin/preview/components/PreviewHeader.mjs +2 -5
  62. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  63. package/dist/admin/preview/pages/Preview.js +94 -102
  64. package/dist/admin/preview/pages/Preview.js.map +1 -1
  65. package/dist/admin/preview/pages/Preview.mjs +94 -102
  66. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  67. package/dist/admin/src/content-manager.d.ts +0 -3
  68. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  69. package/dist/admin/src/history/pages/History.d.ts +1 -1
  70. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  71. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  72. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  73. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +50 -5
  74. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  75. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  76. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  77. package/package.json +8 -8
  78. package/dist/admin/features/DocumentContext.js +0 -71
  79. package/dist/admin/features/DocumentContext.js.map +0 -1
  80. package/dist/admin/features/DocumentContext.mjs +0 -49
  81. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  82. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewHeader.mjs","sources":["../../../../admin/src/preview/components/PreviewHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useClipboard,\n useHistory,\n useNotification,\n useQueryParams,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { IconButton, Tabs, Typography, Flex } from '@strapi/design-system';\nimport { Cross, Link as LinkIcon } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, type To } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { useDocumentContext } from '../../features/DocumentContext';\nimport { DocumentActionButton } from '../../pages/EditView/components/DocumentActions';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDocumentStatus } from '../../pages/EditView/EditViewPage';\nimport { usePreviewContext } from '../pages/Preview';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * ClosePreviewButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ClosePreviewButton = () => {\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { formatMessage } = useIntl();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const locationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n\n /**\n * Get the link destination from the history.\n * Rely on a fallback (the parent edit view page) if there's no page to go back .\n */\n const historyTo = canGoBack ? history.at(locationIndex - 2) : undefined;\n const fallback = {\n pathname: '..',\n search: stringify(query, { encode: false }),\n } satisfies To;\n const toWithFallback = historyTo ?? fallback;\n\n const handleClick = (e: React.MouseEvent) => {\n if (canGoBack) {\n // Prevent normal link behavior, go back in the history stack instead\n e.preventDefault();\n goBack();\n return;\n }\n\n // Otherwise rely on native link behavior to go back to the edit view. We don't use navigate()\n // here in order to get the relative=\"path\" functionality from the Link component.\n };\n\n return (\n <IconButton\n variant=\"ghost\"\n tag={Link}\n relative=\"path\"\n to={toWithFallback}\n onClick={handleClick}\n label={formatMessage({\n id: 'content-manager.preview.header.close',\n defaultMessage: 'Close preview',\n })}\n >\n <Cross />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Status\n * -----------------------------------------------------------------------------------------------*/\n\nconst Status = () => {\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n if (!hasDraftAndPublished) {\n return null;\n }\n\n const status = getDocumentStatus(document, meta);\n\n return <DocumentStatus status={status} size=\"XS\" />;\n};\n\nconst PreviewTabs = () => {\n const { formatMessage } = useIntl();\n\n // URL query params\n const [{ query }, setQuery] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublish = schema?.options?.draftAndPublish ?? false;\n const documentStatus = getDocumentStatus(document, meta);\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n return (\n <Tabs.Root variant=\"simple\" value={query.status || 'draft'} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'preview.tabs.label',\n defaultMessage: 'Document status',\n })}\n >\n <StatusTab value=\"draft\">\n {formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab value=\"published\" disabled={documentStatus === 'draft'}>\n {formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'published',\n })}\n </StatusTab>\n </Tabs.List>\n </Tabs.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewHeader = () => {\n const title = usePreviewContext('PreviewHeader', (state) => state.title);\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const plugins = useStrapiApp('PreviewHeader', (state) => state.plugins);\n const onPreview = useDocumentContext('PreviewHeader', (state) => state.onPreview);\n\n const [{ query }] = useQueryParams<{\n status?: 'draft' | 'published';\n }>();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n const handleCopyLink = () => {\n copy(window.location.href);\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.preview.copy.success',\n defaultMessage: 'Copied preview link',\n }),\n type: 'success',\n });\n };\n\n const hasDraftAndPublish = schema.options?.draftAndPublish ?? false;\n const documentActionProps = {\n activeTab: query.status ?? null,\n collectionType: schema.kind === 'collectionType' ? 'collection-types' : 'single-types',\n model: schema.uid,\n documentId: document.documentId,\n document,\n meta,\n onPreview,\n fromPreview: true,\n } satisfies DocumentActionProps;\n\n return (\n <Flex height=\"48px\" gap={4} background=\"neutral0\" borderColor=\"neutral150\" tag=\"header\">\n {/* Title and status */}\n <TitleContainer height=\"100%\" paddingLeft={2} paddingRight={4}>\n <ClosePreviewButton />\n <PreviewTitle\n tag=\"h1\"\n title={title}\n maxWidth=\"200px\"\n fontSize={2}\n paddingLeft={2}\n paddingRight={3}\n fontWeight={600}\n >\n {title}\n </PreviewTitle>\n <Status />\n </TitleContainer>\n\n {/* Tabs and actions */}\n <Flex\n flex={1}\n paddingRight={2}\n gap={2}\n justifyContent={hasDraftAndPublish ? 'space-between' : 'flex-end'}\n >\n <Flex flex=\"1 1 70%\">\n <PreviewTabs />\n </Flex>\n <Flex gap={2}>\n <IconButton\n type=\"button\"\n label={formatMessage({\n id: 'preview.copy.label',\n defaultMessage: 'Copy preview link',\n })}\n onClick={handleCopyLink}\n >\n <LinkIcon />\n </IconButton>\n <InjectionZone area=\"preview.actions\" />\n <DescriptionComponentRenderer\n props={documentActionProps}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('preview')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) =>\n [action.position].flat().includes('preview')\n );\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nconst PreviewTitle = styled(Typography)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\nconst TitleContainer = styled(Flex)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nexport { PreviewHeader };\n"],"names":["ClosePreviewButton","query","useQueryParams","formatMessage","useIntl","canGoBack","useHistory","state","goBack","history","locationIndex","currentLocationIndex","historyTo","at","undefined","fallback","pathname","search","stringify","encode","toWithFallback","handleClick","e","preventDefault","_jsx","IconButton","variant","tag","Link","relative","to","onClick","label","id","defaultMessage","Cross","Status","document","usePreviewContext","schema","meta","hasDraftAndPublished","options","draftAndPublish","status","getDocumentStatus","DocumentStatus","size","PreviewTabs","setQuery","hasDraftAndPublish","documentStatus","handleTabChange","Tabs","Root","value","onValueChange","_jsxs","List","aria-label","StatusTab","disabled","PreviewHeader","title","plugins","useStrapiApp","onPreview","useDocumentContext","toggleNotification","useNotification","copy","useClipboard","handleCopyLink","window","location","href","message","type","documentActionProps","activeTab","collectionType","kind","model","uid","documentId","fromPreview","Flex","height","gap","background","borderColor","TitleContainer","paddingLeft","paddingRight","PreviewTitle","maxWidth","fontSize","fontWeight","flex","justifyContent","LinkIcon","InjectionZone","area","DescriptionComponentRenderer","props","descriptions","apis","getDocumentActions","actions","filteredActions","filter","action","position","flat","includes","primaryAction","secondaryAction","_Fragment","DocumentActionButton","styled","Typography","Trigger","theme","colors","neutral150"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewHeader.mjs","sources":["../../../../admin/src/preview/components/PreviewHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useClipboard,\n useHistory,\n useNotification,\n useQueryParams,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { IconButton, Tabs, Typography, Flex } from '@strapi/design-system';\nimport { Cross, Link as LinkIcon } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, type To } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { DocumentActionButton } from '../../pages/EditView/components/DocumentActions';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDocumentStatus } from '../../pages/EditView/EditViewPage';\nimport { usePreviewContext } from '../pages/Preview';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * ClosePreviewButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ClosePreviewButton = () => {\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { formatMessage } = useIntl();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const locationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n\n /**\n * Get the link destination from the history.\n * Rely on a fallback (the parent edit view page) if there's no page to go back .\n */\n const historyTo = canGoBack ? history.at(locationIndex - 2) : undefined;\n const fallback = {\n pathname: '..',\n search: stringify(query, { encode: false }),\n } satisfies To;\n const toWithFallback = historyTo ?? fallback;\n\n const handleClick = (e: React.MouseEvent) => {\n if (canGoBack) {\n // Prevent normal link behavior, go back in the history stack instead\n e.preventDefault();\n goBack();\n return;\n }\n\n // Otherwise rely on native link behavior to go back to the edit view. We don't use navigate()\n // here in order to get the relative=\"path\" functionality from the Link component.\n };\n\n return (\n <IconButton\n variant=\"ghost\"\n tag={Link}\n relative=\"path\"\n to={toWithFallback}\n onClick={handleClick}\n label={formatMessage({\n id: 'content-manager.preview.header.close',\n defaultMessage: 'Close preview',\n })}\n >\n <Cross />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Status\n * -----------------------------------------------------------------------------------------------*/\n\nconst Status = () => {\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n if (!hasDraftAndPublished) {\n return null;\n }\n\n const status = getDocumentStatus(document, meta);\n\n return <DocumentStatus status={status} size=\"XS\" />;\n};\n\nconst PreviewTabs = () => {\n const { formatMessage } = useIntl();\n\n // URL query params\n const [{ query }, setQuery] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublish = schema?.options?.draftAndPublish ?? false;\n const documentStatus = getDocumentStatus(document, meta);\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n return (\n <Tabs.Root variant=\"simple\" value={query.status || 'draft'} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'preview.tabs.label',\n defaultMessage: 'Document status',\n })}\n >\n <StatusTab value=\"draft\">\n {formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab value=\"published\" disabled={documentStatus === 'draft'}>\n {formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'published',\n })}\n </StatusTab>\n </Tabs.List>\n </Tabs.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewHeader = () => {\n const title = usePreviewContext('PreviewHeader', (state) => state.title);\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const onPreview = usePreviewContext('PreviewHeader', (state) => state.onPreview);\n const plugins = useStrapiApp('PreviewHeader', (state) => state.plugins);\n\n const [{ query }] = useQueryParams<{\n status?: 'draft' | 'published';\n }>();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n const handleCopyLink = () => {\n copy(window.location.href);\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.preview.copy.success',\n defaultMessage: 'Copied preview link',\n }),\n type: 'success',\n });\n };\n\n const hasDraftAndPublish = schema.options?.draftAndPublish ?? false;\n const documentActionProps = {\n activeTab: query.status ?? null,\n collectionType: schema.kind === 'collectionType' ? 'collection-types' : 'single-types',\n model: schema.uid,\n documentId: document.documentId,\n document,\n meta,\n } satisfies DocumentActionProps;\n\n return (\n <Flex height=\"48px\" gap={4} background=\"neutral0\" borderColor=\"neutral150\" tag=\"header\">\n {/* Title and status */}\n <TitleContainer height=\"100%\" paddingLeft={2} paddingRight={4}>\n <ClosePreviewButton />\n <PreviewTitle\n tag=\"h1\"\n title={title}\n maxWidth=\"200px\"\n fontSize={2}\n paddingLeft={2}\n paddingRight={3}\n fontWeight={600}\n >\n {title}\n </PreviewTitle>\n <Status />\n </TitleContainer>\n\n {/* Tabs and actions */}\n <Flex\n flex={1}\n paddingRight={2}\n gap={2}\n justifyContent={hasDraftAndPublish ? 'space-between' : 'flex-end'}\n >\n <Flex flex=\"1 1 70%\">\n <PreviewTabs />\n </Flex>\n <Flex gap={2}>\n <IconButton\n type=\"button\"\n label={formatMessage({\n id: 'preview.copy.label',\n defaultMessage: 'Copy preview link',\n })}\n onClick={handleCopyLink}\n >\n <LinkIcon />\n </IconButton>\n <InjectionZone area=\"preview.actions\" />\n <DescriptionComponentRenderer\n props={documentActionProps}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('preview')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) =>\n [action.position].flat().includes('preview')\n );\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nconst PreviewTitle = styled(Typography)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\nconst TitleContainer = styled(Flex)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nexport { PreviewHeader };\n"],"names":["ClosePreviewButton","query","useQueryParams","formatMessage","useIntl","canGoBack","useHistory","state","goBack","history","locationIndex","currentLocationIndex","historyTo","at","undefined","fallback","pathname","search","stringify","encode","toWithFallback","handleClick","e","preventDefault","_jsx","IconButton","variant","tag","Link","relative","to","onClick","label","id","defaultMessage","Cross","Status","document","usePreviewContext","schema","meta","hasDraftAndPublished","options","draftAndPublish","status","getDocumentStatus","DocumentStatus","size","PreviewTabs","setQuery","hasDraftAndPublish","documentStatus","handleTabChange","Tabs","Root","value","onValueChange","_jsxs","List","aria-label","StatusTab","disabled","PreviewHeader","title","onPreview","plugins","useStrapiApp","toggleNotification","useNotification","copy","useClipboard","handleCopyLink","window","location","href","message","type","documentActionProps","activeTab","collectionType","kind","model","uid","documentId","Flex","height","gap","background","borderColor","TitleContainer","paddingLeft","paddingRight","PreviewTitle","maxWidth","fontSize","fontWeight","flex","justifyContent","LinkIcon","InjectionZone","area","DescriptionComponentRenderer","props","descriptions","apis","getDocumentActions","actions","filteredActions","filter","action","position","flat","includes","primaryAction","secondaryAction","_Fragment","DocumentActionButton","styled","Typography","Trigger","theme","colors","neutral150"],"mappings":"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"}
@@ -9,7 +9,6 @@ var reactIntl = require('react-intl');
9
9
  var reactRouterDom = require('react-router-dom');
10
10
  var styledComponents = require('styled-components');
11
11
  var collections = require('../../constants/collections.js');
12
- var DocumentContext = require('../../features/DocumentContext.js');
13
12
  var DocumentRBAC = require('../../features/DocumentRBAC.js');
14
13
  var useDocument = require('../../hooks/useDocument.js');
15
14
  var useDocumentLayout = require('../../hooks/useDocumentLayout.js');
@@ -123,109 +122,102 @@ const PreviewPage = ()=>{
123
122
  contentType: documentTitle
124
123
  })
125
124
  }),
126
- /*#__PURE__*/ jsxRuntime.jsx(DocumentContext.DocumentContextProvider, {
127
- initialDocument: {
128
- documentId: documentId || '',
129
- model,
130
- collectionType
131
- },
125
+ /*#__PURE__*/ jsxRuntime.jsx(PreviewProvider, {
126
+ url: previewUrl,
127
+ document: documentResponse.document,
128
+ title: documentTitle,
129
+ meta: documentResponse.meta,
130
+ schema: documentResponse.schema,
131
+ layout: documentLayoutResponse.edit,
132
132
  onPreview: onPreview,
133
- children: /*#__PURE__*/ jsxRuntime.jsx(PreviewProvider, {
134
- url: previewUrl,
135
- document: documentResponse.document,
136
- title: documentTitle,
137
- meta: documentResponse.meta,
138
- schema: documentResponse.schema,
139
- layout: documentLayoutResponse.edit,
140
- children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
141
- method: "PUT",
142
- disabled: query.status === 'published' && documentResponse && documentResponse.document.status === 'published',
143
- initialValues: documentResponse.getInitialFormValues(),
144
- initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
145
- height: "100%",
146
- validate: (values, options)=>{
147
- const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
148
- status: documentResponse.document?.status,
149
- ...options
150
- });
151
- return yupSchema.validate(values, {
152
- abortEarly: false
153
- });
154
- },
155
- children: ({ resetForm })=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
156
- direction: "column",
157
- height: "100%",
158
- alignItems: "stretch",
159
- children: [
160
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
161
- onProceed: resetForm
162
- }),
163
- /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
164
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
165
- flex: 1,
166
- overflow: "auto",
167
- alignItems: "stretch",
168
- children: [
169
- hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
170
- overflow: "auto",
171
- width: isSideEditorOpen ? '50%' : 0,
172
- borderWidth: "0 1px 0 0",
173
- borderColor: "neutral150",
174
- paddingTop: 6,
175
- paddingBottom: 6,
176
- // Remove horizontal padding when the editor is closed or it won't fully disappear
177
- paddingLeft: isSideEditorOpen ? 6 : 0,
178
- paddingRight: isSideEditorOpen ? 6 : 0,
179
- transition: "all 0.2s ease-in-out",
180
- children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
181
- layout: documentLayoutResponse.edit.layout,
182
- document: documentResponse,
183
- hasBackground: false
184
- })
185
- }),
186
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
187
- position: "relative",
188
- flex: 1,
189
- height: "100%",
190
- overflow: "hidden",
191
- children: [
192
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
193
- "data-testid": "preview-iframe",
194
- ref: iframeRef,
195
- src: previewUrl,
196
- title: formatMessage({
197
- id: 'content-manager.preview.panel.title',
198
- defaultMessage: 'Preview'
199
- }),
200
- width: "100%",
201
- height: "100%",
202
- borderWidth: 0,
203
- tag: "iframe"
204
- }, previewUrl),
205
- hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
206
- variant: "tertiary",
207
- label: formatMessage(isSideEditorOpen ? {
208
- id: 'content-manager.preview.content.close-editor',
209
- defaultMessage: 'Close editor'
210
- } : {
211
- id: 'content-manager.preview.content.open-editor',
212
- defaultMessage: 'Open editor'
213
- }),
214
- onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
215
- position: "absolute",
216
- top: 2,
217
- left: 2,
218
- children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
219
- isSideEditorOpen: isSideEditorOpen
220
- })
221
- })
222
- ]
133
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
134
+ method: "PUT",
135
+ disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
136
+ initialValues: documentResponse.getInitialFormValues(),
137
+ initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
138
+ height: "100%",
139
+ validate: (values, options)=>{
140
+ const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
141
+ status: documentResponse.document?.status,
142
+ ...options
143
+ });
144
+ return yupSchema.validate(values, {
145
+ abortEarly: false
146
+ });
147
+ },
148
+ children: ({ resetForm })=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
149
+ direction: "column",
150
+ height: "100%",
151
+ alignItems: "stretch",
152
+ children: [
153
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
154
+ onProceed: resetForm
155
+ }),
156
+ /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
157
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
158
+ flex: 1,
159
+ overflow: "auto",
160
+ alignItems: "stretch",
161
+ children: [
162
+ hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
163
+ overflow: "auto",
164
+ width: isSideEditorOpen ? '50%' : 0,
165
+ borderWidth: "0 1px 0 0",
166
+ borderColor: "neutral150",
167
+ paddingTop: 6,
168
+ paddingBottom: 6,
169
+ // Remove horizontal padding when the editor is closed or it won't fully disappear
170
+ paddingLeft: isSideEditorOpen ? 6 : 0,
171
+ paddingRight: isSideEditorOpen ? 6 : 0,
172
+ transition: "all 0.2s ease-in-out",
173
+ children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
174
+ layout: documentLayoutResponse.edit.layout,
175
+ document: documentResponse,
176
+ hasBackground: false
223
177
  })
224
- ]
225
- })
226
- ]
227
- })
228
- })
178
+ }),
179
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
180
+ position: "relative",
181
+ flex: 1,
182
+ height: "100%",
183
+ overflow: "hidden",
184
+ children: [
185
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
186
+ "data-testid": "preview-iframe",
187
+ ref: iframeRef,
188
+ src: previewUrl,
189
+ title: formatMessage({
190
+ id: 'content-manager.preview.panel.title',
191
+ defaultMessage: 'Preview'
192
+ }),
193
+ width: "100%",
194
+ height: "100%",
195
+ borderWidth: 0,
196
+ tag: "iframe"
197
+ }, previewUrl),
198
+ hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
199
+ variant: "tertiary",
200
+ label: formatMessage(isSideEditorOpen ? {
201
+ id: 'content-manager.preview.content.close-editor',
202
+ defaultMessage: 'Close editor'
203
+ } : {
204
+ id: 'content-manager.preview.content.open-editor',
205
+ defaultMessage: 'Open editor'
206
+ }),
207
+ onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
208
+ position: "absolute",
209
+ top: 2,
210
+ left: 2,
211
+ children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
212
+ isSideEditorOpen: isSideEditorOpen
213
+ })
214
+ })
215
+ ]
216
+ })
217
+ ]
218
+ })
219
+ ]
220
+ })
229
221
  })
230
222
  })
231
223
  ]
@@ -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 { DocumentContextProvider } from '../../features/DocumentContext';\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}\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 <DocumentContextProvider\n initialDocument={{\n documentId: documentId || '',\n model,\n collectionType,\n }}\n onPreview={onPreview}\n >\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 >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status === 'published'\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 </DocumentContextProvider>\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","DocumentContextProvider","initialDocument","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 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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"}