@strapi/content-manager 0.0.0-next.be26954af35e0d908e06277f686a3d86886c7a19 → 0.0.0-next.becb1565a20b0d3fbd0e2d79455c09c2f9f46808
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/LeftMenu.js +13 -15
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +14 -16
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +269 -9
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +252 -12
- 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/hooks/useDocumentActions.js +0 -3
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +1 -4
- 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 +27 -17
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +29 -19
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.js +18 -0
- package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js +69 -20
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +70 -21
- package/dist/admin/pages/EditView/components/DocumentActions.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 +13 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +14 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +16 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +17 -4
- 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 +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +27 -3
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +27 -3
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +20 -7
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -7
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +128 -0
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +128 -1
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +221 -203
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +222 -204
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +3 -1
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +3 -1
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +189 -0
- package/dist/admin/preview/components/InputPopover.js.map +1 -0
- package/dist/admin/preview/components/InputPopover.mjs +167 -0
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
- package/dist/admin/preview/components/PreviewHeader.js +0 -1
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +0 -1
- package/dist/admin/preview/components/PreviewHeader.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/hooks/usePreviewInputManager.js +77 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
- package/dist/admin/preview/pages/Preview.js +172 -68
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +174 -70
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +56 -0
- package/dist/admin/preview/utils/constants.js.map +1 -0
- package/dist/admin/preview/utils/constants.mjs +52 -0
- package/dist/admin/preview/utils/constants.mjs.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.js +107 -0
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.js +22 -0
- package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
- package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
- package/dist/admin/preview/utils/previewScript.js +534 -0
- package/dist/admin/preview/utils/previewScript.js.map +1 -0
- package/dist/admin/preview/utils/previewScript.mjs +532 -0
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
- package/dist/admin/services/api.js +4 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +4 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +40 -14
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +40 -14
- package/dist/admin/services/documents.mjs.map +1 -1
- 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/pages/EditView/components/Blocker.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
- package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
- package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +55 -0
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
- package/dist/admin/src/preview/utils/previewScript.d.ts +24 -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 +16 -16
- package/dist/admin/src/services/homepage.d.ts +1 -1
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/src/utils/api.d.ts +1 -1
- package/dist/admin/src/utils/validation.d.ts +1 -0
- package/dist/admin/translations/en.json.js +12 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +12 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +6 -2
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +6 -2
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +11 -2
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +11 -2
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/utils/api.js +1 -1
- package/dist/admin/utils/api.js.map +1 -1
- package/dist/admin/utils/api.mjs +1 -1
- package/dist/admin/utils/api.mjs.map +1 -1
- package/dist/admin/utils/validation.js +18 -6
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +18 -6
- package/dist/admin/utils/validation.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/history/services/lifecycles.js +20 -19
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +20 -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/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 +7 -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/index.d.ts +7 -0
- package/dist/server/src/services/index.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 +7 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewSidePanel.mjs","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n if (isShown) {\n return <Tooltip label={label}>{children}</Tooltip>;\n }\n\n return children;\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery({\n
|
|
1
|
+
{"version":3,"file":"PreviewSidePanel.mjs","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n if (isShown) {\n return <Tooltip label={label}>{children}</Tooltip>;\n }\n\n return children;\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n const isUnsaved = Boolean(!document || !document.id);\n\n const title = formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n });\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery(\n {\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: document?.status,\n },\n },\n // Don't bother making the request since we won't show any UI\n { skip: isUnsaved }\n );\n\n if (isUnsaved) {\n return null;\n }\n\n // Preview was not configured but not disabled either (otherwise it would be a success 204).\n // So we encourage the user to set it up.\n if (error && error.name === 'NotFoundError') {\n return {\n title,\n content: (\n <Button\n variant=\"tertiary\"\n tag={Link}\n to=\"https://docs.strapi.io/cms/features/preview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n width=\"100%\"\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button-configuration',\n defaultMessage: 'Set up preview',\n })}\n </Button>\n ),\n };\n }\n\n if (!data?.data?.url || error) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title,\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","isUnsaved","Boolean","id","title","defaultMessage","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","skip","name","content","Button","variant","tag","Link","to","target","rel","width","url","trackNavigation","destinationPathname","replace","from","Box","cursor","search","stringify","encode","onClick","disabled","pointerEvents","undefined","tabIndex"],"mappings":";;;;;;;;;AAmBA,MAAMA,kBAAAA,GAAqB,CAAC,EAAEC,OAAO,EAAEC,KAAK,EAAEC,QAAQ,EAA2B,GAAA;AAC/E,IAAA,IAAIF,OAAS,EAAA;AACX,QAAA,qBAAOG,GAACC,CAAAA,OAAAA,EAAAA;YAAQH,KAAOA,EAAAA,KAAAA;AAAQC,YAAAA,QAAAA,EAAAA;;AACjC;IAEA,OAAOA,QAAAA;AACT,CAAA;AAEMG,MAAAA,gBAAAA,GAAmC,CAAC,EAAEC,KAAK,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAA;IACvE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;AACrB,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,aAAaC,OAAQ,CAAA,kBAAA,EAAoB,CAACC,KAAAA,GAAUA,MAAMC,QAAQ,CAAA;AACxE,IAAA,MAAMC,YAAYC,OAAQ,CAAA,CAACd,QAAY,IAAA,CAACA,SAASe,EAAE,CAAA;AAEnD,IAAA,MAAMC,QAAQf,aAAc,CAAA;QAC1Bc,EAAI,EAAA,qCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,CAAA;AAEA;;;;AAIC,MACD,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGC,qBACtB,CAAA;QACEC,MAAQ,EAAA;YACNC,WAAaxB,EAAAA;AACf,SAAA;QACAS,KAAO,EAAA;AACLR,YAAAA,UAAAA;AACAwB,YAAAA,MAAAA,EAAQvB,QAAUuB,EAAAA,MAAAA;AAClBC,YAAAA,MAAAA,EAAQxB,QAAUwB,EAAAA;AACpB;AACF,KAAA;AAEA,IAAA;QAAEC,IAAMZ,EAAAA;AAAU,KAAA,CAAA;AAGpB,IAAA,IAAIA,SAAW,EAAA;QACb,OAAO,IAAA;AACT;;;AAIA,IAAA,IAAIM,KAASA,IAAAA,KAAAA,CAAMO,IAAI,KAAK,eAAiB,EAAA;QAC3C,OAAO;AACLV,YAAAA,KAAAA;AACAW,YAAAA,OAAAA,gBACEhC,GAACiC,CAAAA,MAAAA,EAAAA;gBACCC,OAAQ,EAAA,UAAA;gBACRC,GAAKC,EAAAA,IAAAA;gBACLC,EAAG,EAAA,6CAAA;gBACHC,MAAO,EAAA,QAAA;gBACPC,GAAI,EAAA,qBAAA;gBACJC,KAAM,EAAA,MAAA;0BAELlC,aAAc,CAAA;oBACbc,EAAI,EAAA,oDAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA;;AAGN,SAAA;AACF;AAEA,IAAA,IAAI,CAACC,IAAAA,EAAMA,IAAMkB,EAAAA,GAAAA,IAAOjB,KAAO,EAAA;QAC7B,OAAO,IAAA;AACT;AAEA,IAAA,MAAMkB,eAAkB,GAAA,IAAA;;AAEtB,QAAA,MAAMC,mBAAsBjC,GAAAA,QAAAA,CAASkC,OAAO,CAAC,OAAO,EAAM,CAAA,GAAA,UAAA;AAC1DpC,QAAAA,UAAAA,CAAW,cAAgB,EAAA;YAAEqC,IAAMnC,EAAAA,QAAAA;YAAU2B,EAAIM,EAAAA;AAAoB,SAAA,CAAA;AACvE,KAAA;IAEA,OAAO;AACLtB,QAAAA,KAAAA;AACAW,QAAAA,OAAAA,gBACEhC,GAACJ,CAAAA,kBAAAA,EAAAA;AACCE,YAAAA,KAAAA,EAAOQ,aAAc,CAAA;gBACnBc,EAAI,EAAA,uDAAA;gBACJE,cAAgB,EAAA;AAClB,aAAA,CAAA;YACAzB,OAASiB,EAAAA,UAAAA;AAET,YAAA,QAAA,gBAAAd,GAAC8C,CAAAA,GAAAA,EAAAA;gBAAIC,MAAO,EAAA,aAAA;gBAAcP,KAAM,EAAA,MAAA;AAC9B,gBAAA,QAAA,gBAAAxC,GAACiC,CAAAA,MAAAA,EAAAA;oBACCC,OAAQ,EAAA,UAAA;oBACRC,GAAKC,EAAAA,IAAAA;oBACLC,EAAI,EAAA;wBAAE3B,QAAU,EAAA,SAAA;AAAWsC,wBAAAA,MAAAA,EAAQC,UAAUrC,KAAO,EAAA;4BAAEsC,MAAQ,EAAA;AAAM,yBAAA;AAAG,qBAAA;oBACvEC,OAAST,EAAAA,eAAAA;oBACTF,KAAM,EAAA,MAAA;oBACNY,QAAUtC,EAAAA,UAAAA;AACVuC,oBAAAA,aAAAA,EAAevC,aAAa,MAASwC,GAAAA,SAAAA;oBACrCC,QAAUzC,EAAAA,UAAAA,GAAa,CAAC,CAAIwC,GAAAA,SAAAA;8BAE3BhD,aAAc,CAAA;wBACbc,EAAI,EAAA,sCAAA;wBACJE,cAAgB,EAAA;AAClB,qBAAA;;;;AAKV,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
5
|
+
var InputPopover = require('../components/InputPopover.js');
|
|
6
|
+
var Preview = require('../pages/Preview.js');
|
|
7
|
+
var constants = require('../utils/constants.js');
|
|
8
|
+
var getSendMessage = require('../utils/getSendMessage.js');
|
|
9
|
+
|
|
10
|
+
function _interopNamespaceDefault(e) {
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
28
|
+
|
|
29
|
+
function usePreviewInputManager(name, attribute) {
|
|
30
|
+
const iframe = Preview.usePreviewContext('usePreviewInputManager', (state)=>state.iframeRef, false);
|
|
31
|
+
const setPopoverField = Preview.usePreviewContext('usePreviewInputManager', (state)=>state.setPopoverField, false);
|
|
32
|
+
const hasInputPopoverParent = InputPopover.useHasInputPopoverParent();
|
|
33
|
+
const { value } = strapiAdmin.useField(name);
|
|
34
|
+
const { type } = attribute;
|
|
35
|
+
React__namespace.useEffect(()=>{
|
|
36
|
+
if (!iframe || !type) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Only send message if the field is not a data structure (component, dynamic zone)
|
|
41
|
+
* because we already send events for their fields
|
|
42
|
+
*/ if (![
|
|
43
|
+
'component',
|
|
44
|
+
'dynamiczone'
|
|
45
|
+
].includes(type)) {
|
|
46
|
+
const sendMessage = getSendMessage.getSendMessage(iframe);
|
|
47
|
+
sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, {
|
|
48
|
+
field: name,
|
|
49
|
+
value
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}, [
|
|
53
|
+
name,
|
|
54
|
+
value,
|
|
55
|
+
iframe,
|
|
56
|
+
type
|
|
57
|
+
]);
|
|
58
|
+
const sendMessage = getSendMessage.getSendMessage(iframe);
|
|
59
|
+
return {
|
|
60
|
+
onFocus: ()=>{
|
|
61
|
+
if (hasInputPopoverParent) return;
|
|
62
|
+
sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, {
|
|
63
|
+
field: name
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
onBlur: ()=>{
|
|
67
|
+
if (hasInputPopoverParent) return;
|
|
68
|
+
setPopoverField?.(null);
|
|
69
|
+
sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_BLUR, {
|
|
70
|
+
field: name
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
exports.usePreviewInputManager = usePreviewInputManager;
|
|
77
|
+
//# sourceMappingURL=usePreviewInputManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreviewInputManager.js","sources":["../../../../admin/src/preview/hooks/usePreviewInputManager.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useField } from '@strapi/admin/strapi-admin';\nimport { Schema } from '@strapi/types';\n\nimport { useHasInputPopoverParent } from '../components/InputPopover';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\ntype PreviewInputProps = Pick<\n Required<React.InputHTMLAttributes<HTMLInputElement>>,\n 'onFocus' | 'onBlur'\n>;\n\nexport function usePreviewInputManager(\n name: string,\n attribute: Schema.Attribute.AnyAttribute\n): PreviewInputProps {\n const iframe = usePreviewContext('usePreviewInputManager', (state) => state.iframeRef, false);\n const setPopoverField = usePreviewContext(\n 'usePreviewInputManager',\n (state) => state.setPopoverField,\n false\n );\n const hasInputPopoverParent = useHasInputPopoverParent();\n const { value } = useField(name);\n const { type } = attribute;\n\n React.useEffect(() => {\n if (!iframe || !type) {\n return;\n }\n\n /**\n * Only send message if the field is not a data structure (component, dynamic zone)\n * because we already send events for their fields\n */\n if (!['component', 'dynamiczone'].includes(type)) {\n const sendMessage = getSendMessage(iframe);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, { field: name, value });\n }\n }, [name, value, iframe, type]);\n\n const sendMessage = getSendMessage(iframe);\n\n return {\n onFocus: () => {\n if (hasInputPopoverParent) return;\n\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, { field: name });\n },\n onBlur: () => {\n if (hasInputPopoverParent) return;\n\n setPopoverField?.(null);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, { field: name });\n },\n };\n}\n"],"names":["usePreviewInputManager","name","attribute","iframe","usePreviewContext","state","iframeRef","setPopoverField","hasInputPopoverParent","useHasInputPopoverParent","value","useField","type","React","useEffect","includes","sendMessage","getSendMessage","INTERNAL_EVENTS","STRAPI_FIELD_CHANGE","field","onFocus","STRAPI_FIELD_FOCUS","onBlur","STRAPI_FIELD_BLUR"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeO,SAASA,sBAAAA,CACdC,IAAY,EACZC,SAAwC,EAAA;AAExC,IAAA,MAAMC,SAASC,yBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAUA,GAAAA,KAAAA,CAAMC,SAAS,EAAE,KAAA,CAAA;AACvF,IAAA,MAAMC,kBAAkBH,yBACtB,CAAA,wBAAA,EACA,CAACC,KAAUA,GAAAA,KAAAA,CAAME,eAAe,EAChC,KAAA,CAAA;AAEF,IAAA,MAAMC,qBAAwBC,GAAAA,qCAAAA,EAAAA;AAC9B,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,oBAASV,CAAAA,IAAAA,CAAAA;IAC3B,MAAM,EAAEW,IAAI,EAAE,GAAGV,SAAAA;AAEjBW,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;QACd,IAAI,CAACX,MAAU,IAAA,CAACS,IAAM,EAAA;AACpB,YAAA;AACF;AAEA;;;AAGC,QACD,IAAI,CAAC;AAAC,YAAA,WAAA;AAAa,YAAA;SAAc,CAACG,QAAQ,CAACH,IAAO,CAAA,EAAA;AAChD,YAAA,MAAMI,cAAcC,6BAAed,CAAAA,MAAAA,CAAAA;YACnCa,WAAYE,CAAAA,yBAAAA,CAAgBC,mBAAmB,EAAE;gBAAEC,KAAOnB,EAAAA,IAAAA;AAAMS,gBAAAA;AAAM,aAAA,CAAA;AACxE;KACC,EAAA;AAACT,QAAAA,IAAAA;AAAMS,QAAAA,KAAAA;AAAOP,QAAAA,MAAAA;AAAQS,QAAAA;AAAK,KAAA,CAAA;AAE9B,IAAA,MAAMI,cAAcC,6BAAed,CAAAA,MAAAA,CAAAA;IAEnC,OAAO;QACLkB,OAAS,EAAA,IAAA;AACP,YAAA,IAAIb,qBAAuB,EAAA;YAE3BQ,WAAYE,CAAAA,yBAAAA,CAAgBI,kBAAkB,EAAE;gBAAEF,KAAOnB,EAAAA;AAAK,aAAA,CAAA;AAChE,SAAA;QACAsB,MAAQ,EAAA,IAAA;AACN,YAAA,IAAIf,qBAAuB,EAAA;YAE3BD,eAAkB,GAAA,IAAA,CAAA;YAClBS,WAAYE,CAAAA,yBAAAA,CAAgBM,iBAAiB,EAAE;gBAAEJ,KAAOnB,EAAAA;AAAK,aAAA,CAAA;AAC/D;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useField } from '@strapi/admin/strapi-admin';
|
|
3
|
+
import { useHasInputPopoverParent } from '../components/InputPopover.mjs';
|
|
4
|
+
import { usePreviewContext } from '../pages/Preview.mjs';
|
|
5
|
+
import { INTERNAL_EVENTS } from '../utils/constants.mjs';
|
|
6
|
+
import { getSendMessage } from '../utils/getSendMessage.mjs';
|
|
7
|
+
|
|
8
|
+
function usePreviewInputManager(name, attribute) {
|
|
9
|
+
const iframe = usePreviewContext('usePreviewInputManager', (state)=>state.iframeRef, false);
|
|
10
|
+
const setPopoverField = usePreviewContext('usePreviewInputManager', (state)=>state.setPopoverField, false);
|
|
11
|
+
const hasInputPopoverParent = useHasInputPopoverParent();
|
|
12
|
+
const { value } = useField(name);
|
|
13
|
+
const { type } = attribute;
|
|
14
|
+
React.useEffect(()=>{
|
|
15
|
+
if (!iframe || !type) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Only send message if the field is not a data structure (component, dynamic zone)
|
|
20
|
+
* because we already send events for their fields
|
|
21
|
+
*/ if (![
|
|
22
|
+
'component',
|
|
23
|
+
'dynamiczone'
|
|
24
|
+
].includes(type)) {
|
|
25
|
+
const sendMessage = getSendMessage(iframe);
|
|
26
|
+
sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, {
|
|
27
|
+
field: name,
|
|
28
|
+
value
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}, [
|
|
32
|
+
name,
|
|
33
|
+
value,
|
|
34
|
+
iframe,
|
|
35
|
+
type
|
|
36
|
+
]);
|
|
37
|
+
const sendMessage = getSendMessage(iframe);
|
|
38
|
+
return {
|
|
39
|
+
onFocus: ()=>{
|
|
40
|
+
if (hasInputPopoverParent) return;
|
|
41
|
+
sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, {
|
|
42
|
+
field: name
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
onBlur: ()=>{
|
|
46
|
+
if (hasInputPopoverParent) return;
|
|
47
|
+
setPopoverField?.(null);
|
|
48
|
+
sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, {
|
|
49
|
+
field: name
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { usePreviewInputManager };
|
|
56
|
+
//# sourceMappingURL=usePreviewInputManager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreviewInputManager.mjs","sources":["../../../../admin/src/preview/hooks/usePreviewInputManager.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useField } from '@strapi/admin/strapi-admin';\nimport { Schema } from '@strapi/types';\n\nimport { useHasInputPopoverParent } from '../components/InputPopover';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\ntype PreviewInputProps = Pick<\n Required<React.InputHTMLAttributes<HTMLInputElement>>,\n 'onFocus' | 'onBlur'\n>;\n\nexport function usePreviewInputManager(\n name: string,\n attribute: Schema.Attribute.AnyAttribute\n): PreviewInputProps {\n const iframe = usePreviewContext('usePreviewInputManager', (state) => state.iframeRef, false);\n const setPopoverField = usePreviewContext(\n 'usePreviewInputManager',\n (state) => state.setPopoverField,\n false\n );\n const hasInputPopoverParent = useHasInputPopoverParent();\n const { value } = useField(name);\n const { type } = attribute;\n\n React.useEffect(() => {\n if (!iframe || !type) {\n return;\n }\n\n /**\n * Only send message if the field is not a data structure (component, dynamic zone)\n * because we already send events for their fields\n */\n if (!['component', 'dynamiczone'].includes(type)) {\n const sendMessage = getSendMessage(iframe);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, { field: name, value });\n }\n }, [name, value, iframe, type]);\n\n const sendMessage = getSendMessage(iframe);\n\n return {\n onFocus: () => {\n if (hasInputPopoverParent) return;\n\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, { field: name });\n },\n onBlur: () => {\n if (hasInputPopoverParent) return;\n\n setPopoverField?.(null);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, { field: name });\n },\n };\n}\n"],"names":["usePreviewInputManager","name","attribute","iframe","usePreviewContext","state","iframeRef","setPopoverField","hasInputPopoverParent","useHasInputPopoverParent","value","useField","type","React","useEffect","includes","sendMessage","getSendMessage","INTERNAL_EVENTS","STRAPI_FIELD_CHANGE","field","onFocus","STRAPI_FIELD_FOCUS","onBlur","STRAPI_FIELD_BLUR"],"mappings":";;;;;;;AAeO,SAASA,sBAAAA,CACdC,IAAY,EACZC,SAAwC,EAAA;AAExC,IAAA,MAAMC,SAASC,iBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAUA,GAAAA,KAAAA,CAAMC,SAAS,EAAE,KAAA,CAAA;AACvF,IAAA,MAAMC,kBAAkBH,iBACtB,CAAA,wBAAA,EACA,CAACC,KAAUA,GAAAA,KAAAA,CAAME,eAAe,EAChC,KAAA,CAAA;AAEF,IAAA,MAAMC,qBAAwBC,GAAAA,wBAAAA,EAAAA;AAC9B,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,QAASV,CAAAA,IAAAA,CAAAA;IAC3B,MAAM,EAAEW,IAAI,EAAE,GAAGV,SAAAA;AAEjBW,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;QACd,IAAI,CAACX,MAAU,IAAA,CAACS,IAAM,EAAA;AACpB,YAAA;AACF;AAEA;;;AAGC,QACD,IAAI,CAAC;AAAC,YAAA,WAAA;AAAa,YAAA;SAAc,CAACG,QAAQ,CAACH,IAAO,CAAA,EAAA;AAChD,YAAA,MAAMI,cAAcC,cAAed,CAAAA,MAAAA,CAAAA;YACnCa,WAAYE,CAAAA,eAAAA,CAAgBC,mBAAmB,EAAE;gBAAEC,KAAOnB,EAAAA,IAAAA;AAAMS,gBAAAA;AAAM,aAAA,CAAA;AACxE;KACC,EAAA;AAACT,QAAAA,IAAAA;AAAMS,QAAAA,KAAAA;AAAOP,QAAAA,MAAAA;AAAQS,QAAAA;AAAK,KAAA,CAAA;AAE9B,IAAA,MAAMI,cAAcC,cAAed,CAAAA,MAAAA,CAAAA;IAEnC,OAAO;QACLkB,OAAS,EAAA,IAAA;AACP,YAAA,IAAIb,qBAAuB,EAAA;YAE3BQ,WAAYE,CAAAA,eAAAA,CAAgBI,kBAAkB,EAAE;gBAAEF,KAAOnB,EAAAA;AAAK,aAAA,CAAA;AAChE,SAAA;QACAsB,MAAQ,EAAA,IAAA;AACN,YAAA,IAAIf,qBAAuB,EAAA;YAE3BD,eAAkB,GAAA,IAAA,CAAA;YAClBS,WAAYE,CAAAA,eAAAA,CAAgBM,iBAAiB,EAAE;gBAAEJ,KAAOnB,EAAAA;AAAK,aAAA,CAAA;AAC/D;AACF,KAAA;AACF;;;;"}
|
|
@@ -12,11 +12,17 @@ var collections = require('../../constants/collections.js');
|
|
|
12
12
|
var DocumentRBAC = require('../../features/DocumentRBAC.js');
|
|
13
13
|
var useDocument = require('../../hooks/useDocument.js');
|
|
14
14
|
var useDocumentLayout = require('../../hooks/useDocumentLayout.js');
|
|
15
|
+
var Blocker = require('../../pages/EditView/components/Blocker.js');
|
|
15
16
|
var FormLayout = require('../../pages/EditView/components/FormLayout.js');
|
|
17
|
+
var data = require('../../pages/EditView/utils/data.js');
|
|
16
18
|
var api = require('../../utils/api.js');
|
|
17
19
|
var validation = require('../../utils/validation.js');
|
|
20
|
+
var InputPopover = require('../components/InputPopover.js');
|
|
18
21
|
var PreviewHeader = require('../components/PreviewHeader.js');
|
|
19
22
|
var preview = require('../services/preview.js');
|
|
23
|
+
var constants = require('../utils/constants.js');
|
|
24
|
+
var getSendMessage = require('../utils/getSendMessage.js');
|
|
25
|
+
var previewScript = require('../utils/previewScript.js');
|
|
20
26
|
|
|
21
27
|
function _interopNamespaceDefault(e) {
|
|
22
28
|
var n = Object.create(null);
|
|
@@ -37,12 +43,34 @@ function _interopNamespaceDefault(e) {
|
|
|
37
43
|
|
|
38
44
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
39
45
|
|
|
46
|
+
/* -------------------------------------------------------------------------------------------------
|
|
47
|
+
* Constants
|
|
48
|
+
* -----------------------------------------------------------------------------------------------*/ const DEVICES = [
|
|
49
|
+
{
|
|
50
|
+
name: 'desktop',
|
|
51
|
+
label: {
|
|
52
|
+
id: 'content-manager.preview.device.desktop',
|
|
53
|
+
defaultMessage: 'Desktop'
|
|
54
|
+
},
|
|
55
|
+
width: '100%',
|
|
56
|
+
height: '100%'
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'mobile',
|
|
60
|
+
label: {
|
|
61
|
+
id: 'content-manager.preview.device.mobile',
|
|
62
|
+
defaultMessage: 'Mobile'
|
|
63
|
+
},
|
|
64
|
+
width: '375px',
|
|
65
|
+
height: '667px'
|
|
66
|
+
}
|
|
67
|
+
];
|
|
40
68
|
const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewPage');
|
|
41
69
|
/* -------------------------------------------------------------------------------------------------
|
|
42
70
|
* PreviewPage
|
|
43
71
|
* -----------------------------------------------------------------------------------------------*/ const AnimatedArrow = styledComponents.styled(Icons.ArrowLineLeft)`
|
|
44
72
|
will-change: transform;
|
|
45
|
-
rotate: ${(props)=>props
|
|
73
|
+
rotate: ${(props)=>props.$isSideEditorOpen ? '0deg' : '180deg'};
|
|
46
74
|
transition: rotate 0.2s ease-in-out;
|
|
47
75
|
`;
|
|
48
76
|
const PreviewPage = ()=>{
|
|
@@ -50,12 +78,42 @@ const PreviewPage = ()=>{
|
|
|
50
78
|
const { formatMessage } = reactIntl.useIntl();
|
|
51
79
|
const iframeRef = React__namespace.useRef(null);
|
|
52
80
|
const [isSideEditorOpen, setIsSideEditorOpen] = React__namespace.useState(true);
|
|
81
|
+
const [popoverField, setPopoverField] = React__namespace.useState(null);
|
|
82
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
53
83
|
// Read all the necessary data from the URL to find the right preview URL
|
|
54
84
|
const { slug: model, id: documentId, collectionType } = reactRouterDom.useParams();
|
|
55
85
|
const [{ query }] = strapiAdmin.useQueryParams();
|
|
56
86
|
const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
|
|
57
87
|
query
|
|
58
88
|
]);
|
|
89
|
+
const [deviceName, setDeviceName] = React__namespace.useState(DEVICES[0].name);
|
|
90
|
+
const device = DEVICES.find((d)=>d.name === deviceName) ?? DEVICES[0];
|
|
91
|
+
// Listen for ready message from iframe before injecting script
|
|
92
|
+
React__namespace.useEffect(()=>{
|
|
93
|
+
const handleMessage = (event)=>{
|
|
94
|
+
// Only listen to events from the preview iframe
|
|
95
|
+
if (iframeRef.current) {
|
|
96
|
+
const previewOrigin = new URL(iframeRef.current?.src).origin;
|
|
97
|
+
if (event.origin !== previewOrigin) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (event.data?.type === constants.PUBLIC_EVENTS.PREVIEW_READY) {
|
|
102
|
+
const script = `(${previewScript.previewScript.toString()})()`;
|
|
103
|
+
const sendMessage = getSendMessage.getSendMessage(iframeRef);
|
|
104
|
+
sendMessage(constants.PUBLIC_EVENTS.STRAPI_SCRIPT, {
|
|
105
|
+
script
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
window.addEventListener('message', handleMessage);
|
|
110
|
+
return ()=>{
|
|
111
|
+
window.removeEventListener('message', handleMessage);
|
|
112
|
+
};
|
|
113
|
+
}, [
|
|
114
|
+
documentId,
|
|
115
|
+
toggleNotification
|
|
116
|
+
]);
|
|
59
117
|
if (!collectionType) {
|
|
60
118
|
throw new Error('Could not find collectionType in url params');
|
|
61
119
|
}
|
|
@@ -84,7 +142,7 @@ const PreviewPage = ()=>{
|
|
|
84
142
|
});
|
|
85
143
|
const documentLayoutResponse = useDocumentLayout.useDocumentLayout(model);
|
|
86
144
|
const isLoading = previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;
|
|
87
|
-
if (isLoading && !documentResponse.document?.documentId) {
|
|
145
|
+
if (isLoading && (!documentResponse.document?.documentId || previewUrlResponse.isLoading)) {
|
|
88
146
|
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
|
89
147
|
}
|
|
90
148
|
const initialValues = documentResponse.getInitialFormValues();
|
|
@@ -96,11 +154,17 @@ const PreviewPage = ()=>{
|
|
|
96
154
|
}
|
|
97
155
|
const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
|
|
98
156
|
const validateSync = (values, options)=>{
|
|
157
|
+
const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {
|
|
158
|
+
schema: documentResponse.schema,
|
|
159
|
+
initialValues,
|
|
160
|
+
components: documentResponse.components
|
|
161
|
+
});
|
|
99
162
|
const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
|
|
100
163
|
status: documentResponse.document?.status,
|
|
164
|
+
removedAttributes,
|
|
101
165
|
...options
|
|
102
166
|
});
|
|
103
|
-
return yupSchema.validateSync(
|
|
167
|
+
return yupSchema.validateSync(cleanedValues, {
|
|
104
168
|
abortEarly: false
|
|
105
169
|
});
|
|
106
170
|
};
|
|
@@ -128,8 +192,12 @@ const PreviewPage = ()=>{
|
|
|
128
192
|
title: documentTitle,
|
|
129
193
|
meta: documentResponse.meta,
|
|
130
194
|
schema: documentResponse.schema,
|
|
195
|
+
components: documentResponse.components,
|
|
131
196
|
layout: documentLayoutResponse.edit,
|
|
132
197
|
onPreview: onPreview,
|
|
198
|
+
iframeRef: iframeRef,
|
|
199
|
+
popoverField: popoverField,
|
|
200
|
+
setPopoverField: setPopoverField,
|
|
133
201
|
children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
|
|
134
202
|
method: "PUT",
|
|
135
203
|
disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
|
|
@@ -137,52 +205,104 @@ const PreviewPage = ()=>{
|
|
|
137
205
|
initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
|
|
138
206
|
height: "100%",
|
|
139
207
|
validate: (values, options)=>{
|
|
208
|
+
const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {
|
|
209
|
+
schema: documentResponse.schema,
|
|
210
|
+
initialValues,
|
|
211
|
+
components: documentResponse.components
|
|
212
|
+
});
|
|
140
213
|
const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
|
|
141
214
|
status: documentResponse.document?.status,
|
|
215
|
+
removedAttributes,
|
|
142
216
|
...options
|
|
143
217
|
});
|
|
144
|
-
return yupSchema.validate(
|
|
218
|
+
return yupSchema.validate(cleanedValues, {
|
|
145
219
|
abortEarly: false
|
|
146
220
|
});
|
|
147
221
|
},
|
|
148
|
-
children:
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
222
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
223
|
+
direction: "column",
|
|
224
|
+
height: "100%",
|
|
225
|
+
alignItems: "stretch",
|
|
226
|
+
children: [
|
|
227
|
+
/*#__PURE__*/ jsxRuntime.jsx(Blocker.Blocker, {}),
|
|
228
|
+
/*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
|
|
229
|
+
/*#__PURE__*/ jsxRuntime.jsx(InputPopover.InputPopover, {
|
|
230
|
+
documentResponse: documentResponse
|
|
231
|
+
}),
|
|
232
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
233
|
+
flex: 1,
|
|
234
|
+
overflow: "auto",
|
|
235
|
+
alignItems: "stretch",
|
|
236
|
+
children: [
|
|
237
|
+
hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
238
|
+
overflow: "auto",
|
|
239
|
+
width: isSideEditorOpen ? '50%' : 0,
|
|
240
|
+
borderWidth: "0 1px 0 0",
|
|
241
|
+
borderColor: "neutral150",
|
|
242
|
+
paddingTop: 6,
|
|
243
|
+
paddingBottom: 6,
|
|
244
|
+
// Remove horizontal padding when the editor is closed or it won't fully disappear
|
|
245
|
+
paddingLeft: isSideEditorOpen ? 6 : 0,
|
|
246
|
+
paddingRight: isSideEditorOpen ? 6 : 0,
|
|
247
|
+
transition: "all 0.2s ease-in-out",
|
|
248
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
|
|
249
|
+
layout: documentLayoutResponse.edit.layout,
|
|
250
|
+
document: documentResponse,
|
|
251
|
+
hasBackground: false
|
|
252
|
+
})
|
|
253
|
+
}),
|
|
254
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
255
|
+
direction: "column",
|
|
256
|
+
alignItems: "stretch",
|
|
257
|
+
flex: 1,
|
|
258
|
+
height: "100%",
|
|
259
|
+
overflow: "hidden",
|
|
260
|
+
children: [
|
|
261
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
262
|
+
direction: "row",
|
|
263
|
+
background: "neutral0",
|
|
264
|
+
padding: 2,
|
|
265
|
+
borderWidth: "0 0 1px 0",
|
|
266
|
+
borderColor: "neutral150",
|
|
267
|
+
children: [
|
|
268
|
+
hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
269
|
+
variant: "ghost",
|
|
270
|
+
label: formatMessage(isSideEditorOpen ? {
|
|
271
|
+
id: 'content-manager.preview.content.close-editor',
|
|
272
|
+
defaultMessage: 'Close editor'
|
|
273
|
+
} : {
|
|
274
|
+
id: 'content-manager.preview.content.open-editor',
|
|
275
|
+
defaultMessage: 'Open editor'
|
|
276
|
+
}),
|
|
277
|
+
onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
|
|
278
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
|
|
279
|
+
$isSideEditorOpen: isSideEditorOpen
|
|
280
|
+
})
|
|
281
|
+
}),
|
|
282
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
283
|
+
justifyContent: "center",
|
|
284
|
+
flex: 1,
|
|
285
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
|
|
286
|
+
value: deviceName,
|
|
287
|
+
onChange: (name)=>setDeviceName(name.toString()),
|
|
288
|
+
"aria-label": formatMessage({
|
|
289
|
+
id: 'content-manager.preview.device.select',
|
|
290
|
+
defaultMessage: 'Select device type'
|
|
291
|
+
}),
|
|
292
|
+
children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
|
|
293
|
+
value: deviceOption.name,
|
|
294
|
+
children: formatMessage(deviceOption.label)
|
|
295
|
+
}, deviceOption.name))
|
|
296
|
+
})
|
|
297
|
+
})
|
|
298
|
+
]
|
|
299
|
+
}),
|
|
300
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
301
|
+
direction: "column",
|
|
302
|
+
justifyContent: "center",
|
|
303
|
+
background: "neutral0",
|
|
304
|
+
flex: 1,
|
|
305
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
186
306
|
"data-testid": "preview-iframe",
|
|
187
307
|
ref: iframeRef,
|
|
188
308
|
src: previewUrl,
|
|
@@ -190,34 +310,18 @@ const PreviewPage = ()=>{
|
|
|
190
310
|
id: 'content-manager.preview.panel.title',
|
|
191
311
|
defaultMessage: 'Preview'
|
|
192
312
|
}),
|
|
193
|
-
width:
|
|
194
|
-
height:
|
|
313
|
+
width: device.width,
|
|
314
|
+
height: device.height,
|
|
195
315
|
borderWidth: 0,
|
|
196
316
|
tag: "iframe"
|
|
197
|
-
}, previewUrl)
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
})
|
|
317
|
+
}, previewUrl)
|
|
318
|
+
})
|
|
319
|
+
]
|
|
320
|
+
})
|
|
321
|
+
]
|
|
322
|
+
})
|
|
323
|
+
]
|
|
324
|
+
})
|
|
221
325
|
})
|
|
222
326
|
})
|
|
223
327
|
]
|