@strapi/content-manager 5.42.1 → 5.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/admin/hooks/useDocumentActions.js +5 -5
  2. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  3. package/dist/admin/hooks/useDocumentActions.mjs +6 -6
  4. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  5. package/dist/admin/hooks/usePersistentQueryParams.js +37 -19
  6. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  7. package/dist/admin/hooks/usePersistentQueryParams.mjs +38 -20
  8. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/EditViewPage.js +29 -4
  10. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  11. package/dist/admin/pages/EditView/EditViewPage.mjs +10 -4
  12. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/DocumentActions.js +30 -20
  14. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/DocumentActions.mjs +30 -20
  16. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +2 -1
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +2 -1
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +19 -0
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +19 -0
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +4 -1
  26. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +4 -1
  28. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +34 -9
  30. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +34 -9
  32. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  33. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +22 -5
  34. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  35. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +26 -9
  36. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  37. package/dist/admin/pages/ListView/ListViewPage.js +19 -8
  38. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  39. package/dist/admin/pages/ListView/ListViewPage.mjs +19 -8
  40. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  41. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +1 -1
  42. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  43. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +1 -1
  44. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  45. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +37 -25
  46. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  47. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +38 -26
  48. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  49. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +3 -0
  50. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  51. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +3 -0
  52. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  53. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +3 -2
  54. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  55. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +3 -2
  56. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
  57. package/dist/admin/services/documents.js +32 -7
  58. package/dist/admin/services/documents.js.map +1 -1
  59. package/dist/admin/services/documents.mjs +32 -8
  60. package/dist/admin/services/documents.mjs.map +1 -1
  61. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  62. package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +6 -1
  63. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +3 -1
  64. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +2 -0
  65. package/dist/admin/src/pages/ListConfiguration/ListConfigurationPage.d.ts +1 -1
  66. package/dist/admin/src/pages/ListView/components/TableCells/CellValue.d.ts +2 -1
  67. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  68. package/dist/admin/src/services/api.d.ts +1 -1
  69. package/dist/admin/src/services/components.d.ts +2 -2
  70. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  71. package/dist/admin/src/services/documents.d.ts +22 -17
  72. package/dist/admin/src/services/homepage.d.ts +1 -1
  73. package/dist/admin/src/services/init.d.ts +1 -1
  74. package/dist/admin/src/services/relations.d.ts +2 -2
  75. package/dist/admin/src/services/uid.d.ts +3 -3
  76. package/dist/admin/translations/nl.json.js +180 -11
  77. package/dist/admin/translations/nl.json.js.map +1 -1
  78. package/dist/admin/translations/nl.json.mjs +180 -11
  79. package/dist/admin/translations/nl.json.mjs.map +1 -1
  80. package/dist/server/controllers/collection-types.js +32 -1
  81. package/dist/server/controllers/collection-types.js.map +1 -1
  82. package/dist/server/controllers/collection-types.mjs +33 -2
  83. package/dist/server/controllers/collection-types.mjs.map +1 -1
  84. package/dist/server/routes/admin.js +21 -0
  85. package/dist/server/routes/admin.js.map +1 -1
  86. package/dist/server/routes/admin.mjs +21 -0
  87. package/dist/server/routes/admin.mjs.map +1 -1
  88. package/dist/server/src/controllers/collection-types.d.ts +1 -0
  89. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  90. package/dist/server/src/controllers/index.d.ts +1 -0
  91. package/dist/server/src/controllers/index.d.ts.map +1 -1
  92. package/dist/server/src/index.d.ts +1 -0
  93. package/dist/server/src/index.d.ts.map +1 -1
  94. package/dist/server/src/routes/admin.d.ts.map +1 -1
  95. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.mjs","sources":["../../../../../../admin/src/pages/ListView/components/BulkActions/Actions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n DescriptionComponentRenderer,\n useTable,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Box, ButtonProps, Flex, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentRBAC } from '../../../../features/DocumentRBAC';\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../../hooks/useDocumentActions';\nimport { useDocumentLayout } from '../../../../hooks/useDocumentLayout';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getTranslation } from '../../../../utils/translations';\nimport {\n DialogOptions,\n DocumentActionButton,\n ModalOptions,\n NotificationOptions,\n} from '../../../EditView/components/DocumentActions';\n\nimport { PublishAction } from './PublishAction';\n\nimport type { BulkActionComponent, ContentManagerPlugin } from '../../../../content-manager';\n\ninterface BulkActionDescription {\n dialog?: DialogOptions | NotificationOptions | ModalOptions;\n disabled?: boolean;\n icon?: React.ReactNode;\n label: string;\n onClick?: (event: React.SyntheticEvent) => void;\n /**\n * @default 'default'\n */\n type?: 'icon' | 'default';\n /**\n * @default 'secondary'\n */\n variant?: ButtonProps['variant'];\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkActionsRenderer\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkActionsRenderer = () => {\n const plugins = useStrapiApp('BulkActionsRenderer', (state) => state.plugins);\n\n const { model, collectionType } = useDoc();\n const { list } = useDocumentLayout(model);\n const { selectedRows } = useTable('BulkActionsRenderer', (state) => state);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n model,\n collectionType,\n documents: selectedRows,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getBulkActions()}\n >\n {(actions) =>\n actions.map((action) => {\n return list.settings.bulkable && <DocumentActionButton key={action.id} {...action} />;\n })\n }\n </DescriptionComponentRenderer>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DefaultBulkActions\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n const { schema: contentType } = useDoc();\n const selectRow = useTable('DeleteAction', (state) => state.selectRow);\n const hasI18nEnabled = Boolean(contentType?.pluginOptions?.i18n);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasDeletePermission = useDocumentRBAC('deleteAction', (state) => state.canDelete);\n const { deleteMany: bulkDeleteAction, isLoading } = useDocumentActions();\n const documentIds = documents.map(({ documentId }) => documentId);\n\n const handleConfirmBulkDelete = async () => {\n const res = await bulkDeleteAction({\n documentIds,\n model,\n params,\n });\n if (!('error' in res)) {\n selectRow([]);\n }\n };\n\n if (!hasDeletePermission) return null;\n\n return {\n variant: 'danger-light',\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n loading: isLoading,\n content: (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: 'popUpWarning.bodyMessage.contentType.delete.all',\n defaultMessage: 'Are you sure you want to delete these entries?',\n })}\n </Typography>\n {hasI18nEnabled && (\n <Box textAlign=\"center\" padding={3}>\n <Typography textColor=\"danger500\">\n {formatMessage(\n {\n id: getTranslation('Settings.list.actions.deleteAdditionalInfos'),\n defaultMessage:\n 'This will delete the active locale versions <em>(from Internationalization)</em>',\n },\n {\n em: Emphasis,\n }\n )}\n </Typography>\n </Box>\n )}\n </Flex>\n ),\n onConfirm: handleConfirmBulkDelete,\n },\n };\n};\n\nDeleteAction.type = 'delete';\n\nconst UnpublishAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const selectRow = useTable('UnpublishAction', (state) => state.selectRow);\n const hasPublishPermission = useDocumentRBAC('unpublishAction', (state) => state.canPublish);\n const hasDraftAndPublishEnabled = Boolean(schema?.options?.draftAndPublish);\n const { unpublishMany: bulkUnpublishAction, isLoading } = useDocumentActions();\n const documentIds = documents.map(({ documentId }) => documentId);\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const handleConfirmBulkUnpublish = async () => {\n const data = await bulkUnpublishAction({ documentIds, model, params });\n if (!('error' in data)) {\n selectRow([]);\n }\n };\n\n const showUnpublishButton =\n hasDraftAndPublishEnabled &&\n hasPublishPermission &&\n documents.some((entry) => entry.status === 'published' || entry.status === 'modified');\n\n if (!showUnpublishButton) return null;\n\n return {\n variant: 'tertiary',\n label: formatMessage({ id: 'app.utils.unpublish', defaultMessage: 'Unpublish' }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n loading: isLoading,\n content: (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: 'popUpWarning.bodyMessage.contentType.unpublish.all',\n defaultMessage: 'Are you sure you want to unpublish these entries?',\n })}\n </Typography>\n </Flex>\n ),\n confirmButton: formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n }),\n onConfirm: handleConfirmBulkUnpublish,\n },\n };\n};\n\nUnpublishAction.type = 'unpublish';\n\nconst Emphasis = (chunks: React.ReactNode) => (\n <Typography fontWeight=\"semiBold\" textColor=\"danger500\">\n {chunks}\n </Typography>\n);\n\nconst DEFAULT_BULK_ACTIONS: BulkActionComponent[] = [PublishAction, UnpublishAction, DeleteAction];\n\nexport { DEFAULT_BULK_ACTIONS, BulkActionsRenderer, Emphasis };\nexport type { BulkActionDescription };\n"],"names":["BulkActionsRenderer","plugins","useStrapiApp","state","model","collectionType","useDoc","list","useDocumentLayout","selectedRows","useTable","_jsx","Flex","gap","DescriptionComponentRenderer","props","documents","descriptions","apis","getBulkActions","actions","map","action","settings","bulkable","DocumentActionButton","id","DeleteAction","formatMessage","useIntl","schema","contentType","selectRow","hasI18nEnabled","Boolean","pluginOptions","i18n","query","useQueryParams","params","React","useMemo","buildValidParams","hasDeletePermission","useDocumentRBAC","canDelete","deleteMany","bulkDeleteAction","isLoading","useDocumentActions","documentIds","documentId","handleConfirmBulkDelete","res","variant","label","defaultMessage","dialog","type","title","loading","content","_jsxs","direction","alignItems","justifyContent","WarningCircle","width","height","fill","Typography","textAlign","Box","padding","textColor","getTranslation","em","Emphasis","onConfirm","UnpublishAction","hasPublishPermission","canPublish","hasDraftAndPublishEnabled","options","draftAndPublish","unpublishMany","bulkUnpublishAction","handleConfirmBulkUnpublish","data","showUnpublishButton","some","entry","status","confirmButton","chunks","fontWeight","DEFAULT_BULK_ACTIONS","PublishAction"],"mappings":"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"}
