@strapi/content-manager 5.40.0 → 5.41.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.
Files changed (61) hide show
  1. package/dist/admin/pages/EditView/components/Header.js +56 -9
  2. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  3. package/dist/admin/pages/EditView/components/Header.mjs +60 -13
  4. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  5. package/dist/admin/pages/ListView/ListViewPage.js +47 -0
  6. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  7. package/dist/admin/pages/ListView/ListViewPage.mjs +50 -3
  8. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  9. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +4 -4
  10. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  11. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +4 -4
  12. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  13. package/dist/admin/translations/en.json.js +3 -0
  14. package/dist/admin/translations/en.json.js.map +1 -1
  15. package/dist/admin/translations/en.json.mjs +3 -0
  16. package/dist/admin/translations/en.json.mjs.map +1 -1
  17. package/dist/server/controllers/collection-types.js +25 -28
  18. package/dist/server/controllers/collection-types.js.map +1 -1
  19. package/dist/server/controllers/collection-types.mjs +20 -23
  20. package/dist/server/controllers/collection-types.mjs.map +1 -1
  21. package/dist/server/controllers/single-types.js +2 -1
  22. package/dist/server/controllers/single-types.js.map +1 -1
  23. package/dist/server/controllers/single-types.mjs +2 -1
  24. package/dist/server/controllers/single-types.mjs.map +1 -1
  25. package/dist/server/services/document-manager.js +10 -9
  26. package/dist/server/services/document-manager.js.map +1 -1
  27. package/dist/server/services/document-manager.mjs +10 -9
  28. package/dist/server/services/document-manager.mjs.map +1 -1
  29. package/dist/server/services/document-metadata.js +84 -41
  30. package/dist/server/services/document-metadata.js.map +1 -1
  31. package/dist/server/services/document-metadata.mjs +85 -42
  32. package/dist/server/services/document-metadata.mjs.map +1 -1
  33. package/dist/server/services/populate-builder.js +11 -0
  34. package/dist/server/services/populate-builder.js.map +1 -1
  35. package/dist/server/services/populate-builder.mjs +12 -1
  36. package/dist/server/services/populate-builder.mjs.map +1 -1
  37. package/dist/server/services/utils/configuration/attributes.js +2 -1
  38. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  39. package/dist/server/services/utils/configuration/attributes.mjs +2 -1
  40. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  41. package/dist/server/services/utils/populate.js +57 -7
  42. package/dist/server/services/utils/populate.js.map +1 -1
  43. package/dist/server/services/utils/populate.mjs +57 -8
  44. package/dist/server/services/utils/populate.mjs.map +1 -1
  45. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  46. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  47. package/dist/server/src/controllers/utils/metadata.d.ts +2 -2
  48. package/dist/server/src/index.d.ts +18 -3
  49. package/dist/server/src/index.d.ts.map +1 -1
  50. package/dist/server/src/services/document-manager.d.ts +9 -3
  51. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  52. package/dist/server/src/services/document-metadata.d.ts +8 -0
  53. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  54. package/dist/server/src/services/index.d.ts +18 -3
  55. package/dist/server/src/services/index.d.ts.map +1 -1
  56. package/dist/server/src/services/populate-builder.d.ts +7 -0
  57. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  58. package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
  59. package/dist/server/src/services/utils/populate.d.ts +21 -17
  60. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  61. package/package.json +5 -5
