@strapi/content-manager 5.35.0 → 5.36.1

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 (90) hide show
  1. package/dist/admin/components/ActionsDrawer.js +5 -1
  2. package/dist/admin/components/ActionsDrawer.js.map +1 -1
  3. package/dist/admin/components/ActionsDrawer.mjs +5 -2
  4. package/dist/admin/components/ActionsDrawer.mjs.map +1 -1
  5. package/dist/admin/components/LeftMenu.js +1 -28
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +2 -29
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/history/components/VersionContent.js +74 -59
  10. package/dist/admin/history/components/VersionContent.js.map +1 -1
  11. package/dist/admin/history/components/VersionContent.mjs +75 -60
  12. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  13. package/dist/admin/history/components/VersionsList.js +139 -54
  14. package/dist/admin/history/components/VersionsList.js.map +1 -1
  15. package/dist/admin/history/components/VersionsList.mjs +141 -56
  16. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  17. package/dist/admin/history/pages/History.js +27 -9
  18. package/dist/admin/history/pages/History.js.map +1 -1
  19. package/dist/admin/history/pages/History.mjs +28 -10
  20. package/dist/admin/history/pages/History.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocument.js +1 -1
  22. package/dist/admin/hooks/useDocument.js.map +1 -1
  23. package/dist/admin/hooks/useDocument.mjs +1 -1
  24. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  25. package/dist/admin/hooks/usePersistentQueryParams.js +56 -0
  26. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -0
  27. package/dist/admin/hooks/usePersistentQueryParams.mjs +54 -0
  28. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -0
  29. package/dist/admin/pages/EditView/EditViewPage.js +10 -3
  30. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  31. package/dist/admin/pages/EditView/EditViewPage.mjs +11 -4
  32. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +10 -6
  34. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +11 -7
  36. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +8 -2
  38. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +8 -2
  40. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js +9 -1
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs +9 -1
  44. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +7 -2
  46. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +7 -2
  48. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +30 -11
  50. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +31 -12
  52. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +4 -4
  54. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +4 -4
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +4 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +4 -1
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormLayout.js +6 -9
  62. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormLayout.mjs +6 -9
  64. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/Header.js +2 -0
  66. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/Header.mjs +2 -0
  68. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  69. package/dist/admin/pages/ListView/ListViewPage.js +50 -18
  70. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  71. package/dist/admin/pages/ListView/ListViewPage.mjs +51 -19
  72. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  73. package/dist/admin/src/components/ActionsDrawer.d.ts +17 -1
  74. package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +5 -0
  75. package/dist/admin/utils/validation.js +2 -3
  76. package/dist/admin/utils/validation.js.map +1 -1
  77. package/dist/admin/utils/validation.mjs +2 -3
  78. package/dist/admin/utils/validation.mjs.map +1 -1
  79. package/dist/server/history/services/lifecycles.js +31 -10
  80. package/dist/server/history/services/lifecycles.js.map +1 -1
  81. package/dist/server/history/services/lifecycles.mjs +31 -10
  82. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  83. package/dist/server/preview/services/preview.js +1 -1
  84. package/dist/server/preview/services/preview.js.map +1 -1
  85. package/dist/server/preview/services/preview.mjs +1 -1
  86. package/dist/server/preview/services/preview.mjs.map +1 -1
  87. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  88. package/dist/server/src/preview/services/index.d.ts +1 -1
  89. package/dist/server/src/preview/utils.d.ts +1 -1
  90. package/package.json +8 -8