1
+ {"version":3,"file":"Actions.mjs","sources":["../../../../../../admin/src/pages/ListView/components/BulkActions/Actions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n DescriptionComponentRenderer,\n useTable,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Box, ButtonProps, Flex, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentRBAC } from '../../../../features/DocumentRBAC';\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../../hooks/useDocumentActions';\nimport { useDocumentLayout } from '../../../../hooks/useDocumentLayout';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getTranslation } from '../../../../utils/translations';\nimport {\n DialogOptions,\n DocumentActionButton,\n ModalOptions,\n NotificationOptions,\n} from '../../../EditView/components/DocumentActions';\n\nimport { PublishAction } from './PublishAction';\n\nimport type { BulkActionComponent, ContentManagerPlugin } from '../../../../content-manager';\n\ninterface BulkActionDescription {\n dialog?: DialogOptions | NotificationOptions | ModalOptions;\n disabled?: boolean;\n icon?: React.ReactNode;\n label: string;\n onClick?: (event: React.SyntheticEvent) => void;\n /**\n * @default 'default'\n */\n type?: 'icon' | 'default';\n /**\n * @default 'secondary'\n */\n variant?: ButtonProps['variant'];\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkActionsRenderer\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkActionsRenderer = () => {\n const plugins = useStrapiApp('BulkActionsRenderer', (state) => state.plugins);\n\n const { model, collectionType } = useDoc();\n const { list } = useDocumentLayout(model);\n const { selectedRows } = useTable('BulkActionsRenderer', (state) => state);\n\n return (\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={{\n model,\n collectionType,\n documents: selectedRows,\n }}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getBulkActions()}\n >\n {(actions) =>\n actions.map(({ type: _bulkType, ...action }) => {\n return list.settings.bulkable && <DocumentActionButton key={action.id} {...action} />;\n })\n }\n </DescriptionComponentRenderer>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DefaultBulkActions\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n const { schema: contentType } = useDoc();\n const selectRow = useTable('DeleteAction', (state) => state.selectRow);\n const hasI18nEnabled = Boolean(contentType?.pluginOptions?.i18n);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasDeletePermission = useDocumentRBAC('deleteAction', (state) => state.canDelete);\n const { deleteMany: bulkDeleteAction, isLoading } = useDocumentActions();\n const documentIds = documents.map(({ documentId }) => documentId);\n\n const handleConfirmBulkDelete = async () => {\n const res = await bulkDeleteAction({\n documentIds,\n model,\n params,\n });\n if (!('error' in res)) {\n selectRow([]);\n }\n };\n\n if (!hasDeletePermission) return null;\n\n return {\n variant: 'danger-light',\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n loading: isLoading,\n content: (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: 'popUpWarning.bodyMessage.contentType.delete.all',\n defaultMessage: 'Are you sure you want to delete these entries?',\n })}\n </Typography>\n {hasI18nEnabled && (\n <Box textAlign=\"center\" padding={3}>\n <Typography textColor=\"danger500\">\n {formatMessage(\n {\n id: getTranslation('Settings.list.actions.deleteAdditionalInfos'),\n defaultMessage:\n 'This will delete the active locale versions <em>(from Internationalization)</em>',\n },\n {\n em: Emphasis,\n }\n )}\n </Typography>\n </Box>\n )}\n </Flex>\n ),\n onConfirm: handleConfirmBulkDelete,\n },\n };\n};\n\nDeleteAction.type = 'delete';\n\nconst UnpublishAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const selectRow = useTable('UnpublishAction', (state) => state.selectRow);\n const hasPublishPermission = useDocumentRBAC('unpublishAction', (state) => state.canPublish);\n const hasDraftAndPublishEnabled = Boolean(schema?.options?.draftAndPublish);\n const { unpublishMany: bulkUnpublishAction, isLoading } = useDocumentActions();\n const documentIds = documents.map(({ documentId }) => documentId);\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const handleConfirmBulkUnpublish = async () => {\n const data = await bulkUnpublishAction({ documentIds, model, params });\n if (!('error' in data)) {\n selectRow([]);\n }\n };\n\n const showUnpublishButton =\n hasDraftAndPublishEnabled &&\n hasPublishPermission &&\n documents.some((entry) => entry.status === 'published' || entry.status === 'modified');\n\n if (!showUnpublishButton) return null;\n\n return {\n variant: 'tertiary',\n label: formatMessage({ id: 'app.utils.unpublish', defaultMessage: 'Unpublish' }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n loading: isLoading,\n content: (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: 'popUpWarning.bodyMessage.contentType.unpublish.all',\n defaultMessage: 'Are you sure you want to unpublish these entries?',\n })}\n </Typography>\n </Flex>\n ),\n confirmButton: formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n }),\n onConfirm: handleConfirmBulkUnpublish,\n },\n };\n};\n\nUnpublishAction.type = 'unpublish';\n\nconst Emphasis = (chunks: React.ReactNode) => (\n <Typography fontWeight=\"semiBold\" textColor=\"danger500\">\n {chunks}\n </Typography>\n);\n\nconst DEFAULT_BULK_ACTIONS: BulkActionComponent[] = [PublishAction, UnpublishAction, DeleteAction];\n\nexport { DEFAULT_BULK_ACTIONS, BulkActionsRenderer, Emphasis };\nexport type { BulkActionDescription };\n"],"names":["BulkActionsRenderer","plugins","useStrapiApp","state","model","collectionType","useDoc","list","useDocumentLayout","selectedRows","useTable","_jsx","Flex","gap","DescriptionComponentRenderer","props","documents","descriptions","apis","getBulkActions","actions","map","type","_bulkType","action","settings","bulkable","DocumentActionButton","id","DeleteAction","formatMessage","useIntl","schema","contentType","selectRow","hasI18nEnabled","Boolean","pluginOptions","i18n","query","useQueryParams","params","React","useMemo","buildValidParams","hasDeletePermission","useDocumentRBAC","canDelete","deleteMany","bulkDeleteAction","isLoading","useDocumentActions","documentIds","documentId","handleConfirmBulkDelete","res","variant","label","defaultMessage","dialog","title","loading","content","_jsxs","direction","alignItems","justifyContent","WarningCircle","width","height","fill","Typography","textAlign","Box","padding","textColor","getTranslation","em","Emphasis","onConfirm","UnpublishAction","hasPublishPermission","canPublish","hasDraftAndPublishEnabled","options","draftAndPublish","unpublishMany","bulkUnpublishAction","handleConfirmBulkUnpublish","data","showUnpublishButton","some","entry","status","confirmButton","chunks","fontWeight","DEFAULT_BULK_ACTIONS","PublishAction"],"mappings":"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"}
@@ -19,6 +19,7 @@ var api$1 = require('../../../../utils/api.js');
19
19
  var translations = require('../../../../utils/translations.js');
20
20
  var validation = require('../../../../utils/validation.js');
21
21
  var DocumentStatus = require('../../../EditView/components/DocumentStatus.js');
22
+ var data = require('../../../EditView/utils/data.js');
22
23
  var ConfirmBulkActionDialog = require('./ConfirmBulkActionDialog.js');
23
24
 