@@ -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\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
+ {"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 useClipboard,\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 Menu,\n SingleSelect,\n SingleSelectOption,\n Typography,\n IconButton,\n Dialog,\n Popover,\n} from '@strapi/design-system';\nimport { Duplicate, 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 const documentId = document?.documentId ?? id;\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 {collectionType !== SINGLE_TYPES && <CopyDocumentIdMenuItem documentId={documentId} />}\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\n/* -------------------------------------------------------------------------------------------------\n * CopyDocumentIdMenuItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CopyDocumentIdMenuItemProps {\n documentId: string | undefined;\n}\n\nconst CopyDocumentIdMenuItem = ({ documentId }: CopyDocumentIdMenuItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n if (!documentId) {\n return null;\n }\n\n const handleCopy = async () => {\n const didCopy = await copy(documentId);\n if (didCopy) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.actions.copy-documentId.success',\n defaultMessage: 'Document ID copied to clipboard',\n }),\n });\n }\n };\n\n return (\n <>\n <Menu.Separator />\n <Menu.Item onSelect={handleCopy} startIcon={<Duplicate />}>\n {formatMessage({\n id: 'content-manager.actions.copy-documentId.label',\n defaultMessage: 'Copy document ID',\n })}\n </Menu.Item>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Information\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta, id, collectionType } = useDoc();\n\n if (!document?.id && !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 {\n isDisplayed: collectionType !== SINGLE_TYPES && !!(document?.documentId ?? id),\n label: formatMessage({\n id: 'content-manager.containers.edit.information.documentId.label',\n defaultMessage: 'Document ID',\n }),\n value: document?.documentId ?? id ?? '',\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={1}\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","CopyDocumentIdMenuItem","Information","getHeaderActions","length","HeaderActions","toggleNotification","useNotification","copy","useClipboard","handleCopy","didCopy","type","message","_Fragment","Menu","Separator","Item","onSelect","startIcon","Duplicate","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","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","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","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":";;;;;;;;;;;;;;;;;;AA6DA,MAAMA,MAAAA,GAAS,CAAC,EAAEC,UAAU,EAAEC,MAAM,EAAEC,KAAAA,EAAOC,aAAAA,GAAgB,UAAU,EAAe,GAAA;IACpF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAMC,SAAAA,GAAYC,SAASC,UAAAA,CAAAA,KAAgB,IAAA;AAC3C,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;AACjB,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;IACf,MAAM,CACJ,EACEC,KAAAA,EAAO,EAAEZ,MAAAA,EAAQa,YAAY,OAAO,EAAE,EACvC,CACF,GAAGC,cAAAA,EAAAA;IAEJ,MAAMb,KAAAA,GAAQF,aACVI,aAAAA,CAAc;QACZY,EAAAA,EAAI,2CAAA;QACJC,cAAAA,EAAgB;KAClB,CAAA,GACAd,aAAAA;AAEJ,IAAA,qBACEe,IAAA,CAACC,IAAAA,EAAAA;QACCC,SAAAA,EAAU,QAAA;QACVC,UAAAA,EAAW,YAAA;QACXC,WAAAA,EAAaC,0BAAAA;QACbC,YAAAA,EAAcD,0BAAAA;QACdE,UAAAA,EAAY;YACVC,OAAAA,EAAS,CAAA;YACTC,MAAAA,EAAQ;AACV,SAAA;QACAC,aAAAA,EAAe,CAAA;QACfC,GAAAA,EAAK,CAAA;;AAEJ,YAAA,CAACpB,0BACAqB,GAAA,CAACC,UAAAA,EAAAA;AACCC,gBAAAA,QAAAA,EACErB,MAAAA,CAAOsB,cAAc,KAAKC,YAAAA,GACtBC,SAAAA,GACA,CAAC,GAAG,EAAEC,gBAAAA,CAAiB,CAAC,EAAEzB,MAAAA,CAAO0B,IAAI,CAAA;;0BAI/CnB,IAAA,CAACC,IAAAA,EAAAA;gBACCmB,KAAAA,EAAM,MAAA;gBACNC,cAAAA,EAAe,eAAA;gBACfV,GAAAA,EAAK;oBACHH,OAAAA,EAAS,CAAA;oBACTC,MAAAA,EAAQ;AACV,iBAAA;gBACAN,UAAAA,EAAW,YAAA;gBACXD,SAAAA,EAAW;oBACTM,OAAAA,EAAS,gBAAA;oBACTC,MAAAA,EAAQ;AACV,iBAAA;;kCAEAT,IAAA,CAACC,IAAAA,EAAAA;wBACCU,GAAAA,EAAK,CAAA;wBACLU,cAAAA,EAAe,eAAA;wBACflB,UAAAA,EAAW,YAAA;wBACXiB,KAAAA,EAAM,MAAA;wBACNE,QAAAA,EAAS,QAAA;;0CAETV,GAAA,CAACW,UAAAA,EAAAA;gCAAWC,OAAAA,EAAQ,OAAA;gCAAQC,GAAAA,EAAI,IAAA;gCAAKH,QAAAA,EAAS,QAAA;AAC3CtC,gCAAAA,QAAAA,EAAAA;;0CAEH4B,GAAA,CAACc,GAAAA,EAAAA;gCAAIC,OAAAA,EAAS;oCAAEnB,OAAAA,EAAS,OAAA;oCAASC,MAAAA,EAAQ;AAAO,iCAAA;AAC/C,gCAAA,QAAA,gBAAAG,GAAA,CAACgB,qBAAAA,EAAAA;oCAAsBhC,SAAAA,EAAWA,SAAAA;oCAAWR,SAAAA,EAAWA;;;;;kCAG5DY,IAAA,CAACC,IAAAA,EAAAA;wBAAKmB,KAAAA,EAAO;4BAAEZ,OAAAA,EAAS,MAAA;4BAAQC,MAAAA,EAAQ;AAAO,yBAAA;wBAAGE,GAAAA,EAAK,CAAA;wBAAGU,cAAAA,EAAe,eAAA;;AACtE9B,4BAAAA,QAAAA,kBACCqB,GAAA,CAACC,UAAAA,EAAAA;AACCC,gCAAAA,QAAAA,EACErB,MAAAA,CAAOsB,cAAc,KAAKC,YAAAA,GACtBC,SAAAA,GACA,CAAC,GAAG,EAAEC,gBAAAA,CAAiB,CAAC,EAAEzB,MAAAA,CAAO0B,IAAI,CAAA;;0CAI/CP,GAAA,CAACiB,aAAAA,EAAAA;gCAAcjC,SAAAA,EAAWA,SAAAA;gCAAWR,SAAAA,EAAWA;;;;;;AAGnDL,YAAAA,MAAAA,iBACC6B,GAAA,CAACc,GAAAA,EAAAA;gBAAII,SAAAA,EAAW,CAAA;AACd,gBAAA,QAAA,gBAAAlB,GAAA,CAACmB,cAAAA,EAAAA;AAAehD,oBAAAA,MAAAA,EAAQK,YAAY,OAAA,GAAUL;;AAE9C,aAAA,CAAA,GAAA;;;AAGV;AAoDA,MAAM6C,wBAAwB,CAAC,EAAEhC,SAAS,EAAER,SAAS,EAA8B,GAAA;IACjF,MAAM,EAAE4C,KAAK,EAAElC,EAAE,EAAEmC,QAAQ,EAAEC,IAAI,EAAEnB,cAAc,EAAE,GAAGoB,MAAAA,EAAAA;IACtD,MAAM,EAAEjD,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMiD,UAAUC,YAAAA,CAAa,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMF,OAAO,CAAA;AACtE,IAAA,qBACExB,GAAA,CAAC2B,4BAAAA,EAAAA;QACCC,KAAAA,EAAO;AACL5C,YAAAA,SAAAA;AACAoC,YAAAA,KAAAA;YACAS,UAAAA,EAAY3C,EAAAA;AACZmC,YAAAA,QAAAA,EAAU7C,YAAY6B,SAAAA,GAAYgB,QAAAA;AAClCC,YAAAA,IAAAA,EAAM9C,YAAY6B,SAAAA,GAAYiB,IAAAA;AAC9BnB,YAAAA;AACF,SAAA;QACA2B,YAAAA,EACEN,OAAO,CAAC,iBAAA,CAAkB,CAACO,IAAI,CAC/BC,kBAAkB,CAAC,QAAA,CAAA;kBAEpB,CAACC,OAAAA,GAAAA;AACA,YAAA,MAAMC,aAAAA,GAAgBD,OAAAA,CAAQE,MAAM,CAAC,CAACC,MAAAA,GAAAA;gBACpC,MAAMC,SAAAA,GAAYC,MAAMC,OAAO,CAACH,OAAOI,QAAQ,CAAA,GAAIJ,MAAAA,CAAOI,QAAQ,GAAG;AAACJ,oBAAAA,MAAAA,CAAOI;AAAS,iBAAA;gBACtF,OAAOH,SAAAA,CAAUI,QAAQ,CAAC,QAAA,CAAA;AAC5B,YAAA,CAAA,CAAA;YAEA,MAAMZ,UAAAA,GAAaR,UAAUQ,UAAAA,IAAc3C,EAAAA;AAE3C,YAAA,qBACEE,IAAA,CAACsD,mBAAAA,EAAAA;gBACCT,OAAAA,EAASC,aAAAA;AACTS,gBAAAA,KAAAA,EAAOrE,aAAAA,CAAc;oBACnBY,EAAAA,EAAI,qDAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;;AAECgB,oBAAAA,cAAAA,KAAmBC,8BAAgBJ,GAAA,CAAC4C,sBAAAA,EAAAA;wBAAuBf,UAAAA,EAAYA;;kCACxE7B,GAAA,CAAC6C,WAAAA,EAAAA;wBAAY7D,SAAAA,EAAWA;;;;AAG9B,QAAA;;AAGN,CAAA;AAEA;;;AAGC,IACD,MAAMiC,aAAAA,GAAgB,CAAC,EAAEjC,SAAS,EAAER,SAAS,EAA8B,GAAA;IACzE,MAAM,EAAE4C,KAAK,EAAElC,EAAE,EAAEmC,QAAQ,EAAEC,IAAI,EAAEnB,cAAc,EAAE,GAAGoB,MAAAA,EAAAA;AACtD,IAAA,MAAMC,UAAUC,YAAAA,CAAa,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMF,OAAO,CAAA;AAEtE,IAAA,qBACEpC,IAAA,CAACC,IAAAA,EAAAA;QAAKU,GAAAA,EAAK,CAAA;;0BACTC,GAAA,CAAC2B,4BAAAA,EAAAA;gBACCC,KAAAA,EAAO;AACL5C,oBAAAA,SAAAA;AACAoC,oBAAAA,KAAAA;oBACAS,UAAAA,EAAY3C,EAAAA;AACZmC,oBAAAA,QAAAA,EAAU7C,YAAY6B,SAAAA,GAAYgB,QAAAA;AAClCC,oBAAAA,IAAAA,EAAM9C,YAAY6B,SAAAA,GAAYiB,IAAAA;AAC9BnB,oBAAAA;AACF,iBAAA;AACA2B,gBAAAA,YAAAA,EAAc,OACL,CAAC,kBAAkB,CAACC,IAAI,CAC/Be,gBAAgB,EAAA;0BAEjB,CAACb,OAAAA,GAAAA;oBACA,IAAIA,OAAAA,CAAQc,MAAM,GAAG,CAAA,EAAG;AACtB,wBAAA,qBAAO/C,GAAA,CAACgD,aAAAA,EAAAA;4BAAcf,OAAAA,EAASA;;oBACjC,CAAA,MAAO;wBACL,OAAO,IAAA;AACT,oBAAA;AACF,gBAAA;;0BAEFjC,GAAA,CAACc,GAAAA,EAAAA;gBAAIC,OAAAA,EAAS;oBAAEnB,OAAAA,EAAS,MAAA;oBAAQC,MAAAA,EAAQ;AAAQ,iBAAA;AAC/C,gBAAA,QAAA,gBAAAG,GAAA,CAACgB,qBAAAA,EAAAA;oBAAsBhC,SAAAA,EAAWA,SAAAA;oBAAWR,SAAAA,EAAWA;;;;;AAIhE,CAAA;AAUA,MAAMoE,sBAAAA,GAAyB,CAAC,EAAEf,UAAU,EAA+B,GAAA;IACzE,MAAM,EAAEvD,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAE0E,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,IAAI,EAAE,GAAGC,YAAAA,EAAAA;AAEjB,IAAA,IAAI,CAACvB,UAAAA,EAAY;QACf,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMwB,UAAAA,GAAa,UAAA;QACjB,MAAMC,OAAAA,GAAU,MAAMH,IAAAA,CAAKtB,UAAAA,CAAAA;AAC3B,QAAA,IAAIyB,OAAAA,EAAS;YACXL,kBAAAA,CAAmB;gBACjBM,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASlF,aAAAA,CAAc;oBACrBY,EAAAA,EAAI,iDAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,qBACEC,IAAA,CAAAqE,QAAA,EAAA;;AACE,0BAAAzD,GAAA,CAAC0D,KAAKC,SAAS,EAAA,EAAA,CAAA;AACf,0BAAA3D,GAAA,CAAC0D,KAAKE,IAAI,EAAA;gBAACC,QAAAA,EAAUR,UAAAA;AAAYS,gBAAAA,SAAAA,gBAAW9D,GAAA,CAAC+D,SAAAA,EAAAA,EAAAA,CAAAA;0BAC1CzF,aAAAA,CAAc;oBACbY,EAAAA,EAAI,+CAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;AAUA,MAAM0D,WAAAA,GAAc,CAAC,EAAE7D,SAAS,EAAoB,GAAA;IAClD,MAAM,EAAEV,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAE8C,QAAQ,EAAEC,IAAI,EAAEpC,EAAE,EAAEiB,cAAc,EAAE,GAAGoB,MAAAA,EAAAA;AAE/C,IAAA,IAAI,CAACF,QAAAA,EAAUnC,EAAAA,IAAM,CAACA,EAAAA,EAAI;QACxB,OAAO,IAAA;AACT,IAAA;AAEA;;;;;;;;;AASC,MAED,MAAM8E,uBAAAA,GACJhF,SAAAA,KAAc,OAAA,GACVqC,QAAAA,GACAC,IAAAA,EAAM2C,eAAAA,EAAiBC,IAAAA,CAAK,CAAC/F,MAAAA,GAAWA,MAAAA,CAAOgG,WAAW,KAAK,IAAA,CAAA;IAErE,MAAMC,eAAAA,GACJpF,SAAAA,KAAc,WAAA,GACVqC,QAAAA,GACAC,IAAAA,EAAM2C,eAAAA,EAAiBC,IAAAA,CAAK,CAAC/F,MAAAA,GAAWA,MAAAA,CAAOgG,WAAW,KAAK,IAAA,CAAA;IAErE,MAAME,OAAAA,GAAUL,0BAA0BM,yBAAAA,CAA0B,GAChEC,cAAAA,CAAeP,uBAAuB,CAACM,yBAAAA,CAA0B,CAAA,GACjE,IAAA;IAEJ,MAAME,OAAAA,GAAUR,0BAA0BS,yBAAAA,CAA0B,GAChEF,cAAAA,CAAeP,uBAAuB,CAACS,yBAAAA,CAA0B,CAAA,GACjE,IAAA;AAEJ,IAAA,MAAMC,WAAAA,GAAuF;AAC3F,QAAA;AACEC,YAAAA,WAAAA,EAAa,CAAC,CAACP,eAAAA,GAAkBQ,2BAAAA,CAA4B;AAC7DjC,YAAAA,KAAAA,EAAOrE,aAAAA,CAAc;gBACnBY,EAAAA,EAAI,kEAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACA0F,YAAAA,KAAAA,EAAOvG,aAAAA,CACL;gBACEY,EAAAA,EAAI,kEAAA;gBACJC,cAAAA,EAAgB,CAAC,yDAAyD;aAC5E,EACA;AACE2F,gBAAAA,IAAAA,gBACE9E,GAAA,CAAC+E,YAAAA,EAAAA;AAAaC,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA,CAAKb,eAAAA,GAAkBQ,2BAAAA,CAA4B;;gBAElFM,WAAAA,EAAa,CAACd,eAAAA,GAAkBe,2BAAAA,CAA4B;gBAC5DC,MAAAA,EAAQhB,eAAAA,GAAkBe,2BAAAA,CAA4B,GAClDZ,eAAeH,eAAAA,GAAkBe,4BAA4B,CAAA,GAC7D;AACN,aAAA;AAEJ,SAAA;AACA,QAAA;AACER,YAAAA,WAAAA,EAAa,CAAC,CAACX,uBAAAA,GAA0BqB,yBAAAA,CAA0B;AACnE1C,YAAAA,KAAAA,EAAOrE,aAAAA,CAAc;gBACnBY,EAAAA,EAAI,8DAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACA0F,YAAAA,KAAAA,EAAOvG,aAAAA,CACL;gBACEY,EAAAA,EAAI,8DAAA;gBACJC,cAAAA,EAAgB,CAAC,yDAAyD;aAC5E,EACA;AACE2F,gBAAAA,IAAAA,gBACE9E,GAAA,CAAC+E,YAAAA,EAAAA;AACCC,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA,CAAKjB,uBAAAA,GAA0BqB,yBAAAA,CAA0B;;AAG5EH,gBAAAA,WAAAA,EAAa,CAACV,OAAAA;gBACdY,MAAAA,EAAQZ;AACV,aAAA;AAEJ,SAAA;AACA,QAAA;AACEG,YAAAA,WAAAA,EAAa,CAAC,CAACX,uBAAAA,GAA0BsB,yBAAAA,CAA0B;AACnE3C,YAAAA,KAAAA,EAAOrE,aAAAA,CAAc;gBACnBY,EAAAA,EAAI,4DAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACA0F,YAAAA,KAAAA,EAAOvG,aAAAA,CACL;gBACEY,EAAAA,EAAI,4DAAA;gBACJC,cAAAA,EAAgB,CAAC,yDAAyD;aAC5E,EACA;AACE2F,gBAAAA,IAAAA,gBACE9E,GAAA,CAAC+E,YAAAA,EAAAA;AACCC,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA,CAAKjB,uBAAAA,GAA0BsB,yBAAAA,CAA0B;;AAG5EJ,gBAAAA,WAAAA,EAAa,CAACb,OAAAA;gBACde,MAAAA,EAAQf;AACV,aAAA;AAEJ,SAAA;AACA,QAAA;AACEM,YAAAA,WAAAA,EAAaxE,mBAAmBC,YAAAA,IAAgB,CAAC,EAAEiB,QAAAA,EAAUQ,cAAc3C,EAAC,CAAA;AAC5EyD,YAAAA,KAAAA,EAAOrE,aAAAA,CAAc;gBACnBY,EAAAA,EAAI,8DAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACA0F,KAAAA,EAAOxD,QAAAA,EAAUQ,cAAc3C,EAAAA,IAAM;AACvC;AACD,KAAA,CAACiD,MAAM,CAAC,CAACoD,IAAAA,GAASA,KAAKZ,WAAW,CAAA;AAEnC,IAAA,qBACE3E,GAAA,CAACX,IAAAA,EAAAA;QACCmG,WAAAA,EAAY,WAAA;QACZC,WAAAA,EAAY,OAAA;QACZC,WAAAA,EAAY,YAAA;QACZpG,SAAAA,EAAU,QAAA;QACV4B,SAAAA,EAAW,CAAA;QACXL,GAAAA,EAAI,IAAA;QACJ8E,OAAAA,EAAS,CAAA;QACT5F,GAAAA,EAAK,CAAA;QACLR,UAAAA,EAAW,YAAA;AACX;;;AAGC,UACDqG,UAAAA,EAAW,SAAA;QACXC,WAAAA,EAAY,SAAA;QACZrF,KAAAA,EAAM,kBAAA;AAELkE,QAAAA,QAAAA,EAAAA,WAAAA,CAAYoB,GAAG,CAAC,CAACP,IAAAA,iBAChBnG,IAAA,CAACC,IAAAA,EAAAA;gBAAKU,GAAAA,EAAK,CAAA;gBAAGT,SAAAA,EAAU,QAAA;gBAASC,UAAAA,EAAW,YAAA;;kCAC1CS,GAAA,CAACW,UAAAA,EAAAA;wBAAWE,GAAAA,EAAI,IAAA;wBAAKD,OAAAA,EAAQ,IAAA;wBAAKmF,UAAAA,EAAW,MAAA;AAC1CR,wBAAAA,QAAAA,EAAAA,IAAAA,CAAK5C;;kCAER3C,GAAA,CAACW,UAAAA,EAAAA;wBACCE,GAAAA,EAAI,IAAA;wBACJD,OAAAA,EAAQ,IAAA;wBACRoF,SAAAA,EAAU,YAAA;wBACVC,KAAAA,EAAO;4BAAEC,SAAAA,EAAW;AAAa,yBAAA;AAEhCX,wBAAAA,QAAAA,EAAAA,IAAAA,CAAKV;;;AAVoDU,aAAAA,EAAAA,IAAAA,CAAK5C,KAAK,CAAA;;AAgBhF,CAAA;AAUA,MAAMK,aAAAA,GAAgB,CAAC,EAAEf,OAAO,EAAsB,GAAA;AACpD,IAAA,MAAM,CAACkE,QAAAA,EAAUC,WAAAA,CAAY,GAAGC,KAAAA,CAAMC,QAAQ,CAAgB,IAAA,CAAA;IAE9D,MAAMC,WAAAA,GACJ,CAACnE,MAAAA,GAAqD,OAAOoE,CAAAA,GAAAA;AAC3D,YAAA,IAAI,EAAE,SAAA,IAAapE,MAAK,CAAA,EAAI;gBAC1B,MAAM,EAAEqE,UAAU,IAAM,KAAK,EAAEC,MAAM,EAAExH,EAAE,EAAE,GAAGkD,MAAAA;gBAE9C,MAAMuE,UAAAA,GAAa,MAAMF,OAAAA,CAAQD,CAAAA,CAAAA;gBAEjC,IAAIE,MAAAA,IAAU,CAACC,UAAAA,EAAY;AACzBH,oBAAAA,CAAAA,CAAEI,cAAc,EAAA;oBAChBR,WAAAA,CAAYlH,EAAAA,CAAAA;AACd,gBAAA;AACF,YAAA;AACF,QAAA,CAAA;AAEF,IAAA,MAAM2H,WAAAA,GAAc,IAAA;QAClBT,WAAAA,CAAY,IAAA,CAAA;AACd,IAAA,CAAA;AAEA,IAAA,qBACEpG,GAAA,CAACX,IAAAA,EAAAA;QAAKU,GAAAA,EAAK,CAAA;kBACRkC,OAAAA,CAAQ6D,GAAG,CAAC,CAAC1D,MAAAA,GAAAA;YACZ,IAAIA,MAAAA,CAAO0E,OAAO,EAAE;AAClB,gBAAA,qBACE9G,GAAA,CAAC+G,YAAAA,EAAAA;oBAECC,IAAAA,EAAK,GAAA;;AAELC,oBAAAA,QAAAA,EAAU7E,OAAOyB,QAAQ;AACzBqD,oBAAAA,YAAAA,EAAY9E,OAAOO,KAAK;AACvB,oBAAA,GAAGP,MAAM;8BAETA,MAAAA,CAAO0E,OAAO,CAAChB,GAAG,CAAC,CAAC,EAAEnD,KAAK,EAAE,GAAGwE,MAAAA,EAAQ,GAAA;wBACvC,IAAIA,MAAAA,CAAOC,OAAO,EAAE;AAClB,4BAAA,OAAOD,OAAOC,OAAO,EAAA;AACvB,wBAAA;AAEA,wBAAA,qBACEpH,GAAA,CAACqH,kBAAAA,EAAAA;AAAuC,4BAAA,GAAGF,MAAM;AAC9CxE,4BAAAA,QAAAA,EAAAA;AADsBwE,yBAAAA,EAAAA,MAAAA,CAAOtC,KAAK,CAAA;AAIzC,oBAAA,CAAA;AAjBKzC,iBAAAA,EAAAA,MAAAA,CAAOlD,EAAE,CAAA;YAoBpB,CAAA,MAAO,IAAIkD,MAAAA,CAAOkF,OAAO,EAAE;AACzB,gBAAA,qBACEtH,GAAA,CAACuH,kBAAAA,EAAAA;oBAAmBC,OAAAA,EAASpF,MAAAA,CAAOkF,OAAO,EAAEE,OAAAA;8BAC1CpF,MAAAA,CAAOkF,OAAO,CAAC9D;AADyCpB,iBAAAA,EAAAA,MAAAA,CAAOlD,EAAE,CAAA;YAIxE,CAAA,MAAO;gBACL,qBACEE,IAAA,CAACiH,MAAMoB,QAAQ,EAAA;;sCACbzH,GAAA,CAAC0H,UAAAA,EAAAA;AACCC,4BAAAA,QAAAA,EAAUvF,OAAOuF,QAAQ;AACzBhF,4BAAAA,KAAAA,EAAOP,OAAOO,KAAK;4BACnBqE,IAAAA,EAAK,GAAA;AACLP,4BAAAA,OAAAA,EAASF,WAAAA,CAAYnE,MAAAA,CAAAA;AAEpBA,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOwF;;wBAETxF,MAAAA,CAAOsE,MAAM,iBACZ1G,GAAA,CAAC6H,kBAAAA,EAAAA;AACE,4BAAA,GAAGzF,OAAOsE,MAAM;4BACjBoB,MAAAA,EAAQ3B,QAAAA,KAAa/D,OAAOlD,EAAE;4BAC9B6I,OAAAA,EAASlB;AAET,yBAAA,CAAA,GAAA;;AAfezE,iBAAAA,EAAAA,MAAAA,CAAOlD,EAAE,CAAA;AAkBlC,YAAA;AACF,QAAA,CAAA;;AAGN,CAAA;AAWA,MAAMqI,qBAAqB,CAAC,EAAEC,OAAO,EAAEQ,QAAQ,EAA2B,GAAA;AACxE,IAAA,MAAM,CAACC,IAAAA,EAAMC,OAAAA,CAAQ,GAAG7B,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;;IAEvC,MAAM6B,aAAAA,GAAgBC,YAAYH,IAAAA,EAAM,GAAA,CAAA;AAExC,IAAA,MAAMI,gBAAAA,GAAmB,IAAA;AACvB,QAAA,IAAIb,OAAAA,EAAS;YACXU,OAAAA,CAAQ,IAAA,CAAA;AACV,QAAA;AACF,IAAA,CAAA;AACA,IAAA,MAAMI,gBAAAA,GAAmB,IAAA;AACvB,QAAA,IAAId,OAAAA,EAAS;YACXU,OAAAA,CAAQ,KAAA,CAAA;AACV,QAAA;AACF,IAAA,CAAA;IAEA,qBACE9I,IAAA,CAACmJ,QAAQC,IAAI,EAAA;QAACP,IAAAA,EAAME,aAAAA;QAAeM,YAAAA,EAAcP,OAAAA;;AAC/C,0BAAAlI,GAAA,CAACuI,QAAQG,MAAM,EAAA;gBACbzC,KAAAA,EAAO;oBAAE0C,SAAAA,EAAW;AAAU,iBAAA;gBAC9BC,YAAAA,EAAcP,gBAAAA;gBACdQ,YAAAA,EAAcP,gBAAAA;gBACdQ,kBAAAA,EAAiB,+BAAA;AAEjB,gBAAA,QAAA,gBAAA9I,GAAA,CAACc,GAAAA,EAAAA;oBAAIiI,MAAAA,EAAO,MAAA;AAAQf,oBAAAA,QAAAA,EAAAA;;;AAEtB,0BAAAhI,GAAA,CAACuI,QAAQS,OAAO,EAAA;gBACdC,IAAAA,EAAK,SAAA;gBACL/J,EAAAA,EAAG,+BAAA;gBACHgK,IAAAA,EAAK,QAAA;gBACLC,KAAAA,EAAM,QAAA;gBACNP,YAAAA,EAAcP,gBAAAA;gBACdQ,YAAAA,EAAcP,gBAAAA;AAEbd,gBAAAA,QAAAA,EAAAA;;;;AAIT,CAAA;AAaA,MAAMK,kBAAAA,GAAqB,CAAC,EAC1BE,OAAO,EACPqB,QAAQ,EACRhL,KAAK,EACLiL,OAAAA,EAASL,OAAO,EAChBlB,MAAM,EACkB,GAAA;AACxB,IAAA,MAAMjB,WAAAA,GAAc,UAAA;AAClB,QAAA,IAAIuC,QAAAA,EAAU;YACZ,MAAMA,QAAAA,EAAAA;AACR,QAAA;AAEArB,QAAAA,OAAAA,EAAAA;AACF,IAAA,CAAA;IAEA,qBACE/H,GAAA,CAACsJ,OAAOd,IAAI,EAAA;QAACP,IAAAA,EAAMH,MAAAA;QAAQW,YAAAA,EAAc5B,WAAAA;gCACvCzH,IAAA,CAACkK,OAAON,OAAO,EAAA;;AACb,8BAAAhJ,GAAA,CAACsJ,OAAOrL,MAAM,EAAA;AAAEG,oBAAAA,QAAAA,EAAAA;;gBACf,OAAO4K,OAAAA,KAAY,2BAAahJ,GAAA,CAACgJ,OAAAA,EAAAA;oBAAQjB,OAAAA,EAASlB;AAAkBmC,iBAAAA,CAAAA,GAAAA;;;;AAI7E,CAAA;AAEA;;AAEkG,qGAElG,MAAMO,sBAAAA,GAAkD,CAAC,EAAEpJ,cAAc,EAAEiB,KAAK,EAAE,GAAA;AAChF,IAAA,MAAMoI,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAM,EAAEnL,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMmL,SAAAA,GAAYC,YAAAA,EAAAA;AAElB,IAAA,OAAOD,SAAAA,GACH;AACE/G,QAAAA,KAAAA,EAAOrE,aAAAA,CAAc;YACnBY,EAAAA,EAAI,0BAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA,CAAA;AACAyI,QAAAA,IAAAA,gBAAM5H,GAAA,CAAC4J,QAAAA,EAAAA,EAAAA,CAAAA;QACPnD,OAAAA,EAAS,IAAA;YACP+C,QAAAA,CAAS,CAAC,GAAG,EAAErJ,cAAAA,CAAe,CAAC,EAAEiB,KAAAA,CAAM,oBAAoB,CAAC,CAAA;AAC9D,QAAA,CAAA;QACAoB,QAAAA,EAAU;KACZ,GACA,IAAA;AACN,CAAA;AAEA+G,sBAAAA,CAAuBhG,IAAI,GAAG,oBAAA;AAC9BgG,sBAAAA,CAAuB/G,QAAQ,GAAG,QAAA;AAElC,MAAMqH,kBAAAA,GAA8C,CAAC,EAAEzI,KAAK,EAAE,GAAA;AAC5D,IAAA,MAAMoI,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAM,EAAEnL,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMmL,SAAAA,GAAYC,YAAAA,EAAAA;AAElB,IAAA,OAAOD,SAAAA,GACH;AACE/G,QAAAA,KAAAA,EAAOrE,aAAAA,CAAc;YACnBY,EAAAA,EAAI,6BAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA,CAAA;AACAyI,QAAAA,IAAAA,gBAAM5H,GAAA,CAAC8J,MAAAA,EAAAA,EAAAA,CAAAA;QACPrD,OAAAA,EAAS,IAAA;YACP+C,QAAAA,CAAS,CAAC,4CAA4C,EAAEpI,KAAAA,CAAAA,CAAO,CAAA;AACjE,QAAA,CAAA;QACAoB,QAAAA,EAAU;KACZ,GACA,IAAA;AACN,CAAA;AAEAqH,kBAAAA,CAAmBtG,IAAI,GAAG,gBAAA;AAC1BsG,kBAAAA,CAAmBrH,QAAQ,GAAG,QAAA;AAE9B,MAAMuH,YAAAA,GAAwC,CAAC,EAAElI,UAAU,EAAET,KAAK,EAAEjB,cAAc,EAAEkB,QAAQ,EAAE,GAAA;AAC5F,IAAA,MAAMmI,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAM,EAAEnL,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMyL,oBAAoBvL,QAAAA,CAASwL,SAAAA,CAAAA;AACnC,IAAA,MAAMC,YAAYC,eAAAA,CAAgB,cAAA,EAAgB,CAACzI,KAAAA,GAAUA,MAAMwI,SAAS,CAAA;AAC5E,IAAA,MAAM,EAAEE,MAAAA,EAAQC,YAAY,EAAEC,SAAS,EAAE,GAAGC,kBAAAA,EAAAA;IAC5C,MAAM,EAAEtH,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMsH,gBAAgBC,OAAAA,CAAQ,cAAA,EAAgB,CAAC/I,KAAAA,GAAUA,MAAM8I,aAAa,CAAA;IAC5E,MAAME,WAAAA,GAAcrJ,UAAUsJ,MAAAA,IAAU,IAAA;IAExC,OAAO;QACLhD,QAAAA,EAAU,CAACuC,aAAa,CAAC7I,QAAAA;AACzBsB,QAAAA,KAAAA,EAAOrE,aAAAA,CACL;YACEY,EAAAA,EAAI,sCAAA;YACJC,cAAAA,EAAgB;SAClB,EACA;AAAEuL,YAAAA;AAAY,SAAA,CAAA;AAEhB9C,QAAAA,IAAAA,gBAAM5H,GAAA,CAAC4K,KAAAA,EAAAA,EAAAA,CAAAA;QACPlE,MAAAA,EAAQ;YACNnD,IAAAA,EAAM,QAAA;AACNnF,YAAAA,KAAAA,EAAOE,aAAAA,CAAc;gBACnBY,EAAAA,EAAI,oCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACAkK,YAAAA,OAAAA,gBACEjK,IAAA,CAACC,IAAAA,EAAAA;gBAAKC,SAAAA,EAAU,QAAA;gBAASS,GAAAA,EAAK,CAAA;;kCAC5BC,GAAA,CAAC6K,aAAAA,EAAAA;wBAAcrK,KAAAA,EAAM,MAAA;wBAAOuI,MAAAA,EAAO,MAAA;wBAAO+B,IAAAA,EAAK;;kCAC/C9K,GAAA,CAACW,UAAAA,EAAAA;wBAAWE,GAAAA,EAAI,GAAA;wBAAID,OAAAA,EAAQ,OAAA;wBAAQmK,SAAAA,EAAU,QAAA;kCAC3CzM,aAAAA,CAAc;4BACbY,EAAAA,EAAI,4CAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;;;YAIN6L,OAAAA,EAASV,SAAAA;YACTW,SAAAA,EAAW,UAAA;AACT;;;;YAKA,IAAI,CAACjB,iBAAAA,EAAmB;oBACtBQ,aAAAA,CAAc,IAAA,CAAA;AAChB,gBAAA;gBACA,IAAI;oBACF,IAAI,CAAC3I,UAAAA,IAAc1B,cAAAA,KAAmBC,YAAAA,EAAc;AAClD8K,wBAAAA,OAAAA,CAAQC,KAAK,CACX,2GAAA,CAAA;wBAGFlI,kBAAAA,CAAmB;AACjBO,4BAAAA,OAAAA,EAASlF,aAAAA,CAAc;gCACrBY,EAAAA,EAAI,sCAAA;gCACJC,cAAAA,EAAgB;AAClB,6BAAA,CAAA;4BACAoE,IAAAA,EAAM;AACR,yBAAA,CAAA;AAEA,wBAAA;AACF,oBAAA;oBAEA,MAAM6H,GAAAA,GAAM,MAAMf,YAAAA,CAAa;AAC7BxI,wBAAAA,UAAAA;AACAT,wBAAAA,KAAAA;AACAjB,wBAAAA,cAAAA;wBACAtB,MAAAA,EAAQ;4BACN8L,MAAAA,EAAQ;AACV;AACF,qBAAA,CAAA;AAEA,oBAAA,IAAI,EAAE,OAAA,IAAWS,GAAE,CAAA,EAAI;wBACrB5B,QAAAA,CAAS;AAAE6B,4BAAAA,QAAAA,EAAU,CAAC,GAAG,EAAElL,cAAAA,CAAe,CAAC,EAAEiB,KAAAA,CAAAA;yBAAQ,EAAG;4BAAEkK,OAAAA,EAAS;AAAK,yBAAA,CAAA;AAC1E,oBAAA;gBACF,CAAA,QAAU;AACR,oBAAA,IAAI,CAACtB,iBAAAA,EAAmB;wBACtBQ,aAAAA,CAAc,KAAA,CAAA;AAChB,oBAAA;AACF,gBAAA;AACF,YAAA;AACF,SAAA;QACA5J,OAAAA,EAAS,QAAA;QACT4B,QAAAA,EAAU;AAAC,YAAA,QAAA;AAAU,YAAA;AAAY;AACnC,KAAA;AACF,CAAA;AAEAuH,YAAAA,CAAaxG,IAAI,GAAG,QAAA;AACpBwG,YAAAA,CAAavH,QAAQ,GAAG;AAAC,IAAA,QAAA;AAAU,IAAA;AAAY,CAAA;AAE/C,MAAM+I,sBAAAA,GAAyB;AAAC1B,IAAAA,kBAAAA;AAAoBN,IAAAA,sBAAAA;AAAwBQ,IAAAA;AAAa;;;;"}
@@ -59,9 +59,28 @@ const ListViewPage = ()=>{
59
59
  const navigate = reactRouterDom.useNavigate();
60
60
  const { formatMessage } = reactIntl.useIntl();
61
61
  const { toggleNotification } = strapiAdmin.useNotification();
62
+ const { copy } = strapiAdmin.useClipboard();
62
63
  const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler(translations.getTranslation);
63
64
  const isMobile = strapiAdmin.useIsMobile();
64
65
  strapiAdmin.useIsDesktop();
66
+ const handleCopyDocumentId = React__namespace.useCallback(async (e, documentId)=>{
67
+ e.stopPropagation();
68
+ if (!documentId) return;
69
+ const didCopy = await copy(documentId);
70
+ if (didCopy) {
71
+ toggleNotification({
72
+ type: 'success',
73
+ message: formatMessage({
74
+ id: 'content-manager.actions.copy-documentId.success',
75
+ defaultMessage: 'Document ID copied to clipboard'
76
+ })
77
+ });
78
+ }
79
+ }, [
80
+ copy,
81
+ formatMessage,
82
+ toggleNotification
83
+ ]);
65
84
  usePersistentQueryParams.usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', [
66
85
  'sort',
67
86
  'filters',
@@ -387,6 +406,34 @@ const ListViewPage = ()=>{
387
406
  })
