@strapi/content-manager 0.0.0-experimental.ae2010c73ea60e398b726874a9b7b2bf3faada51 → 0.0.0-experimental.ae51b136d065d25740e6d2aa634b3dfec5824476
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 +267 -9
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +250 -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 +5 -5
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +6 -6
- 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 +74 -63
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +76 -65
- 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 +18 -5
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +156 -105
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +159 -108
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +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/pages/ListView/components/TableActions.js +13 -3
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +165 -0
- package/dist/admin/preview/components/InputPopover.js.map +1 -0
- package/dist/admin/preview/components/InputPopover.mjs +143 -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 +22 -0
- package/dist/admin/preview/utils/constants.js.map +1 -0
- package/dist/admin/preview/utils/constants.mjs +19 -0
- package/dist/admin/preview/utils/constants.mjs.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.js +98 -0
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.mjs +94 -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 +452 -0
- package/dist/admin/preview/utils/previewScript.js.map +1 -0
- package/dist/admin/preview/utils/previewScript.mjs +450 -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 +42 -16
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +42 -16
- 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/hooks/useDocumentActions.d.ts +1 -0
- 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 +20 -0
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +16 -0
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
- package/dist/admin/src/preview/utils/previewScript.d.ts +23 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +23 -17
- package/dist/admin/src/services/homepage.d.ts +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 +6 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +6 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +5 -2
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +5 -2
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +10 -2
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +10 -2
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/utils/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/services/document-manager.js +3 -0
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +3 -0
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +1 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +1 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +11 -0
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +11 -0
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/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/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +7 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +0 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +13 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/package.json +7 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({ model, sourceId: documentId });\n\n if ('data' in res) {\n navigate(res.data.documentId);\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":";;;;;;;;;;;;;;;;AAsCA,MAAMA,YAAe,GAAA,CAAC,EAAEC,QAAQ,EAAqB,GAAA;IACnD,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,KAAK,EAAEC,cAAc,EAAE,GAAGC,MAAAA,EAAAA;AAClC,IAAA,MAAMC,UAAUC,YAAa,CAAA,cAAA,EAAgB,CAACC,KAAAA,GAAUA,MAAMF,OAAO,CAAA;AAErE,IAAA,MAAMG,KAA6B,GAAA;QACjCC,SAAW,EAAA,IAAA;AACXP,QAAAA,KAAAA;AACAQ,QAAAA,UAAAA,EAAYX,SAASW,UAAU;AAC/BP,QAAAA,cAAAA;AACAJ,QAAAA;AACF,KAAA;AAEA,IAAA,qBACEY,GAACC,CAAAA,4BAAAA,EAAAA;QACCJ,KAAOA,EAAAA,KAAAA;QACPK,YAAc,EAACR,OAAO,CAAC,iBAAkB,CAAA,CAACS,IAAI,CAC3CC,kBAAkB,CAAC,WAAA,CACpB;AACCC,SAAAA,MAAM,CAAC,CAACC,MAAWA,GAAAA,MAAAA,CAAOC,IAAI,KAAK,eAAA,CAAA;kBAErC,CAACC,OAAAA,GAAAA;AACA,YAAA,MAAMC,eAAkBD,GAAAA,OAAAA,CAAQH,MAAM,CAAC,CAACC,MAAAA,GAAAA;gBACtC,MAAMI,SAAAA,GAAYC,MAAMC,OAAO,CAACN,OAAOO,QAAQ,CAAA,GAAIP,MAAOO,CAAAA,QAAQ,GAAG;AAACP,oBAAAA,MAAAA,CAAOO;AAAS,iBAAA;gBACtF,OAAOH,SAAAA,CAAUI,QAAQ,CAAC,WAAA,CAAA;AAC5B,aAAA,CAAA;AAEA,YAAA,qBACEd,GAACe,CAAAA,mBAAAA,EAAAA;gBACCP,OAASC,EAAAA,eAAAA;AACTO,gBAAAA,KAAAA,EAAO3B,aAAc,CAAA;oBACnB4B,EAAI,EAAA,mDAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;gBACAC,OAAQ,EAAA;;AAGd;;AAGN;AAEA;;AAEkG,qGAElG,MAAMC,UAAAA,GAAsC,CAAC,EAAErB,UAAU,EAAE,GAAA;AACzD,IAAA,MAAMsB,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEjC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEiC,OAAO,EAAE,GAAGC,eAAAA,CAAgB,YAAc,EAAA,CAAC,EAAED,OAAO,EAAE,IAAM;AAAEA,YAAAA;SAAQ,CAAA,CAAA;IAC9E,MAAM,EAAEE,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;IAEpB,OAAO;AACLC,QAAAA,QAAAA,EAAU,CAACN,OAAAA;AACXO,QAAAA,IAAAA,gBAAM9B,GAAC+B,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;AACPf,QAAAA,KAAAA,EAAO3B,aAAc,CAAA;YACnB4B,EAAI,EAAA,oCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAL,QAAU,EAAA,WAAA;QACVmB,OAAS,EAAA,UAAA;AACP,YAAA,IAAI,CAACjC,UAAY,EAAA;AACfkC,gBAAAA,OAAAA,CAAQC,KAAK,CACX,yGAAA,CAAA;gBAGFT,kBAAmB,CAAA;AACjBU,oBAAAA,OAAAA,EAAS9C,aAAc,CAAA;wBACrB4B,EAAI,EAAA,oCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;oBACAkB,IAAM,EAAA;AACR,iBAAA,CAAA;AAEA,gBAAA;AACF;YAEAf,QAAS,CAAA;gBACPgB,QAAUtC,EAAAA,UAAAA;AACVuC,gBAAAA,MAAAA,EAAQC,SAAU,CAAA;AAChB7C,oBAAAA,OAAAA,EAASiC,MAAMjC;AACjB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA;AACF,CAAA;AAEA0B,UAAAA,CAAWgB,IAAI,GAAG,MAAA;AAClBhB,UAAAA,CAAWP,QAAQ,GAAG,WAAA;AAEtB;;;AAGC,IACD,MAAMkB,YAAAA,GAAeS,MAAOC,CAAAA,MAAAA,CAAO;;;;AAInC,CAAC;AAED,MAAMC,cAAuC,CAAC,EAAEnD,KAAK,EAAEQ,UAAU,EAAE,GAAA;AACjE,IAAA,MAAMsB,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEjC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEqD,SAAS,EAAE,GAAGnB,eAAAA,CAAgB,aAAe,EAAA,CAAC,EAAEmB,SAAS,EAAE,IAAM;AAAEA,YAAAA;SAAU,CAAA,CAAA;IACrF,MAAM,EAAElB,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEkB,SAAS,EAAE,GAAGC,kBAAAA,EAAAA;AACtB,IAAA,MAAM,CAACC,gBAAkBC,EAAAA,mBAAAA,CAAoB,GAAGC,KAAMC,CAAAA,QAAQ,CAA2B,EAAE,CAAA;IAE3F,OAAO;AACLpB,QAAAA,QAAAA,EAAU,CAACc,SAAAA;AACXb,QAAAA,IAAAA,gBAAM9B,GAACkD,CAAAA,eAAAA,EAAAA,EAAAA,CAAAA;AACPlC,QAAAA,KAAAA,EAAO3B,aAAc,CAAA;YACnB4B,EAAI,EAAA,qCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAL,QAAU,EAAA,WAAA;QACVmB,OAAS,EAAA,UAAA;AACP,YAAA,IAAI,CAACjC,UAAY,EAAA;AACfkC,gBAAAA,OAAAA,CAAQC,KAAK,CACX,uHAAA,CAAA;gBAGFT,kBAAmB,CAAA;AACjBU,oBAAAA,OAAAA,EAAS9C,aAAc,CAAA;wBACrB4B,EAAI,EAAA,qCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;oBACAkB,IAAM,EAAA;AACR,iBAAA,CAAA;AAEA,gBAAA;AACF;YAEA,MAAMe,GAAAA,GAAM,MAAMP,SAAU,CAAA;AAAErD,gBAAAA,KAAAA;gBAAO6D,QAAUrD,EAAAA;AAAW,aAAA,CAAA;AAE1D,YAAA,IAAI,UAAUoD,GAAK,EAAA;gBACjB9B,QAAS8B,CAAAA,GAAAA,CAAIE,IAAI,CAACtD,UAAU,CAAA;AAE5B;;AAEC,YACD,OAAO,IAAA;AACT;AAEA,YAAA,IACEuD,gBAAiBH,CAAAA,GAAAA,CAAIjB,KAAK,CAAA,IAC1BiB,GAAIjB,CAAAA,KAAK,CAACqB,OAAO,IACjB,OAAOJ,GAAIjB,CAAAA,KAAK,CAACqB,OAAO,KAAK,QAC7B,IAAA,kBAAA,IAAsBJ,GAAIjB,CAAAA,KAAK,CAACqB,OAAO,IACvC5C,KAAMC,CAAAA,OAAO,CAACuC,GAAAA,CAAIjB,KAAK,CAACqB,OAAO,CAACT,gBAAgB,CAChD,EAAA;AACA,gBAAA,MAAMA,mBAAmBK,GAAIjB,CAAAA,KAAK,CAACqB,OAAO,CAACT,gBAAgB;gBAE3DC,mBAAoBD,CAAAA,gBAAAA,CAAAA;AACtB;AACF,SAAA;QACAU,MAAQ,EAAA;YACNpB,IAAM,EAAA,OAAA;AACNqB,YAAAA,KAAAA,EAAOpE,aAAc,CAAA;gBACnB4B,EAAI,EAAA,uDAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACAwC,YAAAA,OAAAA,gBAAS1D,GAAC2D,CAAAA,yBAAAA,EAAAA;gBAA0Bb,gBAAkBA,EAAAA;;YACtDc,MAAQ,EAAA,CAAC,EAAEC,OAAO,EAAE,GAAA;gBAClB,qBACEC,IAAA,CAACC,MAAMC,MAAM,EAAA;;sCACXhE,GAACiE,CAAAA,MAAAA,EAAAA;4BAAOjC,OAAS6B,EAAAA,OAAAA;4BAAS1C,OAAQ,EAAA,UAAA;sCAC/B9B,aAAc,CAAA;gCACb4B,EAAI,EAAA,QAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;;sCAEFlB,GAACkE,CAAAA,UAAAA,EAAAA;4BACCC,GAAKC,EAAAA,OAAAA;4BACLC,EAAI,EAAA;AACFhC,gCAAAA,QAAAA,EAAU,CAAC,MAAM,EAAEtC,UAAAA,CAAW;AAChC,6BAAA;sCAECV,aAAc,CAAA;gCACb4B,EAAI,EAAA,uDAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;;;;AAIR;AACF;AACF,KAAA;AACF,CAAA;AAEAwB,WAAAA,CAAYN,IAAI,GAAG,OAAA;AACnBM,WAAAA,CAAY7B,QAAQ,GAAG,WAAA;AAEvB;;;AAGC,IACD,MAAMqC,eAAAA,GAAkBV,MAAO8B,CAAAA,SAAAA,CAAU;;;;AAIzC,CAAC;AAED,MAAMC,yBAA4B,GAAA;AAACnD,IAAAA,UAAAA;AAAYsB,IAAAA;AAAY;;;;"}
|
|
1
|
+
{"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var InputRenderer = require('../../pages/EditView/components/InputRenderer.js');
|
|
8
|
+
var Preview = require('../pages/Preview.js');
|
|
9
|
+
var constants = require('../utils/constants.js');
|
|
10
|
+
var fieldUtils = require('../utils/fieldUtils.js');
|
|
11
|
+
|
|
12
|
+
function _interopNamespaceDefault(e) {
|
|
13
|
+
var n = Object.create(null);
|
|
14
|
+
if (e) {
|
|
15
|
+
Object.keys(e).forEach(function (k) {
|
|
16
|
+
if (k !== 'default') {
|
|
17
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return e[k]; }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
n.default = e;
|
|
26
|
+
return Object.freeze(n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
30
|
+
|
|
31
|
+
const [InputPopoverProvider, useInputPopoverContext] = strapiAdmin.createContext('InputPopover');
|
|
32
|
+
/**
|
|
33
|
+
* We receive window events sent from the user's preview via the injected script.
|
|
34
|
+
* We listen to the ones here that target a specific field (currently just the one to focus a field)
|
|
35
|
+
*/ function useIframeFieldMessages() {
|
|
36
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
37
|
+
const iframe = Preview.usePreviewContext('useIframeFieldMessages', (state)=>state.iframeRef);
|
|
38
|
+
const document = Preview.usePreviewContext('useIframeFieldMessages', (state)=>state.document);
|
|
39
|
+
const schema = Preview.usePreviewContext('useIframeFieldMessages', (state)=>state.schema);
|
|
40
|
+
const components = Preview.usePreviewContext('useIframeFieldMessages', (state)=>state.components);
|
|
41
|
+
const setPopoverField = Preview.usePreviewContext('useIframeFieldMessages', (state)=>state.setPopoverField);
|
|
42
|
+
React__namespace.useEffect(()=>{
|
|
43
|
+
const handleMessage = (event)=>{
|
|
44
|
+
// Only listen to events from the preview iframe
|
|
45
|
+
if (iframe.current) {
|
|
46
|
+
const previewOrigin = new URL(iframe.current?.src).origin;
|
|
47
|
+
if (event.origin !== previewOrigin) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (event.data?.type === constants.INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {
|
|
52
|
+
const fieldMetaData = fieldUtils.parseFieldMetaData(event.data.payload.path);
|
|
53
|
+
if (!fieldMetaData) return;
|
|
54
|
+
/**
|
|
55
|
+
* Ignore (for now) content that comes from separate API requests than the one for the
|
|
56
|
+
* current document. This doesn't do anything about fields that may come from relations to
|
|
57
|
+
* the current document however.
|
|
58
|
+
*/ if (fieldMetaData.documentId !== document.documentId) {
|
|
59
|
+
toggleNotification({
|
|
60
|
+
type: 'warning',
|
|
61
|
+
message: 'This field comes from a different document'
|
|
62
|
+
});
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const attribute = fieldUtils.getAttributeSchemaFromPath({
|
|
67
|
+
path: fieldMetaData.path,
|
|
68
|
+
components,
|
|
69
|
+
schema,
|
|
70
|
+
document
|
|
71
|
+
});
|
|
72
|
+
// We're able to handle the field, set it in context so the popover can pick it up
|
|
73
|
+
setPopoverField({
|
|
74
|
+
...fieldMetaData,
|
|
75
|
+
position: event.data.payload.position,
|
|
76
|
+
attribute
|
|
77
|
+
});
|
|
78
|
+
} catch (error) {
|
|
79
|
+
if (error instanceof Error) {
|
|
80
|
+
toggleNotification({
|
|
81
|
+
type: 'warning',
|
|
82
|
+
message: error.message
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
window.addEventListener('message', handleMessage);
|
|
89
|
+
return ()=>{
|
|
90
|
+
window.removeEventListener('message', handleMessage);
|
|
91
|
+
};
|
|
92
|
+
}, [
|
|
93
|
+
components,
|
|
94
|
+
document,
|
|
95
|
+
iframe,
|
|
96
|
+
schema,
|
|
97
|
+
setPopoverField,
|
|
98
|
+
toggleNotification
|
|
99
|
+
]);
|
|
100
|
+
}
|
|
101
|
+
const InputPopover = ({ documentResponse })=>{
|
|
102
|
+
const iframeRef = Preview.usePreviewContext('VisualEditingPopover', (state)=>state.iframeRef);
|
|
103
|
+
const popoverField = Preview.usePreviewContext('VisualEditingPopover', (state)=>state.popoverField);
|
|
104
|
+
const setPopoverField = Preview.usePreviewContext('VisualEditingPopover', (state)=>state.setPopoverField);
|
|
105
|
+
useIframeFieldMessages();
|
|
106
|
+
if (!popoverField || !iframeRef.current) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const iframeRect = iframeRef.current.getBoundingClientRect();
|
|
110
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
111
|
+
children: [
|
|
112
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
113
|
+
position: 'fixed',
|
|
114
|
+
top: iframeRect.top + 'px',
|
|
115
|
+
left: iframeRect.left + 'px',
|
|
116
|
+
width: iframeRect.width + 'px',
|
|
117
|
+
height: iframeRect.height + 'px',
|
|
118
|
+
zIndex: 4
|
|
119
|
+
}),
|
|
120
|
+
/*#__PURE__*/ jsxRuntime.jsx(InputPopoverProvider, {
|
|
121
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Popover.Root, {
|
|
122
|
+
open: true,
|
|
123
|
+
onOpenChange: (open)=>!open && setPopoverField(null),
|
|
124
|
+
children: [
|
|
125
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Trigger, {
|
|
126
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
127
|
+
position: "fixed",
|
|
128
|
+
width: popoverField.position.width + 'px',
|
|
129
|
+
height: popoverField.position.height + 'px',
|
|
130
|
+
top: 0,
|
|
131
|
+
left: 0,
|
|
132
|
+
transform: `translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`
|
|
133
|
+
})
|
|
134
|
+
}),
|
|
135
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
|
|
136
|
+
sideOffset: 4,
|
|
137
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
138
|
+
padding: 4,
|
|
139
|
+
width: "400px",
|
|
140
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(InputRenderer.InputRenderer, {
|
|
141
|
+
document: documentResponse,
|
|
142
|
+
attribute: popoverField.attribute,
|
|
143
|
+
// TODO: retrieve the proper label from the layout
|
|
144
|
+
label: popoverField.path,
|
|
145
|
+
name: popoverField.path,
|
|
146
|
+
type: popoverField.attribute.type,
|
|
147
|
+
visible: true
|
|
148
|
+
})
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
]
|
|
152
|
+
})
|
|
153
|
+
})
|
|
154
|
+
]
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
function useHasInputPopoverParent() {
|
|
158
|
+
const context = useInputPopoverContext('useHasInputPopoverParent', ()=>true, false);
|
|
159
|
+
// useContext will return undefined if the called is not wrapped in the provider
|
|
160
|
+
return context !== undefined;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
exports.InputPopover = InputPopover;
|
|
164
|
+
exports.useHasInputPopoverParent = useHasInputPopoverParent;
|
|
165
|
+
//# sourceMappingURL=InputPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputPopover.js","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, useNotification } from '@strapi/admin/strapi-admin';\nimport { Box, Popover } from '@strapi/design-system';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS } from '../utils/constants';\nimport { parseFieldMetaData, getAttributeSchemaFromPath } from '../utils/fieldUtils';\n\n/**\n * No need for actual data in the context. It's just to let children check if they're rendered\n * inside of a preview InputPopover without relying on prop drilling.\n */\ninterface InputPopoverContextValue {}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\n/**\n * We receive window events sent from the user's preview via the injected script.\n * We listen to the ones here that target a specific field (currently just the one to focus a field)\n */\nfunction useIframeFieldMessages() {\n const { toggleNotification } = useNotification();\n const iframe = usePreviewContext('useIframeFieldMessages', (state) => state.iframeRef);\n const document = usePreviewContext('useIframeFieldMessages', (state) => state.document);\n const schema = usePreviewContext('useIframeFieldMessages', (state) => state.schema);\n const components = usePreviewContext('useIframeFieldMessages', (state) => state.components);\n const setPopoverField = usePreviewContext(\n 'useIframeFieldMessages',\n (state) => state.setPopoverField\n );\n\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframe.current) {\n const previewOrigin = new URL(iframe.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {\n const fieldMetaData = parseFieldMetaData(event.data.payload.path);\n\n if (!fieldMetaData) return;\n\n /**\n * Ignore (for now) content that comes from separate API requests than the one for the\n * current document. This doesn't do anything about fields that may come from relations to\n * the current document however.\n */\n if (fieldMetaData.documentId !== document.documentId) {\n toggleNotification({\n type: 'warning',\n message: 'This field comes from a different document',\n });\n return;\n }\n\n try {\n const attribute = getAttributeSchemaFromPath({\n path: fieldMetaData.path,\n components,\n schema,\n document,\n });\n\n // We're able to handle the field, set it in context so the popover can pick it up\n setPopoverField({ ...fieldMetaData, position: event.data.payload.position, attribute });\n } catch (error) {\n if (error instanceof Error) {\n toggleNotification({ type: 'warning', message: error.message });\n }\n }\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [components, document, iframe, schema, setPopoverField, toggleNotification]);\n}\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('VisualEditingPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('VisualEditingPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext(\n 'VisualEditingPopover',\n (state) => state.setPopoverField\n );\n useIframeFieldMessages();\n\n if (!popoverField || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n {/**\n * Overlay an empty div on top of the iframe while the popover is open so it can\n * intercept clicks. Without it, we wouldn't be able to close the popover by clicking outside,\n * because the click would be detected by the iframe window, not by the admin.\n **/}\n <Box\n position={'fixed'}\n top={iframeRect.top + 'px'}\n left={iframeRect.left + 'px'}\n width={iframeRect.width + 'px'}\n height={iframeRect.height + 'px'}\n zIndex={4}\n />\n <InputPopoverProvider>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Box padding={4} width=\"400px\">\n {/* @ts-expect-error the types of `attribute` clash for some reason */}\n <InputRenderer\n document={documentResponse}\n attribute={popoverField.attribute}\n // TODO: retrieve the proper label from the layout\n label={popoverField.path}\n name={popoverField.path}\n type={popoverField.attribute.type}\n visible={true}\n />\n </Box>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n\n // useContext will return undefined if the called is not wrapped in the provider\n return context !== undefined;\n}\n\nexport { InputPopover, useHasInputPopoverParent };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","useIframeFieldMessages","toggleNotification","useNotification","iframe","usePreviewContext","state","iframeRef","document","schema","components","setPopoverField","React","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS_INTENT","fieldMetaData","parseFieldMetaData","payload","path","documentId","message","attribute","getAttributeSchemaFromPath","position","error","Error","window","addEventListener","removeEventListener","InputPopover","documentResponse","popoverField","iframeRect","getBoundingClientRect","_jsxs","_Fragment","_jsx","Box","top","left","width","height","zIndex","Popover","Root","open","onOpenChange","Trigger","transform","Content","sideOffset","padding","InputRenderer","label","name","visible","useHasInputPopoverParent","context","undefined"],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { createContext, useNotification } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { Box, Popover } from '@strapi/design-system';
|
|
5
|
+
import { InputRenderer as MemoizedInputRenderer } from '../../pages/EditView/components/InputRenderer.mjs';
|
|
6
|
+
import { usePreviewContext } from '../pages/Preview.mjs';
|
|
7
|
+
import { INTERNAL_EVENTS } from '../utils/constants.mjs';
|
|
8
|
+
import { parseFieldMetaData, getAttributeSchemaFromPath } from '../utils/fieldUtils.mjs';
|
|
9
|
+
|
|
10
|
+
const [InputPopoverProvider, useInputPopoverContext] = createContext('InputPopover');
|
|
11
|
+
/**
|
|
12
|
+
* We receive window events sent from the user's preview via the injected script.
|
|
13
|
+
* We listen to the ones here that target a specific field (currently just the one to focus a field)
|
|
14
|
+
*/ function useIframeFieldMessages() {
|
|
15
|
+
const { toggleNotification } = useNotification();
|
|
16
|
+
const iframe = usePreviewContext('useIframeFieldMessages', (state)=>state.iframeRef);
|
|
17
|
+
const document = usePreviewContext('useIframeFieldMessages', (state)=>state.document);
|
|
18
|
+
const schema = usePreviewContext('useIframeFieldMessages', (state)=>state.schema);
|
|
19
|
+
const components = usePreviewContext('useIframeFieldMessages', (state)=>state.components);
|
|
20
|
+
const setPopoverField = usePreviewContext('useIframeFieldMessages', (state)=>state.setPopoverField);
|
|
21
|
+
React.useEffect(()=>{
|
|
22
|
+
const handleMessage = (event)=>{
|
|
23
|
+
// Only listen to events from the preview iframe
|
|
24
|
+
if (iframe.current) {
|
|
25
|
+
const previewOrigin = new URL(iframe.current?.src).origin;
|
|
26
|
+
if (event.origin !== previewOrigin) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {
|
|
31
|
+
const fieldMetaData = parseFieldMetaData(event.data.payload.path);
|
|
32
|
+
if (!fieldMetaData) return;
|
|
33
|
+
/**
|
|
34
|
+
* Ignore (for now) content that comes from separate API requests than the one for the
|
|
35
|
+
* current document. This doesn't do anything about fields that may come from relations to
|
|
36
|
+
* the current document however.
|
|
37
|
+
*/ if (fieldMetaData.documentId !== document.documentId) {
|
|
38
|
+
toggleNotification({
|
|
39
|
+
type: 'warning',
|
|
40
|
+
message: 'This field comes from a different document'
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const attribute = getAttributeSchemaFromPath({
|
|
46
|
+
path: fieldMetaData.path,
|
|
47
|
+
components,
|
|
48
|
+
schema,
|
|
49
|
+
document
|
|
50
|
+
});
|
|
51
|
+
// We're able to handle the field, set it in context so the popover can pick it up
|
|
52
|
+
setPopoverField({
|
|
53
|
+
...fieldMetaData,
|
|
54
|
+
position: event.data.payload.position,
|
|
55
|
+
attribute
|
|
56
|
+
});
|
|
57
|
+
} catch (error) {
|
|
58
|
+
if (error instanceof Error) {
|
|
59
|
+
toggleNotification({
|
|
60
|
+
type: 'warning',
|
|
61
|
+
message: error.message
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
window.addEventListener('message', handleMessage);
|
|
68
|
+
return ()=>{
|
|
69
|
+
window.removeEventListener('message', handleMessage);
|
|
70
|
+
};
|
|
71
|
+
}, [
|
|
72
|
+
components,
|
|
73
|
+
document,
|
|
74
|
+
iframe,
|
|
75
|
+
schema,
|
|
76
|
+
setPopoverField,
|
|
77
|
+
toggleNotification
|
|
78
|
+
]);
|
|
79
|
+
}
|
|
80
|
+
const InputPopover = ({ documentResponse })=>{
|
|
81
|
+
const iframeRef = usePreviewContext('VisualEditingPopover', (state)=>state.iframeRef);
|
|
82
|
+
const popoverField = usePreviewContext('VisualEditingPopover', (state)=>state.popoverField);
|
|
83
|
+
const setPopoverField = usePreviewContext('VisualEditingPopover', (state)=>state.setPopoverField);
|
|
84
|
+
useIframeFieldMessages();
|
|
85
|
+
if (!popoverField || !iframeRef.current) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const iframeRect = iframeRef.current.getBoundingClientRect();
|
|
89
|
+
return /*#__PURE__*/ jsxs(Fragment, {
|
|
90
|
+
children: [
|
|
91
|
+
/*#__PURE__*/ jsx(Box, {
|
|
92
|
+
position: 'fixed',
|
|
93
|
+
top: iframeRect.top + 'px',
|
|
94
|
+
left: iframeRect.left + 'px',
|
|
95
|
+
width: iframeRect.width + 'px',
|
|
96
|
+
height: iframeRect.height + 'px',
|
|
97
|
+
zIndex: 4
|
|
98
|
+
}),
|
|
99
|
+
/*#__PURE__*/ jsx(InputPopoverProvider, {
|
|
100
|
+
children: /*#__PURE__*/ jsxs(Popover.Root, {
|
|
101
|
+
open: true,
|
|
102
|
+
onOpenChange: (open)=>!open && setPopoverField(null),
|
|
103
|
+
children: [
|
|
104
|
+
/*#__PURE__*/ jsx(Popover.Trigger, {
|
|
105
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
106
|
+
position: "fixed",
|
|
107
|
+
width: popoverField.position.width + 'px',
|
|
108
|
+
height: popoverField.position.height + 'px',
|
|
109
|
+
top: 0,
|
|
110
|
+
left: 0,
|
|
111
|
+
transform: `translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`
|
|
112
|
+
})
|
|
113
|
+
}),
|
|
114
|
+
/*#__PURE__*/ jsx(Popover.Content, {
|
|
115
|
+
sideOffset: 4,
|
|
116
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
117
|
+
padding: 4,
|
|
118
|
+
width: "400px",
|
|
119
|
+
children: /*#__PURE__*/ jsx(MemoizedInputRenderer, {
|
|
120
|
+
document: documentResponse,
|
|
121
|
+
attribute: popoverField.attribute,
|
|
122
|
+
// TODO: retrieve the proper label from the layout
|
|
123
|
+
label: popoverField.path,
|
|
124
|
+
name: popoverField.path,
|
|
125
|
+
type: popoverField.attribute.type,
|
|
126
|
+
visible: true
|
|
127
|
+
})
|
|
128
|
+
})
|
|
129
|
+
})
|
|
130
|
+
]
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
]
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
function useHasInputPopoverParent() {
|
|
137
|
+
const context = useInputPopoverContext('useHasInputPopoverParent', ()=>true, false);
|
|
138
|
+
// useContext will return undefined if the called is not wrapped in the provider
|
|
139
|
+
return context !== undefined;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export { InputPopover, useHasInputPopoverParent };
|
|
143
|
+
//# sourceMappingURL=InputPopover.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputPopover.mjs","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, useNotification } from '@strapi/admin/strapi-admin';\nimport { Box, Popover } from '@strapi/design-system';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS } from '../utils/constants';\nimport { parseFieldMetaData, getAttributeSchemaFromPath } from '../utils/fieldUtils';\n\n/**\n * No need for actual data in the context. It's just to let children check if they're rendered\n * inside of a preview InputPopover without relying on prop drilling.\n */\ninterface InputPopoverContextValue {}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\n/**\n * We receive window events sent from the user's preview via the injected script.\n * We listen to the ones here that target a specific field (currently just the one to focus a field)\n */\nfunction useIframeFieldMessages() {\n const { toggleNotification } = useNotification();\n const iframe = usePreviewContext('useIframeFieldMessages', (state) => state.iframeRef);\n const document = usePreviewContext('useIframeFieldMessages', (state) => state.document);\n const schema = usePreviewContext('useIframeFieldMessages', (state) => state.schema);\n const components = usePreviewContext('useIframeFieldMessages', (state) => state.components);\n const setPopoverField = usePreviewContext(\n 'useIframeFieldMessages',\n (state) => state.setPopoverField\n );\n\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframe.current) {\n const previewOrigin = new URL(iframe.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {\n const fieldMetaData = parseFieldMetaData(event.data.payload.path);\n\n if (!fieldMetaData) return;\n\n /**\n * Ignore (for now) content that comes from separate API requests than the one for the\n * current document. This doesn't do anything about fields that may come from relations to\n * the current document however.\n */\n if (fieldMetaData.documentId !== document.documentId) {\n toggleNotification({\n type: 'warning',\n message: 'This field comes from a different document',\n });\n return;\n }\n\n try {\n const attribute = getAttributeSchemaFromPath({\n path: fieldMetaData.path,\n components,\n schema,\n document,\n });\n\n // We're able to handle the field, set it in context so the popover can pick it up\n setPopoverField({ ...fieldMetaData, position: event.data.payload.position, attribute });\n } catch (error) {\n if (error instanceof Error) {\n toggleNotification({ type: 'warning', message: error.message });\n }\n }\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [components, document, iframe, schema, setPopoverField, toggleNotification]);\n}\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('VisualEditingPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('VisualEditingPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext(\n 'VisualEditingPopover',\n (state) => state.setPopoverField\n );\n useIframeFieldMessages();\n\n if (!popoverField || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n {/**\n * Overlay an empty div on top of the iframe while the popover is open so it can\n * intercept clicks. Without it, we wouldn't be able to close the popover by clicking outside,\n * because the click would be detected by the iframe window, not by the admin.\n **/}\n <Box\n position={'fixed'}\n top={iframeRect.top + 'px'}\n left={iframeRect.left + 'px'}\n width={iframeRect.width + 'px'}\n height={iframeRect.height + 'px'}\n zIndex={4}\n />\n <InputPopoverProvider>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Box padding={4} width=\"400px\">\n {/* @ts-expect-error the types of `attribute` clash for some reason */}\n <InputRenderer\n document={documentResponse}\n attribute={popoverField.attribute}\n // TODO: retrieve the proper label from the layout\n label={popoverField.path}\n name={popoverField.path}\n type={popoverField.attribute.type}\n visible={true}\n />\n </Box>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n\n // useContext will return undefined if the called is not wrapped in the provider\n return context !== undefined;\n}\n\nexport { InputPopover, useHasInputPopoverParent };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","useIframeFieldMessages","toggleNotification","useNotification","iframe","usePreviewContext","state","iframeRef","document","schema","components","setPopoverField","React","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS_INTENT","fieldMetaData","parseFieldMetaData","payload","path","documentId","message","attribute","getAttributeSchemaFromPath","position","error","Error","window","addEventListener","removeEventListener","InputPopover","documentResponse","popoverField","iframeRect","getBoundingClientRect","_jsxs","_Fragment","_jsx","Box","top","left","width","height","zIndex","Popover","Root","open","onOpenChange","Trigger","transform","Content","sideOffset","padding","InputRenderer","label","name","visible","useHasInputPopoverParent","context","undefined"],"mappings":";;;;;;;;;AAiBA,MAAM,CAACA,oBAAAA,EAAsBC,sBAAuB,CAAA,GAClDC,aAAwC,CAAA,cAAA,CAAA;AAE1C;;;AAGC,IACD,SAASC,sBAAAA,GAAAA;IACP,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,SAASC,iBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAAA;AACrF,IAAA,MAAMC,WAAWH,iBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAAA,GAAUA,MAAME,QAAQ,CAAA;AACtF,IAAA,MAAMC,SAASJ,iBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAAA,GAAUA,MAAMG,MAAM,CAAA;AAClF,IAAA,MAAMC,aAAaL,iBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAAA,GAAUA,MAAMI,UAAU,CAAA;AAC1F,IAAA,MAAMC,kBAAkBN,iBACtB,CAAA,wBAAA,EACA,CAACC,KAAAA,GAAUA,MAAMK,eAAe,CAAA;AAGlCC,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,MAAMC,gBAAgB,CAACC,KAAAA,GAAAA;;YAErB,IAAIX,MAAAA,CAAOY,OAAO,EAAE;AAClB,gBAAA,MAAMC,gBAAgB,IAAIC,GAAAA,CAAId,OAAOY,OAAO,EAAEG,KAAKC,MAAM;gBACzD,IAAIL,KAAAA,CAAMK,MAAM,KAAKH,aAAe,EAAA;AAClC,oBAAA;AACF;AACF;AAEA,YAAA,IAAIF,MAAMM,IAAI,EAAEC,IAASC,KAAAA,eAAAA,CAAgBC,yBAAyB,EAAE;AAClE,gBAAA,MAAMC,gBAAgBC,kBAAmBX,CAAAA,KAAAA,CAAMM,IAAI,CAACM,OAAO,CAACC,IAAI,CAAA;AAEhE,gBAAA,IAAI,CAACH,aAAe,EAAA;AAEpB;;;;AAIC,YACD,IAAIA,aAAcI,CAAAA,UAAU,KAAKrB,QAAAA,CAASqB,UAAU,EAAE;oBACpD3B,kBAAmB,CAAA;wBACjBoB,IAAM,EAAA,SAAA;wBACNQ,OAAS,EAAA;AACX,qBAAA,CAAA;AACA,oBAAA;AACF;gBAEA,IAAI;AACF,oBAAA,MAAMC,YAAYC,0BAA2B,CAAA;AAC3CJ,wBAAAA,IAAAA,EAAMH,cAAcG,IAAI;AACxBlB,wBAAAA,UAAAA;AACAD,wBAAAA,MAAAA;AACAD,wBAAAA;AACF,qBAAA,CAAA;;oBAGAG,eAAgB,CAAA;AAAE,wBAAA,GAAGc,aAAa;AAAEQ,wBAAAA,QAAAA,EAAUlB,KAAMM,CAAAA,IAAI,CAACM,OAAO,CAACM,QAAQ;AAAEF,wBAAAA;AAAU,qBAAA,CAAA;AACvF,iBAAA,CAAE,OAAOG,KAAO,EAAA;AACd,oBAAA,IAAIA,iBAAiBC,KAAO,EAAA;wBAC1BjC,kBAAmB,CAAA;4BAAEoB,IAAM,EAAA,SAAA;AAAWQ,4BAAAA,OAAAA,EAASI,MAAMJ;AAAQ,yBAAA,CAAA;AAC/D;AACF;AACF;AACF,SAAA;QAEAM,MAAOC,CAAAA,gBAAgB,CAAC,SAAWvB,EAAAA,aAAAA,CAAAA;QAEnC,OAAO,IAAA;YACLsB,MAAOE,CAAAA,mBAAmB,CAAC,SAAWxB,EAAAA,aAAAA,CAAAA;AACxC,SAAA;KACC,EAAA;AAACJ,QAAAA,UAAAA;AAAYF,QAAAA,QAAAA;AAAUJ,QAAAA,MAAAA;AAAQK,QAAAA,MAAAA;AAAQE,QAAAA,eAAAA;AAAiBT,QAAAA;AAAmB,KAAA,CAAA;AAChF;AAEA,MAAMqC,YAAe,GAAA,CAAC,EAAEC,gBAAgB,EAAiD,GAAA;AACvF,IAAA,MAAMjC,YAAYF,iBAAkB,CAAA,sBAAA,EAAwB,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAAA;AACtF,IAAA,MAAMkC,eAAepC,iBAAkB,CAAA,sBAAA,EAAwB,CAACC,KAAAA,GAAUA,MAAMmC,YAAY,CAAA;AAC5F,IAAA,MAAM9B,kBAAkBN,iBACtB,CAAA,sBAAA,EACA,CAACC,KAAAA,GAAUA,MAAMK,eAAe,CAAA;AAElCV,IAAAA,sBAAAA,EAAAA;AAEA,IAAA,IAAI,CAACwC,YAAAA,IAAgB,CAAClC,SAAAA,CAAUS,OAAO,EAAE;QACvC,OAAO,IAAA;AACT;AAEA,IAAA,MAAM0B,UAAanC,GAAAA,SAAAA,CAAUS,OAAO,CAAC2B,qBAAqB,EAAA;IAE1D,qBACEC,IAAA,CAAAC,QAAA,EAAA;;0BAMEC,GAACC,CAAAA,GAAAA,EAAAA;gBACCd,QAAU,EAAA,OAAA;gBACVe,GAAKN,EAAAA,UAAAA,CAAWM,GAAG,GAAG,IAAA;gBACtBC,IAAMP,EAAAA,UAAAA,CAAWO,IAAI,GAAG,IAAA;gBACxBC,KAAOR,EAAAA,UAAAA,CAAWQ,KAAK,GAAG,IAAA;gBAC1BC,MAAQT,EAAAA,UAAAA,CAAWS,MAAM,GAAG,IAAA;gBAC5BC,MAAQ,EAAA;;0BAEVN,GAAChD,CAAAA,oBAAAA,EAAAA;wCACC8C,IAAA,CAACS,QAAQC,IAAI,EAAA;oBAACC,IAAM,EAAA,IAAA;AAAMC,oBAAAA,YAAAA,EAAc,CAACD,IAAAA,GAAS,CAACA,IAAAA,IAAQ5C,eAAgB,CAAA,IAAA,CAAA;;AACzE,sCAAAmC,GAAA,CAACO,QAAQI,OAAO,EAAA;AACd,4BAAA,QAAA,gBAAAX,GAACC,CAAAA,GAAAA,EAAAA;gCACCd,QAAS,EAAA,OAAA;AACTiB,gCAAAA,KAAAA,EAAOT,YAAaR,CAAAA,QAAQ,CAACiB,KAAK,GAAG,IAAA;AACrCC,gCAAAA,MAAAA,EAAQV,YAAaR,CAAAA,QAAQ,CAACkB,MAAM,GAAG,IAAA;gCACvCH,GAAK,EAAA,CAAA;gCACLC,IAAM,EAAA,CAAA;gCACNS,SAAW,EAAA,CAAC,UAAU,EAAEhB,UAAAA,CAAWO,IAAI,GAAGR,YAAAA,CAAaR,QAAQ,CAACgB,IAAI,CAAC,IAAI,EAAEP,UAAAA,CAAWM,GAAG,GAAGP,YAAAA,CAAaR,QAAQ,CAACe,GAAG,CAAC,GAAG;;;AAG7H,sCAAAF,GAAA,CAACO,QAAQM,OAAO,EAAA;4BAACC,UAAY,EAAA,CAAA;AAC3B,4BAAA,QAAA,gBAAAd,GAACC,CAAAA,GAAAA,EAAAA;gCAAIc,OAAS,EAAA,CAAA;gCAAGX,KAAM,EAAA,OAAA;AAErB,gCAAA,QAAA,gBAAAJ,GAACgB,CAAAA,qBAAAA,EAAAA;oCACCtD,QAAUgC,EAAAA,gBAAAA;AACVT,oCAAAA,SAAAA,EAAWU,aAAaV,SAAS;;AAEjCgC,oCAAAA,KAAAA,EAAOtB,aAAab,IAAI;AACxBoC,oCAAAA,IAAAA,EAAMvB,aAAab,IAAI;oCACvBN,IAAMmB,EAAAA,YAAAA,CAAaV,SAAS,CAACT,IAAI;oCACjC2C,OAAS,EAAA;;;;;;;;;AAQzB;AAEA,SAASC,wBAAAA,GAAAA;AACP,IAAA,MAAMC,OAAUpE,GAAAA,sBAAAA,CAAuB,0BAA4B,EAAA,IAAM,IAAM,EAAA,KAAA,CAAA;;AAG/E,IAAA,OAAOoE,OAAYC,KAAAA,SAAAA;AACrB;;;;"}
|
|
@@ -131,7 +131,6 @@ const PreviewTabs = ()=>{
|
|
|
131
131
|
const document = Preview.usePreviewContext('PreviewHeader', (state)=>state.document);
|
|
132
132
|
const schema = Preview.usePreviewContext('PreviewHeader', (state)=>state.schema);
|
|
133
133
|
const meta = Preview.usePreviewContext('PreviewHeader', (state)=>state.meta);
|
|
134
|
-
Preview.usePreviewContext('PreviewHeader', (state)=>state.onPreview);
|
|
135
134
|
const plugins = strapiAdmin.useStrapiApp('PreviewHeader', (state)=>state.plugins);
|
|
136
135
|
const [{ query }] = strapiAdmin.useQueryParams();
|
|
137
136
|
const { formatMessage } = reactIntl.useIntl();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewHeader.js","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: schema.kind === 'collectionType' ? document.documentId : undefined,\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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"}
|
|
1
|
+
{"version":3,"file":"PreviewHeader.js","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 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: schema.kind === 'collectionType' ? document.documentId : undefined,\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","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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"}
|
|
@@ -129,7 +129,6 @@ const PreviewTabs = ()=>{
|
|
|
129
129
|
const document = usePreviewContext('PreviewHeader', (state)=>state.document);
|
|
130
130
|
const schema = usePreviewContext('PreviewHeader', (state)=>state.schema);
|
|
131
131
|
const meta = usePreviewContext('PreviewHeader', (state)=>state.meta);
|
|
132
|
-
usePreviewContext('PreviewHeader', (state)=>state.onPreview);
|
|
133
132
|
const plugins = useStrapiApp('PreviewHeader', (state)=>state.plugins);
|
|
134
133
|
const [{ query }] = useQueryParams();
|
|
135
134
|
const { formatMessage } = useIntl();
|