@strapi/content-manager 5.42.1 → 5.44.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 (116) hide show
  1. package/dist/admin/components/Widgets.js +1 -1
  2. package/dist/admin/components/Widgets.js.map +1 -1
  3. package/dist/admin/components/Widgets.mjs +1 -1
  4. package/dist/admin/components/Widgets.mjs.map +1 -1
  5. package/dist/admin/hooks/useDocument.js +3 -2
  6. package/dist/admin/hooks/useDocument.js.map +1 -1
  7. package/dist/admin/hooks/useDocument.mjs +3 -2
  8. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  9. package/dist/admin/hooks/useDocumentActions.js +5 -5
  10. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  11. package/dist/admin/hooks/useDocumentActions.mjs +6 -6
  12. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  13. package/dist/admin/hooks/useDocumentLayout.js +2 -2
  14. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  15. package/dist/admin/hooks/useDocumentLayout.mjs +2 -2
  16. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  17. package/dist/admin/hooks/usePersistentQueryParams.js +46 -22
  18. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  19. package/dist/admin/hooks/usePersistentQueryParams.mjs +48 -24
  20. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/EditViewPage.js +33 -6
  22. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  23. package/dist/admin/pages/EditView/EditViewPage.mjs +14 -6
  24. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/DocumentActions.js +30 -20
  26. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/DocumentActions.mjs +30 -20
  28. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +3 -1
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +3 -1
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +19 -0
  34. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +19 -0
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +1 -0
  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 +1 -0
  40. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +4 -1
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +4 -1
  44. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +36 -9
  46. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +36 -9
  48. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  49. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +22 -5
  50. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  51. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +26 -9
  52. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  53. package/dist/admin/pages/ListView/ListViewPage.js +23 -10
  54. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  55. package/dist/admin/pages/ListView/ListViewPage.mjs +23 -10
  56. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  57. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +1 -1
  58. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  59. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +1 -1
  60. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  61. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +37 -25
  62. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  63. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +38 -26
  64. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  65. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +3 -0
  66. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  67. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +3 -0
  68. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  69. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +3 -2
  70. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  71. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +3 -2
  72. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
  73. package/dist/admin/services/documents.js +32 -7
  74. package/dist/admin/services/documents.js.map +1 -1
  75. package/dist/admin/services/documents.mjs +32 -8
  76. package/dist/admin/services/documents.mjs.map +1 -1
  77. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  78. package/dist/admin/src/hooks/useDocument.d.ts +1 -1
  79. package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +8 -1
  80. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +3 -1
  81. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +2 -0
  82. package/dist/admin/src/pages/ListConfiguration/ListConfigurationPage.d.ts +1 -1
  83. package/dist/admin/src/pages/ListView/components/TableCells/CellValue.d.ts +2 -1
  84. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  85. package/dist/admin/src/services/api.d.ts +1 -1
  86. package/dist/admin/src/services/components.d.ts +2 -2
  87. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  88. package/dist/admin/src/services/documents.d.ts +22 -17
  89. package/dist/admin/src/services/homepage.d.ts +1 -1
  90. package/dist/admin/src/services/init.d.ts +1 -1
  91. package/dist/admin/src/services/relations.d.ts +2 -2
  92. package/dist/admin/src/services/uid.d.ts +3 -3
  93. package/dist/admin/translations/cs.json.js +242 -8
  94. package/dist/admin/translations/cs.json.js.map +1 -1
  95. package/dist/admin/translations/cs.json.mjs +242 -9
  96. package/dist/admin/translations/cs.json.mjs.map +1 -1
  97. package/dist/admin/translations/nl.json.js +180 -11
  98. package/dist/admin/translations/nl.json.js.map +1 -1
  99. package/dist/admin/translations/nl.json.mjs +180 -11
  100. package/dist/admin/translations/nl.json.mjs.map +1 -1
  101. package/dist/server/controllers/collection-types.js +32 -1
  102. package/dist/server/controllers/collection-types.js.map +1 -1
  103. package/dist/server/controllers/collection-types.mjs +33 -2
  104. package/dist/server/controllers/collection-types.mjs.map +1 -1
  105. package/dist/server/routes/admin.js +21 -0
  106. package/dist/server/routes/admin.js.map +1 -1
  107. package/dist/server/routes/admin.mjs +21 -0
  108. package/dist/server/routes/admin.mjs.map +1 -1
  109. package/dist/server/src/controllers/collection-types.d.ts +1 -0
  110. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  111. package/dist/server/src/controllers/index.d.ts +1 -0
  112. package/dist/server/src/controllers/index.d.ts.map +1 -1
  113. package/dist/server/src/index.d.ts +1 -0
  114. package/dist/server/src/index.d.ts.map +1 -1
  115. package/dist/server/src/routes/admin.d.ts.map +1 -1
  116. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentActions.js","sources":["../../../../../admin/src/pages/EditView/components/DocumentActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useForm,\n useNotification,\n NotificationConfig,\n useAPIErrorHandler,\n useQueryParams,\n tours,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n useIsDesktop,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Dialog,\n Flex,\n Modal,\n Radio,\n Typography,\n Menu,\n ButtonProps,\n Tooltip,\n IconButton,\n} from '@strapi/design-system';\nimport { Cross, More, WarningCircle } from '@strapi/icons';\nimport mapValues from 'lodash/fp/mapValues';\nimport get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { Create, Publish } from '../../../../../shared/contracts/collection-types';\nimport { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes';\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc, useDocument } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { usePreviewContext } from '../../../preview/pages/Preview';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport {\n useGetDraftRelationCountQuery,\n useUpdateDocumentMutation,\n} from '../../../services/documents';\nimport { isBaseQueryError, buildValidParams } from '../../../utils/api';\nimport { getTranslation } from '../../../utils/translations';\nimport { AnyData, handleInvisibleAttributes } from '../utils/data';\n\nimport { useRelationModal } from './FormInputs/Relations/RelationModal';\n\nimport type { RelationsFormValue } from './FormInputs/Relations/Relations';\nimport type { DocumentActionComponent } from '../../../content-manager';\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\ntype DocumentActionPosition = 'panel' | 'header' | 'table-row' | 'preview' | 'relation-modal';\n\ninterface DocumentActionDescription {\n label: string;\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n icon?: React.ReactNode;\n /**\n * @default false\n */\n disabled?: boolean;\n /**\n * @default 'panel'\n * @description Where the action should be rendered.\n */\n position?: DocumentActionPosition | DocumentActionPosition[];\n dialog?: DialogOptions | NotificationOptions | ModalOptions;\n /**\n * @default 'secondary'\n */\n variant?: ButtonProps['variant'];\n loading?: ButtonProps['loading'];\n}\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n variant?: ButtonProps['variant'];\n onConfirm?: () => void | Promise<void>;\n onCancel?: () => void | Promise<void>;\n}\n\ninterface NotificationOptions {\n type: 'notification';\n title: string;\n link?: {\n label: string;\n url: string;\n target?: string;\n };\n content?: string;\n onClose?: () => void;\n status?: NotificationConfig['type'];\n timeout?: number;\n}\n\ninterface ModalOptions {\n type: 'modal';\n title: string;\n content: React.ComponentType<{ onClose: () => void }> | React.ReactNode;\n footer?: React.ComponentType<{ onClose: () => void }> | React.ReactNode;\n onClose?: () => void;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface Action extends DocumentActionDescription {\n id: string;\n}\n\ninterface DocumentActionsProps {\n actions: Action[];\n}\n\nconst connectRelationToParent = (\n parentDataToUpdate: AnyData | undefined,\n fieldToConnect: string,\n data: Create.Response['data'] | Publish.Response['data'],\n fieldToConnectUID?: string\n) => {\n /*\n * Check if the fieldToConnect is already present in the parentDataToUpdate.\n * This happens in particular when in the parentDocument you have created\n * a new component without saving.\n */\n const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);\n const fieldToConnectPath = isFieldPresent\n ? fieldToConnect\n : // Compute the path to the parent object\n fieldToConnect.split('.').slice(0, -1).join('.');\n const fieldToConnectValue = isFieldPresent\n ? {\n connect: [\n {\n id: data.documentId,\n documentId: data.documentId,\n locale: data.locale,\n },\n ],\n }\n : {\n [fieldToConnect.split('.').pop()!]: {\n connect: [\n {\n id: data.documentId,\n documentId: data.documentId,\n locale: data.locale,\n },\n ],\n disconnect: [],\n },\n // In case the object was not present you need to pass the componentUID of the parent document\n __component: fieldToConnectUID,\n };\n const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);\n return merge(parentDataToUpdate, objectToConnect);\n};\n\nconst DocumentActions = ({ actions }: DocumentActionsProps) => {\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n const [primaryAction, secondaryAction, ...restActions] = actions.filter((action) => {\n if (action.position === undefined) {\n return true;\n }\n\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('panel');\n });\n\n if (!primaryAction) {\n return null;\n }\n\n const addHintTooltip = (action: Action, children: React.ReactNode) => {\n return !action.disabled ? (\n <Tooltip\n label={formatMessage(\n {\n id: 'content-manager.containers.EditView.saveHint',\n defaultMessage: 'Ctrl / Cmd + Enter to {action}',\n },\n {\n action: action.label,\n }\n )}\n >\n <Flex width=\"100%\">{children}</Flex>\n </Tooltip>\n ) : (\n children\n );\n };\n\n const primaryActionContent = (\n <>\n <Flex flex={1} alignItems=\"stretch\" direction=\"column\">\n {primaryAction.label === 'Publish'\n ? addHintTooltip(\n primaryAction,\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n )\n : addHintTooltip(\n primaryAction,\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n buttonType=\"submit\"\n />\n )}\n </Flex>\n\n {restActions.length > 0 ? (\n <DocumentActionsMenu\n actions={restActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.panels.default.more-actions',\n defaultMessage: 'More document actions',\n })}\n />\n ) : null}\n </>\n );\n\n return (\n <Flex direction={{ initial: 'row', large: 'column' }} gap={2} alignItems=\"stretch\" width=\"100%\">\n <tours.contentManager.Publish>\n {isDesktop ? <Flex gap={2}>{primaryActionContent}</Flex> : primaryActionContent}\n </tours.contentManager.Publish>\n {secondaryAction ? (\n <Flex flex={1} order={{ initial: -1, large: 0 }} alignItems=\"stretch\" direction=\"column\">\n {secondaryAction.label === 'Publish' ? (\n <tours.contentManager.Publish>\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n </tours.contentManager.Publish>\n ) : (\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n buttonType=\"submit\"\n />\n )}\n </Flex>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionButtonProps extends Action {\n buttonType?: 'button' | 'submit' | 'reset';\n}\n\nconst DocumentActionButton = ({ buttonType = 'button', ...action }: DocumentActionButtonProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n const { toggleNotification } = useNotification();\n\n const handleClick = (action: Action) => async (e: React.MouseEvent) => {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n switch (dialog.type) {\n case 'notification':\n toggleNotification({\n title: dialog.title,\n message: dialog.content,\n type: dialog.status,\n timeout: dialog.timeout,\n onClose: dialog.onClose,\n });\n break;\n case 'dialog':\n case 'modal':\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <>\n <Button\n flex=\"auto\"\n startIcon={action.icon}\n disabled={action.disabled}\n onClick={handleClick(action)}\n justifyContent=\"center\"\n variant={action.variant || 'default'}\n paddingTop=\"7px\"\n paddingBottom=\"7px\"\n loading={action.loading}\n type={buttonType}\n >\n {action.label}\n </Button>\n {action.dialog?.type === 'dialog' ? (\n <DocumentActionConfirmDialog\n {...action.dialog}\n variant={action.dialog?.variant ?? action.variant}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n {action.dialog?.type === 'modal' ? (\n <DocumentActionModal\n {...action.dialog}\n onModalClose={handleClose}\n isOpen={dialogId === action.id}\n />\n ) : null}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionMenu\n * -----------------------------------------------------------------------------------------------*/\ninterface DocumentActionsMenuProps {\n actions: Action[];\n children?: React.ReactNode;\n label?: string;\n variant?: 'ghost' | 'tertiary';\n}\n\nconst DocumentActionsMenu = ({\n actions,\n children,\n label,\n variant = 'tertiary',\n}: DocumentActionsMenuProps) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const isDisabled = actions.every((action) => action.disabled) || actions.length === 0;\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const handleClick = (action: Action) => async (e: React.SyntheticEvent) => {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n switch (dialog.type) {\n case 'notification':\n toggleNotification({\n title: dialog.title,\n message: dialog.content,\n type: dialog.status,\n timeout: dialog.timeout,\n onClose: dialog.onClose,\n });\n break;\n case 'dialog':\n case 'modal':\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n setIsOpen(false);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (!isDisabled) {\n setIsOpen(open);\n }\n };\n\n return (\n <Menu.Root open={isOpen} onOpenChange={handleOpenChange}>\n <Menu.Trigger\n ref={triggerRef}\n disabled={isDisabled}\n label={\n label ||\n formatMessage({\n id: 'content-manager.containers.edit.panels.default.more-actions',\n defaultMessage: 'More document actions',\n })\n }\n tag={IconButton}\n icon={<More />}\n variant={variant}\n />\n <Menu.Content maxHeight={undefined} popoverPlacement=\"bottom-end\" maxWidth=\"25rem\">\n {actions.map((action) => {\n return (\n <Menu.Item\n disabled={action.disabled}\n /* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */\n onSelect={handleClick(action)}\n display=\"block\"\n key={action.id}\n variant={action.variant === 'danger' ? action.variant : 'default'}\n startIcon={action.icon}\n >\n <Flex justifyContent=\"space-between\" gap={4}>\n <Flex gap={2} tag=\"span\">\n {action.label}\n </Flex>\n </Flex>\n </Menu.Item>\n );\n })}\n {children}\n </Menu.Content>\n {actions.map((action) => {\n return (\n <React.Fragment key={action.id}>\n {action.dialog?.type === 'dialog' ? (\n <DocumentActionConfirmDialog\n {...action.dialog}\n variant={action.variant}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n {action.dialog?.type === 'modal' ? (\n <DocumentActionModal\n {...action.dialog}\n onModalClose={handleClose}\n isOpen={dialogId === action.id}\n />\n ) : null}\n </React.Fragment>\n );\n })}\n </Menu.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionConfirmDialog\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionConfirmDialogProps extends DialogOptions, Pick<Action, 'variant'> {\n onClose: () => void;\n isOpen: Dialog.Props['open'];\n loading?: ButtonProps['loading'];\n}\n\nconst DocumentActionConfirmDialog = ({\n onClose,\n onCancel,\n onConfirm,\n title,\n content,\n isOpen,\n variant = 'secondary',\n loading,\n}: DocumentActionConfirmDialogProps) => {\n const { formatMessage } = useIntl();\n\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n const handleConfirm = async () => {\n if (onConfirm) {\n await onConfirm();\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 <Dialog.Body>{content}</Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button onClick={handleConfirm} variant={variant} fullWidth loading={loading}>\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionModalProps extends ModalOptions {\n onModalClose: () => void;\n isOpen?: boolean;\n}\n\nconst DocumentActionModal = ({\n isOpen,\n title,\n onClose,\n footer: Footer,\n content: Content,\n onModalClose,\n}: DocumentActionModalProps) => {\n const handleClose = () => {\n if (onClose) {\n onClose();\n }\n\n onModalClose();\n };\n\n return (\n <Modal.Root open={isOpen} onOpenChange={handleClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>{title}</Modal.Title>\n </Modal.Header>\n {typeof Content === 'function' ? (\n <Content onClose={handleClose} />\n ) : (\n <Modal.Body>{Content}</Modal.Body>\n )}\n {typeof Footer === 'function' ? <Footer onClose={handleClose} /> : Footer}\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nconst transformData = (data: Record<string, any>): any => {\n if (Array.isArray(data)) {\n return data.map(transformData);\n }\n\n if (typeof data === 'object' && data !== null) {\n if ('apiData' in data) {\n return data.apiData;\n }\n\n return mapValues(transformData)(data);\n }\n\n return data;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst PublishAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n meta,\n document,\n}) => {\n const {\n currentDocument: { schema },\n } = useDocumentContext('PublishAction');\n\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const isListView = useMatch(LIST_PATH) !== null;\n const isCloning = useMatch(CLONE_PATH) !== null;\n const { id } = useParams();\n const { formatMessage } = useIntl();\n const { canPublish, canReadFields } = useDocumentRBAC(\n 'PublishAction',\n ({ canPublish, canReadFields }) => ({ canPublish, canReadFields })\n );\n const { publish, isLoading } = useDocumentActions();\n const onPreview = usePreviewContext('UpdateAction', (state) => state.onPreview, false);\n const [\n countDraftRelations,\n { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations },\n ] = useGetDraftRelationCountQuery();\n const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React.useState(0);\n const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React.useState(0);\n\n const [{ rawQuery }] = useQueryParams();\n\n const modified = useForm('PublishAction', ({ modified }) => modified);\n const setSubmitting = useForm('PublishAction', ({ setSubmitting }) => setSubmitting);\n const isSubmitting = useForm('PublishAction', ({ isSubmitting }) => isSubmitting);\n const validate = useForm('PublishAction', (state) => state.validate);\n const setErrors = useForm('PublishAction', (state) => state.setErrors);\n const formValues = useForm('PublishAction', ({ values }) => values);\n const initialValues = useForm('PublishAction', ({ initialValues }) => initialValues);\n const resetForm = useForm('PublishAction', ({ resetForm }) => resetForm);\n const {\n currentDocument: { components },\n } = useDocumentContext('PublishAction');\n\n // need to discriminate if the publish is coming from a relation modal or in the edit view\n const relationContext = useRelationModal('PublishAction', () => true, false);\n const fromRelationModal = relationContext != undefined;\n\n const dispatch = useRelationModal('PublishAction', (state) => state.dispatch);\n const fieldToConnect = useRelationModal(\n 'PublishAction',\n (state) => state.state.fieldToConnect,\n false\n );\n const fieldToConnectUID = useRelationModal(\n 'PublishAction',\n (state) => state.state.fieldToConnectUID,\n false\n );\n const documentHistory = useRelationModal(\n 'PublishAction',\n (state) => state.state.documentHistory,\n false\n );\n const rootDocumentMeta = useRelationModal('PublishAction', (state) => state.rootDocumentMeta);\n\n const dispatchGuidedTour = useGuidedTour('PublishAction', (s) => s.dispatch);\n\n const { currentDocumentMeta } = useDocumentContext('PublishAction');\n const [updateDocumentMutation] = useUpdateDocumentMutation();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const idToPublish = currentDocumentMeta.documentId || id;\n\n React.useEffect(() => {\n if (isErrorDraftRelations) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('error.records.fetch-draft-relatons'),\n defaultMessage: 'An error occurred while fetching draft relations on this document.',\n }),\n });\n }\n }, [isErrorDraftRelations, toggleNotification, formatMessage]);\n\n React.useEffect(() => {\n const localDraftRelations = new Set();\n\n /**\n * Extracts draft relations from the provided data object.\n * It checks for a connect array of relations.\n * If a relation has a status of 'draft', its id is added to the localDraftRelations set.\n */\n const extractDraftRelations = (data: Omit<RelationsFormValue, 'disconnect'>) => {\n const relations = data.connect || [];\n relations.forEach((relation) => {\n if (relation.status === 'draft') {\n localDraftRelations.add(relation.id);\n }\n });\n };\n\n /**\n * Recursively traverses the provided data object to extract draft relations from arrays within 'connect' keys.\n * If the data is an object, it looks for 'connect' keys to pass their array values to extractDraftRelations.\n * It recursively calls itself for any non-null objects it contains.\n */\n const traverseAndExtract = (data: { [field: string]: any }) => {\n Object.entries(data).forEach(([key, value]) => {\n if (key === 'connect' && Array.isArray(value)) {\n extractDraftRelations({ connect: value });\n } else if (typeof value === 'object' && value !== null) {\n traverseAndExtract(value);\n }\n });\n };\n\n if (!documentId || modified) {\n traverseAndExtract(formValues);\n setLocalCountOfDraftRelations(localDraftRelations.size);\n }\n }, [documentId, modified, formValues, setLocalCountOfDraftRelations]);\n\n React.useEffect(() => {\n if (!document || !document.documentId || isListView) {\n return;\n }\n\n const fetchDraftRelationsCount = async () => {\n const { data, error } = await countDraftRelations({\n collectionType,\n model,\n documentId,\n params: currentDocumentMeta.params,\n });\n\n if (error) {\n throw error;\n }\n\n if (data) {\n setServerCountOfDraftRelations(data.data);\n }\n };\n\n fetchDraftRelationsCount();\n }, [\n isListView,\n document,\n documentId,\n countDraftRelations,\n collectionType,\n model,\n currentDocumentMeta.params,\n ]);\n const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;\n const parentDocumentData = useDocument(\n {\n documentId: parentDocumentMetaToUpdate?.documentId,\n model: parentDocumentMetaToUpdate?.model,\n collectionType: parentDocumentMetaToUpdate?.collectionType,\n params: parentDocumentMetaToUpdate?.params,\n },\n { skip: !parentDocumentMetaToUpdate }\n );\n const { getInitialFormValues } = useDoc();\n\n const isDocumentPublished =\n (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] ||\n meta?.availableStatus.some((doc) => doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) &&\n document?.status !== 'modified';\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const performPublish = async () => {\n setSubmitting(true);\n\n try {\n const { data: filteredData } = handleInvisibleAttributes(transformData(formValues), {\n schema,\n components,\n });\n const { errors } = await validate(true, {\n ...filteredData,\n status: 'published',\n });\n if (errors) {\n const hasUnreadableRequiredField =\n schema &&\n Object.keys(schema.attributes).some((fieldName) => {\n const attribute = schema.attributes[fieldName];\n\n // For components, check if any of the component fields are readable\n if (attribute.type === 'component') {\n const componentFields = (canReadFields ?? []).filter((field) =>\n field.startsWith(`${fieldName}.`)\n );\n return componentFields.length === 0;\n }\n\n // For regular fields, check if the field itself is readable\n return attribute?.required && !(canReadFields ?? []).includes(fieldName);\n });\n\n if (hasUnreadableRequiredField) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error.unreadable-required-field',\n defaultMessage:\n 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.',\n }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error',\n defaultMessage:\n 'There are validation errors in your document. Please fix them before saving.',\n }),\n });\n }\n return;\n }\n // filteredData is already used for validation, so use it for publishing as well\n const data = filteredData;\n const res = await publish(\n {\n collectionType,\n model,\n documentId,\n params: currentDocumentMeta.params,\n },\n data\n );\n\n // Reset form with current values as new initial values (clears errors/submitting and sets modified to false)\n if ('data' in res) {\n resetForm(formValues);\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentManager.createContent],\n });\n }\n\n if ('data' in res && collectionType !== SINGLE_TYPES) {\n /**\n * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.\n */\n if (idToPublish === 'create' && !fromRelationModal) {\n navigate({\n pathname: `../${collectionType}/${model}/${res.data.documentId}`,\n search: rawQuery,\n });\n } else if (fromRelationModal) {\n const newRelation = {\n documentId: res.data.documentId,\n collectionType,\n model,\n params: currentDocumentMeta.params,\n };\n\n /*\n * Update, if needed, the parent relation with the newly published document.\n * Check if in history we have the parent relation otherwise use the\n * rootDocument\n */\n if (\n fieldToConnect &&\n documentHistory &&\n (parentDocumentMetaToUpdate.documentId ||\n parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)\n ) {\n const parentDataToUpdate =\n parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES\n ? getInitialFormValues()\n : parentDocumentData.getInitialFormValues();\n const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;\n\n const dataToUpdate = connectRelationToParent(\n parentDataToUpdate,\n fieldToConnect,\n res.data,\n fieldToConnectUID\n );\n\n try {\n const updateRes = await updateDocumentMutation({\n collectionType: metaDocumentToUpdate.collectionType,\n model: metaDocumentToUpdate.model,\n documentId:\n metaDocumentToUpdate.collectionType !== SINGLE_TYPES\n ? metaDocumentToUpdate.documentId\n : undefined,\n params: metaDocumentToUpdate.params,\n data: dataToUpdate,\n });\n\n if ('error' in updateRes) {\n toggleNotification({ type: 'danger', message: formatAPIError(updateRes.error) });\n return;\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n\n throw err;\n }\n }\n\n dispatch({\n type: 'GO_TO_CREATED_RELATION',\n payload: { document: newRelation, shouldBypassConfirmation: true },\n });\n }\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n } finally {\n setSubmitting(false);\n if (onPreview) {\n onPreview();\n }\n }\n };\n\n const totalDraftRelations = localCountOfDraftRelations + serverCountOfDraftRelations;\n // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately\n // see RFC \"Count draft relations\" in Notion\n const enableDraftRelationsCount = false;\n const hasDraftRelations = enableDraftRelationsCount && totalDraftRelations > 0;\n\n // Auto-publish on CMD+Enter on macOS, and CTRL+Enter on Windows/Linux\n React.useEffect(() => {\n if (!schema?.options?.draftAndPublish) {\n return;\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n if (!hasDraftRelations) {\n performPublish();\n }\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [hasDraftRelations, performPublish, schema?.options?.draftAndPublish]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n return {\n loading: isLoading,\n position: ['panel', 'preview', 'relation-modal'],\n /**\n * Disabled when:\n * - currently if you're cloning a document we don't support publish & clone at the same time.\n * - the form is submitting\n * - the active tab is the published tab\n * - the document is already published & not modified\n * - the document is being created & not modified\n * - the user doesn't have the permission to publish\n */\n disabled:\n isCloning ||\n isSubmitting ||\n isLoadingDraftRelations ||\n activeTab === 'published' ||\n (!modified && isDocumentPublished) ||\n (!modified && !document?.documentId) ||\n !canPublish,\n label: formatMessage({\n id: 'app.utils.publish',\n defaultMessage: 'Publish',\n }),\n onClick: async () => {\n if (hasDraftRelations) {\n // In this case we need to show the user a confirmation dialog.\n // Return from the onClick and let the dialog handle the process.\n return;\n }\n\n await performPublish();\n },\n dialog: hasDraftRelations\n ? {\n type: 'dialog',\n variant: 'danger',\n footer: null,\n title: formatMessage({\n id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.title`),\n defaultMessage: 'Confirmation',\n }),\n content: formatMessage(\n {\n id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.message`),\n defaultMessage:\n 'This entry is related to {count, plural, one {# draft entry} other {# draft entries}}. Publishing it could leave broken links in your app.',\n },\n {\n count: totalDraftRelations,\n }\n ),\n onConfirm: async () => {\n await performPublish();\n },\n }\n : undefined,\n };\n};\n\nPublishAction.type = 'publish';\nPublishAction.position = ['panel', 'preview', 'relation-modal'];\n\nconst UpdateAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n}) => {\n const dispatchGuidedTour = useGuidedTour('UpdateAction', (s) => s.dispatch);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const cloneMatch = useMatch(CLONE_PATH);\n const isCloning = cloneMatch !== null;\n const { formatMessage } = useIntl();\n const { create, update, clone, isLoading } = useDocumentActions();\n const {\n currentDocument: { components },\n } = useDocumentContext('UpdateAction');\n const [{ rawQuery }] = useQueryParams();\n const onPreview = usePreviewContext('UpdateAction', (state) => state.onPreview, false);\n const { getInitialFormValues } = useDoc();\n\n const isSubmitting = useForm('UpdateAction', ({ isSubmitting }) => isSubmitting);\n const modified = useForm('UpdateAction', ({ modified }) => modified);\n const setSubmitting = useForm('UpdateAction', ({ setSubmitting }) => setSubmitting);\n const initialValues = useForm('UpdateAction', ({ initialValues }) => initialValues);\n const document = useForm('UpdateAction', ({ values }) => values);\n const validate = useForm('UpdateAction', (state) => state.validate);\n const setErrors = useForm('UpdateAction', (state) => state.setErrors);\n const resetForm = useForm('UpdateAction', ({ resetForm }) => resetForm);\n\n const dispatch = useRelationModal('UpdateAction', (state) => state.dispatch);\n\n // need to discriminate if the update is coming from a relation modal or in the edit view\n const relationContext = useRelationModal('UpdateAction', () => true, false);\n const relationalModalSchema = useRelationModal(\n 'UpdateAction',\n (state) => state.currentDocument.schema,\n false\n );\n const fieldToConnect = useRelationModal(\n 'UpdateAction',\n (state) => state.state.fieldToConnect,\n false\n );\n const fieldToConnectUID = useRelationModal(\n 'PublishAction',\n (state) => state.state.fieldToConnectUID,\n false\n );\n const documentHistory = useRelationModal(\n 'UpdateAction',\n (state) => state.state.documentHistory,\n false\n );\n const rootDocumentMeta = useRelationModal('UpdateAction', (state) => state.rootDocumentMeta);\n const fromRelationModal = relationContext != undefined;\n\n const { currentDocumentMeta } = useDocumentContext('UpdateAction');\n const [updateDocumentMutation] = useUpdateDocumentMutation();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;\n const parentDocumentData = useDocument(\n {\n documentId: parentDocumentMetaToUpdate?.documentId,\n model: parentDocumentMetaToUpdate?.model,\n collectionType: parentDocumentMetaToUpdate?.collectionType,\n params: parentDocumentMetaToUpdate?.params,\n },\n { skip: !parentDocumentMetaToUpdate }\n );\n const { schema } = useDoc();\n\n const handleUpdate = async () => {\n setSubmitting(true);\n\n try {\n if (!modified) {\n return;\n }\n\n const { errors } = await validate(true, {\n status: 'draft',\n });\n\n if (errors) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error',\n defaultMessage:\n 'There are validation errors in your document. Please fix them before saving.',\n }),\n });\n\n return;\n }\n if (isCloning) {\n const res = await clone(\n {\n model,\n documentId: cloneMatch.params.origin!,\n params: currentDocumentMeta.params,\n },\n transformData(document)\n );\n\n if ('data' in res) {\n navigate(\n {\n pathname: `../${res.data.documentId}`,\n search: rawQuery,\n },\n { relative: 'path' }\n );\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n } else if (documentId || collectionType === SINGLE_TYPES) {\n const { data } = handleInvisibleAttributes(transformData(document), {\n schema: fromRelationModal ? relationalModalSchema : schema,\n initialValues,\n components,\n });\n const res = await update(\n {\n collectionType,\n model,\n documentId,\n params: currentDocumentMeta.params,\n },\n data\n );\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else {\n resetForm(document);\n }\n } else {\n const { data } = handleInvisibleAttributes(transformData(document), {\n schema: fromRelationModal ? relationalModalSchema : schema,\n initialValues,\n components,\n });\n const res = await create(\n {\n model,\n params: currentDocumentMeta.params,\n },\n data\n );\n\n if ('data' in res && collectionType !== SINGLE_TYPES) {\n if (fromRelationModal) {\n const createdRelation = {\n documentId: res.data.documentId,\n collectionType,\n model,\n params: currentDocumentMeta.params,\n };\n /*\n * Update, if needed, the parent relation with the newly published document.\n * Check if in history we have the parent relation otherwise use the\n * rootDocument\n */\n if (\n fieldToConnect &&\n documentHistory &&\n (parentDocumentMetaToUpdate.documentId ||\n parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)\n ) {\n const parentDataToUpdate =\n parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES\n ? getInitialFormValues()\n : parentDocumentData.getInitialFormValues();\n\n const dataToUpdate = connectRelationToParent(\n parentDataToUpdate,\n fieldToConnect,\n res.data,\n fieldToConnectUID\n );\n\n try {\n const updateRes = await updateDocumentMutation({\n collectionType: parentDocumentMetaToUpdate.collectionType,\n model: parentDocumentMetaToUpdate.model,\n documentId:\n parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES\n ? parentDocumentMetaToUpdate.documentId\n : undefined,\n params: parentDocumentMetaToUpdate.params,\n data: {\n ...dataToUpdate,\n },\n });\n if ('error' in updateRes) {\n toggleNotification({ type: 'danger', message: formatAPIError(updateRes.error) });\n return;\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n\n throw err;\n }\n }\n\n dispatch({\n type: 'GO_TO_CREATED_RELATION',\n payload: { document: createdRelation, shouldBypassConfirmation: true },\n });\n } else {\n navigate(\n {\n pathname: `../${res.data.documentId}`,\n search: rawQuery,\n },\n { replace: true, relative: 'path' }\n );\n }\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n }\n } finally {\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentManager.createContent],\n });\n setSubmitting(false);\n if (onPreview) {\n onPreview();\n }\n }\n };\n\n return {\n loading: isLoading,\n /**\n * Disabled when:\n * - the form is submitting\n * - the document is not modified & we're not cloning (you can save a clone entity straight away)\n * - the active tab is the published tab\n */\n disabled: isSubmitting || (!modified && !isCloning) || activeTab === 'published',\n label: formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n }),\n onClick: handleUpdate,\n position: ['panel', 'preview', 'relation-modal'],\n };\n};\n\nUpdateAction.type = 'update';\nUpdateAction.position = ['panel', 'preview', 'relation-modal'];\n\nconst UNPUBLISH_DRAFT_OPTIONS = {\n KEEP: 'keep',\n DISCARD: 'discard',\n};\n\nconst UnpublishAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n document,\n}) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const canPublish = useDocumentRBAC('UnpublishAction', ({ canPublish }) => canPublish);\n const { unpublish } = useDocumentActions();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { toggleNotification } = useNotification();\n const [shouldKeepDraft, setShouldKeepDraft] = React.useState(true);\n\n const isDocumentModified = document?.status === 'modified';\n\n const handleChange = (value: string) => {\n setShouldKeepDraft(value === UNPUBLISH_DRAFT_OPTIONS.KEEP);\n };\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n return {\n disabled:\n !canPublish ||\n activeTab === 'published' ||\n (document?.status !== 'published' && document?.status !== 'modified'),\n label: formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n }),\n icon: <Cross />,\n onClick: async () => {\n /**\n * return if there's no id & we're in a collection type, or the status modified\n * for either collection type because we use a dialog to handle the process in\n * the latter case.\n */\n if ((!documentId && collectionType !== SINGLE_TYPES) || isDocumentModified) {\n if (!documentId) {\n // This should never, ever, happen.\n console.error(\n \"You're trying to unpublish 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.unpublish.error',\n defaultMessage: 'An error occurred while trying to unpublish the document.',\n }),\n type: 'danger',\n });\n }\n\n return;\n }\n\n await unpublish({\n collectionType,\n model,\n documentId,\n params,\n });\n },\n dialog: isDocumentModified\n ? {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex alignItems=\"flex-start\" direction=\"column\" gap={6}>\n <Flex width=\"100%\" 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.unpublish.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n <Radio.Group\n defaultValue={UNPUBLISH_DRAFT_OPTIONS.KEEP}\n name=\"discard-options\"\n aria-label={formatMessage({\n id: 'content-manager.actions.unpublish.dialog.radio-label',\n defaultMessage: 'Choose an option to unpublish the document.',\n })}\n onValueChange={handleChange}\n >\n <Radio.Item checked={shouldKeepDraft} value={UNPUBLISH_DRAFT_OPTIONS.KEEP}>\n {formatMessage({\n id: 'content-manager.actions.unpublish.dialog.option.keep-draft',\n defaultMessage: 'Keep draft',\n })}\n </Radio.Item>\n <Radio.Item checked={!shouldKeepDraft} value={UNPUBLISH_DRAFT_OPTIONS.DISCARD}>\n {formatMessage({\n id: 'content-manager.actions.unpublish.dialog.option.replace-draft',\n defaultMessage: 'Replace draft',\n })}\n </Radio.Item>\n </Radio.Group>\n </Flex>\n ),\n onConfirm: async () => {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n // This should never, ever, happen.\n console.error(\n \"You're trying to unpublish 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.unpublish.error',\n defaultMessage: 'An error occurred while trying to unpublish the document.',\n }),\n type: 'danger',\n });\n }\n\n await unpublish(\n {\n collectionType,\n model,\n documentId,\n params,\n },\n !shouldKeepDraft\n );\n },\n }\n : undefined,\n variant: 'danger',\n position: ['panel', 'table-row'],\n };\n};\n\nUnpublishAction.type = 'unpublish';\nUnpublishAction.position = 'panel';\n\nconst DiscardAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n document,\n}) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const canUpdate = useDocumentRBAC('DiscardAction', ({ canUpdate }) => canUpdate);\n const { discard, isLoading } = useDocumentActions();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n return {\n disabled: !canUpdate || activeTab === 'published' || document?.status !== 'modified',\n label: formatMessage({\n id: 'content-manager.actions.discard.label',\n defaultMessage: 'Discard changes',\n }),\n icon: <Cross />,\n position: ['panel', 'table-row'],\n variant: 'danger',\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.discard.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n await discard({\n collectionType,\n model,\n documentId,\n params,\n });\n },\n },\n };\n};\n\nDiscardAction.type = 'discard';\nDiscardAction.position = 'panel';\n\nconst DEFAULT_ACTIONS = [PublishAction, UpdateAction, UnpublishAction, DiscardAction];\n\nexport { DocumentActions, DocumentActionsMenu, DocumentActionButton, DEFAULT_ACTIONS };\nexport type {\n DocumentActionDescription,\n DocumentActionPosition,\n DialogOptions,\n NotificationOptions,\n ModalOptions,\n};\n"],"names":["connectRelationToParent","parentDataToUpdate","fieldToConnect","data","fieldToConnectUID","isFieldPresent","get","fieldToConnectPath","split","slice","join","fieldToConnectValue","connect","id","documentId","locale","pop","disconnect","__component","objectToConnect","set","merge","DocumentActions","actions","formatMessage","useIntl","isDesktop","useIsDesktop","primaryAction","secondaryAction","restActions","filter","action","position","undefined","positions","Array","isArray","includes","addHintTooltip","children","disabled","_jsx","Tooltip","label","defaultMessage","Flex","width","primaryActionContent","_jsxs","_Fragment","flex","alignItems","direction","DocumentActionButton","variant","buttonType","length","DocumentActionsMenu","initial","large","gap","tours","contentManager","Publish","order","dialogId","setDialogId","React","useState","toggleNotification","useNotification","handleClick","e","onClick","dialog","muteDialog","type","title","message","content","status","timeout","onClose","preventDefault","handleClose","Button","startIcon","icon","justifyContent","paddingTop","paddingBottom","loading","DocumentActionConfirmDialog","isOpen","DocumentActionModal","onModalClose","setIsOpen","isDisabled","every","triggerRef","useRef","handleOpenChange","open","Menu","Root","onOpenChange","Trigger","ref","tag","IconButton","More","Content","maxHeight","popoverPlacement","maxWidth","map","Item","onSelect","display","Fragment","onCancel","onConfirm","handleConfirm","Dialog","Header","Body","Footer","Cancel","fullWidth","footer","Modal","Title","transformData","apiData","mapValues","PublishAction","activeTab","model","collectionType","meta","document","currentDocument","schema","useDocumentContext","navigate","useNavigate","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isListView","useMatch","LIST_PATH","isCloning","CLONE_PATH","useParams","canPublish","canReadFields","useDocumentRBAC","publish","isLoading","useDocumentActions","onPreview","usePreviewContext","state","countDraftRelations","isLoadingDraftRelations","isError","isErrorDraftRelations","useGetDraftRelationCountQuery","localCountOfDraftRelations","setLocalCountOfDraftRelations","serverCountOfDraftRelations","setServerCountOfDraftRelations","rawQuery","useQueryParams","modified","useForm","setSubmitting","isSubmitting","validate","setErrors","formValues","values","initialValues","resetForm","components","relationContext","useRelationModal","fromRelationModal","dispatch","documentHistory","rootDocumentMeta","dispatchGuidedTour","useGuidedTour","s","currentDocumentMeta","updateDocumentMutation","useUpdateDocumentMutation","_unstableFormatAPIError","formatAPIError","idToPublish","useEffect","getTranslation","localDraftRelations","Set","extractDraftRelations","relations","forEach","relation","add","traverseAndExtract","Object","entries","key","value","size","fetchDraftRelationsCount","error","params","parentDocumentMetaToUpdate","at","parentDocumentData","useDocument","skip","getInitialFormValues","useDoc","isDocumentPublished","PUBLISHED_AT_ATTRIBUTE_NAME","availableStatus","some","doc","performPublish","filteredData","handleInvisibleAttributes","errors","hasUnreadableRequiredField","keys","attributes","fieldName","attribute","componentFields","field","startsWith","required","res","payload","GUIDED_TOUR_REQUIRED_ACTIONS","createContent","SINGLE_TYPES","pathname","search","newRelation","metaDocumentToUpdate","dataToUpdate","updateRes","err","shouldBypassConfirmation","isBaseQueryError","name","totalDraftRelations","enableDraftRelationsCount","hasDraftRelations","options","draftAndPublish","handleKeyDown","metaKey","ctrlKey","window","addEventListener","removeEventListener","count","UpdateAction","cloneMatch","create","update","clone","relationalModalSchema","handleUpdate","origin","relative","createdRelation","replace","UNPUBLISH_DRAFT_OPTIONS","KEEP","DISCARD","UnpublishAction","unpublish","query","useMemo","buildValidParams","shouldKeepDraft","setShouldKeepDraft","isDocumentModified","handleChange","Cross","console","WarningCircle","height","fill","Typography","textAlign","Radio","Group","defaultValue","aria-label","onValueChange","checked","DiscardAction","canUpdate","discard","DEFAULT_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentActions.js","sources":["../../../../../admin/src/pages/EditView/components/DocumentActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useForm,\n useNotification,\n NotificationConfig,\n useAPIErrorHandler,\n useQueryParams,\n tours,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n useIsDesktop,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Dialog,\n Flex,\n Modal,\n Radio,\n Typography,\n Menu,\n ButtonProps,\n Tooltip,\n IconButton,\n} from '@strapi/design-system';\nimport { Cross, More, WarningCircle } from '@strapi/icons';\nimport mapValues from 'lodash/fp/mapValues';\nimport get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\n\nimport { Create, Publish } from '../../../../../shared/contracts/collection-types';\nimport { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes';\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc, useDocument } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { usePreviewContext } from '../../../preview/pages/Preview';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport {\n useGetDraftRelationCountQuery,\n useUpdateDocumentMutation,\n} from '../../../services/documents';\nimport { isBaseQueryError, buildValidParams } from '../../../utils/api';\nimport { getTranslation } from '../../../utils/translations';\nimport { AnyData, handleInvisibleAttributes } from '../utils/data';\n\nimport { useRelationModal } from './FormInputs/Relations/RelationModal';\n\nimport type { RelationsFormValue } from './FormInputs/Relations/Relations';\nimport type { DocumentActionComponent } from '../../../content-manager';\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\ntype DocumentActionPosition = 'panel' | 'header' | 'table-row' | 'preview' | 'relation-modal';\n\ninterface DocumentActionDescription {\n label: string;\n type?: 'publish' | 'update' | 'unpublish' | 'discard';\n onClick?: (event: React.SyntheticEvent) => Promise<boolean | void> | boolean | void;\n icon?: React.ReactNode;\n /**\n * @default false\n */\n disabled?: boolean;\n /**\n * @default 'panel'\n * @description Where the action should be rendered.\n */\n position?: DocumentActionPosition | DocumentActionPosition[];\n dialog?: DialogOptions | NotificationOptions | ModalOptions;\n /**\n * @default 'secondary'\n */\n variant?: ButtonProps['variant'];\n loading?: ButtonProps['loading'];\n}\n\ninterface DialogOptions {\n type: 'dialog';\n title: string;\n content?: React.ReactNode;\n variant?: ButtonProps['variant'];\n onConfirm?: () => void | Promise<void>;\n onCancel?: () => void | Promise<void>;\n}\n\ninterface NotificationOptions {\n type: 'notification';\n title: string;\n link?: {\n label: string;\n url: string;\n target?: string;\n };\n content?: string;\n onClose?: () => void;\n status?: NotificationConfig['type'];\n timeout?: number;\n}\n\ninterface ModalOptions {\n type: 'modal';\n title: string;\n content: React.ComponentType<{ onClose: () => void }> | React.ReactNode;\n footer?: React.ComponentType<{ onClose: () => void }> | React.ReactNode;\n onClose?: () => void;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface Action extends DocumentActionDescription {\n id: string;\n}\n\ninterface DocumentActionsProps {\n actions: Action[];\n}\n\nconst connectRelationToParent = (\n parentDataToUpdate: AnyData | undefined,\n fieldToConnect: string,\n data: Create.Response['data'] | Publish.Response['data'],\n fieldToConnectUID?: string\n) => {\n /*\n * Check if the fieldToConnect is already present in the parentDataToUpdate.\n * This happens in particular when in the parentDocument you have created\n * a new component without saving.\n */\n const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);\n const fieldToConnectPath = isFieldPresent\n ? fieldToConnect\n : // Compute the path to the parent object\n fieldToConnect.split('.').slice(0, -1).join('.');\n const fieldToConnectValue = isFieldPresent\n ? {\n connect: [\n {\n id: data.documentId,\n documentId: data.documentId,\n locale: data.locale,\n },\n ],\n }\n : {\n [fieldToConnect.split('.').pop()!]: {\n connect: [\n {\n id: data.documentId,\n documentId: data.documentId,\n locale: data.locale,\n },\n ],\n disconnect: [],\n },\n // In case the object was not present you need to pass the componentUID of the parent document\n __component: fieldToConnectUID,\n };\n const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);\n return merge(parentDataToUpdate, objectToConnect);\n};\n\nconst DocumentActions = ({ actions }: DocumentActionsProps) => {\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n const [primaryAction, secondaryAction, ...restActions] = actions.filter((action) => {\n if (action.position === undefined) {\n return true;\n }\n\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('panel');\n });\n\n if (!primaryAction) {\n return null;\n }\n\n const addHintTooltip = (action: Action, children: React.ReactNode) => {\n return !action.disabled ? (\n <Tooltip\n label={formatMessage(\n {\n id: 'content-manager.containers.EditView.saveHint',\n defaultMessage: 'Ctrl / Cmd + Enter to {action}',\n },\n {\n action: action.label,\n }\n )}\n >\n <Flex width=\"100%\">{children}</Flex>\n </Tooltip>\n ) : (\n children\n );\n };\n\n const primaryActionContent = (\n <>\n <Flex flex={1} alignItems=\"stretch\" direction=\"column\">\n {addHintTooltip(\n primaryAction,\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n buttonType={primaryAction.type === 'publish' ? undefined : 'submit'}\n />\n )}\n </Flex>\n\n {restActions.length > 0 ? (\n <DocumentActionsMenu\n actions={restActions}\n label={formatMessage({\n id: 'content-manager.containers.edit.panels.default.more-actions',\n defaultMessage: 'More document actions',\n })}\n />\n ) : null}\n </>\n );\n\n return (\n <Flex direction={{ initial: 'row', large: 'column' }} gap={2} alignItems=\"stretch\" width=\"100%\">\n <tours.contentManager.Publish>\n {isDesktop ? <Flex gap={2}>{primaryActionContent}</Flex> : primaryActionContent}\n </tours.contentManager.Publish>\n {secondaryAction ? (\n <Flex flex={1} order={{ initial: -1, large: 0 }} alignItems=\"stretch\" direction=\"column\">\n {secondaryAction.type === 'publish' ? (\n <tours.contentManager.Publish>\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n </tours.contentManager.Publish>\n ) : (\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n buttonType=\"submit\"\n />\n )}\n </Flex>\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionButtonProps extends Omit<Action, 'type'> {\n buttonType?: 'button' | 'submit' | 'reset';\n type?: DocumentActionDescription['type'];\n}\n\nconst DocumentActionButton = ({ buttonType = 'button', ...action }: DocumentActionButtonProps) => {\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n const { toggleNotification } = useNotification();\n\n const handleClick = (action: DocumentActionButtonProps) => async (e: React.MouseEvent) => {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n switch (dialog.type) {\n case 'notification':\n toggleNotification({\n title: dialog.title,\n message: dialog.content,\n type: dialog.status,\n timeout: dialog.timeout,\n onClose: dialog.onClose,\n });\n break;\n case 'dialog':\n case 'modal':\n e.preventDefault();\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n };\n\n return (\n <>\n <Button\n flex=\"auto\"\n startIcon={action.icon}\n disabled={action.disabled}\n onClick={handleClick(action)}\n justifyContent=\"center\"\n variant={action.variant || 'default'}\n paddingTop=\"7px\"\n paddingBottom=\"7px\"\n loading={action.loading}\n type={buttonType}\n >\n {action.label}\n </Button>\n {action.dialog?.type === 'dialog' ? (\n <DocumentActionConfirmDialog\n {...action.dialog}\n variant={action.dialog?.variant ?? action.variant}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n {action.dialog?.type === 'modal' ? (\n <DocumentActionModal\n {...action.dialog}\n onModalClose={handleClose}\n isOpen={dialogId === action.id}\n />\n ) : null}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionMenu\n * -----------------------------------------------------------------------------------------------*/\ninterface DocumentActionsMenuProps {\n actions: Action[];\n children?: React.ReactNode;\n label?: string;\n variant?: 'ghost' | 'tertiary';\n}\n\nconst DocumentActionsMenu = ({\n actions,\n children,\n label,\n variant = 'tertiary',\n}: DocumentActionsMenuProps) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [dialogId, setDialogId] = React.useState<string | null>(null);\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const isDisabled = actions.every((action) => action.disabled) || actions.length === 0;\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const handleClick = (action: Action) => async (e: React.SyntheticEvent) => {\n const { onClick = () => false, dialog, id } = action;\n\n const muteDialog = await onClick(e);\n\n if (dialog && !muteDialog) {\n switch (dialog.type) {\n case 'notification':\n toggleNotification({\n title: dialog.title,\n message: dialog.content,\n type: dialog.status,\n timeout: dialog.timeout,\n onClose: dialog.onClose,\n });\n break;\n case 'dialog':\n case 'modal':\n setDialogId(id);\n }\n }\n };\n\n const handleClose = () => {\n setDialogId(null);\n setIsOpen(false);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (!isDisabled) {\n setIsOpen(open);\n }\n };\n\n return (\n <Menu.Root open={isOpen} onOpenChange={handleOpenChange}>\n <Menu.Trigger\n ref={triggerRef}\n disabled={isDisabled}\n label={\n label ||\n formatMessage({\n id: 'content-manager.containers.edit.panels.default.more-actions',\n defaultMessage: 'More document actions',\n })\n }\n tag={IconButton}\n icon={<More />}\n variant={variant}\n />\n <Menu.Content maxHeight={undefined} popoverPlacement=\"bottom-end\" maxWidth=\"25rem\">\n {actions.map((action) => {\n return (\n <Menu.Item\n disabled={action.disabled}\n /* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */\n onSelect={handleClick(action)}\n display=\"block\"\n key={action.id}\n variant={action.variant === 'danger' ? action.variant : 'default'}\n startIcon={action.icon}\n >\n <Flex justifyContent=\"space-between\" gap={4}>\n <Flex gap={2} tag=\"span\">\n {action.label}\n </Flex>\n </Flex>\n </Menu.Item>\n );\n })}\n {children}\n </Menu.Content>\n {actions.map((action) => {\n return (\n <React.Fragment key={action.id}>\n {action.dialog?.type === 'dialog' ? (\n <DocumentActionConfirmDialog\n {...action.dialog}\n variant={action.variant}\n isOpen={dialogId === action.id}\n onClose={handleClose}\n />\n ) : null}\n {action.dialog?.type === 'modal' ? (\n <DocumentActionModal\n {...action.dialog}\n onModalClose={handleClose}\n isOpen={dialogId === action.id}\n />\n ) : null}\n </React.Fragment>\n );\n })}\n </Menu.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionConfirmDialog\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionConfirmDialogProps extends DialogOptions, Pick<Action, 'variant'> {\n onClose: () => void;\n isOpen: Dialog.Props['open'];\n loading?: ButtonProps['loading'];\n}\n\nconst DocumentActionConfirmDialog = ({\n onClose,\n onCancel,\n onConfirm,\n title,\n content,\n isOpen,\n variant = 'secondary',\n loading,\n}: DocumentActionConfirmDialogProps) => {\n const { formatMessage } = useIntl();\n\n const handleClose = async () => {\n if (onCancel) {\n await onCancel();\n }\n\n onClose();\n };\n\n const handleConfirm = async () => {\n if (onConfirm) {\n await onConfirm();\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 <Dialog.Body>{content}</Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button onClick={handleConfirm} variant={variant} fullWidth loading={loading}>\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionModalProps extends ModalOptions {\n onModalClose: () => void;\n isOpen?: boolean;\n}\n\nconst DocumentActionModal = ({\n isOpen,\n title,\n onClose,\n footer: Footer,\n content: Content,\n onModalClose,\n}: DocumentActionModalProps) => {\n const handleClose = () => {\n if (onClose) {\n onClose();\n }\n\n onModalClose();\n };\n\n return (\n <Modal.Root open={isOpen} onOpenChange={handleClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>{title}</Modal.Title>\n </Modal.Header>\n {typeof Content === 'function' ? (\n <Content onClose={handleClose} />\n ) : (\n <Modal.Body>{Content}</Modal.Body>\n )}\n {typeof Footer === 'function' ? <Footer onClose={handleClose} /> : Footer}\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nconst transformData = (data: Record<string, any>): any => {\n if (Array.isArray(data)) {\n return data.map(transformData);\n }\n\n if (typeof data === 'object' && data !== null) {\n if ('apiData' in data) {\n return data.apiData;\n }\n\n return mapValues(transformData)(data);\n }\n\n return data;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst PublishAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n meta,\n document,\n}) => {\n const {\n currentDocument: { schema },\n } = useDocumentContext('PublishAction');\n\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const isListView = useMatch(LIST_PATH) !== null;\n const isCloning = useMatch(CLONE_PATH) !== null;\n const { id } = useParams();\n const { formatMessage } = useIntl();\n const { canPublish, canReadFields } = useDocumentRBAC(\n 'PublishAction',\n ({ canPublish, canReadFields }) => ({ canPublish, canReadFields })\n );\n const { publish, isLoading } = useDocumentActions();\n const onPreview = usePreviewContext('UpdateAction', (state) => state.onPreview, false);\n const [\n countDraftRelations,\n { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations },\n ] = useGetDraftRelationCountQuery();\n const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React.useState(0);\n const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React.useState(0);\n\n const [{ rawQuery }] = useQueryParams();\n\n const modified = useForm('PublishAction', ({ modified }) => modified);\n const setSubmitting = useForm('PublishAction', ({ setSubmitting }) => setSubmitting);\n const isSubmitting = useForm('PublishAction', ({ isSubmitting }) => isSubmitting);\n const validate = useForm('PublishAction', (state) => state.validate);\n const setErrors = useForm('PublishAction', (state) => state.setErrors);\n const getValues = useForm('PublishAction', (state) => state.getValues);\n const formValues = useForm('PublishAction', ({ values }) => values);\n const resetForm = useForm('PublishAction', ({ resetForm }) => resetForm);\n const {\n currentDocument: { components },\n } = useDocumentContext('PublishAction');\n\n // need to discriminate if the publish is coming from a relation modal or in the edit view\n const relationContext = useRelationModal('PublishAction', () => true, false);\n const fromRelationModal = relationContext != undefined;\n\n const dispatch = useRelationModal('PublishAction', (state) => state.dispatch);\n const fieldToConnect = useRelationModal(\n 'PublishAction',\n (state) => state.state.fieldToConnect,\n false\n );\n const fieldToConnectUID = useRelationModal(\n 'PublishAction',\n (state) => state.state.fieldToConnectUID,\n false\n );\n const documentHistory = useRelationModal(\n 'PublishAction',\n (state) => state.state.documentHistory,\n false\n );\n const rootDocumentMeta = useRelationModal('PublishAction', (state) => state.rootDocumentMeta);\n\n const dispatchGuidedTour = useGuidedTour('PublishAction', (s) => s.dispatch);\n\n const { currentDocumentMeta } = useDocumentContext('PublishAction');\n const [updateDocumentMutation] = useUpdateDocumentMutation();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const idToPublish = currentDocumentMeta.documentId || id;\n\n React.useEffect(() => {\n if (isErrorDraftRelations) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslation('error.records.fetch-draft-relatons'),\n defaultMessage: 'An error occurred while fetching draft relations on this document.',\n }),\n });\n }\n }, [isErrorDraftRelations, toggleNotification, formatMessage]);\n\n React.useEffect(() => {\n const localDraftRelations = new Set();\n\n /**\n * Extracts draft relations from the provided data object.\n * It checks for a connect array of relations.\n * If a relation has a status of 'draft', its id is added to the localDraftRelations set.\n */\n const extractDraftRelations = (data: Omit<RelationsFormValue, 'disconnect'>) => {\n const relations = data.connect || [];\n relations.forEach((relation) => {\n if (relation.status === 'draft') {\n localDraftRelations.add(relation.id);\n }\n });\n };\n\n /**\n * Recursively traverses the provided data object to extract draft relations from arrays within 'connect' keys.\n * If the data is an object, it looks for 'connect' keys to pass their array values to extractDraftRelations.\n * It recursively calls itself for any non-null objects it contains.\n */\n const traverseAndExtract = (data: { [field: string]: any }) => {\n Object.entries(data).forEach(([key, value]) => {\n if (key === 'connect' && Array.isArray(value)) {\n extractDraftRelations({ connect: value });\n } else if (typeof value === 'object' && value !== null) {\n traverseAndExtract(value);\n }\n });\n };\n\n if (!documentId || modified) {\n traverseAndExtract(formValues);\n setLocalCountOfDraftRelations(localDraftRelations.size);\n }\n }, [documentId, modified, formValues, setLocalCountOfDraftRelations]);\n\n React.useEffect(() => {\n if (!document || !document.documentId || isListView) {\n return;\n }\n\n const fetchDraftRelationsCount = async () => {\n const { data, error } = await countDraftRelations({\n collectionType,\n model,\n documentId,\n params: currentDocumentMeta.params,\n });\n\n if (error) {\n throw error;\n }\n\n if (data) {\n setServerCountOfDraftRelations(data.data);\n }\n };\n\n fetchDraftRelationsCount();\n }, [\n isListView,\n document,\n documentId,\n countDraftRelations,\n collectionType,\n model,\n currentDocumentMeta.params,\n ]);\n const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;\n const parentDocumentData = useDocument(\n {\n documentId: parentDocumentMetaToUpdate?.documentId,\n model: parentDocumentMetaToUpdate?.model,\n collectionType: parentDocumentMetaToUpdate?.collectionType,\n params: parentDocumentMetaToUpdate?.params,\n },\n { skip: !parentDocumentMetaToUpdate }\n );\n const { getInitialFormValues } = useDoc();\n\n const isDocumentPublished =\n (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] ||\n meta?.availableStatus.some((doc) => doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) &&\n document?.status !== 'modified';\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const performPublish = async () => {\n setSubmitting(true);\n\n try {\n /**\n * Yield one microtask so React can flush any pending field updates from the same task\n * (common with fast local runners / Playwright) before we read values and validate.\n * TODO: replace with an explicit form flush contract when we can (same concern as Save flow).\n */\n await Promise.resolve();\n\n const { errors } = await validate(true, {\n status: 'published',\n });\n if (errors) {\n const hasUnreadableRequiredField =\n schema &&\n Object.keys(schema.attributes).some((fieldName) => {\n const attribute = schema.attributes[fieldName];\n\n // For components, check if any of the component fields are readable\n if (attribute.type === 'component') {\n const componentFields = (canReadFields ?? []).filter((field) =>\n field.startsWith(`${fieldName}.`)\n );\n return componentFields.length === 0;\n }\n\n // For regular fields, check if the field itself is readable\n return attribute?.required && !(canReadFields ?? []).includes(fieldName);\n });\n\n if (hasUnreadableRequiredField) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error.unreadable-required-field',\n defaultMessage:\n 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.',\n }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error',\n defaultMessage:\n 'There are validation errors in your document. Please fix them before saving.',\n }),\n });\n }\n return;\n }\n\n const { data } = handleInvisibleAttributes(transformData(getValues()), {\n schema,\n components,\n });\n const res = await publish(\n {\n collectionType,\n model,\n documentId,\n params: currentDocumentMeta.params,\n },\n data\n );\n\n // Reset form with current values as new initial values (clears errors/submitting and sets modified to false)\n if ('data' in res) {\n resetForm(getValues());\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentManager.createContent],\n });\n }\n\n if ('data' in res && collectionType !== SINGLE_TYPES) {\n /**\n * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.\n */\n if (idToPublish === 'create' && !fromRelationModal) {\n navigate({\n pathname: `../${collectionType}/${model}/${res.data.documentId}`,\n search: rawQuery,\n });\n } else if (fromRelationModal) {\n const newRelation = {\n documentId: res.data.documentId,\n collectionType,\n model,\n params: currentDocumentMeta.params,\n };\n\n /*\n * Update, if needed, the parent relation with the newly published document.\n * Check if in history we have the parent relation otherwise use the\n * rootDocument\n */\n if (\n fieldToConnect &&\n documentHistory &&\n (parentDocumentMetaToUpdate.documentId ||\n parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)\n ) {\n const parentDataToUpdate =\n parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES\n ? getInitialFormValues()\n : parentDocumentData.getInitialFormValues();\n const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;\n\n const dataToUpdate = connectRelationToParent(\n parentDataToUpdate,\n fieldToConnect,\n res.data,\n fieldToConnectUID\n );\n\n try {\n const updateRes = await updateDocumentMutation({\n collectionType: metaDocumentToUpdate.collectionType,\n model: metaDocumentToUpdate.model,\n documentId:\n metaDocumentToUpdate.collectionType !== SINGLE_TYPES\n ? metaDocumentToUpdate.documentId\n : undefined,\n params: metaDocumentToUpdate.params,\n data: dataToUpdate,\n });\n\n if ('error' in updateRes) {\n toggleNotification({ type: 'danger', message: formatAPIError(updateRes.error) });\n return;\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n\n throw err;\n }\n }\n\n dispatch({\n type: 'GO_TO_CREATED_RELATION',\n payload: { document: newRelation, shouldBypassConfirmation: true },\n });\n }\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n } finally {\n setSubmitting(false);\n if (onPreview) {\n onPreview();\n }\n }\n };\n\n const totalDraftRelations = localCountOfDraftRelations + serverCountOfDraftRelations;\n // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately\n // see RFC \"Count draft relations\" in Notion\n const enableDraftRelationsCount = false;\n const hasDraftRelations = enableDraftRelationsCount && totalDraftRelations > 0;\n\n // Auto-publish on CMD+Enter on macOS, and CTRL+Enter on Windows/Linux\n React.useEffect(() => {\n if (!schema?.options?.draftAndPublish) {\n return;\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n if (!hasDraftRelations) {\n performPublish();\n }\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [hasDraftRelations, performPublish, schema?.options?.draftAndPublish]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n return {\n type: 'publish',\n loading: isLoading,\n position: ['panel', 'preview', 'relation-modal'],\n /**\n * Disabled when:\n * - currently if you're cloning a document we don't support publish & clone at the same time.\n * - the form is submitting\n * - the active tab is the published tab\n * - the document is already published & not modified\n * - the document is being created & not modified\n * - the user doesn't have the permission to publish\n */\n disabled:\n isCloning ||\n isSubmitting ||\n isLoadingDraftRelations ||\n activeTab === 'published' ||\n (!modified && isDocumentPublished) ||\n (!modified && !document?.documentId) ||\n !canPublish,\n label: formatMessage({\n id: 'app.utils.publish',\n defaultMessage: 'Publish',\n }),\n onClick: async () => {\n if (hasDraftRelations) {\n // In this case we need to show the user a confirmation dialog.\n // Return from the onClick and let the dialog handle the process.\n return;\n }\n\n await performPublish();\n },\n dialog: hasDraftRelations\n ? {\n type: 'dialog',\n variant: 'danger',\n footer: null,\n title: formatMessage({\n id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.title`),\n defaultMessage: 'Confirmation',\n }),\n content: formatMessage(\n {\n id: getTranslation(`popUpwarning.warning.bulk-has-draft-relations.message`),\n defaultMessage:\n 'This entry is related to {count, plural, one {# draft entry} other {# draft entries}}. Publishing it could leave broken links in your app.',\n },\n {\n count: totalDraftRelations,\n }\n ),\n onConfirm: async () => {\n await performPublish();\n },\n }\n : undefined,\n };\n};\n\nPublishAction.type = 'publish';\nPublishAction.position = ['panel', 'preview', 'relation-modal'];\n\nconst UpdateAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n}) => {\n const dispatchGuidedTour = useGuidedTour('UpdateAction', (s) => s.dispatch);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();\n const cloneMatch = useMatch(CLONE_PATH);\n const isCloning = cloneMatch !== null;\n const { formatMessage } = useIntl();\n const { create, update, clone, isLoading } = useDocumentActions();\n const {\n currentDocument: { components },\n } = useDocumentContext('UpdateAction');\n const [{ rawQuery }] = useQueryParams();\n const onPreview = usePreviewContext('UpdateAction', (state) => state.onPreview, false);\n const { getInitialFormValues } = useDoc();\n\n const isSubmitting = useForm('UpdateAction', ({ isSubmitting }) => isSubmitting);\n const modified = useForm('UpdateAction', ({ modified }) => modified);\n const setSubmitting = useForm('UpdateAction', ({ setSubmitting }) => setSubmitting);\n const initialValues = useForm('UpdateAction', ({ initialValues }) => initialValues);\n const getValues = useForm('UpdateAction', (state) => state.getValues);\n const validate = useForm('UpdateAction', (state) => state.validate);\n const setErrors = useForm('UpdateAction', (state) => state.setErrors);\n const resetForm = useForm('UpdateAction', ({ resetForm }) => resetForm);\n\n const dispatch = useRelationModal('UpdateAction', (state) => state.dispatch);\n\n // need to discriminate if the update is coming from a relation modal or in the edit view\n const relationContext = useRelationModal('UpdateAction', () => true, false);\n const relationalModalSchema = useRelationModal(\n 'UpdateAction',\n (state) => state.currentDocument.schema,\n false\n );\n const fieldToConnect = useRelationModal(\n 'UpdateAction',\n (state) => state.state.fieldToConnect,\n false\n );\n const fieldToConnectUID = useRelationModal(\n 'PublishAction',\n (state) => state.state.fieldToConnectUID,\n false\n );\n const documentHistory = useRelationModal(\n 'UpdateAction',\n (state) => state.state.documentHistory,\n false\n );\n const rootDocumentMeta = useRelationModal('UpdateAction', (state) => state.rootDocumentMeta);\n const fromRelationModal = relationContext != undefined;\n\n const { currentDocumentMeta } = useDocumentContext('UpdateAction');\n const [updateDocumentMutation] = useUpdateDocumentMutation();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;\n const parentDocumentData = useDocument(\n {\n documentId: parentDocumentMetaToUpdate?.documentId,\n model: parentDocumentMetaToUpdate?.model,\n collectionType: parentDocumentMetaToUpdate?.collectionType,\n params: parentDocumentMetaToUpdate?.params,\n },\n { skip: !parentDocumentMetaToUpdate }\n );\n const { schema } = useDoc();\n\n const handleUpdate = async () => {\n setSubmitting(true);\n\n try {\n if (!modified) {\n return;\n }\n\n // Blur the active element so inputs that debounce into the form (e.g. blocks editor) flush\n // before validate/getValues — on fast clients Save can otherwise read stale field state.\n // Use the global DOM document — form values are not in scope here (avoid shadowing `document`).\n (globalThis.document?.activeElement as HTMLElement | undefined)?.blur();\n\n // Yield microtasks so batched React updates after blur/onChange can settle before validate\n // (same idea as performPublish; two ticks vs one gives a bit more room after focus/blur).\n // TODO: replace with an explicit field/form flush contract when available.\n await Promise.resolve();\n await Promise.resolve();\n\n const { errors } = await validate(true, {\n status: 'draft',\n });\n\n if (errors) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error',\n defaultMessage:\n 'There are validation errors in your document. Please fix them before saving.',\n }),\n });\n\n return;\n }\n\n const latestValues = getValues();\n\n if (isCloning) {\n const res = await clone(\n {\n model,\n documentId: cloneMatch.params.origin!,\n params: currentDocumentMeta.params,\n },\n transformData(latestValues)\n );\n\n if ('data' in res) {\n navigate(\n {\n pathname: `../${res.data.documentId}`,\n search: rawQuery,\n },\n { relative: 'path' }\n );\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n } else if (documentId || collectionType === SINGLE_TYPES) {\n const { data } = handleInvisibleAttributes(transformData(latestValues), {\n schema: fromRelationModal ? relationalModalSchema : schema,\n initialValues,\n components,\n });\n const res = await update(\n {\n collectionType,\n model,\n documentId,\n params: currentDocumentMeta.params,\n },\n data\n );\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else {\n resetForm(latestValues);\n }\n } else {\n const { data } = handleInvisibleAttributes(transformData(latestValues), {\n schema: fromRelationModal ? relationalModalSchema : schema,\n initialValues,\n components,\n });\n const res = await create(\n {\n model,\n params: currentDocumentMeta.params,\n },\n data\n );\n\n if ('data' in res && collectionType !== SINGLE_TYPES) {\n if (fromRelationModal) {\n const createdRelation = {\n documentId: res.data.documentId,\n collectionType,\n model,\n params: currentDocumentMeta.params,\n };\n /*\n * Update, if needed, the parent relation with the newly published document.\n * Check if in history we have the parent relation otherwise use the\n * rootDocument\n */\n if (\n fieldToConnect &&\n documentHistory &&\n (parentDocumentMetaToUpdate.documentId ||\n parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)\n ) {\n const parentDataToUpdate =\n parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES\n ? getInitialFormValues()\n : parentDocumentData.getInitialFormValues();\n\n const dataToUpdate = connectRelationToParent(\n parentDataToUpdate,\n fieldToConnect,\n res.data,\n fieldToConnectUID\n );\n\n try {\n const updateRes = await updateDocumentMutation({\n collectionType: parentDocumentMetaToUpdate.collectionType,\n model: parentDocumentMetaToUpdate.model,\n documentId:\n parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES\n ? parentDocumentMetaToUpdate.documentId\n : undefined,\n params: parentDocumentMetaToUpdate.params,\n data: {\n ...dataToUpdate,\n },\n });\n if ('error' in updateRes) {\n toggleNotification({ type: 'danger', message: formatAPIError(updateRes.error) });\n return;\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n\n throw err;\n }\n }\n\n dispatch({\n type: 'GO_TO_CREATED_RELATION',\n payload: { document: createdRelation, shouldBypassConfirmation: true },\n });\n } else {\n navigate(\n {\n pathname: `../${res.data.documentId}`,\n search: rawQuery,\n },\n { replace: true, relative: 'path' }\n );\n }\n } else if (\n 'error' in res &&\n isBaseQueryError(res.error) &&\n res.error.name === 'ValidationError'\n ) {\n setErrors(formatValidationErrors(res.error));\n }\n }\n } finally {\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentManager.createContent],\n });\n setSubmitting(false);\n if (onPreview) {\n onPreview();\n }\n }\n };\n\n return {\n loading: isLoading,\n /**\n * Disabled when:\n * - the form is submitting\n * - the document is not modified & we're not cloning (you can save a clone entity straight away)\n * - the active tab is the published tab\n */\n disabled: isSubmitting || (!modified && !isCloning) || activeTab === 'published',\n label: formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n }),\n onClick: handleUpdate,\n position: ['panel', 'preview', 'relation-modal'],\n };\n};\n\nUpdateAction.type = 'update';\nUpdateAction.position = ['panel', 'preview', 'relation-modal'];\n\nconst UNPUBLISH_DRAFT_OPTIONS = {\n KEEP: 'keep',\n DISCARD: 'discard',\n};\n\nconst UnpublishAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n document,\n}) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const canPublish = useDocumentRBAC('UnpublishAction', ({ canPublish }) => canPublish);\n const { unpublish } = useDocumentActions();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { toggleNotification } = useNotification();\n const [shouldKeepDraft, setShouldKeepDraft] = React.useState(true);\n\n const isDocumentModified = document?.status === 'modified';\n\n const handleChange = (value: string) => {\n setShouldKeepDraft(value === UNPUBLISH_DRAFT_OPTIONS.KEEP);\n };\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n return {\n disabled:\n !canPublish ||\n activeTab === 'published' ||\n (document?.status !== 'published' && document?.status !== 'modified'),\n label: formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n }),\n icon: <Cross />,\n onClick: async () => {\n /**\n * return if there's no id & we're in a collection type, or the status modified\n * for either collection type because we use a dialog to handle the process in\n * the latter case.\n */\n if ((!documentId && collectionType !== SINGLE_TYPES) || isDocumentModified) {\n if (!documentId) {\n // This should never, ever, happen.\n console.error(\n \"You're trying to unpublish 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.unpublish.error',\n defaultMessage: 'An error occurred while trying to unpublish the document.',\n }),\n type: 'danger',\n });\n }\n\n return;\n }\n\n await unpublish({\n collectionType,\n model,\n documentId,\n params,\n });\n },\n dialog: isDocumentModified\n ? {\n type: 'dialog',\n title: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex alignItems=\"flex-start\" direction=\"column\" gap={6}>\n <Flex width=\"100%\" 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.unpublish.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n <Radio.Group\n defaultValue={UNPUBLISH_DRAFT_OPTIONS.KEEP}\n name=\"discard-options\"\n aria-label={formatMessage({\n id: 'content-manager.actions.unpublish.dialog.radio-label',\n defaultMessage: 'Choose an option to unpublish the document.',\n })}\n onValueChange={handleChange}\n >\n <Radio.Item checked={shouldKeepDraft} value={UNPUBLISH_DRAFT_OPTIONS.KEEP}>\n {formatMessage({\n id: 'content-manager.actions.unpublish.dialog.option.keep-draft',\n defaultMessage: 'Keep draft',\n })}\n </Radio.Item>\n <Radio.Item checked={!shouldKeepDraft} value={UNPUBLISH_DRAFT_OPTIONS.DISCARD}>\n {formatMessage({\n id: 'content-manager.actions.unpublish.dialog.option.replace-draft',\n defaultMessage: 'Replace draft',\n })}\n </Radio.Item>\n </Radio.Group>\n </Flex>\n ),\n onConfirm: async () => {\n if (!documentId && collectionType !== SINGLE_TYPES) {\n // This should never, ever, happen.\n console.error(\n \"You're trying to unpublish 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.unpublish.error',\n defaultMessage: 'An error occurred while trying to unpublish the document.',\n }),\n type: 'danger',\n });\n }\n\n await unpublish(\n {\n collectionType,\n model,\n documentId,\n params,\n },\n !shouldKeepDraft\n );\n },\n }\n : undefined,\n variant: 'danger',\n position: ['panel', 'table-row'],\n };\n};\n\nUnpublishAction.type = 'unpublish';\nUnpublishAction.position = 'panel';\n\nconst DiscardAction: DocumentActionComponent = ({\n activeTab,\n documentId,\n model,\n collectionType,\n document,\n}) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const canUpdate = useDocumentRBAC('DiscardAction', ({ canUpdate }) => canUpdate);\n const { discard, isLoading } = useDocumentActions();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n return {\n disabled: !canUpdate || activeTab === 'published' || document?.status !== 'modified',\n label: formatMessage({\n id: 'content-manager.actions.discard.label',\n defaultMessage: 'Discard changes',\n }),\n icon: <Cross />,\n position: ['panel', 'table-row'],\n variant: 'danger',\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.discard.dialog.body',\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n await discard({\n collectionType,\n model,\n documentId,\n params,\n });\n },\n },\n };\n};\n\nDiscardAction.type = 'discard';\nDiscardAction.position = 'panel';\n\nconst DEFAULT_ACTIONS = [PublishAction, UpdateAction, UnpublishAction, DiscardAction];\n\nexport { DocumentActions, DocumentActionsMenu, DocumentActionButton, DEFAULT_ACTIONS };\nexport type {\n DocumentActionDescription,\n DocumentActionPosition,\n DialogOptions,\n NotificationOptions,\n ModalOptions,\n};\n"],"names":["connectRelationToParent","parentDataToUpdate","fieldToConnect","data","fieldToConnectUID","isFieldPresent","get","fieldToConnectPath","split","slice","join","fieldToConnectValue","connect","id","documentId","locale","pop","disconnect","__component","objectToConnect","set","merge","DocumentActions","actions","formatMessage","useIntl","isDesktop","useIsDesktop","primaryAction","secondaryAction","restActions","filter","action","position","undefined","positions","Array","isArray","includes","addHintTooltip","children","disabled","_jsx","Tooltip","label","defaultMessage","Flex","width","primaryActionContent","_jsxs","_Fragment","flex","alignItems","direction","DocumentActionButton","variant","buttonType","type","length","DocumentActionsMenu","initial","large","gap","tours","contentManager","Publish","order","dialogId","setDialogId","React","useState","toggleNotification","useNotification","handleClick","e","onClick","dialog","muteDialog","title","message","content","status","timeout","onClose","preventDefault","handleClose","Button","startIcon","icon","justifyContent","paddingTop","paddingBottom","loading","DocumentActionConfirmDialog","isOpen","DocumentActionModal","onModalClose","setIsOpen","isDisabled","every","triggerRef","useRef","handleOpenChange","open","Menu","Root","onOpenChange","Trigger","ref","tag","IconButton","More","Content","maxHeight","popoverPlacement","maxWidth","map","Item","onSelect","display","Fragment","onCancel","onConfirm","handleConfirm","Dialog","Header","Body","Footer","Cancel","fullWidth","footer","Modal","Title","transformData","apiData","mapValues","PublishAction","activeTab","model","collectionType","meta","document","currentDocument","schema","useDocumentContext","navigate","useNavigate","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isListView","useMatch","LIST_PATH","isCloning","CLONE_PATH","useParams","canPublish","canReadFields","useDocumentRBAC","publish","isLoading","useDocumentActions","onPreview","usePreviewContext","state","countDraftRelations","isLoadingDraftRelations","isError","isErrorDraftRelations","useGetDraftRelationCountQuery","localCountOfDraftRelations","setLocalCountOfDraftRelations","serverCountOfDraftRelations","setServerCountOfDraftRelations","rawQuery","useQueryParams","modified","useForm","setSubmitting","isSubmitting","validate","setErrors","getValues","formValues","values","resetForm","components","relationContext","useRelationModal","fromRelationModal","dispatch","documentHistory","rootDocumentMeta","dispatchGuidedTour","useGuidedTour","s","currentDocumentMeta","updateDocumentMutation","useUpdateDocumentMutation","_unstableFormatAPIError","formatAPIError","idToPublish","useEffect","getTranslation","localDraftRelations","Set","extractDraftRelations","relations","forEach","relation","add","traverseAndExtract","Object","entries","key","value","size","fetchDraftRelationsCount","error","params","parentDocumentMetaToUpdate","at","parentDocumentData","useDocument","skip","getInitialFormValues","useDoc","isDocumentPublished","PUBLISHED_AT_ATTRIBUTE_NAME","availableStatus","some","doc","performPublish","Promise","resolve","errors","hasUnreadableRequiredField","keys","attributes","fieldName","attribute","componentFields","field","startsWith","required","handleInvisibleAttributes","res","payload","GUIDED_TOUR_REQUIRED_ACTIONS","createContent","SINGLE_TYPES","pathname","search","newRelation","metaDocumentToUpdate","dataToUpdate","updateRes","err","shouldBypassConfirmation","isBaseQueryError","name","totalDraftRelations","enableDraftRelationsCount","hasDraftRelations","options","draftAndPublish","handleKeyDown","metaKey","ctrlKey","window","addEventListener","removeEventListener","count","UpdateAction","cloneMatch","create","update","clone","initialValues","relationalModalSchema","handleUpdate","globalThis","activeElement","blur","latestValues","origin","relative","createdRelation","replace","UNPUBLISH_DRAFT_OPTIONS","KEEP","DISCARD","UnpublishAction","unpublish","query","useMemo","buildValidParams","shouldKeepDraft","setShouldKeepDraft","isDocumentModified","handleChange","Cross","console","WarningCircle","height","fill","Typography","textAlign","Radio","Group","defaultValue","aria-label","onValueChange","checked","DiscardAction","canUpdate","discard","DEFAULT_ACTIONS"],"mappings":"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"}