388
407
  }, header.name);
389
408
  }
409
+ if (header.name === 'documentId') {
410
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
411
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
412
+ gap: 2,
413
+ alignItems: "center",
414
+ width: "100%",
415
+ minWidth: 0,
416
+ children: [
417
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
418
+ textColor: "neutral800",
419
+ maxWidth: "30rem",
420
+ ellipsis: true,
421
+ children: row.documentId || '-'
422
+ }),
423
+ row.documentId && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
424
+ variant: "ghost",
425
+ size: "S",
426
+ label: formatMessage({
427
+ id: 'content-manager.actions.copy-documentId.label',
428
+ defaultMessage: 'Copy'
429
+ }),
430
+ onClick: (e)=>handleCopyDocumentId(e, row.documentId),
431
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Duplicate, {})
432
+ })
433
+ ]
434
+ })
435
+ }, header.name);
436
+ }
390
437
  if (typeof cellFormatter === 'function') {
391
438
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
392
439
  children: cellFormatter(row, header, {
@@ -1 +1 @@
1
- {"version":3,"file":"ListViewPage.js","sources":["../../../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useScopedPersistentState,\n useRBAC,\n Layouts,\n useTable,\n useIsMobile,\n useIsDesktop,\n tours,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport { usePersistentPartialQueryParams } from '../../hooks/usePersistentQueryParams';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { listViewFilters as Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const isMobile = useIsMobile();\n const isDesktop = useIsDesktop();\n\n usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', ['sort', 'filters', 'pageSize']);\n usePersistentPartialQueryParams('STRAPI_LOCALE', ['plugins.i18n.locale'], false);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaderNames, setDisplayedHeaderNames] = useScopedPersistentState<string[] | null>(\n `STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`,\n null\n );\n\n const mapDisplayedHeaders = (headers: ListFieldLayout[]) => headers.map((header) => header.name);\n\n const displayedHeaders: ListFieldLayout[] = React.useMemo(() => {\n if (\n !displayedHeaderNames ||\n !list.metadatas ||\n Object.keys(list.metadatas).length <= 0 ||\n !schema?.attributes\n )\n return [];\n\n return convertListLayoutToFieldLayouts(displayedHeaderNames, schema.attributes, list.metadatas);\n }, [displayedHeaderNames, schema, list]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaderNames(headers);\n };\n\n const handleResetHeaders = () => {\n setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));\n };\n\n /**\n * If the persistent displayedHeaders are not yet initialized, set them to list.layout\n */\n React.useEffect(() => {\n // wait for list.layout to be loaded\n if (list.layout.length === 0) {\n return;\n }\n\n if (!displayedHeaderNames) {\n handleResetHeaders();\n }\n }, [list.layout]);\n\n React.useEffect(() => {\n if (!schema?.attributes) return;\n if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;\n if (schema.uid !== model) return;\n\n const allowedDisplayHeaders = displayedHeaderNames.filter((header) =>\n Object.keys(schema?.attributes).includes(header)\n );\n\n if (allowedDisplayHeaders.length !== displayedHeaderNames.length) {\n handleSetHeaders(allowedDisplayHeaders);\n }\n }, [displayedHeaderNames]);\n\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasAppliedFilters = Boolean((query as any)?.filters?.$and?.length);\n\n const { data, error, isLoading, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\n });\n\n /**\n * If the API returns an error, display a notification\n */\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\n }));\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n /**\n * When the header label is a string, it is an attribute on the current content-type:\n * Use the attribute name value to compute the translation.\n * Otherwise, it should be a translation object coming from a plugin that injects into the table (ie i18n, content-releases, review-workflows):\n * Use the translation object as is.\n */\n const translation =\n typeof header.label === 'string'\n ? {\n id: `content-manager.content-types.${model}.${header.name}`,\n defaultMessage: header.label,\n }\n : header.label;\n\n return {\n ...header,\n label: formatMessage(translation),\n name: `${header.name}${header.mainField?.name ? `.${header.mainField.name}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName\n ? formatMessage({ id: schema.info.displayName, defaultMessage: schema.info.displayName })\n : formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n const isEmptyState = !isFetching && results.length === 0;\n\n const endActions = (\n <>\n {isMobile && list.settings.filterable && schema && <Filters.Trigger />}\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n );\n\n const searchInput = (\n <>\n {list.settings.searchable && (\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n </>\n );\n\n const startActions = (\n <>\n {searchInput}\n {!isMobile && list.settings.filterable && schema && (\n <>\n <Filters.Trigger />\n <Filters.List />\n </>\n )}\n </>\n );\n\n const actions =\n list.settings.filterable && schema ? (\n <Filters.Root schema={schema}>\n <Layouts.Action\n endActions={endActions}\n startActions={startActions}\n bottomActions={isMobile && hasAppliedFilters ? <Filters.List /> : null}\n />\n <Filters.Popover />\n </Filters.Root>\n ) : (\n <Layouts.Action endActions={endActions} startActions={startActions} />\n );\n\n return (\n <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n {actions}\n <Layouts.Content>\n {isEmptyState ? (\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <EmptyStateLayout\n action={\n canCreate && (\n <Box>\n <CreateButton variant=\"secondary\" />\n </Box>\n )\n }\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n ) : (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {/* @ts-expect-error – TODO: fix this TS error */}\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n />\n </Table.Cell>\n );\n })}\n {/* we stop propagation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n )}\n </Layouts.Content>\n </Page.Main>\n </>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n fullWidth\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <ListViewPage key={slug} />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["INJECT_COLUMN_IN_TABLE","HOOKS","LayoutsHeaderCustom","styled","Layouts","Header","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","useIsDesktop","usePersistentPartialQueryParams","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","React","useMemo","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","handleSetHeaders","handleResetHeaders","layout","useEffect","uid","allowedDisplayHeaders","filter","includes","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","buildValidParams","hasAppliedFilters","Boolean","filters","$and","data","error","isLoading","isFetching","useGetAllDocumentsQuery","type","message","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","id","defaultMessage","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","isEmptyState","endActions","_jsxs","_Fragment","filterable","Filters","Trigger","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","searchInput","SearchInput","target","placeholder","trackedEvent","startActions","List","actions","Root","Action","bottomActions","Popover","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","Flex","gap","direction","alignItems","Table","rows","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","documentId","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","split","Typography","textColor","getDisplayName","CellContent","rowId","ActionsCell","e","stopPropagation","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","minWidth","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
1
+ {"version":3,"file":"ListViewPage.js","sources":["../../../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useScopedPersistentState,\n useRBAC,\n Layouts,\n useTable,\n useIsMobile,\n useIsDesktop,\n useClipboard,\n tours,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n IconButton,\n} from '@strapi/design-system';\nimport { Duplicate, Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport { usePersistentPartialQueryParams } from '../../hooks/usePersistentQueryParams';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { listViewFilters as Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const isMobile = useIsMobile();\n const isDesktop = useIsDesktop();\n\n const handleCopyDocumentId = React.useCallback(\n async (e: React.MouseEvent, documentId: string | undefined) => {\n e.stopPropagation();\n if (!documentId) return;\n const didCopy = await copy(documentId);\n if (didCopy) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.actions.copy-documentId.success',\n defaultMessage: 'Document ID copied to clipboard',\n }),\n });\n }\n },\n [copy, formatMessage, toggleNotification]\n );\n\n usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', ['sort', 'filters', 'pageSize']);\n usePersistentPartialQueryParams('STRAPI_LOCALE', ['plugins.i18n.locale'], false);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaderNames, setDisplayedHeaderNames] = useScopedPersistentState<string[] | null>(\n `STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`,\n null\n );\n\n const mapDisplayedHeaders = (headers: ListFieldLayout[]) => headers.map((header) => header.name);\n\n const displayedHeaders: ListFieldLayout[] = React.useMemo(() => {\n if (\n !displayedHeaderNames ||\n !list.metadatas ||\n Object.keys(list.metadatas).length <= 0 ||\n !schema?.attributes\n )\n return [];\n\n return convertListLayoutToFieldLayouts(displayedHeaderNames, schema.attributes, list.metadatas);\n }, [displayedHeaderNames, schema, list]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaderNames(headers);\n };\n\n const handleResetHeaders = () => {\n setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));\n };\n\n /**\n * If the persistent displayedHeaders are not yet initialized, set them to list.layout\n */\n React.useEffect(() => {\n // wait for list.layout to be loaded\n if (list.layout.length === 0) {\n return;\n }\n\n if (!displayedHeaderNames) {\n handleResetHeaders();\n }\n }, [list.layout]);\n\n React.useEffect(() => {\n if (!schema?.attributes) return;\n if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;\n if (schema.uid !== model) return;\n\n const allowedDisplayHeaders = displayedHeaderNames.filter((header) =>\n Object.keys(schema?.attributes).includes(header)\n );\n\n if (allowedDisplayHeaders.length !== displayedHeaderNames.length) {\n handleSetHeaders(allowedDisplayHeaders);\n }\n }, [displayedHeaderNames]);\n\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasAppliedFilters = Boolean((query as any)?.filters?.$and?.length);\n\n const { data, error, isLoading, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\n });\n\n /**\n * If the API returns an error, display a notification\n */\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\n }));\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n /**\n * When the header label is a string, it is an attribute on the current content-type:\n * Use the attribute name value to compute the translation.\n * Otherwise, it should be a translation object coming from a plugin that injects into the table (ie i18n, content-releases, review-workflows):\n * Use the translation object as is.\n */\n const translation =\n typeof header.label === 'string'\n ? {\n id: `content-manager.content-types.${model}.${header.name}`,\n defaultMessage: header.label,\n }\n : header.label;\n\n return {\n ...header,\n label: formatMessage(translation),\n name: `${header.name}${header.mainField?.name ? `.${header.mainField.name}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName\n ? formatMessage({ id: schema.info.displayName, defaultMessage: schema.info.displayName })\n : formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n const isEmptyState = !isFetching && results.length === 0;\n\n const endActions = (\n <>\n {isMobile && list.settings.filterable && schema && <Filters.Trigger />}\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n );\n\n const searchInput = (\n <>\n {list.settings.searchable && (\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n </>\n );\n\n const startActions = (\n <>\n {searchInput}\n {!isMobile && list.settings.filterable && schema && (\n <>\n <Filters.Trigger />\n <Filters.List />\n </>\n )}\n </>\n );\n\n const actions =\n list.settings.filterable && schema ? (\n <Filters.Root schema={schema}>\n <Layouts.Action\n endActions={endActions}\n startActions={startActions}\n bottomActions={isMobile && hasAppliedFilters ? <Filters.List /> : null}\n />\n <Filters.Popover />\n </Filters.Root>\n ) : (\n <Layouts.Action endActions={endActions} startActions={startActions} />\n );\n\n return (\n <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n {actions}\n <Layouts.Content>\n {isEmptyState ? (\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <EmptyStateLayout\n action={\n canCreate && (\n <Box>\n <CreateButton variant=\"secondary\" />\n </Box>\n )\n }\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n ) : (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (header.name === 'documentId') {\n return (\n <Table.Cell key={header.name}>\n <Flex gap={2} alignItems=\"center\" width=\"100%\" minWidth={0}>\n <Typography textColor=\"neutral800\" maxWidth=\"30rem\" ellipsis>\n {row.documentId || '-'}\n </Typography>\n {row.documentId && (\n <IconButton\n variant=\"ghost\"\n size=\"S\"\n label={formatMessage({\n id: 'content-manager.actions.copy-documentId.label',\n defaultMessage: 'Copy',\n })}\n onClick={(e) => handleCopyDocumentId(e, row.documentId)}\n >\n <Duplicate />\n </IconButton>\n )}\n </Flex>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {/* @ts-expect-error – TODO: fix this TS error */}\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n />\n </Table.Cell>\n );\n })}\n {/* we stop propagation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n )}\n </Layouts.Content>\n </Page.Main>\n </>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n fullWidth\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <ListViewPage key={slug} />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["INJECT_COLUMN_IN_TABLE","HOOKS","LayoutsHeaderCustom","styled","Layouts","Header","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","copy","useClipboard","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","useIsDesktop","handleCopyDocumentId","React","useCallback","e","documentId","stopPropagation","didCopy","type","message","id","defaultMessage","usePersistentPartialQueryParams","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","useMemo","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","handleSetHeaders","handleResetHeaders","layout","useEffect","uid","allowedDisplayHeaders","filter","includes","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","buildValidParams","hasAppliedFilters","Boolean","filters","$and","data","error","isLoading","isFetching","useGetAllDocumentsQuery","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","isEmptyState","endActions","_jsxs","_Fragment","filterable","Filters","Trigger","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","searchInput","SearchInput","target","placeholder","trackedEvent","startActions","List","actions","Root","Action","bottomActions","Popover","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","Flex","gap","direction","alignItems","Table","rows","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","split","Typography","textColor","getDisplayName","minWidth","ellipsis","IconButton","size","Duplicate","CellContent","rowId","ActionsCell","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA,MAAM,EAAEA,sBAAsB,EAAE,GAAGC,WAAAA;AAEnC;;AAEkG,qGAClG,MAAMC,mBAAAA,GAAsBC,uBAAAA,CAAOC,mBAAAA,CAAQC,MAAM,CAAC;;AAElD,CAAC;AAED,MAAMC,YAAAA,GAAe,IAAA;IACnB,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AACvB,IAAA,MAAMC,QAAAA,GAAWC,0BAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,IAAI,EAAE,GAAGC,wBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,8BAAAA,CAAmBC,2BAAAA,CAAAA;AACvE,IAAA,MAAMC,QAAAA,GAAWC,uBAAAA,EAAAA;AACjB,IAAkBC,wBAAAA;AAElB,IAAA,MAAMC,oBAAAA,GAAuBC,gBAAAA,CAAMC,WAAW,CAC5C,OAAOC,CAAAA,EAAqBC,UAAAA,GAAAA;AAC1BD,QAAAA,CAAAA,CAAEE,eAAe,EAAA;AACjB,QAAA,IAAI,CAACD,UAAAA,EAAY;QACjB,MAAME,OAAAA,GAAU,MAAMf,IAAAA,CAAKa,UAAAA,CAAAA;AAC3B,QAAA,IAAIE,OAAAA,EAAS;YACXjB,kBAAAA,CAAmB;gBACjBkB,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrB,aAAAA,CAAc;oBACrBsB,EAAAA,EAAI,iDAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EACA;AAACnB,QAAAA,IAAAA;AAAMJ,QAAAA,aAAAA;AAAeE,QAAAA;AAAmB,KAAA,CAAA;AAG3CsB,IAAAA,wDAAAA,CAAgC,4BAAA,EAA8B;AAAC,QAAA,MAAA;AAAQ,QAAA,SAAA;AAAW,QAAA;AAAW,KAAA,CAAA;AAC7FA,IAAAA,wDAAAA,CAAgC,eAAA,EAAiB;AAAC,QAAA;KAAsB,EAAE,KAAA,CAAA;AAE1E,IAAA,MAAM,EAAEC,cAAc,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGC,kBAAAA,EAAAA;AAC1C,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGC,mCAAAA,CAAkBJ,KAAAA,CAAAA;IAEnC,MAAM,CAACK,sBAAsBC,uBAAAA,CAAwB,GAAGC,qCACtD,CAAC,mCAAmC,EAAEP,KAAAA,CAAAA,CAAO,EAC7C,IAAA,CAAA;IAGF,MAAMQ,mBAAAA,GAAsB,CAACC,OAAAA,GAA+BA,OAAAA,CAAQC,GAAG,CAAC,CAACC,MAAAA,GAAWA,MAAAA,CAAOC,IAAI,CAAA;IAE/F,MAAMC,gBAAAA,GAAsCzB,gBAAAA,CAAM0B,OAAO,CAAC,IAAA;AACxD,QAAA,IACE,CAACT,oBAAAA,IACD,CAACF,KAAKY,SAAS,IACfC,OAAOC,IAAI,CAACd,KAAKY,SAAS,CAAA,CAAEG,MAAM,IAAI,CAAA,IACtC,CAACjB,MAAAA,EAAQkB,UAAAA,EAET,OAAO,EAAE;AAEX,QAAA,OAAOC,kDAAgCf,oBAAAA,EAAsBJ,MAAAA,CAAOkB,UAAU,EAAEhB,KAAKY,SAAS,CAAA;IAChG,CAAA,EAAG;AAACV,QAAAA,oBAAAA;AAAsBJ,QAAAA,MAAAA;AAAQE,QAAAA;AAAK,KAAA,CAAA;AAEvC,IAAA,MAAMkB,mBAAmB,CAACZ,OAAAA,GAAAA;QACxBH,uBAAAA,CAAwBG,OAAAA,CAAAA;AAC1B,IAAA,CAAA;AAEA,IAAA,MAAMa,kBAAAA,GAAqB,IAAA;QACzBhB,uBAAAA,CAAwBE,mBAAAA,CAAoBL,KAAKoB,MAAM,CAAA,CAAA;AACzD,IAAA,CAAA;AAEA;;MAGAnC,gBAAAA,CAAMoC,SAAS,CAAC,IAAA;;AAEd,QAAA,IAAIrB,IAAAA,CAAKoB,MAAM,CAACL,MAAM,KAAK,CAAA,EAAG;AAC5B,YAAA;AACF,QAAA;AAEA,QAAA,IAAI,CAACb,oBAAAA,EAAsB;AACzBiB,YAAAA,kBAAAA,EAAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACnB,QAAAA,IAAAA,CAAKoB;AAAO,KAAA,CAAA;AAEhBnC,IAAAA,gBAAAA,CAAMoC,SAAS,CAAC,IAAA;QACd,IAAI,CAACvB,QAAQkB,UAAAA,EAAY;AACzB,QAAA,IAAI,CAACd,oBAAAA,IAAwBA,oBAAAA,CAAqBa,MAAM,KAAK,CAAA,EAAG;QAChE,IAAIjB,MAAAA,CAAOwB,GAAG,KAAKzB,KAAAA,EAAO;AAE1B,QAAA,MAAM0B,qBAAAA,GAAwBrB,oBAAAA,CAAqBsB,MAAM,CAAC,CAAChB,MAAAA,GACzDK,MAAAA,CAAOC,IAAI,CAAChB,MAAAA,EAAQkB,UAAAA,CAAAA,CAAYS,QAAQ,CAACjB,MAAAA,CAAAA,CAAAA;AAG3C,QAAA,IAAIe,qBAAAA,CAAsBR,MAAM,KAAKb,oBAAAA,CAAqBa,MAAM,EAAE;YAChEG,gBAAAA,CAAiBK,qBAAAA,CAAAA;AACnB,QAAA;IACF,CAAA,EAAG;AAACrB,QAAAA;AAAqB,KAAA,CAAA;AAEzB,IAAA,MAAM,CAAC,EAAEwB,KAAK,EAAE,CAAC,GAAGC,0BAAAA,CAKjB;QACDC,IAAAA,EAAM,GAAA;AACNC,QAAAA,QAAAA,EAAU7B,IAAAA,CAAK8B,QAAQ,CAACD,QAAQ,CAACE,QAAQ,EAAA;AACzCC,QAAAA,IAAAA,EAAMhC,KAAK8B,QAAQ,CAACG,aAAa,GAC7B,CAAA,EAAGjC,KAAK8B,QAAQ,CAACG,aAAa,CAAC,CAAC,EAAEjC,IAAAA,CAAK8B,QAAQ,CAACI,gBAAgB,EAAE,GAClE;AACN,KAAA,CAAA;AAEA,IAAA,MAAMC,SAASlD,gBAAAA,CAAM0B,OAAO,CAAC,IAAMyB,qBAAiBV,KAAAA,CAAAA,EAAQ;AAACA,QAAAA;AAAM,KAAA,CAAA;AACnE,IAAA,MAAMW,iBAAAA,GAAoBC,OAAAA,CAASZ,KAAAA,EAAea,OAAAA,EAASC,IAAAA,EAAMzB,MAAAA,CAAAA;IAEjE,MAAM,EAAE0B,IAAI,EAAEC,KAAK,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGC,iCAAAA,CAAwB;AACrEhD,QAAAA,KAAAA;AACAsC,QAAAA;AACF,KAAA,CAAA;AAEA;;MAGAlD,gBAAAA,CAAMoC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIqB,KAAAA,EAAO;YACTrE,kBAAAA,CAAmB;gBACjBkB,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASd,cAAAA,CAAegE,KAAAA;AAC1B,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAOhE,QAAAA,cAAAA;AAAgBL,QAAAA;AAAmB,KAAA,CAAA;IAE9C,MAAM,EAAEyE,UAAU,EAAE,EAAEC,UAAU,EAAE,GAAGN,QAAQ,EAAC;AAE9CxD,IAAAA,gBAAAA,CAAMoC,SAAS,CAAC,IAAA;QACd,IAAI0B,UAAAA,IAAcA,UAAAA,CAAWC,SAAS,GAAG,CAAA,IAAKD,WAAWnB,IAAI,GAAGmB,UAAAA,CAAWC,SAAS,EAAE;YACpF/E,QAAAA,CACE;AACEgF,gBAAAA,MAAAA,EAAQC,YAAAA,CAAU;AAChB,oBAAA,GAAGxB,KAAK;AACRE,oBAAAA,IAAAA,EAAMmB,WAAWC;AACnB,iBAAA;aACF,EACA;gBAAEG,OAAAA,EAAS;AAAK,aAAA,CAAA;AAEpB,QAAA;IACF,CAAA,EAAG;AAACJ,QAAAA,UAAAA;AAAY5E,QAAAA,aAAAA;AAAeuD,QAAAA,KAAAA;AAAOzD,QAAAA;AAAS,KAAA,CAAA;IAE/C,MAAM,EAAEmF,SAAS,EAAE,GAAGC,4BAAAA,CAAgB,cAAA,EAAgB,CAAC,EAAED,SAAS,EAAE,IAAM;AACxEA,YAAAA;SACF,CAAA,CAAA;AAEA,IAAA,MAAME,mBAAmBC,wBAAAA,CAAa,cAAA,EAAgB,CAAC,EAAED,gBAAgB,EAAE,GAAKA,gBAAAA,CAAAA;AAChF;;AAEC,MACD,MAAME,YAAAA,GAAevE,gBAAAA,CAAM0B,OAAO,CAAC,IAAA;QACjC,MAAML,OAAAA,GAAUgD,iBAAiB9F,sBAAAA,EAAwB;AACvDkD,YAAAA,gBAAAA;YACAU,MAAAA,EAAQpB;AACV,SAAA,CAAA;AAEA,QAAA,MAAMyD,mBAAmBnD,OAAAA,CAAQI,gBAAgB,CAACH,GAAG,CAAkB,CAACC,MAAAA,GAAAA;AACtE;;;;;AAKC,UACD,MAAMkD,WAAAA,GACJ,OAAOlD,MAAAA,CAAOmD,KAAK,KAAK,QAAA,GACpB;gBACElE,EAAAA,EAAI,CAAC,8BAA8B,EAAEI,KAAAA,CAAM,CAAC,EAAEW,MAAAA,CAAOC,IAAI,CAAA,CAAE;AAC3Df,gBAAAA,cAAAA,EAAgBc,OAAOmD;AACzB,aAAA,GACAnD,OAAOmD,KAAK;YAElB,OAAO;AACL,gBAAA,GAAGnD,MAAM;AACTmD,gBAAAA,KAAAA,EAAOxF,aAAAA,CAAcuF,WAAAA,CAAAA;AACrBjD,gBAAAA,IAAAA,EAAM,GAAGD,MAAAA,CAAOC,IAAI,CAAA,EAAGD,MAAAA,CAAOoD,SAAS,EAAEnD,IAAAA,GAAO,CAAC,CAAC,EAAED,MAAAA,CAAOoD,SAAS,CAACnD,IAAI,CAAA,CAAE,GAAG,EAAA,CAAA;AAChF,aAAA;AACF,QAAA,CAAA,CAAA;QAEA,IAAIX,MAAAA,EAAQ+D,SAASC,eAAAA,EAAiB;AACpCL,YAAAA,gBAAAA,CAAiBM,IAAI,CAAC;gBACpBC,SAAAA,EAAW;oBACTzE,IAAAA,EAAM;AACR,iBAAA;gBACAkB,IAAAA,EAAM,QAAA;AACNkD,gBAAAA,KAAAA,EAAOxF,aAAAA,CAAc;oBACnBsB,EAAAA,EAAIb,2BAAAA,CAAe,CAAC,oCAAoC,CAAC,CAAA;oBACzDc,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAuE,UAAAA,EAAY,KAAA;gBACZC,QAAAA,EAAU;AACZ,aAAA,CAAA;AACF,QAAA;QAEA,OAAOT,gBAAAA;IACT,CAAA,EAAG;AACD/C,QAAAA,gBAAAA;AACAvC,QAAAA,aAAAA;AACA6B,QAAAA,IAAAA;AACAsD,QAAAA,gBAAAA;AACAxD,QAAAA,MAAAA,EAAQ+D,OAAAA,EAASC,eAAAA;AACjBjE,QAAAA;AACD,KAAA,CAAA;AAED,IAAA,IAAI8C,SAAAA,EAAW;QACb,qBAAOwB,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;AAEA,IAAA,IAAI3B,KAAAA,EAAO;QACT,qBAAOyB,cAAA,CAACC,iBAAKE,KAAK,EAAA,EAAA,CAAA;AACpB,IAAA;AAEA,IAAA,MAAMC,gBAAAA,GAAmBzE,MAAAA,EAAQ0E,IAAAA,CAAKC,WAAAA,GAClCtG,aAAAA,CAAc;QAAEsB,EAAAA,EAAIK,MAAAA,CAAO0E,IAAI,CAACC,WAAW;QAAE/E,cAAAA,EAAgBI,MAAAA,CAAO0E,IAAI,CAACC;AAAY,KAAA,CAAA,GACrFtG,aAAAA,CAAc;QACZsB,EAAAA,EAAI,qCAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA,CAAA;IAEJ,MAAMgF,cAAAA,GAAiB,CAACjF,EAAAA,GAA6B,IAAA;YACnD1B,UAAAA,CAAW,uBAAA,CAAA;YACXE,QAAAA,CAAS;AACP0G,gBAAAA,QAAAA,EAAUlF,GAAGsC,QAAQ,EAAA;AACrBkB,gBAAAA,MAAAA,EAAQC,YAAAA,CAAU;AAAE0B,oBAAAA,OAAAA,EAASlD,MAAMkD;AAAQ,iBAAA;AAC7C,aAAA,CAAA;AACF,QAAA,CAAA;AAEA,IAAA,MAAMC,YAAAA,GAAe,CAACjC,UAAAA,IAAcE,OAAAA,CAAQ/B,MAAM,KAAK,CAAA;AAEvD,IAAA,MAAM+D,UAAAA,iBACJC,eAAA,CAAAC,mBAAA,EAAA;;YACGnG,QAAAA,IAAYmB,IAAAA,CAAK8B,QAAQ,CAACmD,UAAU,IAAInF,MAAAA,kBAAUqE,cAAA,CAACe,wBAAQC,OAAO,EAAA,EAAA,CAAA;0BACnEhB,cAAA,CAACiB,2BAAAA,EAAAA;gBAAcC,IAAAA,EAAK;;0BACpBlB,cAAA,CAACmB,iCAAAA,EAAAA;gBACCC,UAAAA,EAAYrE,gBAAAA;gBACZsE,YAAAA,EAAcrE,kBAAAA;AACdb,gBAAAA,OAAAA,EAASJ,wBAAwB;;;;AAKvC,IAAA,MAAMuF,WAAAA,iBACJtB,cAAA,CAAAa,mBAAA,EAAA;AACGhF,QAAAA,QAAAA,EAAAA,IAAAA,CAAK8B,QAAQ,CAACmC,UAAU,kBACvBE,cAAA,CAACuB,uBAAAA,EAAAA;AACC/B,YAAAA,KAAAA,EAAOxF,aAAAA,CACL;gBAAEsB,EAAAA,EAAI,4BAAA;gBAA8BC,cAAAA,EAAgB;aAAsB,EAC1E;gBAAEiG,MAAAA,EAAQpB;AAAiB,aAAA,CAAA;AAE7BqB,YAAAA,WAAAA,EAAazH,aAAAA,CAAc;gBACzBsB,EAAAA,EAAI,eAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAmG,YAAAA,EAAa;;;AAMrB,IAAA,MAAMC,YAAAA,iBACJf,eAAA,CAAAC,mBAAA,EAAA;;AACGS,YAAAA,WAAAA;AACA,YAAA,CAAC5G,YAAYmB,IAAAA,CAAK8B,QAAQ,CAACmD,UAAU,IAAInF,MAAAA,kBACxCiF,eAAA,CAAAC,mBAAA,EAAA;;AACE,kCAAAb,cAAA,CAACe,wBAAQC,OAAO,EAAA,EAAA,CAAA;AAChB,kCAAAhB,cAAA,CAACe,wBAAQa,IAAI,EAAA,EAAA;;;;;IAMrB,MAAMC,OAAAA,GACJhG,KAAK8B,QAAQ,CAACmD,UAAU,IAAInF,MAAAA,iBAC1BiF,eAAA,CAACG,uBAAAA,CAAQe,IAAI,EAAA;QAACnG,MAAAA,EAAQA,MAAAA;;AACpB,0BAAAqE,cAAA,CAACvG,oBAAQsI,MAAM,EAAA;gBACbpB,UAAAA,EAAYA,UAAAA;gBACZgB,YAAAA,EAAcA,YAAAA;AACdK,gBAAAA,aAAAA,EAAetH,QAAAA,IAAYwD,iBAAAA,iBAAoB8B,cAAA,CAACe,uBAAAA,CAAQa,IAAI,EAAA,EAAA,CAAA,GAAM;;AAEpE,0BAAA5B,cAAA,CAACe,wBAAQkB,OAAO,EAAA,EAAA;;AAGlB,KAAA,CAAA,iBAAAjC,cAAA,CAACvG,oBAAQsI,MAAM,EAAA;QAACpB,UAAAA,EAAYA,UAAAA;QAAYgB,YAAAA,EAAcA;;IAG1D,qBACEf,eAAA,CAAAC,mBAAA,EAAA;;0BACEb,cAAA,CAACkC,iBAAAA,CAAMC,cAAc,CAACC,YAAY,EAAA;AAEhC,gBAAA,QAAA,gBAAApC,cAAA,CAACqC,gBAAAA,EAAAA,EAAAA;;AAEH,0BAAAzB,eAAA,CAACX,iBAAKqC,IAAI,EAAA;;AACR,kCAAAtC,cAAA,CAACC,iBAAKsC,KAAK,EAAA;AAAE,wBAAA,QAAA,EAAA,CAAA,EAAGnC,gBAAAA,CAAAA;;kCAChBJ,cAAA,CAACzG,mBAAAA,EAAAA;AACCiJ,wBAAAA,aAAAA,EACEvD,SAAAA,iBACEe,cAAA,CAACkC,iBAAAA,CAAMC,cAAc,CAACM,cAAc,EAAA;AAClC,4BAAA,QAAA,gBAAAzC,cAAA,CAAC0C,YAAAA,EAAAA,EAAAA;AAED,yBAAA,CAAA,GAAA,IAAA;AAENC,wBAAAA,QAAAA,EAAU3I,aAAAA,CACR;AACEsB,4BAAAA,EAAAA,EAAIb,2BAAAA,CAAe,gCAAA,CAAA;4BACnBc,cAAAA,EACE;yBACJ,EACA;AAAEqH,4BAAAA,MAAAA,EAAQhE,UAAAA,EAAYiE;AAAM,yBAAA,CAAA;wBAE9BC,KAAAA,EAAO1C,gBAAAA;AACP2C,wBAAAA,gBAAAA,gBAAkB/C,cAAA,CAACgD,sBAAAA,EAAAA,EAAAA;;AAEpBnB,oBAAAA,OAAAA;AACD,kCAAA7B,cAAA,CAACvG,oBAAQwJ,OAAO,EAAA;AACbvC,wBAAAA,QAAAA,EAAAA,YAAAA,iBACCV,cAAA,CAACqC,gBAAAA,EAAAA;4BAAIa,UAAAA,EAAW,UAAA;4BAAWC,MAAAA,EAAO,cAAA;4BAAeC,SAAS,EAAA,IAAA;AACxD,4BAAA,QAAA,gBAAApD,cAAA,CAACqD,6BAAAA,EAAAA;AACCC,gCAAAA,MAAAA,EACErE,2BACEe,cAAA,CAACqC,gBAAAA,EAAAA;AACC,oCAAA,QAAA,gBAAArC,cAAA,CAAC0C,YAAAA,EAAAA;wCAAaa,OAAAA,EAAQ;;;AAI5BC,gCAAAA,OAAAA,EAASxJ,aAAAA,CAAc;oCACrBsB,EAAAA,EAAI,kDAAA;oCACJC,cAAAA,EAAgB;AAClB,iCAAA,CAAA;gCACA6H,SAAS,EAAA,IAAA;AACTK,gCAAAA,IAAAA,gBAAMzD,cAAA,CAAC0D,sBAAAA,EAAAA;oCAAeC,KAAAA,EAAM;;;2CAIhC/C,eAAA,CAACgD,iBAAAA,EAAAA;4BAAKC,GAAAA,EAAK,CAAA;4BAAGC,SAAAA,EAAU,QAAA;4BAASC,UAAAA,EAAW,SAAA;;AAC1C,8CAAAnD,eAAA,CAACoD,kBAAMlC,IAAI,EAAA;oCAACmC,IAAAA,EAAMtF,OAAAA;oCAASxC,OAAAA,EAASkD,YAAAA;oCAAcb,SAAAA,EAAWC,UAAAA;;sDAC3DuB,cAAA,CAACkE,eAAAA,EAAAA,EAAAA,CAAAA;AACD,sDAAAtD,eAAA,CAACoD,kBAAMf,OAAO,EAAA;;AACZ,8DAAArC,eAAA,CAACoD,kBAAMG,IAAI,EAAA;;AACT,sEAAAnE,cAAA,CAACgE,kBAAMI,kBAAkB,EAAA,EAAA,CAAA;AACxB/E,wDAAAA,YAAAA,CAAajD,GAAG,CAAC,CAACC,MAAAA,iBACjB2D,cAAA,CAACgE,kBAAMK,UAAU,EAAA;AAAoB,gEAAA,GAAGhI;AAAjBA,6DAAAA,EAAAA,MAAAA,CAAOC,IAAI,CAAA;;;AAGtC,8DAAA0D,cAAA,CAACgE,kBAAM9D,OAAO,EAAA,EAAA,CAAA;AACd,8DAAAF,cAAA,CAACgE,kBAAMM,KAAK,EAAA;AAAChB,oDAAAA,MAAAA,EAAQrE,0BAAYe,cAAA,CAAC0C,YAAAA,EAAAA;wDAAaa,OAAAA,EAAQ;AAAiB,qDAAA,CAAA,GAAA;;AACxE,8DAAAvD,cAAA,CAACgE,kBAAMO,IAAI,EAAA;8DACR5F,OAAAA,CAAQvC,GAAG,CAAC,CAACoI,GAAAA,GAAAA;wDACZ,qBACE5D,eAAA,CAACoD,kBAAMS,GAAG,EAAA;4DACRC,MAAAA,EAAO,SAAA;4DAEPC,OAAAA,EAASpE,cAAAA,CAAeiE,IAAIvJ,UAAU,CAAA;;AAEtC,8EAAA+E,cAAA,CAACgE,kBAAMY,YAAY,EAAA;AAACtJ,oEAAAA,EAAAA,EAAIkJ,IAAIlJ;;AAC3B+D,gEAAAA,YAAAA,CAAajD,GAAG,CAAC,CAAC,EAAEyI,aAAa,EAAE,GAAGxI,MAAAA,EAAQ,GAAA;oEAC7C,IAAIA,MAAAA,CAAOC,IAAI,KAAK,QAAA,EAAU;wEAC5B,MAAM,EAAEwI,MAAM,EAAE,GAAGN,GAAAA;wEAEnB,qBACExE,cAAA,CAACgE,kBAAMe,IAAI,EAAA;AACT,4EAAA,QAAA,gBAAA/E,cAAA,CAACgF,6BAAAA,EAAAA;gFAAeF,MAAAA,EAAQA,MAAAA;gFAAQG,QAAAA,EAAU;;AAD3B5I,yEAAAA,EAAAA,MAAAA,CAAOC,IAAI,CAAA;AAIhC,oEAAA;oEACA,IAAI;AAAC,wEAAA,WAAA;AAAa,wEAAA;qEAAY,CAACgB,QAAQ,CAACjB,MAAAA,CAAOC,IAAI,CAAC4I,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,CAAA,EAAG;;;;wEAIlE,qBACElF,cAAA,CAACgE,kBAAMe,IAAI,EAAA;AACT,4EAAA,QAAA,gBAAA/E,cAAA,CAACmF,uBAAAA,EAAAA;gFAAWC,SAAAA,EAAU,YAAA;0FACnBZ,GAAG,CAACnI,OAAOC,IAAI,CAAC4I,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,CAAC,GAC3BG,qBAAeb,GAAG,CAACnI,MAAAA,CAAOC,IAAI,CAAC4I,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAA,GAC7C;;AAJS7I,yEAAAA,EAAAA,MAAAA,CAAOC,IAAI,CAAA;AAQhC,oEAAA;oEACA,IAAID,MAAAA,CAAOC,IAAI,KAAK,YAAA,EAAc;wEAChC,qBACE0D,cAAA,CAACgE,kBAAMe,IAAI,EAAA;AACT,4EAAA,QAAA,gBAAAnE,eAAA,CAACgD,iBAAAA,EAAAA;gFAAKC,GAAAA,EAAK,CAAA;gFAAGE,UAAAA,EAAW,QAAA;gFAASJ,KAAAA,EAAM,MAAA;gFAAO2B,QAAAA,EAAU,CAAA;;kGACvDtF,cAAA,CAACmF,uBAAAA,EAAAA;wFAAWC,SAAAA,EAAU,YAAA;wFAAaH,QAAAA,EAAS,OAAA;wFAAQM,QAAQ,EAAA,IAAA;AACzDf,wFAAAA,QAAAA,EAAAA,GAAAA,CAAIvJ,UAAU,IAAI;;oFAEpBuJ,GAAAA,CAAIvJ,UAAU,kBACb+E,cAAA,CAACwF,uBAAAA,EAAAA;wFACCjC,OAAAA,EAAQ,OAAA;wFACRkC,IAAAA,EAAK,GAAA;AACLjG,wFAAAA,KAAAA,EAAOxF,aAAAA,CAAc;4FACnBsB,EAAAA,EAAI,+CAAA;4FACJC,cAAAA,EAAgB;AAClB,yFAAA,CAAA;AACAoJ,wFAAAA,OAAAA,EAAS,CAAC3J,CAAAA,GAAMH,oBAAAA,CAAqBG,CAAAA,EAAGwJ,IAAIvJ,UAAU,CAAA;AAEtD,wFAAA,QAAA,gBAAA+E,cAAA,CAAC0F,eAAAA,EAAAA,EAAAA;;;;AAfQrJ,yEAAAA,EAAAA,MAAAA,CAAOC,IAAI,CAAA;AAqBhC,oEAAA;oEACA,IAAI,OAAOuI,kBAAkB,UAAA,EAAY;wEACvC,qBACE7E,cAAA,CAACgE,kBAAMe,IAAI,EAAA;AAERF,4EAAAA,QAAAA,EAAAA,aAAAA,CAAcL,KAAKnI,MAAAA,EAAQ;AAAEZ,gFAAAA,cAAAA;AAAgBC,gFAAAA;AAAM,6EAAA;AAFrCW,yEAAAA,EAAAA,MAAAA,CAAOC,IAAI,CAAA;AAKhC,oEAAA;oEACA,qBACE0D,cAAA,CAACgE,kBAAMe,IAAI,EAAA;AACT,wEAAA,QAAA,gBAAA/E,cAAA,CAAC2F,uBAAAA,EAAAA;4EACCnC,OAAAA,EAASgB,GAAG,CAACnI,MAAAA,CAAOC,IAAI,CAAC4I,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,CAAC;AACvCU,4EAAAA,KAAAA,EAAOpB,IAAIvJ,UAAU;AACpB,4EAAA,GAAGoB;;AAJSA,qEAAAA,EAAAA,MAAAA,CAAOC,IAAI,CAAA;AAQhC,gEAAA,CAAA,CAAA;8EAEA0D,cAAA,CAAC6F,WAAAA,EAAAA;oEAAYlB,OAAAA,EAAS,CAAC3J,CAAAA,GAAMA,CAAAA,CAAEE,eAAe,EAAA;AAC5C,oEAAA,QAAA,gBAAA8E,cAAA,CAAC8F,yBAAAA,EAAAA;wEAAaC,QAAAA,EAAUvB;;;;AAxErBA,yDAAAA,EAAAA,GAAAA,CAAIlJ,EAAE,CAAA;AA4EjB,oDAAA,CAAA;;;;;;AAIN,8CAAAsF,eAAA,CAACoF,uBAAWlE,IAAI,EAAA;AACb,oCAAA,GAAGlD,UAAU;AACdqH,oCAAAA,gBAAAA,EAAkB,IAAMrM,UAAAA,CAAW,kCAAA,CAAA;;AAEnC,sDAAAoG,cAAA,CAACgG,uBAAWE,QAAQ,EAAA,EAAA,CAAA;AACpB,sDAAAlG,cAAA,CAACgG,uBAAWG,KAAK,EAAA,EAAA;;;;;;;;;;AAQjC;AAEA,MAAMN,WAAAA,GAAcrM,uBAAAA,CAAOwK,iBAAAA,CAAMe,IAAI,CAAC;;;AAGtC,CAAC;AAED;;AAEkG,qGAElG,MAAMb,eAAAA,GAAkB,IAAA;AACtB,IAAA,MAAMkC,YAAYC,oBAAAA,CAAS,iBAAA,EAAmB,CAACC,KAAAA,GAAUA,MAAMF,SAAS,CAAA;AACxE,IAAA,MAAM,CAAC,EAAE7I,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;IACpB,MAAM+I,MAAAA,GAAShJ,KAAAA,EAAOkD,OAAAA,EAAS+F,IAAAA,EAAMD,MAAAA;AACrC,IAAA,MAAME,aAAaC,eAAAA,CAAQH,MAAAA,CAAAA;;AAG3BzL,IAAAA,gBAAAA,CAAMoC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIuJ,eAAeF,MAAAA,EAAQ;AACzBH,YAAAA,SAAAA,CAAU,EAAE,CAAA;AACd,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,SAAAA;AAAWK,QAAAA,UAAAA;AAAYF,QAAAA;AAAO,KAAA,CAAA;IAElC,qBACEvG,cAAA,CAACgE,kBAAM2C,SAAS,EAAA;AACd,QAAA,QAAA,gBAAA3G,cAAA,CAAC4G,2BAAAA,EAAAA,EAAAA;;AAGP,CAAA;AAQA,MAAMlE,YAAAA,GAAe,CAAC,EAAEa,OAAO,EAAqB,GAAA;IAClD,MAAM,EAAEvJ,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEL,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AACvB,IAAA,MAAM,CAAC,EAAE0D,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AAEpB,IAAA,qBACEwC,cAAA,CAAC6G,mBAAAA,EAAAA;QACCtD,OAAAA,EAASA,OAAAA;QACTuD,GAAAA,EAAKC,mBAAAA;QACLpC,OAAAA,EAAS,IAAA;AACP/K,YAAAA,UAAAA,CAAW,iBAAA,EAAmB;gBAAEkL,MAAAA,EAAQ;AAAQ,aAAA,CAAA;AAClD,QAAA,CAAA;AACAkC,QAAAA,SAAAA,gBAAWhH,cAAA,CAACiH,UAAAA,EAAAA,EAAAA,CAAAA;QACZC,KAAAA,EAAO;YAAEC,cAAAA,EAAgB;AAAO,SAAA;QAChCC,EAAAA,EAAI;YACF5G,QAAAA,EAAU,QAAA;AACV1B,YAAAA,MAAAA,EAAQC,YAAAA,CAAU;AAAE0B,gBAAAA,OAAAA,EAASlD,MAAMkD;AAAQ,aAAA;AAC7C,SAAA;QACA6E,QAAAA,EAAS,aAAA;QACT+B,SAAS,EAAA,IAAA;kBAERrN,aAAAA,CAAc;AACbsB,YAAAA,EAAAA,EAAIb,2BAAAA,CAAe,qCAAA,CAAA;YACnBc,cAAAA,EAAgB;AAClB,SAAA;;AAGN,CAAA;AAEA;;AAEkG,2GAE5F+L,qBAAAA,GAAwB,IAAA;AAC5B,IAAA,MAAM,EAAEC,IAAAA,GAAO,EAAE,EAAE,GAAGC,wBAAAA,EAAAA;AAGtB,IAAA,MAAM,EACJC,WAAAA,GAAc,EAAE,EAChBjJ,SAAS,EACTD,KAAK,EACN,GAAGmJ,oBACFC,kBAAAA,CAAYvL,GAAG,CAAC,CAACkH,UAAY;AAC3BA,YAAAA,MAAAA;YACAsE,OAAAA,EAASL;SACX,CAAA,CAAA,CAAA;AAGF,IAAA,IAAI/I,SAAAA,EAAW;QACb,qBAAOwB,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;IAEA,IAAI3B,KAAAA,IAAS,CAACgJ,IAAAA,EAAM;QAClB,qBAAOvH,cAAA,CAACC,iBAAKE,KAAK,EAAA,EAAA,CAAA;AACpB,IAAA;IAEA,qBACEH,cAAA,CAACC,iBAAK4H,OAAO,EAAA;QAACJ,WAAAA,EAAaA,WAAAA;AACxB,QAAA,QAAA,EAAA,CAAC,EAAEA,WAAW,EAAE,iBACfzH,cAAA,CAAC8H,yBAAAA,EAAAA;gBAAaL,WAAAA,EAAaA,WAAAA;AACzB,gBAAA,QAAA,gBAAAzH,eAACrG,YAAAA,EAAAA,EAAAA,EAAkB4N,IAAAA;;;AAK7B;;;;;"}
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useRBAC, Page, useTracking, useNotification, useAPIErrorHandler, useIsMobile, useIsDesktop, useScopedPersistentState, useQueryParams, useStrapiApp, SearchInput, Layouts, tours, BackButton, Table, Pagination, useTable } from '@strapi/admin/strapi-admin';
4
- import { Box, EmptyStateLayout, Flex, Typography, Button } from '@strapi/design-system';
5
- import { Plus } from '@strapi/icons';
3
+ import { useRBAC, Page, useTracking, useNotification, useClipboard, useAPIErrorHandler, useIsMobile, useIsDesktop, useScopedPersistentState, useQueryParams, useStrapiApp, SearchInput, Layouts, tours, BackButton, Table, Pagination, useTable } from '@strapi/admin/strapi-admin';
4
+ import { Box, EmptyStateLayout, Flex, Typography, IconButton, Button } from '@strapi/design-system';
5
+ import { Duplicate, Plus } from '@strapi/icons';
6
6
  import { EmptyDocuments } from '@strapi/icons/symbols';
7
7
  import { stringify } from 'qs';
8
8
  import { useIntl } from 'react-intl';
@@ -38,9 +38,28 @@ const ListViewPage = ()=>{
38
38
  const navigate = useNavigate();
39
39
  const { formatMessage } = useIntl();
40
40
  const { toggleNotification } = useNotification();
41
+ const { copy } = useClipboard();
41
42
  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);
42
43
  const isMobile = useIsMobile();
43
44
  useIsDesktop();
45
+ const handleCopyDocumentId = React.useCallback(async (e, documentId)=>{
46
+ e.stopPropagation();
47
+ if (!documentId) return;
48
+ const didCopy = await copy(documentId);
49
+ if (didCopy) {
50
+ toggleNotification({
51
+ type: 'success',
52
+ message: formatMessage({
53
+ id: 'content-manager.actions.copy-documentId.success',
54
+ defaultMessage: 'Document ID copied to clipboard'
55
+ })
56
+ });
57
+ }
58
+ }, [
59
+ copy,
60
+ formatMessage,
61
+ toggleNotification
62
+ ]);
44
63
  usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', [
45
64
  'sort',
46
65
  'filters',
@@ -366,6 +385,34 @@ const ListViewPage = ()=>{
366
385
  })
367
386
  }, header.name);
368
387
  }
388
+ if (header.name === 'documentId') {
389
+ return /*#__PURE__*/ jsx(Table.Cell, {
390
+ children: /*#__PURE__*/ jsxs(Flex, {
391
+ gap: 2,
392
+ alignItems: "center",
393
+ width: "100%",
394
+ minWidth: 0,
395
+ children: [
396
+ /*#__PURE__*/ jsx(Typography, {
397
+ textColor: "neutral800",
398
+ maxWidth: "30rem",
399
+ ellipsis: true,
400
+ children: row.documentId || '-'
401
+ }),
402
+ row.documentId && /*#__PURE__*/ jsx(IconButton, {
403
+ variant: "ghost",
404
+ size: "S",
405
+ label: formatMessage({
406
+ id: 'content-manager.actions.copy-documentId.label',
407
+ defaultMessage: 'Copy'
408
+ }),
409
+ onClick: (e)=>handleCopyDocumentId(e, row.documentId),
410
+ children: /*#__PURE__*/ jsx(Duplicate, {})
411
+ })
412
+ ]
413
+ })
414
+ }, header.name);
415
+ }
369
416
  if (typeof cellFormatter === 'function') {
370
417
  return /*#__PURE__*/ jsx(Table.Cell, {
371
418
  children: cellFormatter(row, header, {