@@ -59,10 +59,12 @@ const Header = ({ isCreating, status, title: documentTitle = 'Untitled' })=>{
59
59
  justifyContent: "space-between",
60
60
  alignItems: "flex-start",
61
61
  width: "100%",
62
+ overflow: "hidden",
62
63
  children: [
63
64
  /*#__PURE__*/ jsx(Typography, {
64
65
  variant: "alpha",
65
66
  tag: "h1",
67
+ overflow: "hidden",
66
68
  children: title
67
69
  }),
68
70
  /*#__PURE__*/ jsx(Box, {
@@ -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 gap={2} justifyContent=\"space-between\" alignItems=\"flex-start\" width=\"100%\">\n <Typography variant=\"alpha\" tag=\"h1\">\n {title}\n </Typography>\n <Box display={{ initial: 'block', medium: 'none' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n <Flex width={{ initial: '100%', medium: 'auto' }} gap={3} justifyContent=\"space-between\">\n {isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <HeaderToolbar activeTab={activeTab} isCloning={isCloning} />\n </Flex>\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\ninterface HeaderActionDescription {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n dialog?: DialogOptions;\n options?: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n /**\n * @internal\n * @description\n * Internal SelectOption renderer used to display the status of AI translation background jobs\n */\n _render?: () => React.ReactNode;\n }>;\n /**\n * @internal\n * @description\n * Internal document header action to display the status of AI translation background jobs\n */\n _status?: {\n message: React.ReactNode;\n tooltip?: React.ReactNode;\n };\n onSelect?: (value: string) => void;\n value?: string;\n customizeContent?: (value: string) => React.ReactNode;\n}\n\ninterface HeaderDocumentActionsProps {\n activeTab: 'draft' | 'published';\n isCloning: boolean;\n}\n\nconst HeaderDocumentActions = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const { formatMessage } = useIntl();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n return (\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('header')}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n <Information activeTab={activeTab} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <Box display={{ initial: 'none', medium: 'block' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n );\n};\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta } = useDoc();\n\n if (!document || !document.id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Updated',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Created',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={2}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography tag=\"dd\" variant=\"pi\" textColor=\"neutral600\">\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n\n const handleClick =\n (action: HeaderActionDescription & { id: string }) => async (e: React.MouseEvent) => {\n if (!('options' in action)) {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <Flex gap={1}>\n {actions.map((action) => {\n if (action.options) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n aria-label={action.label}\n {...action}\n >\n {action.options.map(({ label, ...option }) => {\n if (option._render) {\n return option._render();\n }\n\n return (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n } else if (action._status) {\n return (\n <HeaderActionStatus tooltip={action._status?.tooltip} key={action.id}>\n {action._status.message}\n </HeaderActionStatus>\n );\n } else {\n return (\n <React.Fragment key={action.id}>\n <IconButton\n disabled={action.disabled}\n label={action.label}\n size=\"S\"\n onClick={handleClick(action)}\n >\n {action.icon}\n </IconButton>\n {action.dialog ? (\n <HeaderActionDialog\n {...action.dialog}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n </React.Fragment>\n );\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionStatusProps {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst HeaderActionStatus = ({ tooltip, children }: HeaderActionStatusProps) => {\n const [open, setOpen] = React.useState(false);\n // Debounce the open/close so the user can hover over the popover content before it closes\n const debouncedOpen = useDebounce(open, 100);\n\n const handleMouseEnter = () => {\n if (tooltip) {\n setOpen(true);\n }\n };\n const handleMouseLeave = () => {\n if (tooltip) {\n setOpen(false);\n }\n };\n\n return (\n <Popover.Root open={debouncedOpen} onOpenChange={setOpen}>\n <Popover.Anchor\n style={{ alignSelf: 'stretch' }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-describedby=\"document-header-action-status\"\n >\n <Box height=\"100%\">{children}</Box>\n </Popover.Anchor>\n <Popover.Content\n role=\"tooltip\"\n id=\"document-header-action-status\"\n side=\"bottom\"\n align=\"center\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {tooltip}\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionDialog\n * -----------------------------------------------------------------------------------------------*/\ninterface HeaderActionDialogProps {\n onClose: () => void;\n onCancel?: () => Promise<void>;\n title: string;\n content?: React.ReactNode | ((props: { onClose: () => void }) => React.ReactNode);\n isOpen: boolean;\n}\n\nconst HeaderActionDialog = ({\n onClose,\n onCancel,\n title,\n content: Content,\n isOpen,\n}: HeaderActionDialogProps) => {\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n {typeof Content === 'function' ? <Content onClose={handleClose} /> : Content}\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n }\n : null;\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\nConfigureTheViewAction.position = 'header';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n }\n : null;\n};\n\nEditTheModelAction.type = 'edit-the-model';\nEditTheModelAction.position = 'header';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n const isLocalized = document?.locale != null;\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage(\n {\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete entry{isLocalized, select, true { (all locales)} other {}}',\n },\n { isLocalized }\n ),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\nDeleteAction.position = ['header', 'table-row'];\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n"],"names":["Header","isCreating","status","title","documentTitle","formatMessage","useIntl","isCloning","useMatch","CLONE_PATH","isMobile","useIsMobile","params","useParams","query","activeTab","useQueryParams","id","defaultMessage","_jsxs","Flex","direction","alignItems","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","paddingTop","initial","medium","paddingBottom","gap","_jsx","BackButton","fallback","collectionType","SINGLE_TYPES","undefined","COLLECTION_TYPES","slug","width","justifyContent","Typography","variant","tag","Box","display","HeaderDocumentActions","HeaderToolbar","marginTop","DocumentStatus","model","document","meta","useDoc","plugins","useStrapiApp","state","DescriptionComponentRenderer","props","documentId","descriptions","apis","getDocumentActions","actions","headerActions","filter","action","positions","Array","isArray","position","includes","DocumentActionsMenu","label","Information","getHeaderActions","length","HeaderActions","createAndUpdateDocument","availableStatus","find","publishedAt","publishDocument","creator","CREATED_BY_ATTRIBUTE_NAME","getDisplayName","updator","UPDATED_BY_ATTRIBUTE_NAME","information","isDisplayed","PUBLISHED_AT_ATTRIBUTE_NAME","value","time","RelativeTime","timestamp","Date","isAnonymous","PUBLISHED_BY_ATTRIBUTE_NAME","author","UPDATED_AT_ATTRIBUTE_NAME","CREATED_AT_ATTRIBUTE_NAME","info","borderWidth","borderStyle","borderColor","padding","marginLeft","marginRight","map","fontWeight","textColor","dialogId","setDialogId","React","useState","handleClick","e","onClick","dialog","muteDialog","preventDefault","handleClose","options","SingleSelect","size","onChange","onSelect","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","message","Fragment","IconButton","disabled","icon","HeaderActionDialog","isOpen","onClose","children","open","setOpen","debouncedOpen","useDebounce","handleMouseEnter","handleMouseLeave","Popover","Root","onOpenChange","Anchor","style","alignSelf","onMouseEnter","onMouseLeave","aria-describedby","height","Content","role","side","align","onCancel","content","Dialog","ConfigureTheViewAction","navigate","useNavigate","isDesktop","useIsDesktop","ListPlus","type","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","toggleNotification","useNotification","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"Header.mjs","sources":["../../../../../admin/src/pages/EditView/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useForm,\n BackButton,\n useNotification,\n useStrapiApp,\n useQueryParams,\n useIsDesktop,\n useDebounce,\n RESPONSIVE_DEFAULT_SPACING,\n useIsMobile,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n SingleSelect,\n SingleSelectOption,\n Typography,\n IconButton,\n Dialog,\n Popover,\n} from '@strapi/design-system';\nimport { ListPlus, Pencil, Trash, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport {\n CREATED_AT_ATTRIBUTE_NAME,\n CREATED_BY_ATTRIBUTE_NAME,\n PUBLISHED_AT_ATTRIBUTE_NAME,\n PUBLISHED_BY_ATTRIBUTE_NAME,\n UPDATED_AT_ATTRIBUTE_NAME,\n UPDATED_BY_ATTRIBUTE_NAME,\n} from '../../../constants/attributes';\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { getDisplayName } from '../../../utils/users';\n\nimport { DocumentActionsMenu } from './DocumentActions';\nimport { DocumentStatus } from './DocumentStatus';\n\nimport type { ContentManagerPlugin, DocumentActionComponent } from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n isCreating?: boolean;\n status?: 'draft' | 'published' | 'modified';\n title?: string;\n}\n\nconst Header = ({ isCreating, status, title: documentTitle = 'Untitled' }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const isCloning = useMatch(CLONE_PATH) !== null;\n const isMobile = useIsMobile();\n const params = useParams<{ collectionType: string; slug: string }>();\n const [\n {\n query: { status: activeTab = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const title = isCreating\n ? formatMessage({\n id: 'content-manager.containers.edit.title.new',\n defaultMessage: 'Create an entry',\n })\n : documentTitle;\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingTop={{\n initial: 4,\n medium: 6,\n }}\n paddingBottom={4}\n gap={2}\n >\n {!isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <Flex\n width=\"100%\"\n justifyContent=\"space-between\"\n gap={{\n initial: 2,\n medium: '8rem',\n }}\n alignItems=\"flex-start\"\n direction={{\n initial: 'column-reverse',\n medium: 'row',\n }}\n >\n <Flex\n gap={2}\n justifyContent=\"space-between\"\n alignItems=\"flex-start\"\n width=\"100%\"\n overflow=\"hidden\"\n >\n <Typography variant=\"alpha\" tag=\"h1\" overflow=\"hidden\">\n {title}\n </Typography>\n <Box display={{ initial: 'block', medium: 'none' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n <Flex width={{ initial: '100%', medium: 'auto' }} gap={3} justifyContent=\"space-between\">\n {isMobile && (\n <BackButton\n fallback={\n params.collectionType === SINGLE_TYPES\n ? undefined\n : `../${COLLECTION_TYPES}/${params.slug}`\n }\n />\n )}\n <HeaderToolbar activeTab={activeTab} isCloning={isCloning} />\n </Flex>\n </Flex>\n {status ? (\n <Box marginTop={1}>\n <DocumentStatus status={isCloning ? 'draft' : status} />\n </Box>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderToolbar\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\ninterface HeaderActionDescription {\n disabled?: boolean;\n label: string;\n icon?: React.ReactNode;\n type?: 'icon' | 'default';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n dialog?: DialogOptions;\n options?: Array<{\n disabled?: boolean;\n label: string;\n startIcon?: React.ReactNode;\n textValue?: string;\n value: string;\n /**\n * @internal\n * @description\n * Internal SelectOption renderer used to display the status of AI translation background jobs\n */\n _render?: () => React.ReactNode;\n }>;\n /**\n * @internal\n * @description\n * Internal document header action to display the status of AI translation background jobs\n */\n _status?: {\n message: React.ReactNode;\n tooltip?: React.ReactNode;\n };\n onSelect?: (value: string) => void;\n value?: string;\n customizeContent?: (value: string) => React.ReactNode;\n}\n\ninterface HeaderDocumentActionsProps {\n activeTab: 'draft' | 'published';\n isCloning: boolean;\n}\n\nconst HeaderDocumentActions = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const { formatMessage } = useIntl();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n return (\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('header')}\n >\n {(actions) => {\n const headerActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('header');\n });\n\n return (\n <DocumentActionsMenu\n actions={headerActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.header.more-actions',\n defaultMessage: 'More actions',\n })}\n >\n <Information activeTab={activeTab} />\n </DocumentActionsMenu>\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/**\n * @description Contains the document actions that have `position: header`, if there are\n * none we still render the menu because we render the information about the document there.\n */\nconst HeaderToolbar = ({ activeTab, isCloning }: HeaderDocumentActionsProps) => {\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('HeaderToolbar', (state) => state.plugins);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n activeTab,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getHeaderActions()}\n >\n {(actions) => {\n if (actions.length > 0) {\n return <HeaderActions actions={actions} />;\n } else {\n return null;\n }\n }}\n </DescriptionComponentRenderer>\n <Box display={{ initial: 'none', medium: 'block' }}>\n <HeaderDocumentActions activeTab={activeTab} isCloning={isCloning} />\n </Box>\n </Flex>\n );\n};\n\ninterface InformationProps {\n activeTab: 'draft' | 'published';\n}\n\nconst Information = ({ activeTab }: InformationProps) => {\n const { formatMessage } = useIntl();\n const { document, meta } = useDoc();\n\n if (!document || !document.id) {\n return null;\n }\n\n /**\n * Because in the backend separate entries are made for draft and published\n * documents, the creator fields are different for each of them. For example,\n * you could make your draft in January and then publish it for the first time\n * in Feb. This would make the createdAt value for the published entry in Feb\n * but really we want to show the document as a whole. The draft entry will also\n * never have the publishedAt values.\n *\n * So, we decipher which document to show the creator for based on the activeTab.\n */\n\n const createAndUpdateDocument =\n activeTab === 'draft'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt === null);\n\n const publishDocument =\n activeTab === 'published'\n ? document\n : meta?.availableStatus.find((status) => status.publishedAt !== null);\n\n const creator = createAndUpdateDocument?.[CREATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[CREATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const updator = createAndUpdateDocument?.[UPDATED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(createAndUpdateDocument[UPDATED_BY_ATTRIBUTE_NAME])\n : null;\n\n const information: Array<{ isDisplayed?: boolean; label: string; value: React.ReactNode }> = [\n {\n isDisplayed: !!publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-published.label',\n defaultMessage: 'Published',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-published.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime timestamp={new Date(publishDocument?.[PUBLISHED_AT_ATTRIBUTE_NAME])} />\n ),\n isAnonymous: !publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME],\n author: publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME]\n ? getDisplayName(publishDocument?.[PUBLISHED_BY_ATTRIBUTE_NAME])\n : null,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.last-draft.label',\n defaultMessage: 'Updated',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.last-draft.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[UPDATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !updator,\n author: updator,\n }\n ),\n },\n {\n isDisplayed: !!createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME],\n label: formatMessage({\n id: 'content-manager.containers.edit.information.document.label',\n defaultMessage: 'Created',\n }),\n value: formatMessage(\n {\n id: 'content-manager.containers.edit.information.document.value',\n defaultMessage: `{time}{isAnonymous, select, true {} other { by {author}}}`,\n },\n {\n time: (\n <RelativeTime\n timestamp={new Date(createAndUpdateDocument?.[CREATED_AT_ATTRIBUTE_NAME])}\n />\n ),\n isAnonymous: !creator,\n author: creator,\n }\n ),\n },\n ].filter((info) => info.isDisplayed);\n\n return (\n <Flex\n borderWidth=\"1px 0 0 0\"\n borderStyle=\"solid\"\n borderColor=\"neutral150\"\n direction=\"column\"\n marginTop={2}\n tag=\"dl\"\n padding={5}\n gap={3}\n alignItems=\"flex-start\"\n /**\n * The menu content has a padding of 4px, but we want our divider (the border top applied) to\n * be flush with the menu content. So we need to adjust the margin & width to account for the padding.\n */\n marginLeft=\"-0.4rem\"\n marginRight=\"-0.4rem\"\n width=\"calc(100% + 8px)\"\n >\n {information.map((info) => (\n <Flex gap={1} direction=\"column\" alignItems=\"flex-start\" key={info.label}>\n <Typography tag=\"dt\" variant=\"pi\" fontWeight=\"bold\">\n {info.label}\n </Typography>\n <Typography tag=\"dd\" variant=\"pi\" textColor=\"neutral600\">\n {info.value}\n </Typography>\n </Flex>\n ))}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionsProps {\n actions: Array<HeaderActionDescription & { id: string }>;\n}\n\nconst HeaderActions = ({ actions }: HeaderActionsProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n\n const handleClick =\n (action: HeaderActionDescription & { id: string }) => async (e: React.MouseEvent) => {\n if (!('options' in action)) {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <Flex gap={1}>\n {actions.map((action) => {\n if (action.options) {\n return (\n <SingleSelect\n key={action.id}\n size=\"S\"\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={action.onSelect}\n aria-label={action.label}\n {...action}\n >\n {action.options.map(({ label, ...option }) => {\n if (option._render) {\n return option._render();\n }\n\n return (\n <SingleSelectOption key={option.value} {...option}>\n {label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n } else if (action._status) {\n return (\n <HeaderActionStatus tooltip={action._status?.tooltip} key={action.id}>\n {action._status.message}\n </HeaderActionStatus>\n );\n } else {\n return (\n <React.Fragment key={action.id}>\n <IconButton\n disabled={action.disabled}\n label={action.label}\n size=\"S\"\n onClick={handleClick(action)}\n >\n {action.icon}\n </IconButton>\n {action.dialog ? (\n <HeaderActionDialog\n {...action.dialog}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n </React.Fragment>\n );\n }\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderActionStatusProps {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst HeaderActionStatus = ({ tooltip, children }: HeaderActionStatusProps) => {\n const [open, setOpen] = React.useState(false);\n // Debounce the open/close so the user can hover over the popover content before it closes\n const debouncedOpen = useDebounce(open, 100);\n\n const handleMouseEnter = () => {\n if (tooltip) {\n setOpen(true);\n }\n };\n const handleMouseLeave = () => {\n if (tooltip) {\n setOpen(false);\n }\n };\n\n return (\n <Popover.Root open={debouncedOpen} onOpenChange={setOpen}>\n <Popover.Anchor\n style={{ alignSelf: 'stretch' }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-describedby=\"document-header-action-status\"\n >\n <Box height=\"100%\">{children}</Box>\n </Popover.Anchor>\n <Popover.Content\n role=\"tooltip\"\n id=\"document-header-action-status\"\n side=\"bottom\"\n align=\"center\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {tooltip}\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderActionDialog\n * -----------------------------------------------------------------------------------------------*/\ninterface HeaderActionDialogProps {\n onClose: () => void;\n onCancel?: () => Promise<void>;\n title: string;\n content?: React.ReactNode | ((props: { onClose: () => void }) => React.ReactNode);\n isOpen: boolean;\n}\n\nconst HeaderActionDialog = ({\n onClose,\n onCancel,\n title,\n content: Content,\n isOpen,\n}: HeaderActionDialogProps) => {\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={handleClose}>\n <Dialog.Content>\n <Dialog.Header>{title}</Dialog.Header>\n {typeof Content === 'function' ? <Content onClose={handleClose} /> : Content}\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfigureTheViewAction: DocumentActionComponent = ({ collectionType, model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n }),\n icon: <ListPlus />,\n onClick: () => {\n navigate(`../${collectionType}/${model}/configurations/edit`);\n },\n position: 'header',\n }\n : null;\n};\n\nConfigureTheViewAction.type = 'configure-the-view';\nConfigureTheViewAction.position = 'header';\n\nconst EditTheModelAction: DocumentActionComponent = ({ model }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n return isDesktop\n ? {\n label: formatMessage({\n id: 'content-manager.link-to-ctb',\n defaultMessage: 'Edit the model',\n }),\n icon: <Pencil />,\n onClick: () => {\n navigate(`/plugins/content-type-builder/content-types/${model}`);\n },\n position: 'header',\n }\n : null;\n};\n\nEditTheModelAction.type = 'edit-the-model';\nEditTheModelAction.position = 'header';\n\nconst DeleteAction: DocumentActionComponent = ({ documentId, model, collectionType, document }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const listViewPathMatch = useMatch(LIST_PATH);\n const canDelete = useDocumentRBAC('DeleteAction', (state) => state.canDelete);\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { toggleNotification } = useNotification();\n const setSubmitting = useForm('DeleteAction', (state) => state.setSubmitting);\n const isLocalized = document?.locale != null;\n\n return {\n disabled: !canDelete || !document,\n label: formatMessage(\n {\n id: 'content-manager.actions.delete.label',\n defaultMessage: 'Delete entry{isLocalized, select, true { (all locales)} other {}}',\n },\n { isLocalized }\n ),\n icon: <Trash />,\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: 'content-manager.actions.delete.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n /**\n * If we have a match, we're in the list view\n * and therefore not in a form and shouldn't be\n * trying to set the submitting value.\n */\n if (!listViewPathMatch) {\n setSubmitting(true);\n }\n try {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n console.error(\n \"You're trying to delete a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.delete.error',\n defaultMessage: 'An error occurred while trying to delete the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: {\n locale: '*',\n },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n } finally {\n if (!listViewPathMatch) {\n setSubmitting(false);\n }\n }\n },\n },\n variant: 'danger',\n position: ['header', 'table-row'],\n };\n};\n\nDeleteAction.type = 'delete';\nDeleteAction.position = ['header', 'table-row'];\n\nconst DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction];\n\nexport { Header, DEFAULT_HEADER_ACTIONS };\nexport type { HeaderProps, HeaderActionDescription };\n"],"names":["Header","isCreating","status","title","documentTitle","formatMessage","useIntl","isCloning","useMatch","CLONE_PATH","isMobile","useIsMobile","params","useParams","query","activeTab","useQueryParams","id","defaultMessage","_jsxs","Flex","direction","alignItems","paddingLeft","RESPONSIVE_DEFAULT_SPACING","paddingRight","paddingTop","initial","medium","paddingBottom","gap","_jsx","BackButton","fallback","collectionType","SINGLE_TYPES","undefined","COLLECTION_TYPES","slug","width","justifyContent","overflow","Typography","variant","tag","Box","display","HeaderDocumentActions","HeaderToolbar","marginTop","DocumentStatus","model","document","meta","useDoc","plugins","useStrapiApp","state","DescriptionComponentRenderer","props","documentId","descriptions","apis","getDocumentActions","actions","headerActions","filter","action","positions","Array","isArray","position","includes","DocumentActionsMenu","label","Information","getHeaderActions","length","HeaderActions","createAndUpdateDocument","availableStatus","find","publishedAt","publishDocument","creator","CREATED_BY_ATTRIBUTE_NAME","getDisplayName","updator","UPDATED_BY_ATTRIBUTE_NAME","information","isDisplayed","PUBLISHED_AT_ATTRIBUTE_NAME","value","time","RelativeTime","timestamp","Date","isAnonymous","PUBLISHED_BY_ATTRIBUTE_NAME","author","UPDATED_AT_ATTRIBUTE_NAME","CREATED_AT_ATTRIBUTE_NAME","info","borderWidth","borderStyle","borderColor","padding","marginLeft","marginRight","map","fontWeight","textColor","dialogId","setDialogId","React","useState","handleClick","e","onClick","dialog","muteDialog","preventDefault","handleClose","options","SingleSelect","size","onChange","onSelect","aria-label","option","_render","SingleSelectOption","_status","HeaderActionStatus","tooltip","message","Fragment","IconButton","disabled","icon","HeaderActionDialog","isOpen","onClose","children","open","setOpen","debouncedOpen","useDebounce","handleMouseEnter","handleMouseLeave","Popover","Root","onOpenChange","Anchor","style","alignSelf","onMouseEnter","onMouseLeave","aria-describedby","height","Content","role","side","align","onCancel","content","Dialog","ConfigureTheViewAction","navigate","useNavigate","isDesktop","useIsDesktop","ListPlus","type","EditTheModelAction","Pencil","DeleteAction","listViewPathMatch","LIST_PATH","canDelete","useDocumentRBAC","delete","deleteAction","isLoading","useDocumentActions","toggleNotification","useNotification","setSubmitting","useForm","isLocalized","locale","Trash","WarningCircle","fill","textAlign","loading","onConfirm","console","error","res","pathname","replace","DEFAULT_HEADER_ACTIONS"],"mappings":";;;;;;;;;;;;;;;;;;AA2DMA,MAAAA,MAAAA,GAAS,CAAC,EAAEC,UAAU,EAAEC,MAAM,EAAEC,KAAAA,EAAOC,aAAgB,GAAA,UAAU,EAAe,GAAA;IACpF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAMC,SAAAA,GAAYC,SAASC,UAAgB,CAAA,KAAA,IAAA;AAC3C,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AACjB,IAAA,MAAMC,MAASC,GAAAA,SAAAA,EAAAA;IACf,MAAM,CACJ,EACEC,KAAAA,EAAO,EAAEZ,MAAAA,EAAQa,YAAY,OAAO,EAAE,EACvC,CACF,GAAGC,cAAAA,EAAAA;IAEJ,MAAMb,KAAAA,GAAQF,aACVI,aAAc,CAAA;QACZY,EAAI,EAAA,2CAAA;QACJC,cAAgB,EAAA;KAElBd,CAAAA,GAAAA,aAAAA;AAEJ,IAAA,qBACEe,IAACC,CAAAA,IAAAA,EAAAA;QACCC,SAAU,EAAA,QAAA;QACVC,UAAW,EAAA,YAAA;QACXC,WAAaC,EAAAA,0BAAAA;QACbC,YAAcD,EAAAA,0BAAAA;QACdE,UAAY,EAAA;YACVC,OAAS,EAAA,CAAA;YACTC,MAAQ,EAAA;AACV,SAAA;QACAC,aAAe,EAAA,CAAA;QACfC,GAAK,EAAA,CAAA;;AAEJ,YAAA,CAACpB,0BACAqB,GAACC,CAAAA,UAAAA,EAAAA;AACCC,gBAAAA,QAAAA,EACErB,MAAOsB,CAAAA,cAAc,KAAKC,YAAAA,GACtBC,SACA,GAAA,CAAC,GAAG,EAAEC,gBAAiB,CAAA,CAAC,EAAEzB,MAAAA,CAAO0B,IAAI,CAAE;;0BAIjDnB,IAACC,CAAAA,IAAAA,EAAAA;gBACCmB,KAAM,EAAA,MAAA;gBACNC,cAAe,EAAA,eAAA;gBACfV,GAAK,EAAA;oBACHH,OAAS,EAAA,CAAA;oBACTC,MAAQ,EAAA;AACV,iBAAA;gBACAN,UAAW,EAAA,YAAA;gBACXD,SAAW,EAAA;oBACTM,OAAS,EAAA,gBAAA;oBACTC,MAAQ,EAAA;AACV,iBAAA;;kCAEAT,IAACC,CAAAA,IAAAA,EAAAA;wBACCU,GAAK,EAAA,CAAA;wBACLU,cAAe,EAAA,eAAA;wBACflB,UAAW,EAAA,YAAA;wBACXiB,KAAM,EAAA,MAAA;wBACNE,QAAS,EAAA,QAAA;;0CAETV,GAACW,CAAAA,UAAAA,EAAAA;gCAAWC,OAAQ,EAAA,OAAA;gCAAQC,GAAI,EAAA,IAAA;gCAAKH,QAAS,EAAA,QAAA;AAC3CtC,gCAAAA,QAAAA,EAAAA;;0CAEH4B,GAACc,CAAAA,GAAAA,EAAAA;gCAAIC,OAAS,EAAA;oCAAEnB,OAAS,EAAA,OAAA;oCAASC,MAAQ,EAAA;AAAO,iCAAA;AAC/C,gCAAA,QAAA,gBAAAG,GAACgB,CAAAA,qBAAAA,EAAAA;oCAAsBhC,SAAWA,EAAAA,SAAAA;oCAAWR,SAAWA,EAAAA;;;;;kCAG5DY,IAACC,CAAAA,IAAAA,EAAAA;wBAAKmB,KAAO,EAAA;4BAAEZ,OAAS,EAAA,MAAA;4BAAQC,MAAQ,EAAA;AAAO,yBAAA;wBAAGE,GAAK,EAAA,CAAA;wBAAGU,cAAe,EAAA,eAAA;;AACtE9B,4BAAAA,QAAAA,kBACCqB,GAACC,CAAAA,UAAAA,EAAAA;AACCC,gCAAAA,QAAAA,EACErB,MAAOsB,CAAAA,cAAc,KAAKC,YAAAA,GACtBC,SACA,GAAA,CAAC,GAAG,EAAEC,gBAAiB,CAAA,CAAC,EAAEzB,MAAAA,CAAO0B,IAAI,CAAE;;0CAIjDP,GAACiB,CAAAA,aAAAA,EAAAA;gCAAcjC,SAAWA,EAAAA,SAAAA;gCAAWR,SAAWA,EAAAA;;;;;;AAGnDL,YAAAA,MAAAA,iBACC6B,GAACc,CAAAA,GAAAA,EAAAA;gBAAII,SAAW,EAAA,CAAA;AACd,gBAAA,QAAA,gBAAAlB,GAACmB,CAAAA,cAAAA,EAAAA;AAAehD,oBAAAA,MAAAA,EAAQK,YAAY,OAAUL,GAAAA;;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,YAAa,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMF,OAAO,CAAA;AACtE,IAAA,qBACExB,GAAC2B,CAAAA,4BAAAA,EAAAA;QACCC,KAAO,EAAA;AACL5C,YAAAA,SAAAA;AACAoC,YAAAA,KAAAA;YACAS,UAAY3C,EAAAA,EAAAA;AACZmC,YAAAA,QAAAA,EAAU7C,YAAY6B,SAAYgB,GAAAA,QAAAA;AAClCC,YAAAA,IAAAA,EAAM9C,YAAY6B,SAAYiB,GAAAA,IAAAA;AAC9BnB,YAAAA;AACF,SAAA;QACA2B,YAAc,EACZN,OAAO,CAAC,iBAAA,CAAkB,CAACO,IAAI,CAC/BC,kBAAkB,CAAC,QAAA,CAAA;kBAEpB,CAACC,OAAAA,GAAAA;AACA,YAAA,MAAMC,aAAgBD,GAAAA,OAAAA,CAAQE,MAAM,CAAC,CAACC,MAAAA,GAAAA;gBACpC,MAAMC,SAAAA,GAAYC,MAAMC,OAAO,CAACH,OAAOI,QAAQ,CAAA,GAAIJ,MAAOI,CAAAA,QAAQ,GAAG;AAACJ,oBAAAA,MAAAA,CAAOI;AAAS,iBAAA;gBACtF,OAAOH,SAAAA,CAAUI,QAAQ,CAAC,QAAA,CAAA;AAC5B,aAAA,CAAA;AAEA,YAAA,qBACEzC,GAAC0C,CAAAA,mBAAAA,EAAAA;gBACCT,OAASC,EAAAA,aAAAA;AACTS,gBAAAA,KAAAA,EAAOrE,aAAc,CAAA;oBACnBY,EAAI,EAAA,qDAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AAEA,gBAAA,QAAA,gBAAAa,GAAC4C,CAAAA,WAAAA,EAAAA;oBAAY5D,SAAWA,EAAAA;;;AAG9B;;AAGN,CAAA;AAEA;;;AAGC,IACD,MAAMiC,aAAgB,GAAA,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,YAAa,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMF,OAAO,CAAA;AAEtE,IAAA,qBACEpC,IAACC,CAAAA,IAAAA,EAAAA;QAAKU,GAAK,EAAA,CAAA;;0BACTC,GAAC2B,CAAAA,4BAAAA,EAAAA;gBACCC,KAAO,EAAA;AACL5C,oBAAAA,SAAAA;AACAoC,oBAAAA,KAAAA;oBACAS,UAAY3C,EAAAA,EAAAA;AACZmC,oBAAAA,QAAAA,EAAU7C,YAAY6B,SAAYgB,GAAAA,QAAAA;AAClCC,oBAAAA,IAAAA,EAAM9C,YAAY6B,SAAYiB,GAAAA,IAAAA;AAC9BnB,oBAAAA;AACF,iBAAA;AACA2B,gBAAAA,YAAAA,EAAc,OACL,CAAC,kBAAkB,CAACC,IAAI,CAC/Bc,gBAAgB,EAAA;0BAEjB,CAACZ,OAAAA,GAAAA;oBACA,IAAIA,OAAAA,CAAQa,MAAM,GAAG,CAAG,EAAA;AACtB,wBAAA,qBAAO9C,GAAC+C,CAAAA,aAAAA,EAAAA;4BAAcd,OAASA,EAAAA;;qBAC1B,MAAA;wBACL,OAAO,IAAA;AACT;AACF;;0BAEFjC,GAACc,CAAAA,GAAAA,EAAAA;gBAAIC,OAAS,EAAA;oBAAEnB,OAAS,EAAA,MAAA;oBAAQC,MAAQ,EAAA;AAAQ,iBAAA;AAC/C,gBAAA,QAAA,gBAAAG,GAACgB,CAAAA,qBAAAA,EAAAA;oBAAsBhC,SAAWA,EAAAA,SAAAA;oBAAWR,SAAWA,EAAAA;;;;;AAIhE,CAAA;AAMA,MAAMoE,WAAc,GAAA,CAAC,EAAE5D,SAAS,EAAoB,GAAA;IAClD,MAAM,EAAEV,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAE8C,QAAQ,EAAEC,IAAI,EAAE,GAAGC,MAAAA,EAAAA;AAE3B,IAAA,IAAI,CAACF,QAAAA,IAAY,CAACA,QAAAA,CAASnC,EAAE,EAAE;QAC7B,OAAO,IAAA;AACT;AAEA;;;;;;;;;AASC,MAED,MAAM8D,uBAAAA,GACJhE,SAAc,KAAA,OAAA,GACVqC,QACAC,GAAAA,IAAAA,EAAM2B,eAAgBC,CAAAA,IAAAA,CAAK,CAAC/E,MAAAA,GAAWA,MAAOgF,CAAAA,WAAW,KAAK,IAAA,CAAA;IAEpE,MAAMC,eAAAA,GACJpE,SAAc,KAAA,WAAA,GACVqC,QACAC,GAAAA,IAAAA,EAAM2B,eAAgBC,CAAAA,IAAAA,CAAK,CAAC/E,MAAAA,GAAWA,MAAOgF,CAAAA,WAAW,KAAK,IAAA,CAAA;IAEpE,MAAME,OAAAA,GAAUL,0BAA0BM,yBAAAA,CAA0B,GAChEC,cAAeP,CAAAA,uBAAuB,CAACM,yBAAAA,CAA0B,CACjE,GAAA,IAAA;IAEJ,MAAME,OAAAA,GAAUR,0BAA0BS,yBAAAA,CAA0B,GAChEF,cAAeP,CAAAA,uBAAuB,CAACS,yBAAAA,CAA0B,CACjE,GAAA,IAAA;AAEJ,IAAA,MAAMC,WAAuF,GAAA;AAC3F,QAAA;AACEC,YAAAA,WAAAA,EAAa,CAAC,CAACP,eAAiB,GAACQ,2BAA4B,CAAA;AAC7DjB,YAAAA,KAAAA,EAAOrE,aAAc,CAAA;gBACnBY,EAAI,EAAA,kEAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACA0E,YAAAA,KAAAA,EAAOvF,aACL,CAAA;gBACEY,EAAI,EAAA,kEAAA;gBACJC,cAAgB,EAAA,CAAC,yDAAyD;aAE5E,EAAA;AACE2E,gBAAAA,IAAAA,gBACE9D,GAAC+D,CAAAA,YAAAA,EAAAA;AAAaC,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA,CAAKb,eAAiB,GAACQ,2BAA4B,CAAA;;gBAElFM,WAAa,EAAA,CAACd,eAAiB,GAACe,2BAA4B,CAAA;gBAC5DC,MAAQhB,EAAAA,eAAAA,GAAkBe,2BAA4B,CAAA,GAClDZ,eAAeH,eAAiB,GAACe,4BAA4B,CAC7D,GAAA;AACN,aAAA;AAEJ,SAAA;AACA,QAAA;AACER,YAAAA,WAAAA,EAAa,CAAC,CAACX,uBAAyB,GAACqB,yBAA0B,CAAA;AACnE1B,YAAAA,KAAAA,EAAOrE,aAAc,CAAA;gBACnBY,EAAI,EAAA,8DAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACA0E,YAAAA,KAAAA,EAAOvF,aACL,CAAA;gBACEY,EAAI,EAAA,8DAAA;gBACJC,cAAgB,EAAA,CAAC,yDAAyD;aAE5E,EAAA;AACE2E,gBAAAA,IAAAA,gBACE9D,GAAC+D,CAAAA,YAAAA,EAAAA;AACCC,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA,CAAKjB,uBAAyB,GAACqB,yBAA0B,CAAA;;AAG5EH,gBAAAA,WAAAA,EAAa,CAACV,OAAAA;gBACdY,MAAQZ,EAAAA;AACV,aAAA;AAEJ,SAAA;AACA,QAAA;AACEG,YAAAA,WAAAA,EAAa,CAAC,CAACX,uBAAyB,GAACsB,yBAA0B,CAAA;AACnE3B,YAAAA,KAAAA,EAAOrE,aAAc,CAAA;gBACnBY,EAAI,EAAA,4DAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACA0E,YAAAA,KAAAA,EAAOvF,aACL,CAAA;gBACEY,EAAI,EAAA,4DAAA;gBACJC,cAAgB,EAAA,CAAC,yDAAyD;aAE5E,EAAA;AACE2E,gBAAAA,IAAAA,gBACE9D,GAAC+D,CAAAA,YAAAA,EAAAA;AACCC,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA,CAAKjB,uBAAyB,GAACsB,yBAA0B,CAAA;;AAG5EJ,gBAAAA,WAAAA,EAAa,CAACb,OAAAA;gBACde,MAAQf,EAAAA;AACV,aAAA;AAEJ;AACD,KAAA,CAAClB,MAAM,CAAC,CAACoC,IAAAA,GAASA,KAAKZ,WAAW,CAAA;AAEnC,IAAA,qBACE3D,GAACX,CAAAA,IAAAA,EAAAA;QACCmF,WAAY,EAAA,WAAA;QACZC,WAAY,EAAA,OAAA;QACZC,WAAY,EAAA,YAAA;QACZpF,SAAU,EAAA,QAAA;QACV4B,SAAW,EAAA,CAAA;QACXL,GAAI,EAAA,IAAA;QACJ8D,OAAS,EAAA,CAAA;QACT5E,GAAK,EAAA,CAAA;QACLR,UAAW,EAAA,YAAA;AACX;;;AAGC,UACDqF,UAAW,EAAA,SAAA;QACXC,WAAY,EAAA,SAAA;QACZrE,KAAM,EAAA,kBAAA;AAELkD,QAAAA,QAAAA,EAAAA,WAAAA,CAAYoB,GAAG,CAAC,CAACP,IAAAA,iBAChBnF,IAACC,CAAAA,IAAAA,EAAAA;gBAAKU,GAAK,EAAA,CAAA;gBAAGT,SAAU,EAAA,QAAA;gBAASC,UAAW,EAAA,YAAA;;kCAC1CS,GAACW,CAAAA,UAAAA,EAAAA;wBAAWE,GAAI,EAAA,IAAA;wBAAKD,OAAQ,EAAA,IAAA;wBAAKmE,UAAW,EAAA,MAAA;AAC1CR,wBAAAA,QAAAA,EAAAA,IAAAA,CAAK5B;;kCAER3C,GAACW,CAAAA,UAAAA,EAAAA;wBAAWE,GAAI,EAAA,IAAA;wBAAKD,OAAQ,EAAA,IAAA;wBAAKoE,SAAU,EAAA,YAAA;AACzCT,wBAAAA,QAAAA,EAAAA,IAAAA,CAAKV;;;AALoDU,aAAAA,EAAAA,IAAAA,CAAK5B,KAAK,CAAA;;AAWhF,CAAA;AAUA,MAAMI,aAAgB,GAAA,CAAC,EAAEd,OAAO,EAAsB,GAAA;AACpD,IAAA,MAAM,CAACgD,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,KAAAA,CAAMC,QAAQ,CAAgB,IAAA,CAAA;IAE9D,MAAMC,WAAAA,GACJ,CAACjD,MAAAA,GAAqD,OAAOkD,CAAAA,GAAAA;AAC3D,YAAA,IAAI,EAAE,SAAalD,IAAAA,MAAK,CAAI,EAAA;gBAC1B,MAAM,EAAEmD,UAAU,IAAM,KAAK,EAAEC,MAAM,EAAEtG,EAAE,EAAE,GAAGkD,MAAAA;gBAE9C,MAAMqD,UAAAA,GAAa,MAAMF,OAAQD,CAAAA,CAAAA,CAAAA;gBAEjC,IAAIE,MAAAA,IAAU,CAACC,UAAY,EAAA;AACzBH,oBAAAA,CAAAA,CAAEI,cAAc,EAAA;oBAChBR,WAAYhG,CAAAA,EAAAA,CAAAA;AACd;AACF;AACF,SAAA;AAEF,IAAA,MAAMyG,WAAc,GAAA,IAAA;QAClBT,WAAY,CAAA,IAAA,CAAA;AACd,KAAA;AAEA,IAAA,qBACElF,GAACX,CAAAA,IAAAA,EAAAA;QAAKU,GAAK,EAAA,CAAA;kBACRkC,OAAQ6C,CAAAA,GAAG,CAAC,CAAC1C,MAAAA,GAAAA;YACZ,IAAIA,MAAAA,CAAOwD,OAAO,EAAE;AAClB,gBAAA,qBACE5F,GAAC6F,CAAAA,YAAAA,EAAAA;oBAECC,IAAK,EAAA,GAAA;;AAELC,oBAAAA,QAAAA,EAAU3D,OAAO4D,QAAQ;AACzBC,oBAAAA,YAAAA,EAAY7D,OAAOO,KAAK;AACvB,oBAAA,GAAGP,MAAM;8BAETA,MAAOwD,CAAAA,OAAO,CAACd,GAAG,CAAC,CAAC,EAAEnC,KAAK,EAAE,GAAGuD,MAAQ,EAAA,GAAA;wBACvC,IAAIA,MAAAA,CAAOC,OAAO,EAAE;AAClB,4BAAA,OAAOD,OAAOC,OAAO,EAAA;AACvB;AAEA,wBAAA,qBACEnG,GAACoG,CAAAA,kBAAAA,EAAAA;AAAuC,4BAAA,GAAGF,MAAM;AAC9CvD,4BAAAA,QAAAA,EAAAA;AADsBuD,yBAAAA,EAAAA,MAAAA,CAAOrC,KAAK,CAAA;AAIzC,qBAAA;AAjBKzB,iBAAAA,EAAAA,MAAAA,CAAOlD,EAAE,CAAA;aAoBb,MAAA,IAAIkD,MAAOiE,CAAAA,OAAO,EAAE;AACzB,gBAAA,qBACErG,GAACsG,CAAAA,kBAAAA,EAAAA;oBAAmBC,OAASnE,EAAAA,MAAAA,CAAOiE,OAAO,EAAEE,OAAAA;8BAC1CnE,MAAOiE,CAAAA,OAAO,CAACG;AADyCpE,iBAAAA,EAAAA,MAAAA,CAAOlD,EAAE,CAAA;aAIjE,MAAA;gBACL,qBACEE,IAAA,CAAC+F,MAAMsB,QAAQ,EAAA;;sCACbzG,GAAC0G,CAAAA,UAAAA,EAAAA;AACCC,4BAAAA,QAAAA,EAAUvE,OAAOuE,QAAQ;AACzBhE,4BAAAA,KAAAA,EAAOP,OAAOO,KAAK;4BACnBmD,IAAK,EAAA,GAAA;AACLP,4BAAAA,OAAAA,EAASF,WAAYjD,CAAAA,MAAAA,CAAAA;AAEpBA,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOwE;;wBAETxE,MAAOoD,CAAAA,MAAM,iBACZxF,GAAC6G,CAAAA,kBAAAA,EAAAA;AACE,4BAAA,GAAGzE,OAAOoD,MAAM;4BACjBsB,MAAQ7B,EAAAA,QAAAA,KAAa7C,OAAOlD,EAAE;4BAC9B6H,OAASpB,EAAAA;AAET,yBAAA,CAAA,GAAA;;AAfevD,iBAAAA,EAAAA,MAAAA,CAAOlD,EAAE,CAAA;AAkBlC;AACF,SAAA;;AAGN,CAAA;AAWA,MAAMoH,qBAAqB,CAAC,EAAEC,OAAO,EAAES,QAAQ,EAA2B,GAAA;AACxE,IAAA,MAAM,CAACC,IAAMC,EAAAA,OAAAA,CAAQ,GAAG/B,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;;IAEvC,MAAM+B,aAAAA,GAAgBC,YAAYH,IAAM,EAAA,GAAA,CAAA;AAExC,IAAA,MAAMI,gBAAmB,GAAA,IAAA;AACvB,QAAA,IAAId,OAAS,EAAA;YACXW,OAAQ,CAAA,IAAA,CAAA;AACV;AACF,KAAA;AACA,IAAA,MAAMI,gBAAmB,GAAA,IAAA;AACvB,QAAA,IAAIf,OAAS,EAAA;YACXW,OAAQ,CAAA,KAAA,CAAA;AACV;AACF,KAAA;IAEA,qBACE9H,IAAA,CAACmI,QAAQC,IAAI,EAAA;QAACP,IAAME,EAAAA,aAAAA;QAAeM,YAAcP,EAAAA,OAAAA;;AAC/C,0BAAAlH,GAAA,CAACuH,QAAQG,MAAM,EAAA;gBACbC,KAAO,EAAA;oBAAEC,SAAW,EAAA;AAAU,iBAAA;gBAC9BC,YAAcR,EAAAA,gBAAAA;gBACdS,YAAcR,EAAAA,gBAAAA;gBACdS,kBAAiB,EAAA,+BAAA;AAEjB,gBAAA,QAAA,gBAAA/H,GAACc,CAAAA,GAAAA,EAAAA;oBAAIkH,MAAO,EAAA,MAAA;AAAQhB,oBAAAA,QAAAA,EAAAA;;;AAEtB,0BAAAhH,GAAA,CAACuH,QAAQU,OAAO,EAAA;gBACdC,IAAK,EAAA,SAAA;gBACLhJ,EAAG,EAAA,+BAAA;gBACHiJ,IAAK,EAAA,QAAA;gBACLC,KAAM,EAAA,QAAA;gBACNP,YAAcR,EAAAA,gBAAAA;gBACdS,YAAcR,EAAAA,gBAAAA;AAEbf,gBAAAA,QAAAA,EAAAA;;;;AAIT,CAAA;AAaA,MAAMM,kBAAqB,GAAA,CAAC,EAC1BE,OAAO,EACPsB,QAAQ,EACRjK,KAAK,EACLkK,OAAAA,EAASL,OAAO,EAChBnB,MAAM,EACkB,GAAA;AACxB,IAAA,MAAMnB,WAAc,GAAA,UAAA;AAClB,QAAA,IAAI0C,QAAU,EAAA;YACZ,MAAMA,QAAAA,EAAAA;AACR;AAEAtB,QAAAA,OAAAA,EAAAA;AACF,KAAA;IAEA,qBACE/G,GAAA,CAACuI,OAAOf,IAAI,EAAA;QAACP,IAAMH,EAAAA,MAAAA;QAAQW,YAAc9B,EAAAA,WAAAA;gCACvCvG,IAAA,CAACmJ,OAAON,OAAO,EAAA;;AACb,8BAAAjI,GAAA,CAACuI,OAAOtK,MAAM,EAAA;AAAEG,oBAAAA,QAAAA,EAAAA;;gBACf,OAAO6J,OAAAA,KAAY,2BAAajI,GAACiI,CAAAA,OAAAA,EAAAA;oBAAQlB,OAASpB,EAAAA;AAAkBsC,iBAAAA,CAAAA,GAAAA;;;;AAI7E,CAAA;AAEA;;AAEkG,qGAElG,MAAMO,sBAAkD,GAAA,CAAC,EAAErI,cAAc,EAAEiB,KAAK,EAAE,GAAA;AAChF,IAAA,MAAMqH,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEpK,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMoK,SAAYC,GAAAA,YAAAA,EAAAA;AAElB,IAAA,OAAOD,SACH,GAAA;AACEhG,QAAAA,KAAAA,EAAOrE,aAAc,CAAA;YACnBY,EAAI,EAAA,0BAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;AACAyH,QAAAA,IAAAA,gBAAM5G,GAAC6I,CAAAA,QAAAA,EAAAA,EAAAA,CAAAA;QACPtD,OAAS,EAAA,IAAA;YACPkD,QAAS,CAAA,CAAC,GAAG,EAAEtI,cAAAA,CAAe,CAAC,EAAEiB,KAAAA,CAAM,oBAAoB,CAAC,CAAA;AAC9D,SAAA;QACAoB,QAAU,EAAA;KAEZ,GAAA,IAAA;AACN,CAAA;AAEAgG,sBAAAA,CAAuBM,IAAI,GAAG,oBAAA;AAC9BN,sBAAAA,CAAuBhG,QAAQ,GAAG,QAAA;AAElC,MAAMuG,kBAA8C,GAAA,CAAC,EAAE3H,KAAK,EAAE,GAAA;AAC5D,IAAA,MAAMqH,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEpK,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMoK,SAAYC,GAAAA,YAAAA,EAAAA;AAElB,IAAA,OAAOD,SACH,GAAA;AACEhG,QAAAA,KAAAA,EAAOrE,aAAc,CAAA;YACnBY,EAAI,EAAA,6BAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;AACAyH,QAAAA,IAAAA,gBAAM5G,GAACgJ,CAAAA,MAAAA,EAAAA,EAAAA,CAAAA;QACPzD,OAAS,EAAA,IAAA;YACPkD,QAAS,CAAA,CAAC,4CAA4C,EAAErH,KAAO,CAAA,CAAA,CAAA;AACjE,SAAA;QACAoB,QAAU,EAAA;KAEZ,GAAA,IAAA;AACN,CAAA;AAEAuG,kBAAAA,CAAmBD,IAAI,GAAG,gBAAA;AAC1BC,kBAAAA,CAAmBvG,QAAQ,GAAG,QAAA;AAE9B,MAAMyG,YAAAA,GAAwC,CAAC,EAAEpH,UAAU,EAAET,KAAK,EAAEjB,cAAc,EAAEkB,QAAQ,EAAE,GAAA;AAC5F,IAAA,MAAMoH,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEpK,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM2K,oBAAoBzK,QAAS0K,CAAAA,SAAAA,CAAAA;AACnC,IAAA,MAAMC,YAAYC,eAAgB,CAAA,cAAA,EAAgB,CAAC3H,KAAAA,GAAUA,MAAM0H,SAAS,CAAA;AAC5E,IAAA,MAAM,EAAEE,MAAQC,EAAAA,YAAY,EAAEC,SAAS,EAAE,GAAGC,kBAAAA,EAAAA;IAC5C,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,gBAAgBC,OAAQ,CAAA,cAAA,EAAgB,CAACnI,KAAAA,GAAUA,MAAMkI,aAAa,CAAA;IAC5E,MAAME,WAAAA,GAAczI,UAAU0I,MAAU,IAAA,IAAA;IAExC,OAAO;QACLpD,QAAU,EAAA,CAACyC,aAAa,CAAC/H,QAAAA;AACzBsB,QAAAA,KAAAA,EAAOrE,aACL,CAAA;YACEY,EAAI,EAAA,sCAAA;YACJC,cAAgB,EAAA;SAElB,EAAA;AAAE2K,YAAAA;AAAY,SAAA,CAAA;AAEhBlD,QAAAA,IAAAA,gBAAM5G,GAACgK,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA;QACPxE,MAAQ,EAAA;YACNsD,IAAM,EAAA,QAAA;AACN1K,YAAAA,KAAAA,EAAOE,aAAc,CAAA;gBACnBY,EAAI,EAAA,oCAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACAmJ,YAAAA,OAAAA,gBACElJ,IAACC,CAAAA,IAAAA,EAAAA;gBAAKC,SAAU,EAAA,QAAA;gBAASS,GAAK,EAAA,CAAA;;kCAC5BC,GAACiK,CAAAA,aAAAA,EAAAA;wBAAczJ,KAAM,EAAA,MAAA;wBAAOwH,MAAO,EAAA,MAAA;wBAAOkC,IAAK,EAAA;;kCAC/ClK,GAACW,CAAAA,UAAAA,EAAAA;wBAAWE,GAAI,EAAA,GAAA;wBAAID,OAAQ,EAAA,OAAA;wBAAQuJ,SAAU,EAAA,QAAA;kCAC3C7L,aAAc,CAAA;4BACbY,EAAI,EAAA,4CAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA;;;;YAINiL,OAASZ,EAAAA,SAAAA;YACTa,SAAW,EAAA,UAAA;AACT;;;;YAKA,IAAI,CAACnB,iBAAmB,EAAA;oBACtBU,aAAc,CAAA,IAAA,CAAA;AAChB;gBACA,IAAI;oBACF,IAAI,CAAC/H,UAAc1B,IAAAA,cAAAA,KAAmBC,YAAc,EAAA;AAClDkK,wBAAAA,OAAAA,CAAQC,KAAK,CACX,2GAAA,CAAA;wBAGFb,kBAAmB,CAAA;AACjBlD,4BAAAA,OAAAA,EAASlI,aAAc,CAAA;gCACrBY,EAAI,EAAA,sCAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA,CAAA;4BACA2J,IAAM,EAAA;AACR,yBAAA,CAAA;AAEA,wBAAA;AACF;oBAEA,MAAM0B,GAAAA,GAAM,MAAMjB,YAAa,CAAA;AAC7B1H,wBAAAA,UAAAA;AACAT,wBAAAA,KAAAA;AACAjB,wBAAAA,cAAAA;wBACAtB,MAAQ,EAAA;4BACNkL,MAAQ,EAAA;AACV;AACF,qBAAA,CAAA;AAEA,oBAAA,IAAI,EAAE,OAAWS,IAAAA,GAAE,CAAI,EAAA;wBACrB/B,QAAS,CAAA;AAAEgC,4BAAAA,QAAAA,EAAU,CAAC,GAAG,EAAEtK,cAAe,CAAA,CAAC,EAAEiB,KAAO,CAAA;yBAAI,EAAA;4BAAEsJ,OAAS,EAAA;AAAK,yBAAA,CAAA;AAC1E;iBACQ,QAAA;AACR,oBAAA,IAAI,CAACxB,iBAAmB,EAAA;wBACtBU,aAAc,CAAA,KAAA,CAAA;AAChB;AACF;AACF;AACF,SAAA;QACAhJ,OAAS,EAAA,QAAA;QACT4B,QAAU,EAAA;AAAC,YAAA,QAAA;AAAU,YAAA;AAAY;AACnC,KAAA;AACF,CAAA;AAEAyG,YAAAA,CAAaH,IAAI,GAAG,QAAA;AACpBG,YAAAA,CAAazG,QAAQ,GAAG;AAAC,IAAA,QAAA;AAAU,IAAA;AAAY,CAAA;AAE/C,MAAMmI,sBAAyB,GAAA;AAAC5B,IAAAA,kBAAAA;AAAoBP,IAAAA,sBAAAA;AAAwBS,IAAAA;AAAa;;;;"}
@@ -6,7 +6,6 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
7
  var Icons = require('@strapi/icons');
8
8
  var Symbols = require('@strapi/icons/symbols');
9
- var isEqual = require('lodash/isEqual');
10
9
  var qs = require('qs');
11
10
  var reactIntl = require('react-intl');
12
11
  var reactRouterDom = require('react-router-dom');
@@ -17,6 +16,7 @@ var plugin = require('../../constants/plugin.js');
17
16
  var DocumentRBAC = require('../../features/DocumentRBAC.js');
18
17
  var useDocument = require('../../hooks/useDocument.js');
19
18
  var useDocumentLayout = require('../../hooks/useDocumentLayout.js');
19
+ var usePersistentQueryParams = require('../../hooks/usePersistentQueryParams.js');
20
20
  var usePrev = require('../../hooks/usePrev.js');
21
21
  var documents = require('../../services/documents.js');
22
22
  var api = require('../../utils/api.js');
@@ -60,24 +60,56 @@ const ListViewPage = ()=>{
60
60
  const { formatMessage } = reactIntl.useIntl();
61
61
  const { toggleNotification } = strapiAdmin.useNotification();
62
62
  const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler(translations.getTranslation);
63
+ usePersistentQueryParams.usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', [
64
+ 'sort',
65
+ 'filters',
66
+ 'pageSize'
67
+ ]);
68
+ usePersistentQueryParams.usePersistentPartialQueryParams('STRAPI_LOCALE', [
69
+ 'plugins.i18n.locale'
70
+ ], false);
63
71
  const { collectionType, model, schema } = useDocument.useDoc();
64
72
  const { list } = useDocumentLayout.useDocumentLayout(model);
65
- const [displayedHeaders, setDisplayedHeaders] = React__namespace.useState([]);
66
- const listLayout = usePrev.usePrev(list.layout);
67
- React__namespace.useEffect(()=>{
68
- /**
69
- * ONLY update the displayedHeaders if the document
70
- * layout has actually changed in value.
71
- */ if (!isEqual(listLayout, list.layout)) {
72
- setDisplayedHeaders(list.layout);
73
- }
73
+ const [displayedHeaderNames, setDisplayedHeaderNames] = strapiAdmin.useScopedPersistentState(`STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`, null);
74
+ const mapDisplayedHeaders = (headers)=>headers.map((header)=>header.name);
75
+ const displayedHeaders = React__namespace.useMemo(()=>{
76
+ if (!displayedHeaderNames || !list.metadatas || Object.keys(list.metadatas).length <= 0 || !schema?.attributes) return [];
77
+ return useDocumentLayout.convertListLayoutToFieldLayouts(displayedHeaderNames, schema.attributes, list.metadatas);
74
78
  }, [
75
- list.layout,
76
- listLayout
79
+ displayedHeaderNames,
80
+ schema,
81
+ list
77
82
  ]);
78
83
  const handleSetHeaders = (headers)=>{
79
- setDisplayedHeaders(useDocumentLayout.convertListLayoutToFieldLayouts(headers, schema.attributes, list.metadatas));
84
+ setDisplayedHeaderNames(headers);
85
+ };
86
+ const handleResetHeaders = ()=>{
87
+ setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));
80
88
  };
89
+ /**
90
+ * If the persistent displayedHeaders are not yet initialized, set them to list.layout
91
+ */ React__namespace.useEffect(()=>{
92
+ // wait for list.layout to be loaded
93
+ if (list.layout.length === 0) {
94
+ return;
95
+ }
96
+ if (!displayedHeaderNames) {
97
+ handleResetHeaders();
98
+ }
99
+ }, [
100
+ list.layout
101
+ ]);
102
+ React__namespace.useEffect(()=>{
103
+ if (!schema?.attributes) return;
104
+ if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;
105
+ if (schema.uid !== model) return;
106
+ const allowedDisplayHeaders = displayedHeaderNames.filter((header)=>Object.keys(schema?.attributes).includes(header));
107
+ if (allowedDisplayHeaders.length !== displayedHeaderNames.length) {
108
+ handleSetHeaders(allowedDisplayHeaders);
109
+ }
110
+ }, [
111
+ displayedHeaderNames
112
+ ]);
81
113
  const [{ query }] = strapiAdmin.useQueryParams({
82
114
  page: '1',
83
115
  pageSize: list.settings.pageSize.toString(),
@@ -226,8 +258,8 @@ const ListViewPage = ()=>{
226
258
  }),
227
259
  /*#__PURE__*/ jsxRuntime.jsx(ViewSettingsMenu.ViewSettingsMenu, {
228
260
  setHeaders: handleSetHeaders,
229
- resetHeaders: ()=>setDisplayedHeaders(list.layout),
230
- headers: displayedHeaders.map((header)=>header.name)
261
+ resetHeaders: handleResetHeaders,
262
+ headers: displayedHeaderNames ?? []
231
263
  })
232
264
  ]
233
265
  }),
@@ -310,8 +342,8 @@ const ListViewPage = ()=>{
310
342
  }),
311
343
  /*#__PURE__*/ jsxRuntime.jsx(ViewSettingsMenu.ViewSettingsMenu, {
312
344
  setHeaders: handleSetHeaders,
313
- resetHeaders: ()=>setDisplayedHeaders(list.layout),
314
- headers: displayedHeaders.map((header)=>header.name)
345
+ resetHeaders: handleResetHeaders,
346
+ headers: displayedHeaderNames ?? []
315
347
  })
316
348
  ]
317
349
  }),
