@strapi/content-manager 5.38.1 → 5.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/hooks/useDocument.js +21 -5
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +22 -6
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +3 -2
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +4 -4
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +71 -44
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +54 -46
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +107 -88
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +109 -90
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +91 -106
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +94 -109
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +43 -23
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +45 -25
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +30 -19
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +34 -23
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +23 -3
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +4 -3
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +3 -0
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +3 -0
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +19 -7
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -8
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +11 -15
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +11 -16
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +3 -3
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +3 -0
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +3 -0
- package/dist/server/services/utils/draft.js +8 -1
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +8 -1
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +16 -1
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +16 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/services/utils/draft.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sources":["../../../../../admin/src/pages/EditView/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useForm,\n BackButton,\n useNotification,\n useStrapiApp,\n useQueryParams,\n useIsDesktop,\n useDebounce,\n RESPONSIVE_DEFAULT_SPACING,\n useIsMobile,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n SingleSelect,\n SingleSelectOption,\n Typography,\n IconButton,\n Dialog,\n Popover,\n} from '@strapi/design-system';\nimport { ListPlus, Pencil, Trash, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport {\n CREATED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n} from '../../../constants/attributes';\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { getDisplayName } from '../../../utils/users';\n\nimport { DocumentActionsMenu } from './DocumentActions';\nimport { DocumentStatus } from './DocumentStatus';\n\nimport type { ContentManagerPlugin, DocumentActionComponent } from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n isCreating?: boolean;\n status?: 'draft' | 'published' | 'modified';\n title?: string;\n}\n\nconst Header = ({ isCreating, status, title: documentTitle = 'Untitled' }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const isMobile = useIsMobile();\n const params = useParams<{ collectionType: string; slug: string }>();\n const [\n {\n query: { status: activeTab = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const title = isCreating\n ? formatMessage({\n id: 'content-manager.containers.edit.title.new',\n defaultMessage: 'Create an entry',\n })\n : documentTitle;\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingTop={{\n initial: 4,\n medium: 6,\n }}\n paddingBottom={4}\n gap={2}\n >\n {!isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <Flex\n width=\"100%\"\n justifyContent=\"space-between\"\n gap={{\n initial: 2,\n medium: '8rem',\n }}\n alignItems=\"flex-start\"\n direction={{\n initial: 'column-reverse',\n medium: 'row',\n }}\n >\n <Flex\n gap={2}\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n width=\"100%\"\n overflow=\"hidden\"\n >\n <Typography variant=\"alpha\" tag=\"h1\" overflow=\"hidden\">\n {title}\n </Typography>\n <Box display={{ initial: 'block', medium: 'none' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n <Flex width={{ initial: '100%', medium: 'auto' }} gap={3} justifyContent=\"space-between\">\n {isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <HeaderToolbar activeTab={activeTab} isCloning={isCloning} />\n </Flex>\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\ninterface HeaderActionDescription {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n dialog?: DialogOptions;\n options?: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n /**\n * @internal\n * @description\n * Internal SelectOption renderer used to display the status of AI translation background jobs\n */\n _render?: () => React.ReactNode;\n }>;\n /**\n * @internal\n * @description\n * Internal document header action to display the status of AI translation background jobs\n */\n _status?: {\n message: React.ReactNode;\n tooltip?: React.ReactNode;\n };\n onSelect?: (value: string) => void;\n value?: string;\n customizeContent?: (value: string) => React.ReactNode;\n}\n\ninterface HeaderDocumentActionsProps {\n activeTab: 'draft' | 'published';\n isCloning: boolean;\n}\n\nconst HeaderDocumentActions = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const { formatMessage } = useIntl();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n return (\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('header')}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n <Information activeTab={activeTab} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <Box display={{ initial: 'none', medium: 'block' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n );\n};\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta } = useDoc();\n\n if (!document || !document.id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Updated',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Created',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={2}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography tag=\"dd\" variant=\"pi\" textColor=\"neutral600\">\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n\n const handleClick =\n (action: HeaderActionDescription & { id: string }) => async (e: React.MouseEvent) => {\n if (!('options' in action)) {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <Flex gap={1}>\n {actions.map((action) => {\n if (action.options) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n aria-label={action.label}\n {...action}\n >\n {action.options.map(({ label, ...option }) => {\n if (option._render) {\n return option._render();\n }\n\n return (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n } else if (action._status) {\n return (\n <HeaderActionStatus tooltip={action._status?.tooltip} key={action.id}>\n {action._status.message}\n </HeaderActionStatus>\n );\n } else {\n return (\n <React.Fragment key={action.id}>\n <IconButton\n disabled={action.disabled}\n label={action.label}\n size=\"S\"\n onClick={handleClick(action)}\n >\n {action.icon}\n </IconButton>\n {action.dialog ? (\n <HeaderActionDialog\n {...action.dialog}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n </React.Fragment>\n );\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionStatusProps {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst HeaderActionStatus = ({ tooltip, children }: HeaderActionStatusProps) => {\n const [open, setOpen] = React.useState(false);\n // Debounce the open/close so the user can hover over the popover content before it closes\n const debouncedOpen = useDebounce(open, 100);\n\n const handleMouseEnter = () => {\n if (tooltip) {\n setOpen(true);\n }\n };\n const handleMouseLeave = () => {\n if (tooltip) {\n setOpen(false);\n }\n };\n\n return (\n <Popover.Root open={debouncedOpen} onOpenChange={setOpen}>\n <Popover.Anchor\n style={{ alignSelf: 'stretch' }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-describedby=\"document-header-action-status\"\n >\n <Box height=\"100%\">{children}</Box>\n </Popover.Anchor>\n <Popover.Content\n role=\"tooltip\"\n id=\"document-header-action-status\"\n side=\"bottom\"\n align=\"center\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {tooltip}\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionDialog\n * -----------------------------------------------------------------------------------------------*/\ninterface HeaderActionDialogProps {\n onClose: () => void;\n onCancel?: () => Promise<void>;\n title: string;\n content?: React.ReactNode | ((props: { onClose: () => void }) => React.ReactNode);\n isOpen: boolean;\n}\n\nconst HeaderActionDialog = ({\n onClose,\n onCancel,\n title,\n content: Content,\n isOpen,\n}: HeaderActionDialogProps) => {\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n {typeof Content === 'function' ? <Content onClose={handleClose} /> : Content}\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n }\n : null;\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\nConfigureTheViewAction.position = 'header';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n }\n : null;\n};\n\nEditTheModelAction.type = 'edit-the-model';\nEditTheModelAction.position = 'header';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n const isLocalized = document?.locale != null;\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage(\n {\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete entry{isLocalized, select, true { (all locales)} other {}}',\n },\n { isLocalized }\n ),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete 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.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\nDeleteAction.position = ['header', 'table-row'];\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n"],"names":["Header","isCreating","status","title","documentTitle","formatMessage","useIntl","isCloning","useMatch","CLONE_PATH","isMobile","useIsMobile","params","useParams","query","activeTab","useQueryParams","id","defaultMessage","_jsxs","Flex","direction","alignItems","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","paddingTop","initial","medium","paddingBottom","gap","_jsx","BackButton","fallback","collectionType","SINGLE_TYPES","undefined","COLLECTION_TYPES","slug","width","justifyContent","overflow","Typography","variant","tag","Box","display","HeaderDocumentActions","HeaderToolbar","marginTop","DocumentStatus","model","document","meta","useDoc","plugins","useStrapiApp","state","DescriptionComponentRenderer","props","documentId","descriptions","apis","getDocumentActions","actions","headerActions","filter","action","positions","Array","isArray","position","includes","DocumentActionsMenu","label","Information","getHeaderActions","length","HeaderActions","createAndUpdateDocument","availableStatus","find","publishedAt","publishDocument","creator","CREATED_BY_ATTRIBUTE_NAME","getDisplayName","updator","UPDATED_BY_ATTRIBUTE_NAME","information","isDisplayed","PUBLISHED_AT_ATTRIBUTE_NAME","value","time","RelativeTime","timestamp","Date","isAnonymous","PUBLISHED_BY_ATTRIBUTE_NAME","author","UPDATED_AT_ATTRIBUTE_NAME","CREATED_AT_ATTRIBUTE_NAME","info","borderWidth","borderStyle","borderColor","padding","marginLeft","marginRight","map","fontWeight","textColor","dialogId","setDialogId","React","useState","handleClick","e","onClick","dialog","muteDialog","preventDefault","handleClose","options","SingleSelect","size","onChange","onSelect","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","message","Fragment","IconButton","disabled","icon","HeaderActionDialog","isOpen","onClose","children","open","setOpen","debouncedOpen","useDebounce","handleMouseEnter","handleMouseLeave","Popover","Root","onOpenChange","Anchor","style","alignSelf","onMouseEnter","onMouseLeave","aria-describedby","height","Content","role","side","align","onCancel","content","Dialog","ConfigureTheViewAction","navigate","useNavigate","isDesktop","useIsDesktop","ListPlus","type","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","toggleNotification","useNotification","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Header.js","sources":["../../../../../admin/src/pages/EditView/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useForm,\n BackButton,\n useNotification,\n useStrapiApp,\n useQueryParams,\n useIsDesktop,\n useDebounce,\n RESPONSIVE_DEFAULT_SPACING,\n useIsMobile,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n SingleSelect,\n SingleSelectOption,\n Typography,\n IconButton,\n Dialog,\n Popover,\n} from '@strapi/design-system';\nimport { ListPlus, Pencil, Trash, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport {\n CREATED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n} from '../../../constants/attributes';\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { getDisplayName } from '../../../utils/users';\n\nimport { DocumentActionsMenu } from './DocumentActions';\nimport { DocumentStatus } from './DocumentStatus';\n\nimport type { ContentManagerPlugin, DocumentActionComponent } from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n isCreating?: boolean;\n status?: 'draft' | 'published' | 'modified';\n title?: string;\n}\n\nconst Header = ({ isCreating, status, title: documentTitle = 'Untitled' }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const isMobile = useIsMobile();\n const params = useParams<{ collectionType: string; slug: string }>();\n const [\n {\n query: { status: activeTab = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const title = isCreating\n ? formatMessage({\n id: 'content-manager.containers.edit.title.new',\n defaultMessage: 'Create an entry',\n })\n : documentTitle;\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingTop={{\n initial: 4,\n medium: 6,\n }}\n paddingBottom={4}\n gap={2}\n >\n {!isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <Flex\n width=\"100%\"\n justifyContent=\"space-between\"\n gap={{\n initial: 2,\n medium: '8rem',\n }}\n alignItems=\"flex-start\"\n direction={{\n initial: 'column-reverse',\n medium: 'row',\n }}\n >\n <Flex\n gap={2}\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n width=\"100%\"\n overflow=\"hidden\"\n >\n <Typography variant=\"alpha\" tag=\"h1\" overflow=\"hidden\">\n {title}\n </Typography>\n <Box display={{ initial: 'block', medium: 'none' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n <Flex width={{ initial: '100%', medium: 'auto' }} gap={3} justifyContent=\"space-between\">\n {isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <HeaderToolbar activeTab={activeTab} isCloning={isCloning} />\n </Flex>\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\ninterface HeaderActionDescription {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n dialog?: DialogOptions;\n options?: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n /**\n * @internal\n * @description\n * Internal SelectOption renderer used to display the status of AI translation background jobs\n */\n _render?: () => React.ReactNode;\n }>;\n /**\n * @internal\n * @description\n * Internal document header action to display the status of AI translation background jobs\n */\n _status?: {\n message: React.ReactNode;\n tooltip?: React.ReactNode;\n };\n onSelect?: (value: string) => void;\n value?: string;\n customizeContent?: (value: string) => React.ReactNode;\n}\n\ninterface HeaderDocumentActionsProps {\n activeTab: 'draft' | 'published';\n isCloning: boolean;\n}\n\nconst HeaderDocumentActions = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const { formatMessage } = useIntl();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n return (\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('header')}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n <Information activeTab={activeTab} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <Box display={{ initial: 'none', medium: 'block' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n );\n};\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta } = useDoc();\n\n if (!document || !document.id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Updated',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Created',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={2}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography\n tag=\"dd\"\n variant=\"pi\"\n textColor=\"neutral600\"\n style={{ wordBreak: 'break-word' }}\n >\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n\n const handleClick =\n (action: HeaderActionDescription & { id: string }) => async (e: React.MouseEvent) => {\n if (!('options' in action)) {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <Flex gap={1}>\n {actions.map((action) => {\n if (action.options) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n aria-label={action.label}\n {...action}\n >\n {action.options.map(({ label, ...option }) => {\n if (option._render) {\n return option._render();\n }\n\n return (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n } else if (action._status) {\n return (\n <HeaderActionStatus tooltip={action._status?.tooltip} key={action.id}>\n {action._status.message}\n </HeaderActionStatus>\n );\n } else {\n return (\n <React.Fragment key={action.id}>\n <IconButton\n disabled={action.disabled}\n label={action.label}\n size=\"S\"\n onClick={handleClick(action)}\n >\n {action.icon}\n </IconButton>\n {action.dialog ? (\n <HeaderActionDialog\n {...action.dialog}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n </React.Fragment>\n );\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionStatusProps {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst HeaderActionStatus = ({ tooltip, children }: HeaderActionStatusProps) => {\n const [open, setOpen] = React.useState(false);\n // Debounce the open/close so the user can hover over the popover content before it closes\n const debouncedOpen = useDebounce(open, 100);\n\n const handleMouseEnter = () => {\n if (tooltip) {\n setOpen(true);\n }\n };\n const handleMouseLeave = () => {\n if (tooltip) {\n setOpen(false);\n }\n };\n\n return (\n <Popover.Root open={debouncedOpen} onOpenChange={setOpen}>\n <Popover.Anchor\n style={{ alignSelf: 'stretch' }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-describedby=\"document-header-action-status\"\n >\n <Box height=\"100%\">{children}</Box>\n </Popover.Anchor>\n <Popover.Content\n role=\"tooltip\"\n id=\"document-header-action-status\"\n side=\"bottom\"\n align=\"center\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {tooltip}\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionDialog\n * -----------------------------------------------------------------------------------------------*/\ninterface HeaderActionDialogProps {\n onClose: () => void;\n onCancel?: () => Promise<void>;\n title: string;\n content?: React.ReactNode | ((props: { onClose: () => void }) => React.ReactNode);\n isOpen: boolean;\n}\n\nconst HeaderActionDialog = ({\n onClose,\n onCancel,\n title,\n content: Content,\n isOpen,\n}: HeaderActionDialogProps) => {\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n {typeof Content === 'function' ? <Content onClose={handleClose} /> : Content}\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n }\n : null;\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\nConfigureTheViewAction.position = 'header';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n }\n : null;\n};\n\nEditTheModelAction.type = 'edit-the-model';\nEditTheModelAction.position = 'header';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n const isLocalized = document?.locale != null;\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage(\n {\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete entry{isLocalized, select, true { (all locales)} other {}}',\n },\n { isLocalized }\n ),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete 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.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\nDeleteAction.position = ['header', 'table-row'];\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n"],"names":["Header","isCreating","status","title","documentTitle","formatMessage","useIntl","isCloning","useMatch","CLONE_PATH","isMobile","useIsMobile","params","useParams","query","activeTab","useQueryParams","id","defaultMessage","_jsxs","Flex","direction","alignItems","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","paddingTop","initial","medium","paddingBottom","gap","_jsx","BackButton","fallback","collectionType","SINGLE_TYPES","undefined","COLLECTION_TYPES","slug","width","justifyContent","overflow","Typography","variant","tag","Box","display","HeaderDocumentActions","HeaderToolbar","marginTop","DocumentStatus","model","document","meta","useDoc","plugins","useStrapiApp","state","DescriptionComponentRenderer","props","documentId","descriptions","apis","getDocumentActions","actions","headerActions","filter","action","positions","Array","isArray","position","includes","DocumentActionsMenu","label","Information","getHeaderActions","length","HeaderActions","createAndUpdateDocument","availableStatus","find","publishedAt","publishDocument","creator","CREATED_BY_ATTRIBUTE_NAME","getDisplayName","updator","UPDATED_BY_ATTRIBUTE_NAME","information","isDisplayed","PUBLISHED_AT_ATTRIBUTE_NAME","value","time","RelativeTime","timestamp","Date","isAnonymous","PUBLISHED_BY_ATTRIBUTE_NAME","author","UPDATED_AT_ATTRIBUTE_NAME","CREATED_AT_ATTRIBUTE_NAME","info","borderWidth","borderStyle","borderColor","padding","marginLeft","marginRight","map","fontWeight","textColor","style","wordBreak","dialogId","setDialogId","React","useState","handleClick","e","onClick","dialog","muteDialog","preventDefault","handleClose","options","SingleSelect","size","onChange","onSelect","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","message","Fragment","IconButton","disabled","icon","HeaderActionDialog","isOpen","onClose","children","open","setOpen","debouncedOpen","useDebounce","handleMouseEnter","handleMouseLeave","Popover","Root","onOpenChange","Anchor","alignSelf","onMouseEnter","onMouseLeave","aria-describedby","height","Content","role","side","align","onCancel","content","Dialog","ConfigureTheViewAction","navigate","useNavigate","isDesktop","useIsDesktop","ListPlus","type","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","toggleNotification","useNotification","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.mjs","sources":["../../../../../admin/src/pages/EditView/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useForm,\n BackButton,\n useNotification,\n useStrapiApp,\n useQueryParams,\n useIsDesktop,\n useDebounce,\n RESPONSIVE_DEFAULT_SPACING,\n useIsMobile,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n SingleSelect,\n SingleSelectOption,\n Typography,\n IconButton,\n Dialog,\n Popover,\n} from '@strapi/design-system';\nimport { ListPlus, Pencil, Trash, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport {\n CREATED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n} from '../../../constants/attributes';\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { getDisplayName } from '../../../utils/users';\n\nimport { DocumentActionsMenu } from './DocumentActions';\nimport { DocumentStatus } from './DocumentStatus';\n\nimport type { ContentManagerPlugin, DocumentActionComponent } from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n isCreating?: boolean;\n status?: 'draft' | 'published' | 'modified';\n title?: string;\n}\n\nconst Header = ({ isCreating, status, title: documentTitle = 'Untitled' }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const isMobile = useIsMobile();\n const params = useParams<{ collectionType: string; slug: string }>();\n const [\n {\n query: { status: activeTab = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const title = isCreating\n ? formatMessage({\n id: 'content-manager.containers.edit.title.new',\n defaultMessage: 'Create an entry',\n })\n : documentTitle;\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingTop={{\n initial: 4,\n medium: 6,\n }}\n paddingBottom={4}\n gap={2}\n >\n {!isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <Flex\n width=\"100%\"\n justifyContent=\"space-between\"\n gap={{\n initial: 2,\n medium: '8rem',\n }}\n alignItems=\"flex-start\"\n direction={{\n initial: 'column-reverse',\n medium: 'row',\n }}\n >\n <Flex\n gap={2}\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n width=\"100%\"\n overflow=\"hidden\"\n >\n <Typography variant=\"alpha\" tag=\"h1\" overflow=\"hidden\">\n {title}\n </Typography>\n <Box display={{ initial: 'block', medium: 'none' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n <Flex width={{ initial: '100%', medium: 'auto' }} gap={3} justifyContent=\"space-between\">\n {isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <HeaderToolbar activeTab={activeTab} isCloning={isCloning} />\n </Flex>\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\ninterface HeaderActionDescription {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n dialog?: DialogOptions;\n options?: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n /**\n * @internal\n * @description\n * Internal SelectOption renderer used to display the status of AI translation background jobs\n */\n _render?: () => React.ReactNode;\n }>;\n /**\n * @internal\n * @description\n * Internal document header action to display the status of AI translation background jobs\n */\n _status?: {\n message: React.ReactNode;\n tooltip?: React.ReactNode;\n };\n onSelect?: (value: string) => void;\n value?: string;\n customizeContent?: (value: string) => React.ReactNode;\n}\n\ninterface HeaderDocumentActionsProps {\n activeTab: 'draft' | 'published';\n isCloning: boolean;\n}\n\nconst HeaderDocumentActions = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const { formatMessage } = useIntl();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n return (\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('header')}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n <Information activeTab={activeTab} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <Box display={{ initial: 'none', medium: 'block' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n );\n};\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta } = useDoc();\n\n if (!document || !document.id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Updated',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Created',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={2}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography tag=\"dd\" variant=\"pi\" textColor=\"neutral600\">\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n\n const handleClick =\n (action: HeaderActionDescription & { id: string }) => async (e: React.MouseEvent) => {\n if (!('options' in action)) {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <Flex gap={1}>\n {actions.map((action) => {\n if (action.options) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n aria-label={action.label}\n {...action}\n >\n {action.options.map(({ label, ...option }) => {\n if (option._render) {\n return option._render();\n }\n\n return (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n } else if (action._status) {\n return (\n <HeaderActionStatus tooltip={action._status?.tooltip} key={action.id}>\n {action._status.message}\n </HeaderActionStatus>\n );\n } else {\n return (\n <React.Fragment key={action.id}>\n <IconButton\n disabled={action.disabled}\n label={action.label}\n size=\"S\"\n onClick={handleClick(action)}\n >\n {action.icon}\n </IconButton>\n {action.dialog ? (\n <HeaderActionDialog\n {...action.dialog}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n </React.Fragment>\n );\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionStatusProps {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst HeaderActionStatus = ({ tooltip, children }: HeaderActionStatusProps) => {\n const [open, setOpen] = React.useState(false);\n // Debounce the open/close so the user can hover over the popover content before it closes\n const debouncedOpen = useDebounce(open, 100);\n\n const handleMouseEnter = () => {\n if (tooltip) {\n setOpen(true);\n }\n };\n const handleMouseLeave = () => {\n if (tooltip) {\n setOpen(false);\n }\n };\n\n return (\n <Popover.Root open={debouncedOpen} onOpenChange={setOpen}>\n <Popover.Anchor\n style={{ alignSelf: 'stretch' }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-describedby=\"document-header-action-status\"\n >\n <Box height=\"100%\">{children}</Box>\n </Popover.Anchor>\n <Popover.Content\n role=\"tooltip\"\n id=\"document-header-action-status\"\n side=\"bottom\"\n align=\"center\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {tooltip}\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionDialog\n * -----------------------------------------------------------------------------------------------*/\ninterface HeaderActionDialogProps {\n onClose: () => void;\n onCancel?: () => Promise<void>;\n title: string;\n content?: React.ReactNode | ((props: { onClose: () => void }) => React.ReactNode);\n isOpen: boolean;\n}\n\nconst HeaderActionDialog = ({\n onClose,\n onCancel,\n title,\n content: Content,\n isOpen,\n}: HeaderActionDialogProps) => {\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n {typeof Content === 'function' ? <Content onClose={handleClose} /> : Content}\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n }\n : null;\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\nConfigureTheViewAction.position = 'header';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n }\n : null;\n};\n\nEditTheModelAction.type = 'edit-the-model';\nEditTheModelAction.position = 'header';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n const isLocalized = document?.locale != null;\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage(\n {\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete entry{isLocalized, select, true { (all locales)} other {}}',\n },\n { isLocalized }\n ),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete 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.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\nDeleteAction.position = ['header', 'table-row'];\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n"],"names":["Header","isCreating","status","title","documentTitle","formatMessage","useIntl","isCloning","useMatch","CLONE_PATH","isMobile","useIsMobile","params","useParams","query","activeTab","useQueryParams","id","defaultMessage","_jsxs","Flex","direction","alignItems","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","paddingTop","initial","medium","paddingBottom","gap","_jsx","BackButton","fallback","collectionType","SINGLE_TYPES","undefined","COLLECTION_TYPES","slug","width","justifyContent","overflow","Typography","variant","tag","Box","display","HeaderDocumentActions","HeaderToolbar","marginTop","DocumentStatus","model","document","meta","useDoc","plugins","useStrapiApp","state","DescriptionComponentRenderer","props","documentId","descriptions","apis","getDocumentActions","actions","headerActions","filter","action","positions","Array","isArray","position","includes","DocumentActionsMenu","label","Information","getHeaderActions","length","HeaderActions","createAndUpdateDocument","availableStatus","find","publishedAt","publishDocument","creator","CREATED_BY_ATTRIBUTE_NAME","getDisplayName","updator","UPDATED_BY_ATTRIBUTE_NAME","information","isDisplayed","PUBLISHED_AT_ATTRIBUTE_NAME","value","time","RelativeTime","timestamp","Date","isAnonymous","PUBLISHED_BY_ATTRIBUTE_NAME","author","UPDATED_AT_ATTRIBUTE_NAME","CREATED_AT_ATTRIBUTE_NAME","info","borderWidth","borderStyle","borderColor","padding","marginLeft","marginRight","map","fontWeight","textColor","dialogId","setDialogId","React","useState","handleClick","e","onClick","dialog","muteDialog","preventDefault","handleClose","options","SingleSelect","size","onChange","onSelect","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","message","Fragment","IconButton","disabled","icon","HeaderActionDialog","isOpen","onClose","children","open","setOpen","debouncedOpen","useDebounce","handleMouseEnter","handleMouseLeave","Popover","Root","onOpenChange","Anchor","style","alignSelf","onMouseEnter","onMouseLeave","aria-describedby","height","Content","role","side","align","onCancel","content","Dialog","ConfigureTheViewAction","navigate","useNavigate","isDesktop","useIsDesktop","ListPlus","type","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","toggleNotification","useNotification","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Header.mjs","sources":["../../../../../admin/src/pages/EditView/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useForm,\n BackButton,\n useNotification,\n useStrapiApp,\n useQueryParams,\n useIsDesktop,\n useDebounce,\n RESPONSIVE_DEFAULT_SPACING,\n useIsMobile,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n SingleSelect,\n SingleSelectOption,\n Typography,\n IconButton,\n Dialog,\n Popover,\n} from '@strapi/design-system';\nimport { ListPlus, Pencil, Trash, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport {\n CREATED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n} from '../../../constants/attributes';\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { getDisplayName } from '../../../utils/users';\n\nimport { DocumentActionsMenu } from './DocumentActions';\nimport { DocumentStatus } from './DocumentStatus';\n\nimport type { ContentManagerPlugin, DocumentActionComponent } from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n isCreating?: boolean;\n status?: 'draft' | 'published' | 'modified';\n title?: string;\n}\n\nconst Header = ({ isCreating, status, title: documentTitle = 'Untitled' }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const isMobile = useIsMobile();\n const params = useParams<{ collectionType: string; slug: string }>();\n const [\n {\n query: { status: activeTab = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const title = isCreating\n ? formatMessage({\n id: 'content-manager.containers.edit.title.new',\n defaultMessage: 'Create an entry',\n })\n : documentTitle;\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingTop={{\n initial: 4,\n medium: 6,\n }}\n paddingBottom={4}\n gap={2}\n >\n {!isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <Flex\n width=\"100%\"\n justifyContent=\"space-between\"\n gap={{\n initial: 2,\n medium: '8rem',\n }}\n alignItems=\"flex-start\"\n direction={{\n initial: 'column-reverse',\n medium: 'row',\n }}\n >\n <Flex\n gap={2}\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n width=\"100%\"\n overflow=\"hidden\"\n >\n <Typography variant=\"alpha\" tag=\"h1\" overflow=\"hidden\">\n {title}\n </Typography>\n <Box display={{ initial: 'block', medium: 'none' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n <Flex width={{ initial: '100%', medium: 'auto' }} gap={3} justifyContent=\"space-between\">\n {isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <HeaderToolbar activeTab={activeTab} isCloning={isCloning} />\n </Flex>\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\ninterface HeaderActionDescription {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n dialog?: DialogOptions;\n options?: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n /**\n * @internal\n * @description\n * Internal SelectOption renderer used to display the status of AI translation background jobs\n */\n _render?: () => React.ReactNode;\n }>;\n /**\n * @internal\n * @description\n * Internal document header action to display the status of AI translation background jobs\n */\n _status?: {\n message: React.ReactNode;\n tooltip?: React.ReactNode;\n };\n onSelect?: (value: string) => void;\n value?: string;\n customizeContent?: (value: string) => React.ReactNode;\n}\n\ninterface HeaderDocumentActionsProps {\n activeTab: 'draft' | 'published';\n isCloning: boolean;\n}\n\nconst HeaderDocumentActions = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const { formatMessage } = useIntl();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n return (\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('header')}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n <Information activeTab={activeTab} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <Box display={{ initial: 'none', medium: 'block' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n );\n};\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta } = useDoc();\n\n if (!document || !document.id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Updated',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Created',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={2}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography\n tag=\"dd\"\n variant=\"pi\"\n textColor=\"neutral600\"\n style={{ wordBreak: 'break-word' }}\n >\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n\n const handleClick =\n (action: HeaderActionDescription & { id: string }) => async (e: React.MouseEvent) => {\n if (!('options' in action)) {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <Flex gap={1}>\n {actions.map((action) => {\n if (action.options) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n aria-label={action.label}\n {...action}\n >\n {action.options.map(({ label, ...option }) => {\n if (option._render) {\n return option._render();\n }\n\n return (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n } else if (action._status) {\n return (\n <HeaderActionStatus tooltip={action._status?.tooltip} key={action.id}>\n {action._status.message}\n </HeaderActionStatus>\n );\n } else {\n return (\n <React.Fragment key={action.id}>\n <IconButton\n disabled={action.disabled}\n label={action.label}\n size=\"S\"\n onClick={handleClick(action)}\n >\n {action.icon}\n </IconButton>\n {action.dialog ? (\n <HeaderActionDialog\n {...action.dialog}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n </React.Fragment>\n );\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionStatusProps {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst HeaderActionStatus = ({ tooltip, children }: HeaderActionStatusProps) => {\n const [open, setOpen] = React.useState(false);\n // Debounce the open/close so the user can hover over the popover content before it closes\n const debouncedOpen = useDebounce(open, 100);\n\n const handleMouseEnter = () => {\n if (tooltip) {\n setOpen(true);\n }\n };\n const handleMouseLeave = () => {\n if (tooltip) {\n setOpen(false);\n }\n };\n\n return (\n <Popover.Root open={debouncedOpen} onOpenChange={setOpen}>\n <Popover.Anchor\n style={{ alignSelf: 'stretch' }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-describedby=\"document-header-action-status\"\n >\n <Box height=\"100%\">{children}</Box>\n </Popover.Anchor>\n <Popover.Content\n role=\"tooltip\"\n id=\"document-header-action-status\"\n side=\"bottom\"\n align=\"center\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {tooltip}\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionDialog\n * -----------------------------------------------------------------------------------------------*/\ninterface HeaderActionDialogProps {\n onClose: () => void;\n onCancel?: () => Promise<void>;\n title: string;\n content?: React.ReactNode | ((props: { onClose: () => void }) => React.ReactNode);\n isOpen: boolean;\n}\n\nconst HeaderActionDialog = ({\n onClose,\n onCancel,\n title,\n content: Content,\n isOpen,\n}: HeaderActionDialogProps) => {\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n {typeof Content === 'function' ? <Content onClose={handleClose} /> : Content}\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n }\n : null;\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\nConfigureTheViewAction.position = 'header';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n }\n : null;\n};\n\nEditTheModelAction.type = 'edit-the-model';\nEditTheModelAction.position = 'header';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n const isLocalized = document?.locale != null;\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage(\n {\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete entry{isLocalized, select, true { (all locales)} other {}}',\n },\n { isLocalized }\n ),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete 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.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\nDeleteAction.position = ['header', 'table-row'];\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n"],"names":["Header","isCreating","status","title","documentTitle","formatMessage","useIntl","isCloning","useMatch","CLONE_PATH","isMobile","useIsMobile","params","useParams","query","activeTab","useQueryParams","id","defaultMessage","_jsxs","Flex","direction","alignItems","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","paddingTop","initial","medium","paddingBottom","gap","_jsx","BackButton","fallback","collectionType","SINGLE_TYPES","undefined","COLLECTION_TYPES","slug","width","justifyContent","overflow","Typography","variant","tag","Box","display","HeaderDocumentActions","HeaderToolbar","marginTop","DocumentStatus","model","document","meta","useDoc","plugins","useStrapiApp","state","DescriptionComponentRenderer","props","documentId","descriptions","apis","getDocumentActions","actions","headerActions","filter","action","positions","Array","isArray","position","includes","DocumentActionsMenu","label","Information","getHeaderActions","length","HeaderActions","createAndUpdateDocument","availableStatus","find","publishedAt","publishDocument","creator","CREATED_BY_ATTRIBUTE_NAME","getDisplayName","updator","UPDATED_BY_ATTRIBUTE_NAME","information","isDisplayed","PUBLISHED_AT_ATTRIBUTE_NAME","value","time","RelativeTime","timestamp","Date","isAnonymous","PUBLISHED_BY_ATTRIBUTE_NAME","author","UPDATED_AT_ATTRIBUTE_NAME","CREATED_AT_ATTRIBUTE_NAME","info","borderWidth","borderStyle","borderColor","padding","marginLeft","marginRight","map","fontWeight","textColor","style","wordBreak","dialogId","setDialogId","React","useState","handleClick","e","onClick","dialog","muteDialog","preventDefault","handleClose","options","SingleSelect","size","onChange","onSelect","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","message","Fragment","IconButton","disabled","icon","HeaderActionDialog","isOpen","onClose","children","open","setOpen","debouncedOpen","useDebounce","handleMouseEnter","handleMouseLeave","Popover","Root","onOpenChange","Anchor","alignSelf","onMouseEnter","onMouseLeave","aria-describedby","height","Content","role","side","align","onCancel","content","Dialog","ConfigureTheViewAction","navigate","useNavigate","isDesktop","useIsDesktop","ListPlus","type","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","toggleNotification","useNotification","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":"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"}
|
|
@@ -47,9 +47,13 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
47
47
|
* specifically to be used in the EditView of the content-manager this understands
|
|
48
48
|
* the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific
|
|
49
49
|
* components such as Blocks / Relations.
|
|
50
|
-
*/ const BaseInputRenderer = ({ visible, hint: providedHint, document, ...inputProps })=>{
|
|
50
|
+
*/ const BaseInputRenderer = ({ visible, hint: providedHint, document: providedDocument, ...inputProps })=>{
|
|
51
|
+
const { currentDocument, currentDocumentMeta } = useDocumentContext.useDocumentContext('DynamicComponent');
|
|
52
|
+
// Most edit-view fields can read the document from context, which avoids threading a
|
|
53
|
+
// frequently-changing `document` prop through nested component/DZ trees and reduces churn.
|
|
54
|
+
// Keep `providedDocument` as an explicit override for callers outside that default flow.
|
|
55
|
+
const document = providedDocument ?? currentDocument;
|
|
51
56
|
const localeKey = document?.document?.locale || 'default';
|
|
52
|
-
const { currentDocumentMeta } = useDocumentContext.useDocumentContext('DynamicComponent');
|
|
53
57
|
const { edit: { components } } = useDocumentLayout.useDocumentLayout(currentDocumentMeta.model);
|
|
54
58
|
const collectionType = document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';
|
|
55
59
|
const isInDynamicZone = Field.useDynamicZone('isInDynamicZone', (state)=>state.isInDynamicZone);
|
|
@@ -82,6 +86,11 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
82
86
|
props.attribute.customField
|
|
83
87
|
] : undefined);
|
|
84
88
|
const hint = useFieldHint(providedHint, props.attribute);
|
|
89
|
+
const renderComponentInput = React__namespace.useCallback((componentInputProps)=>/*#__PURE__*/ jsxRuntime.jsx(MemoizedInputRenderer, {
|
|
90
|
+
...componentInputProps
|
|
91
|
+
}, `input-${componentInputProps.name}-${localeKey}`), [
|
|
92
|
+
localeKey
|
|
93
|
+
]);
|
|
85
94
|
// We pass field in case of Custom Fields to keep backward compatibility
|
|
86
95
|
const field = strapiAdmin.useField(props.name);
|
|
87
96
|
if (!visible) {
|
|
@@ -143,18 +152,21 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
143
152
|
disabled: fieldIsDisabled
|
|
144
153
|
}, `input-${props.name}-${localeKey}`);
|
|
145
154
|
case 'component':
|
|
155
|
+
// Preview focus/blur handlers are not used for data-structure roots (component/dynamic zone).
|
|
156
|
+
// Dropping them avoids unstable function props cascading through memoized component trees.
|
|
157
|
+
const { onBlur: _onComponentBlur, onFocus: _onComponentFocus, ...componentProps } = props;
|
|
146
158
|
return /*#__PURE__*/ jsxRuntime.jsx(Input.ComponentInput, {
|
|
147
|
-
...
|
|
159
|
+
...componentProps,
|
|
148
160
|
hint: hint,
|
|
149
161
|
layout: components[props.attribute.component].layout,
|
|
150
162
|
disabled: fieldIsDisabled,
|
|
151
|
-
children:
|
|
152
|
-
...componentInputProps
|
|
153
|
-
}, `input-${componentInputProps.name}-${localeKey}`)
|
|
163
|
+
children: renderComponentInput
|
|
154
164
|
}, `input-${props.name}-${localeKey}`);
|
|
155
165
|
case 'dynamiczone':
|
|
166
|
+
// Same rationale as `component` above: keep data-structure root props stable.
|
|
167
|
+
const { onBlur: _onDzBlur, onFocus: _onDzFocus, ...dynamicZoneProps } = props;
|
|
156
168
|
return /*#__PURE__*/ jsxRuntime.jsx(Field.DynamicZone, {
|
|
157
|
-
...
|
|
169
|
+
...dynamicZoneProps,
|
|
158
170
|
hint: hint,
|
|
159
171
|
disabled: fieldIsDisabled
|
|
160
172
|
}, `input-${props.name}-${localeKey}`);
|