@strapi/content-manager 5.33.3 → 5.34.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 (164) hide show
  1. package/dist/admin/components/LeftMenu.js +13 -8
  2. package/dist/admin/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/components/LeftMenu.mjs +13 -8
  4. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/history/components/VersionHeader.js +1 -0
  6. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  7. package/dist/admin/history/components/VersionHeader.mjs +1 -0
  8. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/EditViewPage.js +71 -71
  10. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  11. package/dist/admin/pages/EditView/EditViewPage.mjs +73 -73
  12. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/DocumentActions.js +29 -21
  14. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/DocumentActions.mjs +30 -22
  16. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +23 -1
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +23 -1
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js +30 -6
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +30 -6
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +14 -1
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +14 -1
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +157 -7
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +154 -5
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +28 -20
  34. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +25 -17
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +6 -3
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +7 -4
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +12 -12
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +13 -13
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +2 -2
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +1 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js +4 -8
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs +4 -7
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -12
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -12
  56. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +48 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +49 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +47 -13
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +49 -15
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +1 -0
  66. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +1 -0
  68. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +10 -1
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +10 -1
  72. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +5 -1
  74. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +5 -1
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +19 -7
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +19 -7
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/Header.js +91 -44
  82. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/Header.mjs +92 -45
  84. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/InputRenderer.js +6 -2
  86. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/InputRenderer.mjs +6 -2
  88. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  89. package/dist/admin/pages/EditView/utils/data.js +22 -0
  90. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  91. package/dist/admin/pages/EditView/utils/data.mjs +22 -1
  92. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  93. package/dist/admin/pages/ListView/ListViewPage.js +6 -4
  94. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  95. package/dist/admin/pages/ListView/ListViewPage.mjs +6 -4
  96. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  97. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.d.ts +9 -1
  98. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +9 -1
  99. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.d.ts +1 -1
  100. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.d.ts +2 -4
  101. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +2 -1
  102. package/dist/admin/src/pages/EditView/utils/data.d.ts +6 -1
  103. package/dist/admin/translations/de.json.js +165 -32
  104. package/dist/admin/translations/de.json.js.map +1 -1
  105. package/dist/admin/translations/de.json.mjs +165 -32
  106. package/dist/admin/translations/de.json.mjs.map +1 -1
  107. package/dist/admin/translations/zh-Hans.json.js +0 -44
  108. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  109. package/dist/admin/translations/zh-Hans.json.mjs +0 -44
  110. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  111. package/dist/server/controllers/collection-types.js +16 -13
  112. package/dist/server/controllers/collection-types.js.map +1 -1
  113. package/dist/server/controllers/collection-types.mjs +16 -13
  114. package/dist/server/controllers/collection-types.mjs.map +1 -1
  115. package/dist/server/controllers/relations.js +5 -2
  116. package/dist/server/controllers/relations.js.map +1 -1
  117. package/dist/server/controllers/relations.mjs +5 -2
  118. package/dist/server/controllers/relations.mjs.map +1 -1
  119. package/dist/server/controllers/utils/document-status.js +28 -0
  120. package/dist/server/controllers/utils/document-status.js.map +1 -0
  121. package/dist/server/controllers/utils/document-status.mjs +26 -0
  122. package/dist/server/controllers/utils/document-status.mjs.map +1 -0
  123. package/dist/server/services/components.js +68 -20
  124. package/dist/server/services/components.js.map +1 -1
  125. package/dist/server/services/components.mjs +69 -21
  126. package/dist/server/services/components.mjs.map +1 -1
  127. package/dist/server/services/permission-checker.js +23 -0
  128. package/dist/server/services/permission-checker.js.map +1 -1
  129. package/dist/server/services/permission-checker.mjs +23 -0
  130. package/dist/server/services/permission-checker.mjs.map +1 -1
  131. package/dist/server/services/utils/store.js +51 -4
  132. package/dist/server/services/utils/store.js.map +1 -1
  133. package/dist/server/services/utils/store.mjs +51 -4
  134. package/dist/server/services/utils/store.mjs.map +1 -1
  135. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  136. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  137. package/dist/server/src/controllers/utils/document-status.d.ts +10 -0
  138. package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -0
  139. package/dist/server/src/index.d.ts +1 -0
  140. package/dist/server/src/index.d.ts.map +1 -1
  141. package/dist/server/src/services/components.d.ts +6 -0
  142. package/dist/server/src/services/components.d.ts.map +1 -1
  143. package/dist/server/src/services/index.d.ts +1 -0
  144. package/dist/server/src/services/index.d.ts.map +1 -1
  145. package/dist/server/src/services/permission-checker.d.ts +1 -0
  146. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  147. package/dist/server/src/services/utils/store.d.ts +5 -1
  148. package/dist/server/src/services/utils/store.d.ts.map +1 -1
  149. package/package.json +7 -7
  150. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js +0 -17
  151. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js.map +0 -1
  152. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs +0 -15
  153. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs.map +0 -1
  154. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js +0 -75
  155. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js.map +0 -1
  156. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs +0 -73
  157. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs.map +0 -1
  158. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +0 -88
  159. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +0 -1
  160. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +0 -84
  161. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +0 -1
  162. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.d.ts +0 -11
  163. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.d.ts +0 -9
  164. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentActions.mjs","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} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Dialog,\n Flex,\n Modal,\n Radio,\n Typography,\n VisuallyHidden,\n Menu,\n ButtonProps,\n Tooltip,\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 [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 return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\" width=\"100%\">\n <tours.contentManager.Publish>\n <Flex gap={2}>\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\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 </Flex>\n </tours.contentManager.Publish>\n {secondaryAction ? (\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 ) : 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\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 return (\n <Menu.Root open={isOpen} onOpenChange={setIsOpen}>\n <Menu.Trigger\n disabled={isDisabled}\n size=\"S\"\n endIcon={null}\n paddingTop=\"4px\"\n paddingLeft=\"7px\"\n paddingRight=\"7px\"\n variant={variant}\n >\n <More aria-hidden focusable={false} />\n <VisuallyHidden tag=\"span\">\n {label ||\n formatMessage({\n id: 'content-manager.containers.edit.panels.default.more-actions',\n defaultMessage: 'More document actions',\n })}\n </VisuallyHidden>\n </Menu.Trigger>\n <Menu.Content maxHeight={undefined} popoverPlacement=\"bottom-end\">\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","primaryAction","secondaryAction","restActions","filter","action","position","undefined","positions","Array","isArray","includes","addHintTooltip","children","disabled","_jsx","Tooltip","label","defaultMessage","Flex","width","_jsxs","direction","gap","alignItems","tours","contentManager","Publish","DocumentActionButton","variant","buttonType","length","DocumentActionsMenu","dialogId","setDialogId","React","useState","toggleNotification","useNotification","handleClick","e","onClick","dialog","muteDialog","type","title","message","content","status","timeout","onClose","preventDefault","handleClose","_Fragment","Button","flex","startIcon","icon","justifyContent","paddingTop","paddingBottom","loading","DocumentActionConfirmDialog","isOpen","DocumentActionModal","onModalClose","setIsOpen","isDisabled","every","Menu","Root","open","onOpenChange","Trigger","size","endIcon","paddingLeft","paddingRight","More","aria-hidden","focusable","VisuallyHidden","tag","Content","maxHeight","popoverPlacement","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","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.mjs","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} 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 [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 return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\" width=\"100%\">\n <tours.contentManager.Publish>\n <Flex gap={2}>\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\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 </Flex>\n </tours.contentManager.Publish>\n {secondaryAction ? (\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 ) : 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 /**\n * TODO: remove when https://github.com/strapi/design-system/pull/1994 will be merged and released.\n */\n React.useEffect(() => {\n if (triggerRef.current) {\n if (isDisabled) {\n triggerRef.current.setAttribute('disabled', '');\n } else {\n triggerRef.current.removeAttribute('disabled');\n }\n }\n }, [isDisabled]);\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\">\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","primaryAction","secondaryAction","restActions","filter","action","position","undefined","positions","Array","isArray","includes","addHintTooltip","children","disabled","_jsx","Tooltip","label","defaultMessage","Flex","width","_jsxs","direction","gap","alignItems","tours","contentManager","Publish","DocumentActionButton","variant","buttonType","length","DocumentActionsMenu","dialogId","setDialogId","React","useState","toggleNotification","useNotification","handleClick","e","onClick","dialog","muteDialog","type","title","message","content","status","timeout","onClose","preventDefault","handleClose","_Fragment","Button","flex","startIcon","icon","justifyContent","paddingTop","paddingBottom","loading","DocumentActionConfirmDialog","isOpen","DocumentActionModal","onModalClose","setIsOpen","isDisabled","every","triggerRef","useRef","useEffect","current","setAttribute","removeAttribute","handleOpenChange","open","Menu","Root","onOpenChange","Trigger","ref","tag","IconButton","More","Content","maxHeight","popoverPlacement","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","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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"}