@@ -518,7 +550,7 @@ const CreateButton = ({ variant })=>{
518
550
  permissions: permissions,
519
551
  children: ({ permissions })=>/*#__PURE__*/ jsxRuntime.jsx(DocumentRBAC.DocumentRBAC, {
520
552
  permissions: permissions,
521
- children: /*#__PURE__*/ jsxRuntime.jsx(ListViewPage, {})
553
+ children: /*#__PURE__*/ jsxRuntime.jsx(ListViewPage, {}, slug)
522
554
  })
523
555
  });
524
556
  };
@@ -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 useRBAC,\n Layouts,\n useTable,\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 isEqual from 'lodash/isEqual';\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 { 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 { 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\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaders, setDisplayedHeaders] = React.useState<ListFieldLayout[]>([]);\n\n const listLayout = usePrev(list.layout);\n React.useEffect(() => {\n /**\n * ONLY update the displayedHeaders if the document\n * layout has actually changed in value.\n */\n if (!isEqual(listLayout, list.layout)) {\n setDisplayedHeaders(list.layout);\n }\n }, [list.layout, listLayout]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaders(\n convertListLayoutToFieldLayouts(headers, schema!.attributes, list.metadatas)\n );\n };\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\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 if (!isFetching && results.length === 0) {\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 <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={() => setDisplayedHeaders(list.layout)}\n headers={displayedHeaders.map((header) => header.name)}\n />\n </>\n }\n startActions={\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 {list.settings.filterable && schema ? <Filters schema={schema} /> : null}\n </>\n }\n />\n <Layouts.Content>\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 </Layouts.Content>\n </Page.Main>\n </>\n );\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 <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={() => setDisplayedHeaders(list.layout)}\n headers={displayedHeaders.map((header) => header.name)}\n />\n </>\n }\n startActions={\n <>\n {list.settings.searchable && (\n <SearchInput\n disabled={results.length === 0}\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 {list.settings.filterable && schema ? (\n <Filters disabled={results.length === 0} schema={schema} />\n ) : null}\n </>\n }\n />\n <Layouts.Content>\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 </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 />\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","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaders","setDisplayedHeaders","React","useState","listLayout","usePrev","layout","useEffect","isEqual","handleSetHeaders","headers","convertListLayoutToFieldLayouts","attributes","metadatas","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","useMemo","buildValidParams","data","error","isLoading","isFetching","useGetAllDocumentsQuery","type","message","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","map","header","translation","label","id","name","defaultMessage","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","length","_jsxs","_Fragment","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Action","endActions","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","startActions","SearchInput","target","placeholder","trackedEvent","filterable","Filters","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","disabled","Flex","gap","direction","alignItems","Table","Root","rows","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","documentId","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","includes","split","Typography","textColor","getDisplayName","CellContent","rowId","ActionsCell","e","stopPropagation","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","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 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 isEqual from 'lodash/isEqual';\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 { 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\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\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 if (!isFetching && results.length === 0) {\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 <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n }\n startActions={\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 {list.settings.filterable && schema ? <Filters schema={schema} /> : null}\n </>\n }\n />\n <Layouts.Content>\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 </Layouts.Content>\n </Page.Main>\n </>\n );\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 <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n }\n startActions={\n <>\n {list.settings.searchable && (\n <SearchInput\n disabled={results.length === 0}\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 {list.settings.filterable && schema ? (\n <Filters disabled={results.length === 0} schema={schema} />\n ) : null}\n </>\n }\n />\n <Layouts.Content>\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 </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","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","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","_jsxs","_Fragment","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Action","endActions","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","startActions","SearchInput","target","placeholder","trackedEvent","filterable","Filters","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","disabled","Flex","gap","direction","alignItems","Table","Root","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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"}