24
25
  function _interopNamespaceDefault(e) {
@@ -367,38 +368,47 @@ const SelectedEntriesModalContent = ({ listViewSelectedEntries, toggleModal, set
367
368
  const params = React__namespace.useMemo(()=>api$1.buildValidParams(query), [
368
369
  query
369
370
  ]);
370
- // Fetch the documents based on the selected entries and update the modal table
371
- const { data, isLoading, isFetching, refetch } = documents.useGetAllDocumentsQuery({
371
+ // Fetch via findOne (same as edit view) so we get the exact same data structure.
372
+ // The list API returns a different structure that causes false validation errors.
373
+ const { data: documents$1 = [], isLoading, isFetching, refetch } = documents.useGetDocumentsForValidationQuery({
372
374
  model,
373
- params: {
374
- page: '1',
375
- pageSize: documentIds.length.toString(),
376
- sort: query.sort,
377
- filters: {
378
- documentId: {
379
- $in: documentIds
380
- }
381
- },
382
- locale: query.plugins?.i18n?.locale
383
- }
375
+ documentIds,
376
+ locale: query.plugins?.i18n?.locale,
377
+ sort: query.sort
384
378
  }, {
385
- selectFromResult: ({ data, ...restRes })=>({
386
- data: data?.results ?? [],
387
- ...restRes
388
- })
379
+ skip: documentIds.length === 0
389
380
  });
390
- // Validate the entries based on the schema to show errors if any
381
+ // Transform and validate like the edit view - transformDocument prepares data
382
+ // for validation (relations, temp keys, etc.)
391
383
  const { rows, validationErrors } = React__namespace.useMemo(()=>{
392
- if (data.length > 0 && schema) {
393
- const validate = validation.createYupSchema(schema.attributes, components, // Since this is the "Publish" action, the validation
394
- // schema must enforce the rules for published entities
395
- {
384
+ if (documents$1.length > 0 && schema) {
385
+ const validate = validation.createYupSchema(schema.attributes, components, {
396
386
  status: 'published'
397
387
  });
388
+ const transform = data.transformDocument(schema, components);
398
389
  const validationErrors = {};
399
- const rows = data.map((entry)=>{
390
+ // Re-order documents to match the list view selection order, and restore the
391
+ // correct status (draft fetch returns 'draft' even for 'modified' documents)
392
+ const documentsMap = new Map(documents$1.map((doc)=>[
393
+ doc.documentId,
394
+ doc
395
+ ]));
396
+ const listViewStatusMap = new Map(listViewSelectedEntries.map(({ documentId, status })=>[
397
+ documentId,
398
+ status
399
+ ]));
400
+ const orderedDocuments = documentIds.map((id)=>{
401
+ const doc = documentsMap.get(id);
402
+ if (!doc) return undefined;
403
+ return {
404
+ ...doc,
405
+ status: listViewStatusMap.get(id) ?? doc.status
406
+ };
407
+ }).filter((doc)=>doc !== undefined);
408
+ const rows = orderedDocuments.map((entry)=>{
409
+ const transformed = transform(entry);
400
410
  try {
401
- validate.validateSync(entry, {
411
+ validate.validateSync(transformed, {
402
412
  abortEarly: false
403
413
  });
404
414
  return entry;
@@ -420,7 +430,9 @@ const SelectedEntriesModalContent = ({ listViewSelectedEntries, toggleModal, set
420
430
  };
421
431
  }, [
422
432
  components,
423
- data,
433
+ documents$1,
434
+ documentIds,
435
+ listViewSelectedEntries,
424
436
  schema
425
437
  ]);
426
438
  const [isDialogOpen, setIsDialogOpen] = React__namespace.useState(false);
@@ -1 +1 @@
1
- {"version":3,"file":"PublishAction.js","sources":["../../../../../../admin/src/pages/ListView/components/BulkActions/PublishAction.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n FormErrors,\n getYupValidationErrors,\n Table,\n useQueryParams,\n useTable,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n IconButton,\n Loader,\n Modal,\n Tooltip,\n Typography,\n TypographyComponent,\n RawTable,\n Tr,\n Td,\n Tbody,\n} from '@strapi/design-system';\nimport { ArrowsCounterClockwise, CheckCircle, CrossCircle, Pencil } from '@strapi/icons';\nimport { useIntl, type IntlShape } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { useDocumentRBAC } from '../../../../features/DocumentRBAC';\nimport { useContentTypeSchema } from '../../../../hooks/useContentTypeSchema';\nimport { useDocumentActions } from '../../../../hooks/useDocumentActions';\nimport { useDocLayout } from '../../../../hooks/useDocumentLayout';\nimport { contentManagerApi } from '../../../../services/api';\nimport {\n useGetAllDocumentsQuery,\n usePublishManyDocumentsMutation,\n} from '../../../../services/documents';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getTranslation } from '../../../../utils/translations';\nimport { createYupSchema } from '../../../../utils/validation';\nimport { DocumentStatus } from '../../../EditView/components/DocumentStatus';\n\nimport { ConfirmDialogPublishAll, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\n\nimport type { BulkActionComponent } from '../../../../content-manager';\nimport type { Document } from '../../../../hooks/useDocument';\n\nconst TypographyMaxWidth = styled<TypographyComponent>(Typography)`\n max-width: 300px;\n`;\n\nconst TableComponent = styled(RawTable)`\n width: 100%;\n table-layout: fixed;\n td:first-child {\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n td:first-of-type {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\nexport const formatErrorMessages = (\n errors: FormErrors,\n parentKey: string,\n formatMessage: IntlShape['formatMessage']\n) => {\n if (!errors) return [];\n\n const messages: string[] = [];\n\n Object.entries(errors).forEach(([key, value]) => {\n const currentKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (!value) return;\n const isErrorMessageDescriptor =\n typeof value === 'object' && 'id' in value && 'defaultMessage' in value;\n if (isErrorMessageDescriptor || typeof value === 'string') {\n const id = isErrorMessageDescriptor ? value.id : value;\n const defaultMessage = isErrorMessageDescriptor\n ? (value.defaultMessage as string)\n : (value as string);\n messages.push(\n formatMessage(\n {\n id: `${id}.withField`,\n defaultMessage,\n },\n { field: currentKey }\n )\n );\n } else {\n messages.push(\n ...formatErrorMessages(value as unknown as FormErrors, currentKey, formatMessage)\n );\n }\n });\n\n return messages;\n};\n\ninterface EntryValidationTextProps {\n validationErrors?: FormErrors;\n status: string;\n}\n\nconst EntryValidationText = ({ validationErrors, status }: EntryValidationTextProps) => {\n const { formatMessage } = useIntl();\n\n if (validationErrors) {\n const validationErrorsMessages = formatErrorMessages(validationErrors, '', formatMessage).join(\n ' '\n );\n\n return (\n <Flex gap={2}>\n <CrossCircle fill=\"danger600\" />\n <Tooltip label={validationErrorsMessages}>\n <TypographyMaxWidth textColor=\"danger600\" variant=\"omega\" fontWeight=\"bold\" ellipsis>\n {validationErrorsMessages}\n </TypographyMaxWidth>\n </Tooltip>\n </Flex>\n );\n }\n\n if (status === 'published') {\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n })}\n </Typography>\n </Flex>\n );\n }\n\n if (status === 'modified') {\n return (\n <Flex gap={2}>\n <ArrowsCounterClockwise fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n </Typography>\n </Flex>\n );\n }\n\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesTableContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SelectedEntriesTableContentProps {\n isPublishing?: boolean;\n rowsToDisplay?: TableRow[];\n entriesToPublish?: TableRow['documentId'][];\n validationErrors: Record<string, EntryValidationTextProps['validationErrors']>;\n}\n\nconst TABLE_HEADERS = [\n { name: 'documentId', label: 'documentId' },\n { name: 'name', label: 'name' },\n { name: 'status', label: 'status' },\n { name: 'publicationStatus', label: 'Publication status' },\n];\n\nconst SelectedEntriesTableContent = ({\n isPublishing,\n rowsToDisplay = [],\n entriesToPublish = [],\n validationErrors = {},\n}: SelectedEntriesTableContentProps) => {\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n const {\n list: {\n settings: { mainField },\n },\n } = useDocLayout();\n\n const shouldDisplayMainField =\n mainField != null && mainField !== 'id' && mainField !== 'documentId';\n\n return (\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {TABLE_HEADERS.filter((head) => head.name !== 'name' || shouldDisplayMainField).map(\n (head) => (\n <Table.HeaderCell key={head.name} {...head} />\n )\n )}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {rowsToDisplay.map((row) => (\n <Table.Row key={row.id}>\n <Table.CheckboxCell id={row.id} />\n <Table.Cell>\n <Typography>{row.documentId}</Typography>\n </Table.Cell>\n {shouldDisplayMainField && (\n <Table.Cell>\n <Typography>{row[mainField as keyof TableRow]}</Typography>\n </Table.Cell>\n )}\n <Table.Cell>\n <DocumentStatus status={row.status} maxWidth={'min-content'} />\n </Table.Cell>\n <Table.Cell>\n {isPublishing && entriesToPublish.includes(row.documentId) ? (\n <Flex gap={2}>\n <Typography>\n {formatMessage({\n id: 'content-manager.success.record.publishing',\n defaultMessage: 'Publishing...',\n })}\n </Typography>\n <Loader small />\n </Flex>\n ) : (\n <EntryValidationText\n validationErrors={validationErrors[row.documentId]}\n status={row.status}\n />\n )}\n </Table.Cell>\n <Table.Cell>\n <Flex>\n <IconButton\n tag={Link}\n to={{\n pathname: `${pathname}/${row.documentId}`,\n search: row.locale && `?plugins[i18n][locale]=${row.locale}`,\n }}\n state={{ from: pathname }}\n label={formatMessage({\n id: 'content-manager.bulk-publish.edit',\n defaultMessage: 'Edit',\n })}\n target=\"_blank\"\n marginLeft=\"auto\"\n variant=\"ghost\"\n >\n <Pencil width={'1.6rem'} height={'1.6rem'} />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublicationStatusSummary\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PublicationStatusSummaryProps {\n count: number;\n icon: React.ReactNode;\n message: string;\n textColor: string;\n}\n\nconst PublicationStatusSummary = ({\n count,\n icon,\n message,\n textColor,\n}: PublicationStatusSummaryProps) => {\n return (\n <Flex justifyContent=\"space-between\" flex={1} gap={3}>\n <Flex gap={2}>\n {icon}\n <Typography textColor={textColor} fontWeight=\"bold\">\n {message}\n </Typography>\n </Flex>\n <Typography fontWeight=\"bold\">{count}</Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublicationStatusGrid\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PublicationStatusGridProps {\n entriesReadyToPublishCount: number;\n entriesModifiedCount: number;\n entriesPublishedCount: number;\n entriesWithErrorsCount: number;\n}\n\nconst PublicationStatusGrid = ({\n entriesReadyToPublishCount,\n entriesPublishedCount,\n entriesModifiedCount,\n entriesWithErrorsCount,\n}: PublicationStatusGridProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box hasRadius borderColor=\"neutral150\">\n <TableComponent colCount={2} rowCount={2}>\n <Tbody>\n <Tr>\n <Td>\n <PublicationStatusSummary\n textColor=\"success600\"\n count={entriesReadyToPublishCount}\n icon={<CheckCircle fill=\"success600\" />}\n message={formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n />\n </Td>\n <Td>\n <PublicationStatusSummary\n textColor=\"success600\"\n count={entriesPublishedCount}\n icon={<CheckCircle fill=\"success600\" />}\n message={formatMessage({\n id: 'app.utils.already-published',\n defaultMessage: 'Already published',\n })}\n />\n </Td>\n </Tr>\n <Tr>\n <Td>\n <PublicationStatusSummary\n textColor=\"alternative600\"\n count={entriesModifiedCount}\n icon={<ArrowsCounterClockwise fill=\"alternative600\" />}\n message={formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n />\n </Td>\n <Td>\n <PublicationStatusSummary\n textColor=\"danger600\"\n count={entriesWithErrorsCount}\n icon={<CrossCircle fill=\"danger600\" />}\n message={formatMessage({\n id: 'content-manager.bulk-publish.waiting-for-action',\n defaultMessage: 'Waiting for action',\n })}\n />\n </Td>\n </Tr>\n </Tbody>\n </TableComponent>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModalContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableRow extends Document {}\n\ninterface SelectedEntriesModalContentProps {\n listViewSelectedEntries: TableRow[];\n toggleModal: ConfirmDialogPublishAllProps['onToggleDialog'];\n setListViewSelectedDocuments: (documents: TableRow[]) => void;\n model: string;\n}\n\nconst SelectedEntriesModalContent = ({\n listViewSelectedEntries,\n toggleModal,\n setListViewSelectedDocuments,\n model,\n}: SelectedEntriesModalContentProps) => {\n const { formatMessage } = useIntl();\n const { schema, components } = useContentTypeSchema(model);\n const documentIds = listViewSelectedEntries.map(({ documentId }) => documentId);\n\n // We want to keep the selected entries order same as the list view\n const [{ query }] = useQueryParams<{ sort?: string; plugins?: Record<string, any> }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n // Fetch the documents based on the selected entries and update the modal table\n const { data, isLoading, isFetching, refetch } = useGetAllDocumentsQuery(\n {\n model,\n params: {\n page: '1',\n pageSize: documentIds.length.toString(),\n sort: query.sort,\n filters: {\n documentId: {\n $in: documentIds,\n },\n },\n locale: query.plugins?.i18n?.locale,\n },\n },\n {\n selectFromResult: ({ data, ...restRes }) => ({ data: data?.results ?? [], ...restRes }),\n }\n );\n\n // Validate the entries based on the schema to show errors if any\n const { rows, validationErrors } = React.useMemo(() => {\n if (data.length > 0 && schema) {\n const validate = createYupSchema(\n schema.attributes,\n components,\n // Since this is the \"Publish\" action, the validation\n // schema must enforce the rules for published entities\n { status: 'published' }\n );\n const validationErrors: Record<TableRow['documentId'], FormErrors> = {};\n const rows = data.map((entry: Document) => {\n try {\n validate.validateSync(entry, { abortEarly: false });\n\n return entry;\n } catch (e) {\n if (e instanceof ValidationError) {\n validationErrors[entry.documentId] = getYupValidationErrors(e);\n }\n\n return entry;\n }\n });\n\n return { rows, validationErrors };\n }\n\n return {\n rows: [],\n validationErrors: {},\n };\n }, [components, data, schema]);\n\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n\n const { publishMany: bulkPublishAction, isLoading: isPublishing } = useDocumentActions();\n const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();\n\n const selectedRows = useTable('publishAction', (state) => state.selectedRows);\n\n // Filter selected entries from the updated modal table rows\n const selectedEntries = rows.filter((entry) =>\n selectedRows.some((selectedEntry) => selectedEntry.documentId === entry.documentId)\n );\n\n const entriesToPublish = selectedEntries\n .filter((entry) => !validationErrors[entry.documentId])\n .map((entry) => entry.documentId);\n\n const selectedEntriesWithErrorsCount = selectedEntries.filter(\n ({ documentId }) => validationErrors[documentId]\n ).length;\n const selectedEntriesPublishedCount = selectedEntries.filter(\n ({ status }) => status === 'published'\n ).length;\n const selectedEntriesModifiedCount = selectedEntries.filter(\n ({ status, documentId }) => status === 'modified' && !validationErrors[documentId]\n ).length;\n const selectedEntriesWithNoErrorsCount =\n selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublishedCount;\n\n const toggleDialog = () => setIsDialogOpen((prev) => !prev);\n\n const handleConfirmBulkPublish = async () => {\n toggleDialog();\n\n const res = await bulkPublishAction({ model: model, documentIds: entriesToPublish, params });\n if (!('error' in res)) {\n const unpublishedEntries = rows.filter((row) => {\n return !entriesToPublish.includes(row.documentId);\n });\n // Keep selection of the entries in list view that were not published\n setListViewSelectedDocuments(unpublishedEntries);\n }\n };\n\n return (\n <>\n <Modal.Body>\n <PublicationStatusGrid\n entriesReadyToPublishCount={\n selectedEntriesWithNoErrorsCount - selectedEntriesModifiedCount\n }\n entriesPublishedCount={selectedEntriesPublishedCount}\n entriesModifiedCount={selectedEntriesModifiedCount}\n entriesWithErrorsCount={selectedEntriesWithErrorsCount}\n />\n <Box marginTop={7}>\n <SelectedEntriesTableContent\n isPublishing={isSubmittingForm}\n rowsToDisplay={rows}\n entriesToPublish={entriesToPublish}\n validationErrors={validationErrors}\n />\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={toggleModal} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Flex gap={2}>\n <Button onClick={refetch} variant=\"tertiary\" loading={isFetching}>\n {formatMessage({ id: 'app.utils.refresh', defaultMessage: 'Refresh' })}\n </Button>\n <Button\n onClick={toggleDialog}\n disabled={\n selectedEntries.length === 0 ||\n selectedEntries.length === selectedEntriesWithErrorsCount ||\n selectedEntriesPublishedCount === selectedEntries.length ||\n isLoading\n }\n loading={isPublishing || isSubmittingForm}\n >\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n <ConfirmDialogPublishAll\n isOpen={isDialogOpen}\n onToggleDialog={toggleDialog}\n isConfirmButtonLoading={isPublishing || isSubmittingForm}\n onConfirm={handleConfirmBulkPublish}\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublishAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst PublishAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n // Publish button visibility\n const hasPublishPermission = useDocumentRBAC('unpublishAction', (state) => state.canPublish);\n const showPublishButton =\n hasPublishPermission && documents.some(({ status }) => status !== 'published');\n\n const setListViewSelectedDocuments = useTable('publishAction', (state) => state.selectRow);\n\n const refetchList = () => {\n contentManagerApi.util.invalidateTags([{ type: 'Document', id: `${model}_LIST` }]);\n };\n\n if (!showPublishButton) return null;\n\n return {\n actionType: 'publish',\n variant: 'tertiary',\n label: formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' }),\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation('containers.ListPage.selectedEntriesModal.title'),\n defaultMessage: 'Publish entries',\n }),\n content: ({ onClose }) => {\n return (\n <Table.Root rows={documents} defaultSelectedRows={documents} headers={TABLE_HEADERS}>\n <SelectedEntriesModalContent\n listViewSelectedEntries={documents}\n toggleModal={() => {\n onClose();\n refetchList();\n }}\n setListViewSelectedDocuments={setListViewSelectedDocuments}\n model={model}\n />\n </Table.Root>\n );\n },\n onClose: () => {\n refetchList();\n },\n },\n };\n};\n\nexport { PublishAction, SelectedEntriesModalContent };\n"],"names":["TypographyMaxWidth","styled","Typography","TableComponent","RawTable","theme","colors","neutral150","spaces","formatErrorMessages","errors","parentKey","formatMessage","messages","Object","entries","forEach","key","value","currentKey","isErrorMessageDescriptor","id","defaultMessage","push","field","EntryValidationText","validationErrors","status","useIntl","validationErrorsMessages","join","_jsxs","Flex","gap","_jsx","CrossCircle","fill","Tooltip","label","textColor","variant","fontWeight","ellipsis","CheckCircle","ArrowsCounterClockwise","TABLE_HEADERS","name","SelectedEntriesTableContent","isPublishing","rowsToDisplay","entriesToPublish","pathname","useLocation","list","settings","mainField","useDocLayout","shouldDisplayMainField","Table","Content","Head","HeaderCheckboxCell","filter","head","map","HeaderCell","Loading","Body","row","Row","CheckboxCell","Cell","documentId","DocumentStatus","maxWidth","includes","Loader","small","IconButton","tag","Link","to","search","locale","state","from","target","marginLeft","Pencil","width","height","PublicationStatusSummary","count","icon","message","justifyContent","flex","PublicationStatusGrid","entriesReadyToPublishCount","entriesPublishedCount","entriesModifiedCount","entriesWithErrorsCount","Box","hasRadius","borderColor","colCount","rowCount","Tbody","Tr","Td","SelectedEntriesModalContent","listViewSelectedEntries","toggleModal","setListViewSelectedDocuments","model","schema","components","useContentTypeSchema","documentIds","query","useQueryParams","params","React","useMemo","buildValidParams","data","isLoading","isFetching","refetch","useGetAllDocumentsQuery","page","pageSize","length","toString","sort","filters","$in","plugins","i18n","selectFromResult","restRes","results","rows","validate","createYupSchema","attributes","entry","validateSync","abortEarly","e","ValidationError","getYupValidationErrors","isDialogOpen","setIsDialogOpen","useState","publishMany","bulkPublishAction","useDocumentActions","isSubmittingForm","usePublishManyDocumentsMutation","selectedRows","useTable","selectedEntries","some","selectedEntry","selectedEntriesWithErrorsCount","selectedEntriesPublishedCount","selectedEntriesModifiedCount","selectedEntriesWithNoErrorsCount","toggleDialog","prev","handleConfirmBulkPublish","res","unpublishedEntries","_Fragment","Modal","marginTop","Footer","Button","onClick","loading","disabled","ConfirmDialogPublishAll","isOpen","onToggleDialog","isConfirmButtonLoading","onConfirm","PublishAction","documents","hasPublishPermission","useDocumentRBAC","canPublish","showPublishButton","selectRow","refetchList","contentManagerApi","util","invalidateTags","type","actionType","dialog","title","getTranslation","content","onClose","Root","defaultSelectedRows","headers"],"mappings":"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"}
1
+ {"version":3,"file":"PublishAction.js","sources":["../../../../../../admin/src/pages/ListView/components/BulkActions/PublishAction.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n FormErrors,\n getYupValidationErrors,\n Table,\n useQueryParams,\n useTable,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n IconButton,\n Loader,\n Modal,\n Tooltip,\n Typography,\n TypographyComponent,\n RawTable,\n Tr,\n Td,\n Tbody,\n} from '@strapi/design-system';\nimport { ArrowsCounterClockwise, CheckCircle, CrossCircle, Pencil } from '@strapi/icons';\nimport { useIntl, type IntlShape } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { useDocumentRBAC } from '../../../../features/DocumentRBAC';\nimport { useContentTypeSchema } from '../../../../hooks/useContentTypeSchema';\nimport { useDocumentActions } from '../../../../hooks/useDocumentActions';\nimport { useDocLayout } from '../../../../hooks/useDocumentLayout';\nimport { contentManagerApi } from '../../../../services/api';\nimport {\n useGetDocumentsForValidationQuery,\n usePublishManyDocumentsMutation,\n} from '../../../../services/documents';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getTranslation } from '../../../../utils/translations';\nimport { createYupSchema } from '../../../../utils/validation';\nimport { DocumentStatus } from '../../../EditView/components/DocumentStatus';\nimport { transformDocument } from '../../../EditView/utils/data';\n\nimport { ConfirmDialogPublishAll, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\n\nimport type { BulkActionComponent } from '../../../../content-manager';\nimport type { Document } from '../../../../hooks/useDocument';\n\nconst TypographyMaxWidth = styled<TypographyComponent>(Typography)`\n max-width: 300px;\n`;\n\nconst TableComponent = styled(RawTable)`\n width: 100%;\n table-layout: fixed;\n td:first-child {\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n td:first-of-type {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\nexport const formatErrorMessages = (\n errors: FormErrors,\n parentKey: string,\n formatMessage: IntlShape['formatMessage']\n) => {\n if (!errors) return [];\n\n const messages: string[] = [];\n\n Object.entries(errors).forEach(([key, value]) => {\n const currentKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (!value) return;\n const isErrorMessageDescriptor =\n typeof value === 'object' && 'id' in value && 'defaultMessage' in value;\n if (isErrorMessageDescriptor || typeof value === 'string') {\n const id = isErrorMessageDescriptor ? value.id : value;\n const defaultMessage = isErrorMessageDescriptor\n ? (value.defaultMessage as string)\n : (value as string);\n messages.push(\n formatMessage(\n {\n id: `${id}.withField`,\n defaultMessage,\n },\n { field: currentKey }\n )\n );\n } else {\n messages.push(\n ...formatErrorMessages(value as unknown as FormErrors, currentKey, formatMessage)\n );\n }\n });\n\n return messages;\n};\n\ninterface EntryValidationTextProps {\n validationErrors?: FormErrors;\n status: string;\n}\n\nconst EntryValidationText = ({ validationErrors, status }: EntryValidationTextProps) => {\n const { formatMessage } = useIntl();\n\n if (validationErrors) {\n const validationErrorsMessages = formatErrorMessages(validationErrors, '', formatMessage).join(\n ' '\n );\n\n return (\n <Flex gap={2}>\n <CrossCircle fill=\"danger600\" />\n <Tooltip label={validationErrorsMessages}>\n <TypographyMaxWidth textColor=\"danger600\" variant=\"omega\" fontWeight=\"bold\" ellipsis>\n {validationErrorsMessages}\n </TypographyMaxWidth>\n </Tooltip>\n </Flex>\n );\n }\n\n if (status === 'published') {\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n })}\n </Typography>\n </Flex>\n );\n }\n\n if (status === 'modified') {\n return (\n <Flex gap={2}>\n <ArrowsCounterClockwise fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n </Typography>\n </Flex>\n );\n }\n\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesTableContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SelectedEntriesTableContentProps {\n isPublishing?: boolean;\n rowsToDisplay?: TableRow[];\n entriesToPublish?: TableRow['documentId'][];\n validationErrors: Record<string, EntryValidationTextProps['validationErrors']>;\n}\n\nconst TABLE_HEADERS = [\n { name: 'documentId', label: 'documentId' },\n { name: 'name', label: 'name' },\n { name: 'status', label: 'status' },\n { name: 'publicationStatus', label: 'Publication status' },\n];\n\nconst SelectedEntriesTableContent = ({\n isPublishing,\n rowsToDisplay = [],\n entriesToPublish = [],\n validationErrors = {},\n}: SelectedEntriesTableContentProps) => {\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n const {\n list: {\n settings: { mainField },\n },\n } = useDocLayout();\n\n const shouldDisplayMainField =\n mainField != null && mainField !== 'id' && mainField !== 'documentId';\n\n return (\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {TABLE_HEADERS.filter((head) => head.name !== 'name' || shouldDisplayMainField).map(\n (head) => (\n <Table.HeaderCell key={head.name} {...head} />\n )\n )}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {rowsToDisplay.map((row) => (\n <Table.Row key={row.id}>\n <Table.CheckboxCell id={row.id} />\n <Table.Cell>\n <Typography>{row.documentId}</Typography>\n </Table.Cell>\n {shouldDisplayMainField && (\n <Table.Cell>\n <Typography>{row[mainField as keyof TableRow]}</Typography>\n </Table.Cell>\n )}\n <Table.Cell>\n <DocumentStatus status={row.status} maxWidth={'min-content'} />\n </Table.Cell>\n <Table.Cell>\n {isPublishing && entriesToPublish.includes(row.documentId) ? (\n <Flex gap={2}>\n <Typography>\n {formatMessage({\n id: 'content-manager.success.record.publishing',\n defaultMessage: 'Publishing...',\n })}\n </Typography>\n <Loader small />\n </Flex>\n ) : (\n <EntryValidationText\n validationErrors={validationErrors[row.documentId]}\n status={row.status}\n />\n )}\n </Table.Cell>\n <Table.Cell>\n <Flex>\n <IconButton\n tag={Link}\n to={{\n pathname: `${pathname}/${row.documentId}`,\n search: row.locale && `?plugins[i18n][locale]=${row.locale}`,\n }}\n state={{ from: pathname }}\n label={formatMessage({\n id: 'content-manager.bulk-publish.edit',\n defaultMessage: 'Edit',\n })}\n target=\"_blank\"\n marginLeft=\"auto\"\n variant=\"ghost\"\n >\n <Pencil width={'1.6rem'} height={'1.6rem'} />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublicationStatusSummary\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PublicationStatusSummaryProps {\n count: number;\n icon: React.ReactNode;\n message: string;\n textColor: string;\n}\n\nconst PublicationStatusSummary = ({\n count,\n icon,\n message,\n textColor,\n}: PublicationStatusSummaryProps) => {\n return (\n <Flex justifyContent=\"space-between\" flex={1} gap={3}>\n <Flex gap={2}>\n {icon}\n <Typography textColor={textColor} fontWeight=\"bold\">\n {message}\n </Typography>\n </Flex>\n <Typography fontWeight=\"bold\">{count}</Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublicationStatusGrid\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PublicationStatusGridProps {\n entriesReadyToPublishCount: number;\n entriesModifiedCount: number;\n entriesPublishedCount: number;\n entriesWithErrorsCount: number;\n}\n\nconst PublicationStatusGrid = ({\n entriesReadyToPublishCount,\n entriesPublishedCount,\n entriesModifiedCount,\n entriesWithErrorsCount,\n}: PublicationStatusGridProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box hasRadius borderColor=\"neutral150\">\n <TableComponent colCount={2} rowCount={2}>\n <Tbody>\n <Tr>\n <Td>\n <PublicationStatusSummary\n textColor=\"success600\"\n count={entriesReadyToPublishCount}\n icon={<CheckCircle fill=\"success600\" />}\n message={formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n />\n </Td>\n <Td>\n <PublicationStatusSummary\n textColor=\"success600\"\n count={entriesPublishedCount}\n icon={<CheckCircle fill=\"success600\" />}\n message={formatMessage({\n id: 'app.utils.already-published',\n defaultMessage: 'Already published',\n })}\n />\n </Td>\n </Tr>\n <Tr>\n <Td>\n <PublicationStatusSummary\n textColor=\"alternative600\"\n count={entriesModifiedCount}\n icon={<ArrowsCounterClockwise fill=\"alternative600\" />}\n message={formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n />\n </Td>\n <Td>\n <PublicationStatusSummary\n textColor=\"danger600\"\n count={entriesWithErrorsCount}\n icon={<CrossCircle fill=\"danger600\" />}\n message={formatMessage({\n id: 'content-manager.bulk-publish.waiting-for-action',\n defaultMessage: 'Waiting for action',\n })}\n />\n </Td>\n </Tr>\n </Tbody>\n </TableComponent>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModalContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableRow extends Document {}\n\ninterface SelectedEntriesModalContentProps {\n listViewSelectedEntries: TableRow[];\n toggleModal: ConfirmDialogPublishAllProps['onToggleDialog'];\n setListViewSelectedDocuments: (documents: TableRow[]) => void;\n model: string;\n}\n\nconst SelectedEntriesModalContent = ({\n listViewSelectedEntries,\n toggleModal,\n setListViewSelectedDocuments,\n model,\n}: SelectedEntriesModalContentProps) => {\n const { formatMessage } = useIntl();\n const { schema, components } = useContentTypeSchema(model);\n const documentIds = listViewSelectedEntries.map(({ documentId }) => documentId);\n\n // We want to keep the selected entries order same as the list view\n const [{ query }] = useQueryParams<{ sort?: string; plugins?: Record<string, any> }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n // Fetch via findOne (same as edit view) so we get the exact same data structure.\n // The list API returns a different structure that causes false validation errors.\n const {\n data: documents = [],\n isLoading,\n isFetching,\n refetch,\n } = useGetDocumentsForValidationQuery(\n {\n model,\n documentIds,\n locale: query.plugins?.i18n?.locale,\n sort: query.sort,\n },\n { skip: documentIds.length === 0 }\n );\n\n // Transform and validate like the edit view - transformDocument prepares data\n // for validation (relations, temp keys, etc.)\n const { rows, validationErrors } = React.useMemo(() => {\n if (documents.length > 0 && schema) {\n const validate = createYupSchema(schema.attributes, components, { status: 'published' });\n const transform = transformDocument(schema, components);\n const validationErrors: Record<TableRow['documentId'], FormErrors> = {};\n // Re-order documents to match the list view selection order, and restore the\n // correct status (draft fetch returns 'draft' even for 'modified' documents)\n const documentsMap = new Map(documents.map((doc: Document) => [doc.documentId, doc]));\n const listViewStatusMap = new Map(\n listViewSelectedEntries.map(({ documentId, status }) => [documentId, status])\n );\n const orderedDocuments = documentIds\n .map((id) => {\n const doc = documentsMap.get(id);\n if (!doc) return undefined;\n return { ...doc, status: listViewStatusMap.get(id) ?? doc.status } as Document;\n })\n .filter((doc): doc is Document => doc !== undefined);\n const rows = orderedDocuments.map((entry: Document) => {\n const transformed = transform(entry);\n try {\n validate.validateSync(transformed, { abortEarly: false });\n return entry;\n } catch (e) {\n if (e instanceof ValidationError) {\n validationErrors[entry.documentId] = getYupValidationErrors(e);\n }\n return entry;\n }\n });\n return { rows, validationErrors };\n }\n return { rows: [], validationErrors: {} };\n }, [components, documents, documentIds, listViewSelectedEntries, schema]);\n\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n\n const { publishMany: bulkPublishAction, isLoading: isPublishing } = useDocumentActions();\n const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();\n\n const selectedRows = useTable('publishAction', (state) => state.selectedRows);\n\n // Filter selected entries from the updated modal table rows\n const selectedEntries = rows.filter((entry) =>\n selectedRows.some((selectedEntry) => selectedEntry.documentId === entry.documentId)\n );\n\n const entriesToPublish = selectedEntries\n .filter((entry) => !validationErrors[entry.documentId])\n .map((entry) => entry.documentId);\n\n const selectedEntriesWithErrorsCount = selectedEntries.filter(\n ({ documentId }) => validationErrors[documentId]\n ).length;\n const selectedEntriesPublishedCount = selectedEntries.filter(\n ({ status }) => status === 'published'\n ).length;\n const selectedEntriesModifiedCount = selectedEntries.filter(\n ({ status, documentId }) => status === 'modified' && !validationErrors[documentId]\n ).length;\n const selectedEntriesWithNoErrorsCount =\n selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublishedCount;\n\n const toggleDialog = () => setIsDialogOpen((prev) => !prev);\n\n const handleConfirmBulkPublish = async () => {\n toggleDialog();\n\n const res = await bulkPublishAction({ model: model, documentIds: entriesToPublish, params });\n if (!('error' in res)) {\n const unpublishedEntries = rows.filter((row) => {\n return !entriesToPublish.includes(row.documentId);\n });\n // Keep selection of the entries in list view that were not published\n setListViewSelectedDocuments(unpublishedEntries);\n }\n };\n\n return (\n <>\n <Modal.Body>\n <PublicationStatusGrid\n entriesReadyToPublishCount={\n selectedEntriesWithNoErrorsCount - selectedEntriesModifiedCount\n }\n entriesPublishedCount={selectedEntriesPublishedCount}\n entriesModifiedCount={selectedEntriesModifiedCount}\n entriesWithErrorsCount={selectedEntriesWithErrorsCount}\n />\n <Box marginTop={7}>\n <SelectedEntriesTableContent\n isPublishing={isSubmittingForm}\n rowsToDisplay={rows}\n entriesToPublish={entriesToPublish}\n validationErrors={validationErrors}\n />\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={toggleModal} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Flex gap={2}>\n <Button onClick={refetch} variant=\"tertiary\" loading={isFetching}>\n {formatMessage({ id: 'app.utils.refresh', defaultMessage: 'Refresh' })}\n </Button>\n <Button\n onClick={toggleDialog}\n disabled={\n selectedEntries.length === 0 ||\n selectedEntries.length === selectedEntriesWithErrorsCount ||\n selectedEntriesPublishedCount === selectedEntries.length ||\n isLoading\n }\n loading={isPublishing || isSubmittingForm}\n >\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n <ConfirmDialogPublishAll\n isOpen={isDialogOpen}\n onToggleDialog={toggleDialog}\n isConfirmButtonLoading={isPublishing || isSubmittingForm}\n onConfirm={handleConfirmBulkPublish}\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublishAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst PublishAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n // Publish button visibility\n const hasPublishPermission = useDocumentRBAC('unpublishAction', (state) => state.canPublish);\n const showPublishButton =\n hasPublishPermission && documents.some(({ status }) => status !== 'published');\n\n const setListViewSelectedDocuments = useTable('publishAction', (state) => state.selectRow);\n\n const refetchList = () => {\n contentManagerApi.util.invalidateTags([{ type: 'Document', id: `${model}_LIST` }]);\n };\n\n if (!showPublishButton) return null;\n\n return {\n actionType: 'publish',\n variant: 'tertiary',\n label: formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' }),\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation('containers.ListPage.selectedEntriesModal.title'),\n defaultMessage: 'Publish entries',\n }),\n content: ({ onClose }) => {\n return (\n <Table.Root rows={documents} defaultSelectedRows={documents} headers={TABLE_HEADERS}>\n <SelectedEntriesModalContent\n listViewSelectedEntries={documents}\n toggleModal={() => {\n onClose();\n refetchList();\n }}\n setListViewSelectedDocuments={setListViewSelectedDocuments}\n model={model}\n />\n </Table.Root>\n );\n },\n onClose: () => {\n refetchList();\n },\n },\n };\n};\n\nexport { PublishAction, SelectedEntriesModalContent };\n"],"names":["TypographyMaxWidth","styled","Typography","TableComponent","RawTable","theme","colors","neutral150","spaces","formatErrorMessages","errors","parentKey","formatMessage","messages","Object","entries","forEach","key","value","currentKey","isErrorMessageDescriptor","id","defaultMessage","push","field","EntryValidationText","validationErrors","status","useIntl","validationErrorsMessages","join","_jsxs","Flex","gap","_jsx","CrossCircle","fill","Tooltip","label","textColor","variant","fontWeight","ellipsis","CheckCircle","ArrowsCounterClockwise","TABLE_HEADERS","name","SelectedEntriesTableContent","isPublishing","rowsToDisplay","entriesToPublish","pathname","useLocation","list","settings","mainField","useDocLayout","shouldDisplayMainField","Table","Content","Head","HeaderCheckboxCell","filter","head","map","HeaderCell","Loading","Body","row","Row","CheckboxCell","Cell","documentId","DocumentStatus","maxWidth","includes","Loader","small","IconButton","tag","Link","to","search","locale","state","from","target","marginLeft","Pencil","width","height","PublicationStatusSummary","count","icon","message","justifyContent","flex","PublicationStatusGrid","entriesReadyToPublishCount","entriesPublishedCount","entriesModifiedCount","entriesWithErrorsCount","Box","hasRadius","borderColor","colCount","rowCount","Tbody","Tr","Td","SelectedEntriesModalContent","listViewSelectedEntries","toggleModal","setListViewSelectedDocuments","model","schema","components","useContentTypeSchema","documentIds","query","useQueryParams","params","React","useMemo","buildValidParams","data","documents","isLoading","isFetching","refetch","useGetDocumentsForValidationQuery","plugins","i18n","sort","skip","length","rows","validate","createYupSchema","attributes","transform","transformDocument","documentsMap","Map","doc","listViewStatusMap","orderedDocuments","get","undefined","entry","transformed","validateSync","abortEarly","e","ValidationError","getYupValidationErrors","isDialogOpen","setIsDialogOpen","useState","publishMany","bulkPublishAction","useDocumentActions","isSubmittingForm","usePublishManyDocumentsMutation","selectedRows","useTable","selectedEntries","some","selectedEntry","selectedEntriesWithErrorsCount","selectedEntriesPublishedCount","selectedEntriesModifiedCount","selectedEntriesWithNoErrorsCount","toggleDialog","prev","handleConfirmBulkPublish","res","unpublishedEntries","_Fragment","Modal","marginTop","Footer","Button","onClick","loading","disabled","ConfirmDialogPublishAll","isOpen","onToggleDialog","isConfirmButtonLoading","onConfirm","PublishAction","hasPublishPermission","useDocumentRBAC","canPublish","showPublishButton","selectRow","refetchList","contentManagerApi","util","invalidateTags","type","actionType","dialog","title","getTranslation","content","onClose","Root","defaultSelectedRows","headers"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,MAAMA,kBAAAA,GAAqBC,uBAAAA,CAA4BC,uBAAAA,CAAW;;AAElE,CAAC;AAED,MAAMC,cAAAA,GAAiBF,uBAAAA,CAAOG,qBAAAA,CAAS;;;;4BAIX,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;;aAGxD,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,MAAM,CAAC,CAAA,CAAE,CAAC;;AAE9C,CAAC;AAED;;AAEkG,qGAE3F,MAAMC,mBAAAA,GAAsB,CACjCC,QACAC,SAAAA,EACAC,aAAAA,GAAAA;IAEA,IAAI,CAACF,MAAAA,EAAQ,OAAO,EAAE;AAEtB,IAAA,MAAMG,WAAqB,EAAE;IAE7BC,MAAAA,CAAOC,OAAO,CAACL,MAAAA,CAAAA,CAAQM,OAAO,CAAC,CAAC,CAACC,KAAKC,KAAAA,CAAM,GAAA;AAC1C,QAAA,MAAMC,aAAaR,SAAAA,GAAY,CAAA,EAAGA,UAAU,CAAC,EAAEM,KAAK,GAAGA,GAAAA;AAEvD,QAAA,IAAI,CAACC,KAAAA,EAAO;AACZ,QAAA,MAAME,2BACJ,OAAOF,KAAAA,KAAU,QAAA,IAAY,IAAA,IAAQA,SAAS,gBAAA,IAAoBA,KAAAA;QACpE,IAAIE,wBAAAA,IAA4B,OAAOF,KAAAA,KAAU,QAAA,EAAU;AACzD,YAAA,MAAMG,EAAAA,GAAKD,wBAAAA,GAA2BF,KAAAA,CAAMG,EAAE,GAAGH,KAAAA;AACjD,YAAA,MAAMI,cAAAA,GAAiBF,wBAAAA,GAClBF,KAAAA,CAAMI,cAAc,GACpBJ,KAAAA;YACLL,QAAAA,CAASU,IAAI,CACXX,aAAAA,CACE;gBACES,EAAAA,EAAI,CAAA,EAAGA,EAAAA,CAAG,UAAU,CAAC;AACrBC,gBAAAA;aACF,EACA;gBAAEE,KAAAA,EAAOL;AAAW,aAAA,CAAA,CAAA;QAG1B,CAAA,MAAO;AACLN,YAAAA,QAAAA,CAASU,IAAI,CAAA,GACRd,mBAAAA,CAAoBS,KAAAA,EAAgCC,UAAAA,EAAYP,aAAAA,CAAAA,CAAAA;AAEvE,QAAA;AACF,IAAA,CAAA,CAAA;IAEA,OAAOC,QAAAA;AACT;AAOA,MAAMY,sBAAsB,CAAC,EAAEC,gBAAgB,EAAEC,MAAM,EAA4B,GAAA;IACjF,MAAM,EAAEf,aAAa,EAAE,GAAGgB,iBAAAA,EAAAA;AAE1B,IAAA,IAAIF,gBAAAA,EAAkB;AACpB,QAAA,MAAMG,2BAA2BpB,mBAAAA,CAAoBiB,gBAAAA,EAAkB,EAAA,EAAId,aAAAA,CAAAA,CAAekB,IAAI,CAC5F,GAAA,CAAA;AAGF,QAAA,qBACEC,eAAA,CAACC,iBAAAA,EAAAA;YAAKC,GAAAA,EAAK,CAAA;;8BACTC,cAAA,CAACC,iBAAAA,EAAAA;oBAAYC,IAAAA,EAAK;;8BAClBF,cAAA,CAACG,oBAAAA,EAAAA;oBAAQC,KAAAA,EAAOT,wBAAAA;AACd,oBAAA,QAAA,gBAAAK,cAAA,CAAClC,kBAAAA,EAAAA;wBAAmBuC,SAAAA,EAAU,WAAA;wBAAYC,OAAAA,EAAQ,OAAA;wBAAQC,UAAAA,EAAW,MAAA;wBAAOC,QAAQ,EAAA,IAAA;AACjFb,wBAAAA,QAAAA,EAAAA;;;;;AAKX,IAAA;AAEA,IAAA,IAAIF,WAAW,WAAA,EAAa;AAC1B,QAAA,qBACEI,eAAA,CAACC,iBAAAA,EAAAA;YAAKC,GAAAA,EAAK,CAAA;;8BACTC,cAAA,CAACS,iBAAAA,EAAAA;oBAAYP,IAAAA,EAAK;;8BAClBF,cAAA,CAAChC,uBAAAA,EAAAA;oBAAWqC,SAAAA,EAAU,YAAA;oBAAaE,UAAAA,EAAW,MAAA;8BAC3C7B,aAAAA,CAAc;wBACbS,EAAAA,EAAI,gDAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;;;AAIR,IAAA;AAEA,IAAA,IAAIK,WAAW,UAAA,EAAY;AACzB,QAAA,qBACEI,eAAA,CAACC,iBAAAA,EAAAA;YAAKC,GAAAA,EAAK,CAAA;;8BACTC,cAAA,CAACU,4BAAAA,EAAAA;oBAAuBR,IAAAA,EAAK;;8BAC7BF,cAAA,CAAChC,uBAAAA,EAAAA;oBAAWqC,SAAAA,EAAU,gBAAA;oBAAiBE,UAAAA,EAAW,MAAA;8BAC/C7B,aAAAA,CAAc;wBACbS,EAAAA,EAAI,uCAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;;;AAIR,IAAA;AAEA,IAAA,qBACES,eAAA,CAACC,iBAAAA,EAAAA;QAAKC,GAAAA,EAAK,CAAA;;0BACTC,cAAA,CAACS,iBAAAA,EAAAA;gBAAYP,IAAAA,EAAK;;0BAClBF,cAAA,CAAChC,uBAAAA,EAAAA;gBAAWqC,SAAAA,EAAU,YAAA;gBAAaE,UAAAA,EAAW,MAAA;0BAC3C7B,aAAAA,CAAc;oBACbS,EAAAA,EAAI,4BAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;AAaA,MAAMuB,aAAAA,GAAgB;AACpB,IAAA;QAAEC,IAAAA,EAAM,YAAA;QAAcR,KAAAA,EAAO;AAAa,KAAA;AAC1C,IAAA;QAAEQ,IAAAA,EAAM,MAAA;QAAQR,KAAAA,EAAO;AAAO,KAAA;AAC9B,IAAA;QAAEQ,IAAAA,EAAM,QAAA;QAAUR,KAAAA,EAAO;AAAS,KAAA;AAClC,IAAA;QAAEQ,IAAAA,EAAM,mBAAA;QAAqBR,KAAAA,EAAO;AAAqB;AAC1D,CAAA;AAED,MAAMS,2BAAAA,GAA8B,CAAC,EACnCC,YAAY,EACZC,aAAAA,GAAgB,EAAE,EAClBC,gBAAAA,GAAmB,EAAE,EACrBxB,gBAAAA,GAAmB,EAAE,EACY,GAAA;IACjC,MAAM,EAAEyB,QAAQ,EAAE,GAAGC,0BAAAA,EAAAA;IACrB,MAAM,EAAExC,aAAa,EAAE,GAAGgB,iBAAAA,EAAAA;IAE1B,MAAM,EACJyB,MAAM,EACJC,QAAAA,EAAU,EAAEC,SAAS,EAAE,EACxB,EACF,GAAGC,8BAAAA,EAAAA;AAEJ,IAAA,MAAMC,sBAAAA,GACJF,SAAAA,IAAa,IAAA,IAAQA,SAAAA,KAAc,QAAQA,SAAAA,KAAc,YAAA;IAE3D,qBACExB,eAAA,CAAC2B,kBAAMC,OAAO,EAAA;;AACZ,0BAAA5B,eAAA,CAAC2B,kBAAME,IAAI,EAAA;;AACT,kCAAA1B,cAAA,CAACwB,kBAAMG,kBAAkB,EAAA,EAAA,CAAA;AACxBhB,oBAAAA,aAAAA,CAAciB,MAAM,CAAC,CAACC,IAAAA,GAASA,KAAKjB,IAAI,KAAK,MAAA,IAAUW,sBAAAA,CAAAA,CAAwBO,GAAG,CACjF,CAACD,IAAAA,iBACC7B,cAAA,CAACwB,kBAAMO,UAAU,EAAA;AAAkB,4BAAA,GAAGF;AAAfA,yBAAAA,EAAAA,IAAAA,CAAKjB,IAAI,CAAA;;;AAItC,0BAAAZ,cAAA,CAACwB,kBAAMQ,OAAO,EAAA,EAAA,CAAA;AACd,0BAAAhC,cAAA,CAACwB,kBAAMS,IAAI,EAAA;AACRlB,gBAAAA,QAAAA,EAAAA,aAAAA,CAAce,GAAG,CAAC,CAACI,GAAAA,iBAClBrC,eAAA,CAAC2B,kBAAMW,GAAG,EAAA;;AACR,0CAAAnC,cAAA,CAACwB,kBAAMY,YAAY,EAAA;AAACjD,gCAAAA,EAAAA,EAAI+C,IAAI/C;;AAC5B,0CAAAa,cAAA,CAACwB,kBAAMa,IAAI,EAAA;AACT,gCAAA,QAAA,gBAAArC,cAAA,CAAChC,uBAAAA,EAAAA;AAAYkE,oCAAAA,QAAAA,EAAAA,GAAAA,CAAII;;;4BAElBf,sBAAAA,kBACCvB,cAAA,CAACwB,kBAAMa,IAAI,EAAA;AACT,gCAAA,QAAA,gBAAArC,cAAA,CAAChC,uBAAAA,EAAAA;AAAYkE,oCAAAA,QAAAA,EAAAA,GAAG,CAACb,SAAAA;;;AAGrB,0CAAArB,cAAA,CAACwB,kBAAMa,IAAI,EAAA;AACT,gCAAA,QAAA,gBAAArC,cAAA,CAACuC,6BAAAA,EAAAA;AAAe9C,oCAAAA,MAAAA,EAAQyC,IAAIzC,MAAM;oCAAE+C,QAAAA,EAAU;;;AAEhD,0CAAAxC,cAAA,CAACwB,kBAAMa,IAAI,EAAA;AACRvB,gCAAAA,QAAAA,EAAAA,YAAAA,IAAgBE,iBAAiByB,QAAQ,CAACP,GAAAA,CAAII,UAAU,kBACvDzC,eAAA,CAACC,iBAAAA,EAAAA;oCAAKC,GAAAA,EAAK,CAAA;;sDACTC,cAAA,CAAChC,uBAAAA,EAAAA;sDACEU,aAAAA,CAAc;gDACbS,EAAAA,EAAI,2CAAA;gDACJC,cAAAA,EAAgB;AAClB,6CAAA;;sDAEFY,cAAA,CAAC0C,mBAAAA,EAAAA;4CAAOC,KAAK,EAAA;;;mDAGf3C,cAAA,CAACT,mBAAAA,EAAAA;AACCC,oCAAAA,gBAAAA,EAAkBA,gBAAgB,CAAC0C,GAAAA,CAAII,UAAU,CAAC;AAClD7C,oCAAAA,MAAAA,EAAQyC,IAAIzC;;;AAIlB,0CAAAO,cAAA,CAACwB,kBAAMa,IAAI,EAAA;AACT,gCAAA,QAAA,gBAAArC,cAAA,CAACF,iBAAAA,EAAAA;AACC,oCAAA,QAAA,gBAAAE,cAAA,CAAC4C,uBAAAA,EAAAA;wCACCC,GAAAA,EAAKC,mBAAAA;wCACLC,EAAAA,EAAI;AACF9B,4CAAAA,QAAAA,EAAU,GAAGA,QAAAA,CAAS,CAAC,EAAEiB,GAAAA,CAAII,UAAU,CAAA,CAAE;4CACzCU,MAAAA,EAAQd,GAAAA,CAAIe,MAAM,IAAI,CAAC,uBAAuB,EAAEf,GAAAA,CAAIe,MAAM,CAAA;AAC5D,yCAAA;wCACAC,KAAAA,EAAO;4CAAEC,IAAAA,EAAMlC;AAAS,yCAAA;AACxBb,wCAAAA,KAAAA,EAAO1B,aAAAA,CAAc;4CACnBS,EAAAA,EAAI,mCAAA;4CACJC,cAAAA,EAAgB;AAClB,yCAAA,CAAA;wCACAgE,MAAAA,EAAO,QAAA;wCACPC,UAAAA,EAAW,MAAA;wCACX/C,OAAAA,EAAQ,OAAA;AAER,wCAAA,QAAA,gBAAAN,cAAA,CAACsD,YAAAA,EAAAA;4CAAOC,KAAAA,EAAO,QAAA;4CAAUC,MAAAA,EAAQ;;;;;;AAhDzBtB,qBAAAA,EAAAA,GAAAA,CAAI/C,EAAE,CAAA;;;;AAyDhC,CAAA;AAaA,MAAMsE,wBAAAA,GAA2B,CAAC,EAChCC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPvD,SAAS,EACqB,GAAA;AAC9B,IAAA,qBACER,eAAA,CAACC,iBAAAA,EAAAA;QAAK+D,cAAAA,EAAe,eAAA;QAAgBC,IAAAA,EAAM,CAAA;QAAG/D,GAAAA,EAAK,CAAA;;0BACjDF,eAAA,CAACC,iBAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;AACR4D,oBAAAA,IAAAA;kCACD3D,cAAA,CAAChC,uBAAAA,EAAAA;wBAAWqC,SAAAA,EAAWA,SAAAA;wBAAWE,UAAAA,EAAW,MAAA;AAC1CqD,wBAAAA,QAAAA,EAAAA;;;;0BAGL5D,cAAA,CAAChC,uBAAAA,EAAAA;gBAAWuC,UAAAA,EAAW,MAAA;AAAQmD,gBAAAA,QAAAA,EAAAA;;;;AAGrC,CAAA;AAaA,MAAMK,qBAAAA,GAAwB,CAAC,EAC7BC,0BAA0B,EAC1BC,qBAAqB,EACrBC,oBAAoB,EACpBC,sBAAsB,EACK,GAAA;IAC3B,MAAM,EAAEzF,aAAa,EAAE,GAAGgB,iBAAAA,EAAAA;AAE1B,IAAA,qBACEM,cAAA,CAACoE,gBAAAA,EAAAA;QAAIC,SAAS,EAAA,IAAA;QAACC,WAAAA,EAAY,YAAA;AACzB,QAAA,QAAA,gBAAAtE,cAAA,CAAC/B,cAAAA,EAAAA;YAAesG,QAAAA,EAAU,CAAA;YAAGC,QAAAA,EAAU,CAAA;AACrC,YAAA,QAAA,gBAAA3E,eAAA,CAAC4E,kBAAAA,EAAAA;;kCACC5E,eAAA,CAAC6E,eAAAA,EAAAA;;0CACC1E,cAAA,CAAC2E,eAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAA3E,cAAA,CAACyD,wBAAAA,EAAAA;oCACCpD,SAAAA,EAAU,YAAA;oCACVqD,KAAAA,EAAOM,0BAAAA;AACPL,oCAAAA,IAAAA,gBAAM3D,cAAA,CAACS,iBAAAA,EAAAA;wCAAYP,IAAAA,EAAK;;AACxB0D,oCAAAA,OAAAA,EAASlF,aAAAA,CAAc;wCACrBS,EAAAA,EAAI,4BAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA;;;0CAGJY,cAAA,CAAC2E,eAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAA3E,cAAA,CAACyD,wBAAAA,EAAAA;oCACCpD,SAAAA,EAAU,YAAA;oCACVqD,KAAAA,EAAOO,qBAAAA;AACPN,oCAAAA,IAAAA,gBAAM3D,cAAA,CAACS,iBAAAA,EAAAA;wCAAYP,IAAAA,EAAK;;AACxB0D,oCAAAA,OAAAA,EAASlF,aAAAA,CAAc;wCACrBS,EAAAA,EAAI,6BAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA;;;;;kCAINS,eAAA,CAAC6E,eAAAA,EAAAA;;0CACC1E,cAAA,CAAC2E,eAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAA3E,cAAA,CAACyD,wBAAAA,EAAAA;oCACCpD,SAAAA,EAAU,gBAAA;oCACVqD,KAAAA,EAAOQ,oBAAAA;AACPP,oCAAAA,IAAAA,gBAAM3D,cAAA,CAACU,4BAAAA,EAAAA;wCAAuBR,IAAAA,EAAK;;AACnC0D,oCAAAA,OAAAA,EAASlF,aAAAA,CAAc;wCACrBS,EAAAA,EAAI,uCAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA;;;0CAGJY,cAAA,CAAC2E,eAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAA3E,cAAA,CAACyD,wBAAAA,EAAAA;oCACCpD,SAAAA,EAAU,WAAA;oCACVqD,KAAAA,EAAOS,sBAAAA;AACPR,oCAAAA,IAAAA,gBAAM3D,cAAA,CAACC,iBAAAA,EAAAA;wCAAYC,IAAAA,EAAK;;AACxB0D,oCAAAA,OAAAA,EAASlF,aAAAA,CAAc;wCACrBS,EAAAA,EAAI,iDAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA;;;;;;;;;AAQhB,CAAA;AAeA,MAAMwF,2BAAAA,GAA8B,CAAC,EACnCC,uBAAuB,EACvBC,WAAW,EACXC,4BAA4B,EAC5BC,KAAK,EAC4B,GAAA;IACjC,MAAM,EAAEtG,aAAa,EAAE,GAAGgB,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEuF,MAAM,EAAEC,UAAU,EAAE,GAAGC,yCAAAA,CAAqBH,KAAAA,CAAAA;IACpD,MAAMI,WAAAA,GAAcP,wBAAwB/C,GAAG,CAAC,CAAC,EAAEQ,UAAU,EAAE,GAAKA,UAAAA,CAAAA;;AAGpE,IAAA,MAAM,CAAC,EAAE+C,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AACpB,IAAA,MAAMC,SAASC,gBAAAA,CAAMC,OAAO,CAAC,IAAMC,uBAAiBL,KAAAA,CAAAA,EAAQ;AAACA,QAAAA;AAAM,KAAA,CAAA;;;AAInE,IAAA,MAAM,EACJM,IAAAA,EAAMC,WAAAA,GAAY,EAAE,EACpBC,SAAS,EACTC,UAAU,EACVC,OAAO,EACR,GAAGC,2CAAAA,CACF;AACEhB,QAAAA,KAAAA;AACAI,QAAAA,WAAAA;QACAnC,MAAAA,EAAQoC,KAAAA,CAAMY,OAAO,EAAEC,IAAAA,EAAMjD,MAAAA;AAC7BkD,QAAAA,IAAAA,EAAMd,MAAMc;KACd,EACA;QAAEC,IAAAA,EAAMhB,WAAAA,CAAYiB,MAAM,KAAK;AAAE,KAAA,CAAA;;;IAKnC,MAAM,EAAEC,IAAI,EAAE9G,gBAAgB,EAAE,GAAGgG,gBAAAA,CAAMC,OAAO,CAAC,IAAA;AAC/C,QAAA,IAAIG,WAAAA,CAAUS,MAAM,GAAG,CAAA,IAAKpB,MAAAA,EAAQ;AAClC,YAAA,MAAMsB,QAAAA,GAAWC,0BAAAA,CAAgBvB,MAAAA,CAAOwB,UAAU,EAAEvB,UAAAA,EAAY;gBAAEzF,MAAAA,EAAQ;AAAY,aAAA,CAAA;YACtF,MAAMiH,SAAAA,GAAYC,uBAAkB1B,MAAAA,EAAQC,UAAAA,CAAAA;AAC5C,YAAA,MAAM1F,mBAA+D,EAAC;;;AAGtE,YAAA,MAAMoH,eAAe,IAAIC,GAAAA,CAAIjB,YAAU9D,GAAG,CAAC,CAACgF,GAAAA,GAAkB;AAACA,oBAAAA,GAAAA,CAAIxE,UAAU;AAAEwE,oBAAAA;AAAI,iBAAA,CAAA,CAAA;AACnF,YAAA,MAAMC,iBAAAA,GAAoB,IAAIF,GAAAA,CAC5BhC,uBAAAA,CAAwB/C,GAAG,CAAC,CAAC,EAAEQ,UAAU,EAAE7C,MAAM,EAAE,GAAK;AAAC6C,oBAAAA,UAAAA;AAAY7C,oBAAAA;AAAO,iBAAA,CAAA,CAAA;AAE9E,YAAA,MAAMuH,gBAAAA,GAAmB5B,WAAAA,CACtBtD,GAAG,CAAC,CAAC3C,EAAAA,GAAAA;gBACJ,MAAM2H,GAAAA,GAAMF,YAAAA,CAAaK,GAAG,CAAC9H,EAAAA,CAAAA;gBAC7B,IAAI,CAAC2H,KAAK,OAAOI,SAAAA;gBACjB,OAAO;AAAE,oBAAA,GAAGJ,GAAG;AAAErH,oBAAAA,MAAAA,EAAQsH,iBAAAA,CAAkBE,GAAG,CAAC9H,EAAAA,CAAAA,IAAO2H,IAAIrH;AAAO,iBAAA;AACnE,YAAA,CAAA,CAAA,CACCmC,MAAM,CAAC,CAACkF,GAAAA,GAAyBA,GAAAA,KAAQI,SAAAA,CAAAA;AAC5C,YAAA,MAAMZ,IAAAA,GAAOU,gBAAAA,CAAiBlF,GAAG,CAAC,CAACqF,KAAAA,GAAAA;AACjC,gBAAA,MAAMC,cAAcV,SAAAA,CAAUS,KAAAA,CAAAA;gBAC9B,IAAI;oBACFZ,QAAAA,CAASc,YAAY,CAACD,WAAAA,EAAa;wBAAEE,UAAAA,EAAY;AAAM,qBAAA,CAAA;oBACvD,OAAOH,KAAAA;AACT,gBAAA,CAAA,CAAE,OAAOI,CAAAA,EAAG;AACV,oBAAA,IAAIA,aAAaC,mBAAAA,EAAiB;AAChChI,wBAAAA,gBAAgB,CAAC2H,KAAAA,CAAM7E,UAAU,CAAC,GAAGmF,kCAAAA,CAAuBF,CAAAA,CAAAA;AAC9D,oBAAA;oBACA,OAAOJ,KAAAA;AACT,gBAAA;AACF,YAAA,CAAA,CAAA;YACA,OAAO;AAAEb,gBAAAA,IAAAA;AAAM9G,gBAAAA;AAAiB,aAAA;AAClC,QAAA;QACA,OAAO;AAAE8G,YAAAA,IAAAA,EAAM,EAAE;AAAE9G,YAAAA,gBAAAA,EAAkB;AAAG,SAAA;IAC1C,CAAA,EAAG;AAAC0F,QAAAA,UAAAA;AAAYU,QAAAA,WAAAA;AAAWR,QAAAA,WAAAA;AAAaP,QAAAA,uBAAAA;AAAyBI,QAAAA;AAAO,KAAA,CAAA;AAExE,IAAA,MAAM,CAACyC,YAAAA,EAAcC,eAAAA,CAAgB,GAAGnC,gBAAAA,CAAMoC,QAAQ,CAAC,KAAA,CAAA;AAEvD,IAAA,MAAM,EAAEC,WAAAA,EAAaC,iBAAiB,EAAEjC,SAAAA,EAAW/E,YAAY,EAAE,GAAGiH,qCAAAA,EAAAA;AACpE,IAAA,MAAM,GAAG,EAAElC,SAAAA,EAAWmC,gBAAgB,EAAE,CAAC,GAAGC,yCAAAA,EAAAA;AAE5C,IAAA,MAAMC,eAAeC,oBAAAA,CAAS,eAAA,EAAiB,CAACjF,KAAAA,GAAUA,MAAMgF,YAAY,CAAA;;AAG5E,IAAA,MAAME,eAAAA,GAAkB9B,IAAAA,CAAK1E,MAAM,CAAC,CAACuF,KAAAA,GACnCe,YAAAA,CAAaG,IAAI,CAAC,CAACC,aAAAA,GAAkBA,aAAAA,CAAchG,UAAU,KAAK6E,MAAM7E,UAAU,CAAA,CAAA;AAGpF,IAAA,MAAMtB,mBAAmBoH,eAAAA,CACtBxG,MAAM,CAAC,CAACuF,KAAAA,GAAU,CAAC3H,gBAAgB,CAAC2H,KAAAA,CAAM7E,UAAU,CAAC,CAAA,CACrDR,GAAG,CAAC,CAACqF,KAAAA,GAAUA,MAAM7E,UAAU,CAAA;AAElC,IAAA,MAAMiG,8BAAAA,GAAiCH,eAAAA,CAAgBxG,MAAM,CAC3D,CAAC,EAAEU,UAAU,EAAE,GAAK9C,gBAAgB,CAAC8C,UAAAA,CAAW,EAChD+D,MAAM;IACR,MAAMmC,6BAAAA,GAAgCJ,eAAAA,CAAgBxG,MAAM,CAC1D,CAAC,EAAEnC,MAAM,EAAE,GAAKA,MAAAA,KAAW,WAAA,CAAA,CAC3B4G,MAAM;AACR,IAAA,MAAMoC,+BAA+BL,eAAAA,CAAgBxG,MAAM,CACzD,CAAC,EAAEnC,MAAM,EAAE6C,UAAU,EAAE,GAAK7C,WAAW,UAAA,IAAc,CAACD,gBAAgB,CAAC8C,UAAAA,CAAW,EAClF+D,MAAM;AACR,IAAA,MAAMqC,gCAAAA,GACJN,eAAAA,CAAgB/B,MAAM,GAAGkC,8BAAAA,GAAiCC,6BAAAA;AAE5D,IAAA,MAAMG,YAAAA,GAAe,IAAMhB,eAAAA,CAAgB,CAACiB,OAAS,CAACA,IAAAA,CAAAA;AAEtD,IAAA,MAAMC,wBAAAA,GAA2B,UAAA;AAC/BF,QAAAA,YAAAA,EAAAA;QAEA,MAAMG,GAAAA,GAAM,MAAMhB,iBAAAA,CAAkB;YAAE9C,KAAAA,EAAOA,KAAAA;YAAOI,WAAAA,EAAapE,gBAAAA;AAAkBuE,YAAAA;AAAO,SAAA,CAAA;AAC1F,QAAA,IAAI,EAAE,OAAA,IAAWuD,GAAE,CAAA,EAAI;AACrB,YAAA,MAAMC,kBAAAA,GAAqBzC,IAAAA,CAAK1E,MAAM,CAAC,CAACM,GAAAA,GAAAA;AACtC,gBAAA,OAAO,CAAClB,gBAAAA,CAAiByB,QAAQ,CAACP,IAAII,UAAU,CAAA;AAClD,YAAA,CAAA,CAAA;;YAEAyC,4BAAAA,CAA6BgE,kBAAAA,CAAAA;AAC/B,QAAA;AACF,IAAA,CAAA;IAEA,qBACElJ,eAAA,CAAAmJ,mBAAA,EAAA;;AACE,0BAAAnJ,eAAA,CAACoJ,mBAAMhH,IAAI,EAAA;;kCACTjC,cAAA,CAAC+D,qBAAAA,EAAAA;AACCC,wBAAAA,0BAAAA,EACE0E,gCAAAA,GAAmCD,4BAAAA;wBAErCxE,qBAAAA,EAAuBuE,6BAAAA;wBACvBtE,oBAAAA,EAAsBuE,4BAAAA;wBACtBtE,sBAAAA,EAAwBoE;;kCAE1BvI,cAAA,CAACoE,gBAAAA,EAAAA;wBAAI8E,SAAAA,EAAW,CAAA;AACd,wBAAA,QAAA,gBAAAlJ,cAAA,CAACa,2BAAAA,EAAAA;4BACCC,YAAAA,EAAckH,gBAAAA;4BACdjH,aAAAA,EAAeuF,IAAAA;4BACftF,gBAAAA,EAAkBA,gBAAAA;4BAClBxB,gBAAAA,EAAkBA;;;;;AAIxB,0BAAAK,eAAA,CAACoJ,mBAAME,MAAM,EAAA;;kCACXnJ,cAAA,CAACoJ,mBAAAA,EAAAA;wBAAOC,OAAAA,EAASvE,WAAAA;wBAAaxE,OAAAA,EAAQ,UAAA;kCACnC5B,aAAAA,CAAc;4BACbS,EAAAA,EAAI,8BAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;kCAEFS,eAAA,CAACC,iBAAAA,EAAAA;wBAAKC,GAAAA,EAAK,CAAA;;0CACTC,cAAA,CAACoJ,mBAAAA,EAAAA;gCAAOC,OAAAA,EAAStD,OAAAA;gCAASzF,OAAAA,EAAQ,UAAA;gCAAWgJ,OAAAA,EAASxD,UAAAA;0CACnDpH,aAAAA,CAAc;oCAAES,EAAAA,EAAI,mBAAA;oCAAqBC,cAAAA,EAAgB;AAAU,iCAAA;;0CAEtEY,cAAA,CAACoJ,mBAAAA,EAAAA;gCACCC,OAAAA,EAASV,YAAAA;gCACTY,QAAAA,EACEnB,eAAAA,CAAgB/B,MAAM,KAAK,CAAA,IAC3B+B,eAAAA,CAAgB/B,MAAM,KAAKkC,8BAAAA,IAC3BC,6BAAAA,KAAkCJ,eAAAA,CAAgB/B,MAAM,IACxDR,SAAAA;AAEFyD,gCAAAA,OAAAA,EAASxI,YAAAA,IAAgBkH,gBAAAA;0CAExBtJ,aAAAA,CAAc;oCAAES,EAAAA,EAAI,mBAAA;oCAAqBC,cAAAA,EAAgB;AAAU,iCAAA;;;;;;0BAI1EY,cAAA,CAACwJ,+CAAAA,EAAAA;gBACCC,MAAAA,EAAQ/B,YAAAA;gBACRgC,cAAAA,EAAgBf,YAAAA;AAChBgB,gBAAAA,sBAAAA,EAAwB7I,YAAAA,IAAgBkH,gBAAAA;gBACxC4B,SAAAA,EAAWf;;;;AAInB;AAEA;;AAEkG,2GAE5FgB,aAAAA,GAAqC,CAAC,EAAEjE,SAAS,EAAEZ,KAAK,EAAE,GAAA;IAC9D,MAAM,EAAEtG,aAAa,EAAE,GAAGgB,iBAAAA,EAAAA;;AAE1B,IAAA,MAAMoK,uBAAuBC,4BAAAA,CAAgB,iBAAA,EAAmB,CAAC7G,KAAAA,GAAUA,MAAM8G,UAAU,CAAA;IAC3F,MAAMC,iBAAAA,GACJH,oBAAAA,IAAwBlE,SAAAA,CAAUyC,IAAI,CAAC,CAAC,EAAE5I,MAAM,EAAE,GAAKA,MAAAA,KAAW,WAAA,CAAA;AAEpE,IAAA,MAAMsF,+BAA+BoD,oBAAAA,CAAS,eAAA,EAAiB,CAACjF,KAAAA,GAAUA,MAAMgH,SAAS,CAAA;AAEzF,IAAA,MAAMC,WAAAA,GAAc,IAAA;QAClBC,qBAAAA,CAAkBC,IAAI,CAACC,cAAc,CAAC;AAAC,YAAA;gBAAEC,IAAAA,EAAM,UAAA;gBAAYpL,EAAAA,EAAI,CAAA,EAAG6F,KAAAA,CAAM,KAAK;AAAE;AAAE,SAAA,CAAA;AACnF,IAAA,CAAA;IAEA,IAAI,CAACiF,mBAAmB,OAAO,IAAA;IAE/B,OAAO;QACLO,UAAAA,EAAY,SAAA;QACZlK,OAAAA,EAAS,UAAA;AACTF,QAAAA,KAAAA,EAAO1B,aAAAA,CAAc;YAAES,EAAAA,EAAI,mBAAA;YAAqBC,cAAAA,EAAgB;AAAU,SAAA,CAAA;QAC1EqL,MAAAA,EAAQ;YACNF,IAAAA,EAAM,OAAA;AACNG,YAAAA,KAAAA,EAAOhM,aAAAA,CAAc;AACnBS,gBAAAA,EAAAA,EAAIwL,2BAAAA,CAAe,gDAAA,CAAA;gBACnBvL,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAwL,OAAAA,EAAS,CAAC,EAAEC,OAAO,EAAE,GAAA;gBACnB,qBACE7K,cAAA,CAACwB,kBAAMsJ,IAAI,EAAA;oBAACxE,IAAAA,EAAMV,SAAAA;oBAAWmF,mBAAAA,EAAqBnF,SAAAA;oBAAWoF,OAAAA,EAASrK,aAAAA;AACpE,oBAAA,QAAA,gBAAAX,cAAA,CAAC4E,2BAAAA,EAAAA;wBACCC,uBAAAA,EAAyBe,SAAAA;wBACzBd,WAAAA,EAAa,IAAA;AACX+F,4BAAAA,OAAAA,EAAAA;AACAV,4BAAAA,WAAAA,EAAAA;AACF,wBAAA,CAAA;wBACApF,4BAAAA,EAA8BA,4BAAAA;wBAC9BC,KAAAA,EAAOA;;;AAIf,YAAA,CAAA;YACA6F,OAAAA,EAAS,IAAA;AACPV,gBAAAA,WAAAA,EAAAA;AACF,YAAA;AACF;AACF,KAAA;AACF;;;;;;"}
@@ -12,11 +12,12 @@ import { useContentTypeSchema } from '../../../../hooks/useContentTypeSchema.mjs
12
12
  import { useDocumentActions } from '../../../../hooks/useDocumentActions.mjs';
13
13
  import { useDocLayout } from '../../../../hooks/useDocumentLayout.mjs';
14
14
  import { contentManagerApi } from '../../../../services/api.mjs';
15
- import { useGetAllDocumentsQuery, usePublishManyDocumentsMutation } from '../../../../services/documents.mjs';
15
+ import { useGetDocumentsForValidationQuery, usePublishManyDocumentsMutation } from '../../../../services/documents.mjs';
16
16
  import { buildValidParams } from '../../../../utils/api.mjs';
17
17
  import { getTranslation } from '../../../../utils/translations.mjs';
18
18
  import { createYupSchema } from '../../../../utils/validation.mjs';
19
19
  import { DocumentStatus } from '../../../EditView/components/DocumentStatus.mjs';
20
+ import { transformDocument } from '../../../EditView/utils/data.mjs';
20
21
  import { ConfirmDialogPublishAll } from './ConfirmBulkActionDialog.mjs';
21
22
 
22
23
  const TypographyMaxWidth = styled(Typography)`
@@ -346,38 +347,47 @@ const SelectedEntriesModalContent = ({ listViewSelectedEntries, toggleModal, set
346
347
  const params = React.useMemo(()=>buildValidParams(query), [
347
348
  query
348
349
  ]);
349
- // Fetch the documents based on the selected entries and update the modal table
350
- const { data, isLoading, isFetching, refetch } = useGetAllDocumentsQuery({
350
+ // Fetch via findOne (same as edit view) so we get the exact same data structure.
351
+ // The list API returns a different structure that causes false validation errors.
352
+ const { data: documents = [], isLoading, isFetching, refetch } = useGetDocumentsForValidationQuery({
351
353
  model,
352
- params: {
353
- page: '1',
354
- pageSize: documentIds.length.toString(),
355
- sort: query.sort,
356
- filters: {
357
- documentId: {
358
- $in: documentIds
359
- }
360
- },
361
- locale: query.plugins?.i18n?.locale
362
- }
354
+ documentIds,
355
+ locale: query.plugins?.i18n?.locale,
356
+ sort: query.sort
363
357
  }, {
364
- selectFromResult: ({ data, ...restRes })=>({
365
- data: data?.results ?? [],
366
- ...restRes
367
- })
358
+ skip: documentIds.length === 0
368
359
  });
369
- // Validate the entries based on the schema to show errors if any
360
+ // Transform and validate like the edit view - transformDocument prepares data
361
+ // for validation (relations, temp keys, etc.)
370
362
  const { rows, validationErrors } = React.useMemo(()=>{
371
- if (data.length > 0 && schema) {
372
- const validate = createYupSchema(schema.attributes, components, // Since this is the "Publish" action, the validation
373
- // schema must enforce the rules for published entities
374
- {
363
+ if (documents.length > 0 && schema) {
364
+ const validate = createYupSchema(schema.attributes, components, {
375
365
  status: 'published'
376
366
  });
367
+ const transform = transformDocument(schema, components);
377
368
  const validationErrors = {};
378
- const rows = data.map((entry)=>{
369
+ // Re-order documents to match the list view selection order, and restore the
370
+ // correct status (draft fetch returns 'draft' even for 'modified' documents)
371
+ const documentsMap = new Map(documents.map((doc)=>[
372
+ doc.documentId,
373
+ doc
374
+ ]));
375
+ const listViewStatusMap = new Map(listViewSelectedEntries.map(({ documentId, status })=>[
376
+ documentId,
377
+ status
378
+ ]));
379
+ const orderedDocuments = documentIds.map((id)=>{
380
+ const doc = documentsMap.get(id);
381
+ if (!doc) return undefined;
382
+ return {
383
+ ...doc,
384
+ status: listViewStatusMap.get(id) ?? doc.status
385
+ };
386
+ }).filter((doc)=>doc !== undefined);
387
+ const rows = orderedDocuments.map((entry)=>{
388
+ const transformed = transform(entry);
379
389
  try {
380
- validate.validateSync(entry, {
390
+ validate.validateSync(transformed, {
381
391
  abortEarly: false
382
392
  });
383
393
  return entry;
@@ -399,7 +409,9 @@ const SelectedEntriesModalContent = ({ listViewSelectedEntries, toggleModal, set
399
409
  };
400
410
  }, [
401
411
  components,
402
- data,
412
+ documents,
413
+ documentIds,
414
+ listViewSelectedEntries,
403
415
  schema
404
416
  ]);
405
417
  const [isDialogOpen, setIsDialogOpen] = React.useState(false);