@@ -90,13 +90,10 @@ const DocumentActions = ({ actions })=>{
90
90
  flex: 1,
91
91
  alignItems: "stretch",
92
92
  direction: "column",
93
- children: primaryAction.label === 'Publish' ? addHintTooltip(primaryAction, /*#__PURE__*/ jsx(DocumentActionButton, {
94
- ...primaryAction,
95
- variant: primaryAction.variant || 'default'
96
- })) : addHintTooltip(primaryAction, /*#__PURE__*/ jsx(DocumentActionButton, {
93
+ children: addHintTooltip(primaryAction, /*#__PURE__*/ jsx(DocumentActionButton, {
97
94
  ...primaryAction,
98
95
  variant: primaryAction.variant || 'default',
99
- buttonType: "submit"
96
+ buttonType: primaryAction.type === 'publish' ? undefined : 'submit'
100
97
  }))
101
98
  }),
102
99
  restActions.length > 0 ? /*#__PURE__*/ jsx(DocumentActionsMenu, {
@@ -131,7 +128,7 @@ const DocumentActions = ({ actions })=>{
131
128
  },
132
129
  alignItems: "stretch",
133
130
  direction: "column",
134
- children: secondaryAction.label === 'Publish' ? /*#__PURE__*/ jsx(tours.contentManager.Publish, {
131
+ children: secondaryAction.type === 'publish' ? /*#__PURE__*/ jsx(tours.contentManager.Publish, {
135
132
  children: /*#__PURE__*/ jsx(DocumentActionButton, {
136
133
  ...secondaryAction,
137
134
  variant: secondaryAction.variant || 'secondary'
@@ -418,8 +415,8 @@ const transformData = (data)=>{
418
415
  const isSubmitting = useForm('PublishAction', ({ isSubmitting })=>isSubmitting);
419
416
  const validate = useForm('PublishAction', (state)=>state.validate);
420
417
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
418
+ const getValues = useForm('PublishAction', (state)=>state.getValues);
421
419
  const formValues = useForm('PublishAction', ({ values })=>values);
422
- useForm('PublishAction', ({ initialValues })=>initialValues);
423
420
  const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
424
421
  const { currentDocument: { components } } = useDocumentContext('PublishAction');
425
422
  // need to discriminate if the publish is coming from a relation modal or in the edit view
@@ -532,12 +529,12 @@ const transformData = (data)=>{
532
529
  const performPublish = async ()=>{
533
530
  setSubmitting(true);
534
531
  try {
535
- const { data: filteredData } = handleInvisibleAttributes(transformData(formValues), {
536
- schema,
537
- components
538
- });
532
+ /**
533
+ * Yield one microtask so React can flush any pending field updates from the same task
534
+ * (common with fast local runners / Playwright) before we read values and validate.
535
+ * TODO: replace with an explicit form flush contract when we can (same concern as Save flow).
536
+ */ await Promise.resolve();
539
537
  const { errors } = await validate(true, {
540
- ...filteredData,
541
538
  status: 'published'
542
539
  });
543
540
  if (errors) {
@@ -570,8 +567,10 @@ const transformData = (data)=>{
570
567
  }
571
568
  return;
572
569
  }
573
- // filteredData is already used for validation, so use it for publishing as well
574
- const data = filteredData;
570
+ const { data } = handleInvisibleAttributes(transformData(getValues()), {
571
+ schema,
572
+ components
573
+ });
575
574
  const res = await publish({
576
575
  collectionType,
577
576
  model,
@@ -580,7 +579,7 @@ const transformData = (data)=>{
580
579
  }, data);
581
580
  // Reset form with current values as new initial values (clears errors/submitting and sets modified to false)
582
581
  if ('data' in res) {
583
- resetForm(formValues);
582
+ resetForm(getValues());
584
583
  dispatchGuidedTour({
585
584
  type: 'set_completed_actions',
586
585
  payload: [
@@ -686,6 +685,7 @@ const transformData = (data)=>{
686
685
  return null;
687
686
  }
688
687
  return {
688
+ type: 'publish',
689
689
  loading: isLoading,
690
690
  position: [
691
691
  'panel',
@@ -751,7 +751,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
751
751
  const modified = useForm('UpdateAction', ({ modified })=>modified);
752
752
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
753
753
  const initialValues = useForm('UpdateAction', ({ initialValues })=>initialValues);
754
- const document = useForm('UpdateAction', ({ values })=>values);
754
+ const getValues = useForm('UpdateAction', (state)=>state.getValues);
755
755
  const validate = useForm('UpdateAction', (state)=>state.validate);
756
756
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
757
757
  const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
@@ -783,6 +783,15 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
783
783
  if (!modified) {
784
784
  return;
785
785
  }
786
+ // Blur the active element so inputs that debounce into the form (e.g. blocks editor) flush
787
+ // before validate/getValues — on fast clients Save can otherwise read stale field state.
788
+ // Use the global DOM document — form values are not in scope here (avoid shadowing `document`).
789
+ globalThis.document?.activeElement?.blur();
790
+ // Yield microtasks so batched React updates after blur/onChange can settle before validate
791
+ // (same idea as performPublish; two ticks vs one gives a bit more room after focus/blur).
792
+ // TODO: replace with an explicit field/form flush contract when available.
793
+ await Promise.resolve();
794
+ await Promise.resolve();
786
795
  const { errors } = await validate(true, {
787
796
  status: 'draft'
788
797
  });
@@ -796,12 +805,13 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
796
805
  });
797
806
  return;
798
807
  }
808
+ const latestValues = getValues();
799
809
  if (isCloning) {
800
810
  const res = await clone({
801
811
  model,
802
812
  documentId: cloneMatch.params.origin,
803
813
  params: currentDocumentMeta.params
804
- }, transformData(document));
814
+ }, transformData(latestValues));
805
815
  if ('data' in res) {
806
816
  navigate({
807
817
  pathname: `../${res.data.documentId}`,
@@ -813,7 +823,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
813
823
  setErrors(formatValidationErrors(res.error));
814
824
  }
815
825
  } else if (documentId || collectionType === SINGLE_TYPES) {
816
- const { data } = handleInvisibleAttributes(transformData(document), {
826
+ const { data } = handleInvisibleAttributes(transformData(latestValues), {
817
827
  schema: fromRelationModal ? relationalModalSchema : schema,
818
828
  initialValues,
819
829
  components
@@ -827,10 +837,10 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
827
837
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
828
838
  setErrors(formatValidationErrors(res.error));
829
839
  } else {
830
- resetForm(document);
840
+ resetForm(latestValues);
831
841
  }
832
842
  } else {
833
- const { data } = handleInvisibleAttributes(transformData(document), {
843
+ const { data } = handleInvisibleAttributes(transformData(latestValues), {
834
844
  schema: fromRelationModal ? relationalModalSchema : schema,
835
845
  initialValues,
836
846
  components