@@ -192,6 +192,27 @@ const CodeEditor = (props)=>{
192
192
  ]
193
193
  });
194
194
  };
195
+ const withCode = (editor)=>{
196
+ const { insertData } = editor;
197
+ editor.insertData = (data)=>{
198
+ const pastedText = data.getData('text/plain');
199
+ if (pastedText && editor.selection) {
200
+ // Check if we're currently inside a code block
201
+ const codeBlockEntry = slate.Editor.above(editor, {
202
+ match: (node)=>!slate.Editor.isEditor(node) && node.type === 'code'
203
+ });
204
+ if (codeBlockEntry) {
205
+ // We're inside a code block, handle the paste specially
206
+ // Replace the selected content with the pasted text, preserving newlines
207
+ slate.Transforms.insertText(editor, pastedText);
208
+ return;
209
+ }
210
+ }
211
+ // For non-code blocks, use the default behavior
212
+ insertData(data);
213
+ };
214
+ return editor;
215
+ };
195
216
  const codeBlocks = {
196
217
  code: {
197
218
  renderElement: (props)=>/*#__PURE__*/ jsxRuntime.jsx(CodeEditor, {
@@ -215,7 +236,8 @@ const codeBlocks = {
215
236
  },
216
237
  snippets: [
217
238
  '```'
218
- ]
239
+ ],
240
+ plugin: withCode
219
241
  }
220
242
  };
221
243
 
@@ -1 +1 @@
1
- {"version":3,"file":"Code.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { CodeBlock as CodeBlockIcon } from '@strapi/icons';\nimport * as Prism from 'prismjs';\nimport { useIntl } from 'react-intl';\nimport { BaseRange, Element, Editor, Node, NodeEntry, Transforms } from 'slate';\nimport { useSelected, type RenderElementProps, useFocused, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { useBlocksEditorContext, type BlocksStore } from '../BlocksEditor';\nimport { codeLanguages } from '../utils/constants';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nimport 'prismjs/themes/prism-solarizedlight.css';\nimport 'prismjs/components/prism-asmatmel';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-basic';\nimport 'prismjs/components/prism-c';\nimport 'prismjs/components/prism-clojure';\nimport 'prismjs/components/prism-cobol';\nimport 'prismjs/components/prism-cpp';\nimport 'prismjs/components/prism-csharp';\nimport 'prismjs/components/prism-dart';\nimport 'prismjs/components/prism-docker';\nimport 'prismjs/components/prism-elixir';\nimport 'prismjs/components/prism-erlang';\nimport 'prismjs/components/prism-fortran';\nimport 'prismjs/components/prism-fsharp';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-graphql';\nimport 'prismjs/components/prism-groovy';\nimport 'prismjs/components/prism-haskell';\nimport 'prismjs/components/prism-haxe';\nimport 'prismjs/components/prism-ini';\nimport 'prismjs/components/prism-java';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-jsx';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-julia';\nimport 'prismjs/components/prism-kotlin';\nimport 'prismjs/components/prism-latex';\nimport 'prismjs/components/prism-lua';\nimport 'prismjs/components/prism-markdown';\nimport 'prismjs/components/prism-matlab';\nimport 'prismjs/components/prism-makefile';\nimport 'prismjs/components/prism-objectivec';\nimport 'prismjs/components/prism-perl';\nimport 'prismjs/components/prism-php';\nimport 'prismjs/components/prism-powershell';\nimport 'prismjs/components/prism-python';\nimport 'prismjs/components/prism-r';\nimport 'prismjs/components/prism-ruby';\nimport 'prismjs/components/prism-rust';\nimport 'prismjs/components/prism-sas';\nimport 'prismjs/components/prism-scala';\nimport 'prismjs/components/prism-scheme';\nimport 'prismjs/components/prism-sql';\nimport 'prismjs/components/prism-stata';\nimport 'prismjs/components/prism-swift';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-tsx';\nimport 'prismjs/components/prism-vbnet';\nimport 'prismjs/components/prism-yaml';\n\ntype BaseRangeCustom = BaseRange & { className: string };\n\nexport const decorateCode = ([node, path]: NodeEntry) => {\n const ranges: BaseRangeCustom[] = [];\n\n // make sure it is an Slate Element\n if (!Element.isElement(node) || node.type !== 'code') return ranges;\n // transform the Element into a string\n const text = Node.string(node);\n const language = codeLanguages.find((lang) => lang.value === node.language);\n const decorateKey = language?.decorate ?? language?.value;\n\n const selectedLanguage = Prism.languages[decorateKey || 'plaintext'];\n\n // create \"tokens\" with \"prismjs\" and put them in \"ranges\"\n const tokens = Prism.tokenize(text, selectedLanguage);\n let start = 0;\n for (const token of tokens) {\n const length = token.length;\n const end = start + length;\n if (typeof token !== 'string') {\n ranges.push({\n anchor: { path, offset: start },\n focus: { path, offset: end },\n className: `token ${token.type}`,\n });\n }\n start = end;\n }\n\n // these will be found in \"renderLeaf\" in \"leaf\" and their \"className\" will be applied\n return ranges;\n};\n\nconst CodeBlock = styled.pre`\n border-radius: ${({ theme }) => theme.borderRadius};\n background-color: ${({ theme }) => theme.colors.neutral100};\n max-width: 100%;\n overflow: auto;\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n flex-shrink: 1;\n\n & > code {\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n color: ${({ theme }) => theme.colors.neutral800};\n overflow: auto;\n max-width: 100%;\n }\n`;\n\nconst CodeEditor = (props: RenderElementProps) => {\n const { editor } = useBlocksEditorContext('ImageDialog');\n const editorIsFocused = useFocused();\n const imageIsSelected = useSelected();\n const { formatMessage } = useIntl();\n const [isSelectOpen, setIsSelectOpen] = React.useState(false);\n const shouldDisplayLanguageSelect = (editorIsFocused && imageIsSelected) || isSelectOpen;\n\n return (\n <Box position=\"relative\" width=\"100%\">\n <CodeBlock {...props.attributes}>\n <code>{props.children}</code>\n </CodeBlock>\n {shouldDisplayLanguageSelect && (\n <Box\n position=\"absolute\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n borderStyle=\"solid\"\n borderWidth=\"0.5px\"\n shadow=\"tableShadow\"\n top=\"100%\"\n marginTop={1}\n right={0}\n padding={1}\n hasRadius\n >\n <SingleSelect\n onChange={(open) => {\n Transforms.setNodes(\n editor,\n { language: open.toString() },\n { match: (node) => !Editor.isEditor(node) && node.type === 'code' }\n );\n }}\n value={(props.element.type === 'code' && props.element.language) || 'plaintext'}\n onOpenChange={(open) => {\n setIsSelectOpen(open);\n\n // Focus the editor again when closing the select so the user can continue typing\n if (!open) {\n ReactEditor.focus(editor);\n }\n }}\n onCloseAutoFocus={(e) => e.preventDefault()}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.code.languageLabel',\n defaultMessage: 'Select a language',\n })}\n >\n {codeLanguages.map(({ value, label }) => (\n <SingleSelectOption value={value} key={value}>\n {label}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Box>\n )}\n </Box>\n );\n};\n\nconst codeBlocks: Pick<BlocksStore, 'code'> = {\n code: {\n renderElement: (props) => <CodeEditor {...props} />,\n icon: CodeBlockIcon,\n label: {\n id: 'components.Blocks.blocks.code',\n defaultMessage: 'Code block',\n },\n matchNode: (node) => node.type === 'code',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'code'>>(editor, { type: 'code', language: 'plaintext' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['```'],\n },\n};\n\nexport { codeBlocks };\n"],"names":["decorateCode","node","path","ranges","Element","isElement","type","text","Node","string","language","codeLanguages","find","lang","value","decorateKey","decorate","selectedLanguage","Prism","languages","tokens","tokenize","start","token","length","end","push","anchor","offset","focus","className","CodeBlock","styled","pre","theme","borderRadius","colors","neutral100","spaces","neutral800","CodeEditor","props","editor","useBlocksEditorContext","editorIsFocused","useFocused","imageIsSelected","useSelected","formatMessage","useIntl","isSelectOpen","setIsSelectOpen","React","useState","shouldDisplayLanguageSelect","_jsxs","Box","position","width","_jsx","attributes","code","children","background","borderColor","borderStyle","borderWidth","shadow","top","marginTop","right","padding","hasRadius","SingleSelect","onChange","open","Transforms","setNodes","toString","match","Editor","isEditor","element","onOpenChange","ReactEditor","onCloseAutoFocus","e","preventDefault","aria-label","id","defaultMessage","map","label","SingleSelectOption","codeBlocks","renderElement","icon","CodeBlockIcon","matchNode","isInBlocksSelector","handleConvert","baseHandleConvert","handleEnterKey","pressEnterTwiceToExit","snippets"],"mappings":"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"}
1
+ {"version":3,"file":"Code.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { CodeBlock as CodeBlockIcon } from '@strapi/icons';\nimport * as Prism from 'prismjs';\nimport { useIntl } from 'react-intl';\nimport { BaseRange, Element, Editor, Node, NodeEntry, Transforms } from 'slate';\nimport { useSelected, type RenderElementProps, useFocused, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { useBlocksEditorContext, type BlocksStore } from '../BlocksEditor';\nimport { codeLanguages } from '../utils/constants';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { pressEnterTwiceToExit } from '../utils/enterKey';\nimport { type Block } from '../utils/types';\n\nimport 'prismjs/themes/prism-solarizedlight.css';\nimport 'prismjs/components/prism-asmatmel';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-basic';\nimport 'prismjs/components/prism-c';\nimport 'prismjs/components/prism-clojure';\nimport 'prismjs/components/prism-cobol';\nimport 'prismjs/components/prism-cpp';\nimport 'prismjs/components/prism-csharp';\nimport 'prismjs/components/prism-dart';\nimport 'prismjs/components/prism-docker';\nimport 'prismjs/components/prism-elixir';\nimport 'prismjs/components/prism-erlang';\nimport 'prismjs/components/prism-fortran';\nimport 'prismjs/components/prism-fsharp';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-graphql';\nimport 'prismjs/components/prism-groovy';\nimport 'prismjs/components/prism-haskell';\nimport 'prismjs/components/prism-haxe';\nimport 'prismjs/components/prism-ini';\nimport 'prismjs/components/prism-java';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-jsx';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-julia';\nimport 'prismjs/components/prism-kotlin';\nimport 'prismjs/components/prism-latex';\nimport 'prismjs/components/prism-lua';\nimport 'prismjs/components/prism-markdown';\nimport 'prismjs/components/prism-matlab';\nimport 'prismjs/components/prism-makefile';\nimport 'prismjs/components/prism-objectivec';\nimport 'prismjs/components/prism-perl';\nimport 'prismjs/components/prism-php';\nimport 'prismjs/components/prism-powershell';\nimport 'prismjs/components/prism-python';\nimport 'prismjs/components/prism-r';\nimport 'prismjs/components/prism-ruby';\nimport 'prismjs/components/prism-rust';\nimport 'prismjs/components/prism-sas';\nimport 'prismjs/components/prism-scala';\nimport 'prismjs/components/prism-scheme';\nimport 'prismjs/components/prism-sql';\nimport 'prismjs/components/prism-stata';\nimport 'prismjs/components/prism-swift';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-tsx';\nimport 'prismjs/components/prism-vbnet';\nimport 'prismjs/components/prism-yaml';\n\ntype BaseRangeCustom = BaseRange & { className: string };\n\nexport const decorateCode = ([node, path]: NodeEntry) => {\n const ranges: BaseRangeCustom[] = [];\n\n // make sure it is an Slate Element\n if (!Element.isElement(node) || node.type !== 'code') return ranges;\n // transform the Element into a string\n const text = Node.string(node);\n const language = codeLanguages.find((lang) => lang.value === node.language);\n const decorateKey = language?.decorate ?? language?.value;\n\n const selectedLanguage = Prism.languages[decorateKey || 'plaintext'];\n\n // create \"tokens\" with \"prismjs\" and put them in \"ranges\"\n const tokens = Prism.tokenize(text, selectedLanguage);\n let start = 0;\n for (const token of tokens) {\n const length = token.length;\n const end = start + length;\n if (typeof token !== 'string') {\n ranges.push({\n anchor: { path, offset: start },\n focus: { path, offset: end },\n className: `token ${token.type}`,\n });\n }\n start = end;\n }\n\n // these will be found in \"renderLeaf\" in \"leaf\" and their \"className\" will be applied\n return ranges;\n};\n\nconst CodeBlock = styled.pre`\n border-radius: ${({ theme }) => theme.borderRadius};\n background-color: ${({ theme }) => theme.colors.neutral100};\n max-width: 100%;\n overflow: auto;\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n flex-shrink: 1;\n\n & > code {\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n color: ${({ theme }) => theme.colors.neutral800};\n overflow: auto;\n max-width: 100%;\n }\n`;\n\nconst CodeEditor = (props: RenderElementProps) => {\n const { editor } = useBlocksEditorContext('ImageDialog');\n const editorIsFocused = useFocused();\n const imageIsSelected = useSelected();\n const { formatMessage } = useIntl();\n const [isSelectOpen, setIsSelectOpen] = React.useState(false);\n const shouldDisplayLanguageSelect = (editorIsFocused && imageIsSelected) || isSelectOpen;\n\n return (\n <Box position=\"relative\" width=\"100%\">\n <CodeBlock {...props.attributes}>\n <code>{props.children}</code>\n </CodeBlock>\n {shouldDisplayLanguageSelect && (\n <Box\n position=\"absolute\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n borderStyle=\"solid\"\n borderWidth=\"0.5px\"\n shadow=\"tableShadow\"\n top=\"100%\"\n marginTop={1}\n right={0}\n padding={1}\n hasRadius\n >\n <SingleSelect\n onChange={(open) => {\n Transforms.setNodes(\n editor,\n { language: open.toString() },\n { match: (node) => !Editor.isEditor(node) && node.type === 'code' }\n );\n }}\n value={(props.element.type === 'code' && props.element.language) || 'plaintext'}\n onOpenChange={(open) => {\n setIsSelectOpen(open);\n\n // Focus the editor again when closing the select so the user can continue typing\n if (!open) {\n ReactEditor.focus(editor);\n }\n }}\n onCloseAutoFocus={(e) => e.preventDefault()}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.code.languageLabel',\n defaultMessage: 'Select a language',\n })}\n >\n {codeLanguages.map(({ value, label }) => (\n <SingleSelectOption value={value} key={value}>\n {label}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Box>\n )}\n </Box>\n );\n};\n\nconst withCode = (editor: Editor) => {\n const { insertData } = editor;\n\n editor.insertData = (data) => {\n const pastedText = data.getData('text/plain');\n\n if (pastedText && editor.selection) {\n // Check if we're currently inside a code block\n const codeBlockEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'code',\n });\n\n if (codeBlockEntry) {\n // We're inside a code block, handle the paste specially\n // Replace the selected content with the pasted text, preserving newlines\n Transforms.insertText(editor, pastedText);\n return;\n }\n }\n\n // For non-code blocks, use the default behavior\n insertData(data);\n };\n\n return editor;\n};\n\nconst codeBlocks: Pick<BlocksStore, 'code'> = {\n code: {\n renderElement: (props) => <CodeEditor {...props} />,\n icon: CodeBlockIcon,\n label: {\n id: 'components.Blocks.blocks.code',\n defaultMessage: 'Code block',\n },\n matchNode: (node) => node.type === 'code',\n isInBlocksSelector: true,\n handleConvert(editor) {\n baseHandleConvert<Block<'code'>>(editor, { type: 'code', language: 'plaintext' });\n },\n handleEnterKey(editor) {\n pressEnterTwiceToExit(editor);\n },\n snippets: ['```'],\n plugin: withCode,\n },\n};\n\nexport { codeBlocks };\n"],"names":["decorateCode","node","path","ranges","Element","isElement","type","text","Node","string","language","codeLanguages","find","lang","value","decorateKey","decorate","selectedLanguage","Prism","languages","tokens","tokenize","start","token","length","end","push","anchor","offset","focus","className","CodeBlock","styled","pre","theme","borderRadius","colors","neutral100","spaces","neutral800","CodeEditor","props","editor","useBlocksEditorContext","editorIsFocused","useFocused","imageIsSelected","useSelected","formatMessage","useIntl","isSelectOpen","setIsSelectOpen","React","useState","shouldDisplayLanguageSelect","_jsxs","Box","position","width","_jsx","attributes","code","children","background","borderColor","borderStyle","borderWidth","shadow","top","marginTop","right","padding","hasRadius","SingleSelect","onChange","open","Transforms","setNodes","toString","match","Editor","isEditor","element","onOpenChange","ReactEditor","onCloseAutoFocus","e","preventDefault","aria-label","id","defaultMessage","map","label","SingleSelectOption","withCode","insertData","data","pastedText","getData","selection","codeBlockEntry","above","insertText","codeBlocks","renderElement","icon","CodeBlockIcon","matchNode","isInBlocksSelector","handleConvert","baseHandleConvert","handleEnterKey","pressEnterTwiceToExit","snippets","plugin"],"mappings":"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"}
@@ -170,6 +170,27 @@ const CodeEditor = (props)=>{
170
170
  ]
171
171
  });
172
172
  };
173
+ const withCode = (editor)=>{
174
+ const { insertData } = editor;
175
+ editor.insertData = (data)=>{
176
+ const pastedText = data.getData('text/plain');
177
+ if (pastedText && editor.selection) {
178
+ // Check if we're currently inside a code block
179
+ const codeBlockEntry = Editor.above(editor, {
180
+ match: (node)=>!Editor.isEditor(node) && node.type === 'code'
181
+ });
182
+ if (codeBlockEntry) {
183
+ // We're inside a code block, handle the paste specially
184
+ // Replace the selected content with the pasted text, preserving newlines
185
+ Transforms.insertText(editor, pastedText);
186
+ return;
187
+ }
188
+ }
189
+ // For non-code blocks, use the default behavior
190
+ insertData(data);
191
+ };
192
+ return editor;
193
+ };
173
194
  const codeBlocks = {
174
195
  code: {
175
196
  renderElement: (props)=>/*#__PURE__*/ jsx(CodeEditor, {
@@ -193,7 +214,8 @@ const codeBlocks = {
193
214
  },
194
215
  snippets: [
195
216
  '```'
196
- ]
217
+ ],
218
+ plugin: withCode
197
219
  }
198
220
  };
199
221