@strapi/content-manager 5.12.2 → 5.12.4

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 (82) hide show
  1. package/dist/admin/content-manager.js.map +1 -1
  2. package/dist/admin/content-manager.mjs.map +1 -1
  3. package/dist/admin/history/pages/History.js +1 -9
  4. package/dist/admin/history/pages/History.js.map +1 -1
  5. package/dist/admin/history/pages/History.mjs +1 -9
  6. package/dist/admin/history/pages/History.mjs.map +1 -1
  7. package/dist/admin/hooks/useDocumentActions.js +8 -1
  8. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  9. package/dist/admin/hooks/useDocumentActions.mjs +8 -1
  10. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  11. package/dist/admin/hooks/useDocumentContext.js +57 -0
  12. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  13. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  14. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  15. package/dist/admin/pages/EditView/EditViewPage.js +85 -93
  16. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  17. package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
  18. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/DocumentActions.js +28 -32
  20. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  21. package/dist/admin/pages/EditView/components/DocumentActions.mjs +32 -36
  22. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  24. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  26. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  28. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  30. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -2
  32. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -2
  34. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
  36. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
  38. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  40. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +432 -344
  44. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +432 -346
  46. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +55 -37
  48. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +57 -39
  50. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
  52. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
  54. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  56. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  58. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  59. package/dist/admin/preview/components/PreviewHeader.js +2 -5
  60. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  61. package/dist/admin/preview/components/PreviewHeader.mjs +2 -5
  62. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  63. package/dist/admin/preview/pages/Preview.js +94 -102
  64. package/dist/admin/preview/pages/Preview.js.map +1 -1
  65. package/dist/admin/preview/pages/Preview.mjs +94 -102
  66. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  67. package/dist/admin/src/content-manager.d.ts +0 -3
  68. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  69. package/dist/admin/src/history/pages/History.d.ts +1 -1
  70. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  71. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  72. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  73. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +50 -5
  74. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  75. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  76. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  77. package/package.json +8 -8
  78. package/dist/admin/features/DocumentContext.js +0 -71
  79. package/dist/admin/features/DocumentContext.js.map +0 -1
  80. package/dist/admin/features/DocumentContext.mjs +0 -49
  81. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  82. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentActions.js","sources":["../../../../../admin/src/pages/EditView/components/DocumentActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useForm,\n useNotification,\n NotificationConfig,\n useAPIErrorHandler,\n useQueryParams,\n} 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} from '@strapi/design-system';\nimport { Cross, More, WarningCircle } from '@strapi/icons';\nimport mapValues from 'lodash/fp/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\nimport { DefaultTheme, styled } from 'styled-components';\n\nimport { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes';\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentContext } from '../../../features/DocumentContext';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { CLONE_PATH, LIST_PATH } from '../../../router';\nimport { useGetDraftRelationCountQuery } from '../../../services/documents';\nimport { isBaseQueryError, buildValidParams } from '../../../utils/api';\nimport { getTranslation } from '../../../utils/translations';\n\nimport type { RelationsFormValue } from './FormInputs/Relations/Relations';\nimport type { DocumentActionComponent } from '../../../content-manager';\n\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 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 return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\" width=\"100%\">\n <Flex gap={2}>\n <DocumentActionButton {...primaryAction} variant={primaryAction.variant || 'default'} />\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 {secondaryAction ? (\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionButtonProps extends Action {}\n\nconst DocumentActionButton = (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 >\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 MenuItem = styled(Menu.Item)<{ isVariantDanger?: boolean; isDisabled?: boolean }>`\n &:hover {\n background: ${({ theme, isVariantDanger, isDisabled }) =>\n isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};\n }\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 <MenuItem\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 isVariantDanger={action.variant === 'danger'}\n isDisabled={action.disabled}\n >\n <Flex justifyContent=\"space-between\" gap={4}>\n <Flex\n color={!action.disabled ? convertActionVariantToColor(action.variant) : 'inherit'}\n gap={2}\n tag=\"span\"\n >\n <Flex\n tag=\"span\"\n color={\n !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit'\n }\n >\n {action.icon}\n </Flex>\n {action.label}\n </Flex>\n </Flex>\n </MenuItem>\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\nconst convertActionVariantToColor = (\n variant: DocumentActionDescription['variant'] = 'secondary'\n): keyof DefaultTheme['colors'] | undefined => {\n switch (variant) {\n case 'danger':\n return 'danger600';\n case 'secondary':\n return undefined;\n case 'success':\n return 'success600';\n default:\n return 'primary600';\n }\n};\n\nconst convertActionVariantToIconColor = (\n variant: DocumentActionDescription['variant'] = 'secondary'\n): keyof DefaultTheme['colors'] | undefined => {\n switch (variant) {\n case 'danger':\n return 'danger600';\n case 'secondary':\n return 'neutral500';\n case 'success':\n return 'success600';\n default:\n return 'primary600';\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 onPreview,\n fromPreview = false,\n fromRelationModal = false,\n}) => {\n const schema = useDocumentContext('PublishAction', (state) => state.document.schema);\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 = useDocumentRBAC('PublishAction', ({ canPublish }) => canPublish);\n const { publish, isLoading } = useDocumentActions(fromPreview, fromRelationModal);\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 [{ query, rawQuery }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\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\n const rootDocumentMeta = useDocumentContext('PublishAction', (state) => state.rootDocumentMeta);\n const currentDocumentMeta = useDocumentContext('PublishAction', (state) => state.meta);\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,\n });\n\n if (error) {\n throw error;\n }\n\n if (data) {\n setServerCountOfDraftRelations(data.data);\n }\n };\n\n fetchDraftRelationsCount();\n }, [isListView, document, documentId, countDraftRelations, collectionType, model, params]);\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 if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n const performPublish = async () => {\n setSubmitting(true);\n\n try {\n const { errors } = await validate(true, {\n status: 'published',\n });\n\n if (errors) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.validation.error',\n defaultMessage:\n 'There are validation errors in your document. Please fix them before saving.',\n }),\n });\n\n return;\n }\n\n const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;\n const res = await publish(\n {\n collectionType,\n model,\n documentId,\n params: isPublishingRelation ? currentDocumentMeta.params : params,\n },\n transformData(formValues)\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 (id === 'create') {\n navigate({\n pathname: `../${collectionType}/${model}/${res.data.documentId}`,\n search: rawQuery,\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\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 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 onPreview,\n fromPreview = false,\n fromRelationModal = false,\n}) => {\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(fromPreview, fromRelationModal);\n const [{ query, rawQuery }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const isSubmitting = useForm('UpdateAction', ({ isSubmitting }) => isSubmitting);\n const modified = useForm('UpdateAction', ({ modified }) => modified);\n const setSubmitting = useForm('UpdateAction', ({ setSubmitting }) => setSubmitting);\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('PublishAction', ({ resetForm }) => resetForm);\n\n const rootDocumentMeta = useDocumentContext('UpdateAction', (state) => state.rootDocumentMeta);\n const currentDocumentMeta = useDocumentContext('UpdateAction', (state) => state.meta);\n\n const handleUpdate = React.useCallback(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\n if (isCloning) {\n const res = await clone(\n {\n model,\n documentId: cloneMatch.params.origin!,\n 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 isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;\n\n const res = await update(\n {\n collectionType,\n model,\n documentId,\n params: isEditingRelation ? currentDocumentMeta.params : params,\n },\n transformData(document)\n );\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else {\n resetForm();\n }\n } else {\n const res = await create(\n {\n model,\n params,\n },\n transformData(document)\n );\n\n if ('data' in res && collectionType !== SINGLE_TYPES) {\n navigate(\n {\n pathname: `../${res.data.documentId}`,\n search: rawQuery,\n },\n { replace: true, 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 }\n } finally {\n setSubmitting(false);\n if (onPreview) {\n onPreview();\n }\n }\n }, [\n clone,\n cloneMatch?.params.origin,\n collectionType,\n create,\n currentDocumentMeta.documentId,\n currentDocumentMeta.params,\n document,\n documentId,\n formatMessage,\n formatValidationErrors,\n isCloning,\n model,\n modified,\n navigate,\n onPreview,\n params,\n rawQuery,\n resetForm,\n rootDocumentMeta.documentId,\n setErrors,\n setSubmitting,\n toggleNotification,\n update,\n validate,\n ]);\n\n // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleUpdate();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleUpdate]);\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":["DocumentActions","actions","formatMessage","useIntl","primaryAction","secondaryAction","restActions","filter","action","position","undefined","positions","Array","isArray","includes","_jsxs","Flex","direction","gap","alignItems","width","_jsx","DocumentActionButton","variant","length","DocumentActionsMenu","label","id","defaultMessage","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","disabled","justifyContent","paddingTop","paddingBottom","loading","DocumentActionConfirmDialog","isOpen","DocumentActionModal","onModalClose","MenuItem","styled","Menu","Item","theme","isVariantDanger","isDisabled","colors","danger100","children","setIsOpen","every","Root","open","onOpenChange","Trigger","size","endIcon","paddingLeft","paddingRight","More","aria-hidden","focusable","VisuallyHidden","tag","Content","maxHeight","popoverPlacement","map","onSelect","display","color","convertActionVariantToColor","convertActionVariantToIconColor","Fragment","onCancel","onConfirm","handleConfirm","Dialog","Header","Body","Footer","Cancel","fullWidth","footer","Modal","Title","transformData","data","apiData","mapValues","PublishAction","activeTab","documentId","model","collectionType","meta","document","onPreview","fromPreview","fromRelationModal","schema","useDocumentContext","state","navigate","useNavigate","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isListView","useMatch","LIST_PATH","isCloning","CLONE_PATH","useParams","canPublish","useDocumentRBAC","publish","isLoading","useDocumentActions","countDraftRelations","isLoadingDraftRelations","isError","isErrorDraftRelations","useGetDraftRelationCountQuery","localCountOfDraftRelations","setLocalCountOfDraftRelations","serverCountOfDraftRelations","setServerCountOfDraftRelations","query","rawQuery","useQueryParams","params","useMemo","buildValidParams","modified","useForm","setSubmitting","isSubmitting","validate","setErrors","formValues","values","rootDocumentMeta","currentDocumentMeta","useEffect","getTranslation","localDraftRelations","Set","extractDraftRelations","relations","connect","forEach","relation","add","traverseAndExtract","Object","entries","key","value","fetchDraftRelationsCount","error","isDocumentPublished","PUBLISHED_AT_ATTRIBUTE_NAME","availableStatus","some","doc","options","draftAndPublish","performPublish","errors","isPublishingRelation","res","SINGLE_TYPES","pathname","search","isBaseQueryError","name","totalDraftRelations","enableDraftRelationsCount","hasDraftRelations","count","UpdateAction","cloneMatch","create","update","clone","resetForm","handleUpdate","useCallback","origin","relative","isEditingRelation","replace","handleKeyDown","metaKey","ctrlKey","window","addEventListener","removeEventListener","UNPUBLISH_DRAFT_OPTIONS","KEEP","DISCARD","UnpublishAction","useDoc","unpublish","shouldKeepDraft","setShouldKeepDraft","isDocumentModified","handleChange","Cross","console","WarningCircle","height","fill","Typography","textAlign","Radio","Group","defaultValue","aria-label","onValueChange","checked","DiscardAction","canUpdate","discard","DEFAULT_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentActions.js","sources":["../../../../../admin/src/pages/EditView/components/DocumentActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useForm,\n useNotification,\n NotificationConfig,\n useAPIErrorHandler,\n useQueryParams,\n} 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} from '@strapi/design-system';\nimport { Cross, More, WarningCircle } from '@strapi/icons';\nimport mapValues from 'lodash/fp/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useMatch, useNavigate, useParams } from 'react-router-dom';\nimport { DefaultTheme, styled } from 'styled-components';\n\nimport { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes';\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } 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 { useGetDraftRelationCountQuery } from '../../../services/documents';\nimport { isBaseQueryError, buildValidParams } from '../../../utils/api';\nimport { getTranslation } from '../../../utils/translations';\n\nimport type { RelationsFormValue } from './FormInputs/Relations/Relations';\nimport type { DocumentActionComponent } from '../../../content-manager';\n\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 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 return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\" width=\"100%\">\n <Flex gap={2}>\n <DocumentActionButton {...primaryAction} variant={primaryAction.variant || 'default'} />\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 {secondaryAction ? (\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n ) : null}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DocumentActionButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DocumentActionButtonProps extends Action {}\n\nconst DocumentActionButton = (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 >\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 MenuItem = styled(Menu.Item)<{ isVariantDanger?: boolean; isDisabled?: boolean }>`\n &:hover {\n background: ${({ theme, isVariantDanger, isDisabled }) =>\n isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};\n }\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 <MenuItem\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 isVariantDanger={action.variant === 'danger'}\n isDisabled={action.disabled}\n >\n <Flex justifyContent=\"space-between\" gap={4}>\n <Flex\n color={!action.disabled ? convertActionVariantToColor(action.variant) : 'inherit'}\n gap={2}\n tag=\"span\"\n >\n <Flex\n tag=\"span\"\n color={\n !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit'\n }\n >\n {action.icon}\n </Flex>\n {action.label}\n </Flex>\n </Flex>\n </MenuItem>\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\nconst convertActionVariantToColor = (\n variant: DocumentActionDescription['variant'] = 'secondary'\n): keyof DefaultTheme['colors'] | undefined => {\n switch (variant) {\n case 'danger':\n return 'danger600';\n case 'secondary':\n return undefined;\n case 'success':\n return 'success600';\n default:\n return 'primary600';\n }\n};\n\nconst convertActionVariantToIconColor = (\n variant: DocumentActionDescription['variant'] = 'secondary'\n): keyof DefaultTheme['colors'] | undefined => {\n switch (variant) {\n case 'danger':\n return 'danger600';\n case 'secondary':\n return 'neutral500';\n case 'success':\n return 'success600';\n default:\n return 'primary600';\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 = useDocumentRBAC('PublishAction', ({ canPublish }) => canPublish);\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 resetForm = useForm('PublishAction', ({ resetForm }) => resetForm);\n\n const { currentDocumentMeta } = useDocumentContext('PublishAction');\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\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 if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n const performPublish = async () => {\n setSubmitting(true);\n\n try {\n const { errors } = await validate(true, {\n status: 'published',\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 return;\n }\n const res = await publish(\n {\n collectionType,\n model,\n documentId,\n params: currentDocumentMeta.params,\n },\n transformData(formValues)\n );\n\n // Reset form if successful\n if ('data' in res) {\n resetForm();\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') {\n navigate({\n pathname: `../${collectionType}/${model}/${res.data.documentId}`,\n search: rawQuery,\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 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 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 [{ rawQuery }] = useQueryParams();\n const onPreview = usePreviewContext('UpdateAction', (state) => state.onPreview, false);\n\n const isSubmitting = useForm('UpdateAction', ({ isSubmitting }) => isSubmitting);\n const modified = useForm('UpdateAction', ({ modified }) => modified);\n const setSubmitting = useForm('UpdateAction', ({ setSubmitting }) => setSubmitting);\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('PublishAction', ({ resetForm }) => resetForm);\n\n const { currentDocumentMeta } = useDocumentContext('UpdateAction');\n\n const handleUpdate = React.useCallback(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\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 res = await update(\n {\n collectionType,\n model,\n documentId,\n params: currentDocumentMeta.params,\n },\n transformData(document)\n );\n\n if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else {\n resetForm();\n }\n } else {\n const res = await create(\n {\n model,\n params: currentDocumentMeta.params,\n },\n transformData(document)\n );\n\n if ('data' in res && collectionType !== SINGLE_TYPES) {\n navigate(\n {\n pathname: `../${res.data.documentId}`,\n search: rawQuery,\n },\n { replace: true, 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 }\n } finally {\n setSubmitting(false);\n if (onPreview) {\n onPreview();\n }\n }\n }, [\n clone,\n cloneMatch?.params.origin,\n collectionType,\n create,\n currentDocumentMeta.params,\n document,\n documentId,\n formatMessage,\n formatValidationErrors,\n isCloning,\n model,\n modified,\n navigate,\n rawQuery,\n resetForm,\n setErrors,\n setSubmitting,\n toggleNotification,\n update,\n validate,\n onPreview,\n ]);\n\n // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleUpdate();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleUpdate]);\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":["DocumentActions","actions","formatMessage","useIntl","primaryAction","secondaryAction","restActions","filter","action","position","undefined","positions","Array","isArray","includes","_jsxs","Flex","direction","gap","alignItems","width","_jsx","DocumentActionButton","variant","length","DocumentActionsMenu","label","id","defaultMessage","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","disabled","justifyContent","paddingTop","paddingBottom","loading","DocumentActionConfirmDialog","isOpen","DocumentActionModal","onModalClose","MenuItem","styled","Menu","Item","theme","isVariantDanger","isDisabled","colors","danger100","children","setIsOpen","every","Root","open","onOpenChange","Trigger","size","endIcon","paddingLeft","paddingRight","More","aria-hidden","focusable","VisuallyHidden","tag","Content","maxHeight","popoverPlacement","map","onSelect","display","color","convertActionVariantToColor","convertActionVariantToIconColor","Fragment","onCancel","onConfirm","handleConfirm","Dialog","Header","Body","Footer","Cancel","fullWidth","footer","Modal","Title","transformData","data","apiData","mapValues","PublishAction","activeTab","documentId","model","collectionType","meta","document","currentDocument","schema","useDocumentContext","navigate","useNavigate","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isListView","useMatch","LIST_PATH","isCloning","CLONE_PATH","useParams","canPublish","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","resetForm","currentDocumentMeta","idToPublish","useEffect","getTranslation","localDraftRelations","Set","extractDraftRelations","relations","connect","forEach","relation","add","traverseAndExtract","Object","entries","key","value","fetchDraftRelationsCount","error","params","isDocumentPublished","PUBLISHED_AT_ATTRIBUTE_NAME","availableStatus","some","doc","options","draftAndPublish","performPublish","errors","res","SINGLE_TYPES","pathname","search","isBaseQueryError","name","totalDraftRelations","enableDraftRelationsCount","hasDraftRelations","count","UpdateAction","cloneMatch","create","update","clone","handleUpdate","useCallback","origin","relative","replace","handleKeyDown","metaKey","ctrlKey","window","addEventListener","removeEventListener","UNPUBLISH_DRAFT_OPTIONS","KEEP","DISCARD","UnpublishAction","useDoc","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8GA,MAAMA,eAAkB,GAAA,CAAC,EAAEC,OAAO,EAAwB,GAAA;IACxD,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,CAACC,eAAeC,eAAiB,EAAA,GAAGC,YAAY,GAAGL,OAAAA,CAAQM,MAAM,CAAC,CAACC,MAAAA,GAAAA;QACvE,IAAIA,MAAAA,CAAOC,QAAQ,KAAKC,SAAW,EAAA;YACjC,OAAO,IAAA;AACT;QAEA,MAAMC,SAAAA,GAAYC,MAAMC,OAAO,CAACL,OAAOC,QAAQ,CAAA,GAAID,MAAOC,CAAAA,QAAQ,GAAG;AAACD,YAAAA,MAAAA,CAAOC;AAAS,SAAA;QACtF,OAAOE,SAAAA,CAAUG,QAAQ,CAAC,OAAA,CAAA;AAC5B,KAAA,CAAA;AAEA,IAAA,IAAI,CAACV,aAAe,EAAA;QAClB,OAAO,IAAA;AACT;AAEA,IAAA,qBACEW,eAACC,CAAAA,iBAAAA,EAAAA;QAAKC,SAAU,EAAA,QAAA;QAASC,GAAK,EAAA,CAAA;QAAGC,UAAW,EAAA,SAAA;QAAUC,KAAM,EAAA,MAAA;;0BAC1DL,eAACC,CAAAA,iBAAAA,EAAAA;gBAAKE,GAAK,EAAA,CAAA;;kCACTG,cAACC,CAAAA,oBAAAA,EAAAA;AAAsB,wBAAA,GAAGlB,aAAa;wBAAEmB,OAASnB,EAAAA,aAAAA,CAAcmB,OAAO,IAAI;;oBAC1EjB,WAAYkB,CAAAA,MAAM,GAAG,CAAA,iBACpBH,cAACI,CAAAA,mBAAAA,EAAAA;wBACCxB,OAASK,EAAAA,WAAAA;AACToB,wBAAAA,KAAAA,EAAOxB,aAAc,CAAA;4BACnByB,EAAI,EAAA,6DAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA;AAEA,qBAAA,CAAA,GAAA;;;AAELvB,YAAAA,eAAAA,iBACCgB,cAACC,CAAAA,oBAAAA,EAAAA;AACE,gBAAA,GAAGjB,eAAe;gBACnBkB,OAASlB,EAAAA,eAAAA,CAAgBkB,OAAO,IAAI;AAEpC,aAAA,CAAA,GAAA;;;AAGV;AAQA,MAAMD,uBAAuB,CAACd,MAAAA,GAAAA;AAC5B,IAAA,MAAM,CAACqB,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,gBAAAA,CAAMC,QAAQ,CAAgB,IAAA,CAAA;IAC9D,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAE/B,MAAMC,WAAAA,GAAc,CAAC3B,MAAAA,GAAmB,OAAO4B,CAAAA,GAAAA;YAC7C,MAAM,EAAEC,UAAU,IAAM,KAAK,EAAEC,MAAM,EAAEX,EAAE,EAAE,GAAGnB,MAAAA;YAE9C,MAAM+B,UAAAA,GAAa,MAAMF,OAAQD,CAAAA,CAAAA,CAAAA;YAEjC,IAAIE,MAAAA,IAAU,CAACC,UAAY,EAAA;AACzB,gBAAA,OAAQD,OAAOE,IAAI;oBACjB,KAAK,cAAA;wBACHP,kBAAmB,CAAA;AACjBQ,4BAAAA,KAAAA,EAAOH,OAAOG,KAAK;AACnBC,4BAAAA,OAAAA,EAASJ,OAAOK,OAAO;AACvBH,4BAAAA,IAAAA,EAAMF,OAAOM,MAAM;AACnBC,4BAAAA,OAAAA,EAASP,OAAOO,OAAO;AACvBC,4BAAAA,OAAAA,EAASR,OAAOQ;AAClB,yBAAA,CAAA;AACA,wBAAA;oBACF,KAAK,QAAA;oBACL,KAAK,OAAA;AACHV,wBAAAA,CAAAA,CAAEW,cAAc,EAAA;wBAChBjB,WAAYH,CAAAA,EAAAA,CAAAA;AAChB;AACF;AACF,SAAA;AAEA,IAAA,MAAMqB,WAAc,GAAA,IAAA;QAClBlB,WAAY,CAAA,IAAA,CAAA;AACd,KAAA;IAEA,qBACEf,eAAA,CAAAkC,mBAAA,EAAA;;0BACE5B,cAAC6B,CAAAA,mBAAAA,EAAAA;gBACCC,IAAK,EAAA,MAAA;AACLC,gBAAAA,SAAAA,EAAW5C,OAAO6C,IAAI;AACtBC,gBAAAA,QAAAA,EAAU9C,OAAO8C,QAAQ;AACzBjB,gBAAAA,OAAAA,EAASF,WAAY3B,CAAAA,MAAAA,CAAAA;gBACrB+C,cAAe,EAAA,QAAA;gBACfhC,OAASf,EAAAA,MAAAA,CAAOe,OAAO,IAAI,SAAA;gBAC3BiC,UAAW,EAAA,KAAA;gBACXC,aAAc,EAAA,KAAA;AACdC,gBAAAA,OAAAA,EAASlD,OAAOkD,OAAO;AAEtBlD,gBAAAA,QAAAA,EAAAA,MAAAA,CAAOkB;;AAETlB,YAAAA,MAAAA,CAAO8B,MAAM,EAAEE,IAAS,KAAA,QAAA,iBACvBnB,cAACsC,CAAAA,2BAAAA,EAAAA;AACE,gBAAA,GAAGnD,OAAO8B,MAAM;AACjBf,gBAAAA,OAAAA,EAASf,MAAO8B,CAAAA,MAAM,EAAEf,OAAAA,IAAWf,OAAOe,OAAO;gBACjDqC,MAAQ/B,EAAAA,QAAAA,KAAarB,OAAOmB,EAAE;gBAC9BmB,OAASE,EAAAA;AAET,aAAA,CAAA,GAAA,IAAA;AACHxC,YAAAA,MAAAA,CAAO8B,MAAM,EAAEE,IAAS,KAAA,OAAA,iBACvBnB,cAACwC,CAAAA,mBAAAA,EAAAA;AACE,gBAAA,GAAGrD,OAAO8B,MAAM;gBACjBwB,YAAcd,EAAAA,WAAAA;gBACdY,MAAQ/B,EAAAA,QAAAA,KAAarB,OAAOmB;AAE5B,aAAA,CAAA,GAAA;;;AAGV;AAYA,MAAMoC,QAAWC,GAAAA,uBAAAA,CAAOC,iBAAKC,CAAAA,IAAI,CAAsD;;AAEvE,gBAAA,EAAE,CAAC,EAAEC,KAAK,EAAEC,eAAe,EAAEC,UAAU,EAAE,GACnDD,eAAAA,IAAmB,CAACC,UAAaF,GAAAA,KAAAA,CAAMG,MAAM,CAACC,SAAS,GAAG,SAAU,CAAA;;AAE1E,CAAC;AAEK9C,MAAAA,mBAAAA,GAAsB,CAAC,EAC3BxB,OAAO,EACPuE,QAAQ,EACR9C,KAAK,EACLH,OAAU,GAAA,UAAU,EACK,GAAA;AACzB,IAAA,MAAM,CAACqC,MAAQa,EAAAA,SAAAA,CAAU,GAAG1C,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAC3C,IAAA,MAAM,CAACH,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,gBAAAA,CAAMC,QAAQ,CAAgB,IAAA,CAAA;IAC9D,MAAM,EAAE9B,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAE8B,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAMmC,UAAAA,GAAapE,OAAQyE,CAAAA,KAAK,CAAC,CAAClE,MAAWA,GAAAA,MAAAA,CAAO8C,QAAQ,CAAA,IAAKrD,OAAQuB,CAAAA,MAAM,KAAK,CAAA;IAEpF,MAAMW,WAAAA,GAAc,CAAC3B,MAAAA,GAAmB,OAAO4B,CAAAA,GAAAA;YAC7C,MAAM,EAAEC,UAAU,IAAM,KAAK,EAAEC,MAAM,EAAEX,EAAE,EAAE,GAAGnB,MAAAA;YAE9C,MAAM+B,UAAAA,GAAa,MAAMF,OAAQD,CAAAA,CAAAA,CAAAA;YAEjC,IAAIE,MAAAA,IAAU,CAACC,UAAY,EAAA;AACzB,gBAAA,OAAQD,OAAOE,IAAI;oBACjB,KAAK,cAAA;wBACHP,kBAAmB,CAAA;AACjBQ,4BAAAA,KAAAA,EAAOH,OAAOG,KAAK;AACnBC,4BAAAA,OAAAA,EAASJ,OAAOK,OAAO;AACvBH,4BAAAA,IAAAA,EAAMF,OAAOM,MAAM;AACnBC,4BAAAA,OAAAA,EAASP,OAAOO,OAAO;AACvBC,4BAAAA,OAAAA,EAASR,OAAOQ;AAClB,yBAAA,CAAA;AACA,wBAAA;oBACF,KAAK,QAAA;oBACL,KAAK,OAAA;wBACHhB,WAAYH,CAAAA,EAAAA,CAAAA;AAChB;AACF;AACF,SAAA;AAEA,IAAA,MAAMqB,WAAc,GAAA,IAAA;QAClBlB,WAAY,CAAA,IAAA,CAAA;QACZ2C,SAAU,CAAA,KAAA,CAAA;AACZ,KAAA;IAEA,qBACE1D,eAAA,CAACkD,kBAAKU,IAAI,EAAA;QAACC,IAAMhB,EAAAA,MAAAA;QAAQiB,YAAcJ,EAAAA,SAAAA;;AACrC,0BAAA1D,eAAA,CAACkD,kBAAKa,OAAO,EAAA;gBACXxB,QAAUe,EAAAA,UAAAA;gBACVU,IAAK,EAAA,GAAA;gBACLC,OAAS,EAAA,IAAA;gBACTxB,UAAW,EAAA,KAAA;gBACXyB,WAAY,EAAA,KAAA;gBACZC,YAAa,EAAA,KAAA;gBACb3D,OAASA,EAAAA,OAAAA;;kCAETF,cAAC8D,CAAAA,UAAAA,EAAAA;wBAAKC,aAAW,EAAA,IAAA;wBAACC,SAAW,EAAA;;kCAC7BhE,cAACiE,CAAAA,2BAAAA,EAAAA;wBAAeC,GAAI,EAAA,MAAA;AACjB7D,wBAAAA,QAAAA,EAAAA,KAAAA,IACCxB,aAAc,CAAA;4BACZyB,EAAI,EAAA,6DAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA;;;;AAGN,0BAAAb,eAAA,CAACkD,kBAAKuB,OAAO,EAAA;gBAACC,SAAW/E,EAAAA,SAAAA;gBAAWgF,gBAAiB,EAAA,YAAA;;oBAClDzF,OAAQ0F,CAAAA,GAAG,CAAC,CAACnF,MAAAA,GAAAA;AACZ,wBAAA,qBACEa,cAAC0C,CAAAA,QAAAA,EAAAA;AACCT,4BAAAA,QAAAA,EAAU9C,OAAO8C,QAAQ;8IAEzBsC,UAAUzD,WAAY3B,CAAAA,MAAAA,CAAAA;4BACtBqF,OAAQ,EAAA,OAAA;4BAERzB,eAAiB5D,EAAAA,MAAAA,CAAOe,OAAO,KAAK,QAAA;AACpC8C,4BAAAA,UAAAA,EAAY7D,OAAO8C,QAAQ;AAE3B,4BAAA,QAAA,gBAAAjC,cAACL,CAAAA,iBAAAA,EAAAA;gCAAKuC,cAAe,EAAA,eAAA;gCAAgBrC,GAAK,EAAA,CAAA;AACxC,gCAAA,QAAA,gBAAAH,eAACC,CAAAA,iBAAAA,EAAAA;AACC8E,oCAAAA,KAAAA,EAAO,CAACtF,MAAO8C,CAAAA,QAAQ,GAAGyC,2BAA4BvF,CAAAA,MAAAA,CAAOe,OAAO,CAAI,GAAA,SAAA;oCACxEL,GAAK,EAAA,CAAA;oCACLqE,GAAI,EAAA,MAAA;;sDAEJlE,cAACL,CAAAA,iBAAAA,EAAAA;4CACCuE,GAAI,EAAA,MAAA;AACJO,4CAAAA,KAAAA,EACE,CAACtF,MAAO8C,CAAAA,QAAQ,GAAG0C,+BAAgCxF,CAAAA,MAAAA,CAAOe,OAAO,CAAI,GAAA,SAAA;AAGtEf,4CAAAA,QAAAA,EAAAA,MAAAA,CAAO6C;;AAET7C,wCAAAA,MAAAA,CAAOkB;;;;AAlBPlB,yBAAAA,EAAAA,MAAAA,CAAOmB,EAAE,CAAA;AAuBpB,qBAAA,CAAA;AACC6C,oBAAAA;;;YAEFvE,OAAQ0F,CAAAA,GAAG,CAAC,CAACnF,MAAAA,GAAAA;gBACZ,qBACEO,eAAA,CAACgB,iBAAMkE,QAAQ,EAAA;;AACZzF,wBAAAA,MAAAA,CAAO8B,MAAM,EAAEE,IAAS,KAAA,QAAA,iBACvBnB,cAACsC,CAAAA,2BAAAA,EAAAA;AACE,4BAAA,GAAGnD,OAAO8B,MAAM;AACjBf,4BAAAA,OAAAA,EAASf,OAAOe,OAAO;4BACvBqC,MAAQ/B,EAAAA,QAAAA,KAAarB,OAAOmB,EAAE;4BAC9BmB,OAASE,EAAAA;AAET,yBAAA,CAAA,GAAA,IAAA;AACHxC,wBAAAA,MAAAA,CAAO8B,MAAM,EAAEE,IAAS,KAAA,OAAA,iBACvBnB,cAACwC,CAAAA,mBAAAA,EAAAA;AACE,4BAAA,GAAGrD,OAAO8B,MAAM;4BACjBwB,YAAcd,EAAAA,WAAAA;4BACdY,MAAQ/B,EAAAA,QAAAA,KAAarB,OAAOmB;AAE5B,yBAAA,CAAA,GAAA;;AAfenB,iBAAAA,EAAAA,MAAAA,CAAOmB,EAAE,CAAA;AAkBlC,aAAA;;;AAGN;AAEA,MAAMoE,2BAAAA,GAA8B,CAClCxE,OAAAA,GAAgD,WAAW,GAAA;IAE3D,OAAQA,OAAAA;QACN,KAAK,QAAA;YACH,OAAO,WAAA;QACT,KAAK,WAAA;YACH,OAAOb,SAAAA;QACT,KAAK,SAAA;YACH,OAAO,YAAA;AACT,QAAA;YACE,OAAO,YAAA;AACX;AACF,CAAA;AAEA,MAAMsF,+BAAAA,GAAkC,CACtCzE,OAAAA,GAAgD,WAAW,GAAA;IAE3D,OAAQA,OAAAA;QACN,KAAK,QAAA;YACH,OAAO,WAAA;QACT,KAAK,WAAA;YACH,OAAO,YAAA;QACT,KAAK,SAAA;YACH,OAAO,YAAA;AACT,QAAA;YACE,OAAO,YAAA;AACX;AACF,CAAA;AAYA,MAAMoC,8BAA8B,CAAC,EACnCb,OAAO,EACPoD,QAAQ,EACRC,SAAS,EACT1D,KAAK,EACLE,OAAO,EACPiB,MAAM,EACNrC,UAAU,WAAW,EACrBmC,OAAO,EAC0B,GAAA;IACjC,MAAM,EAAExD,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAM6C,WAAc,GAAA,UAAA;AAClB,QAAA,IAAIkD,QAAU,EAAA;YACZ,MAAMA,QAAAA,EAAAA;AACR;AAEApD,QAAAA,OAAAA,EAAAA;AACF,KAAA;AAEA,IAAA,MAAMsD,aAAgB,GAAA,UAAA;AACpB,QAAA,IAAID,SAAW,EAAA;YACb,MAAMA,SAAAA,EAAAA;AACR;AAEArD,QAAAA,OAAAA,EAAAA;AACF,KAAA;IAEA,qBACEzB,cAAA,CAACgF,oBAAO1B,IAAI,EAAA;QAACC,IAAMhB,EAAAA,MAAAA;QAAQiB,YAAc7B,EAAAA,WAAAA;gCACvCjC,eAAA,CAACsF,oBAAOb,OAAO,EAAA;;AACb,8BAAAnE,cAAA,CAACgF,oBAAOC,MAAM,EAAA;AAAE7D,oBAAAA,QAAAA,EAAAA;;AAChB,8BAAApB,cAAA,CAACgF,oBAAOE,IAAI,EAAA;AAAE5D,oBAAAA,QAAAA,EAAAA;;AACd,8BAAA5B,eAAA,CAACsF,oBAAOG,MAAM,EAAA;;AACZ,sCAAAnF,cAAA,CAACgF,oBAAOI,MAAM,EAAA;AACZ,4BAAA,QAAA,gBAAApF,cAAC6B,CAAAA,mBAAAA,EAAAA;gCAAO3B,OAAQ,EAAA,UAAA;gCAAWmF,SAAS,EAAA,IAAA;0CACjCxG,aAAc,CAAA;oCACbyB,EAAI,EAAA,8BAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;;;sCAGJP,cAAC6B,CAAAA,mBAAAA,EAAAA;4BAAOb,OAAS+D,EAAAA,aAAAA;4BAAe7E,OAASA,EAAAA,OAAAA;4BAASmF,SAAS,EAAA,IAAA;4BAAChD,OAASA,EAAAA,OAAAA;sCAClExD,aAAc,CAAA;gCACbyB,EAAI,EAAA,+BAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;;;;;;;AAMZ,CAAA;AAWA,MAAMiC,sBAAsB,CAAC,EAC3BD,MAAM,EACNnB,KAAK,EACLK,OAAO,EACP6D,MAAAA,EAAQH,MAAM,EACd7D,OAAAA,EAAS6C,OAAO,EAChB1B,YAAY,EACa,GAAA;AACzB,IAAA,MAAMd,WAAc,GAAA,IAAA;AAClB,QAAA,IAAIF,OAAS,EAAA;AACXA,YAAAA,OAAAA,EAAAA;AACF;AAEAgB,QAAAA,YAAAA,EAAAA;AACF,KAAA;IAEA,qBACEzC,cAAA,CAACuF,mBAAMjC,IAAI,EAAA;QAACC,IAAMhB,EAAAA,MAAAA;QAAQiB,YAAc7B,EAAAA,WAAAA;gCACtCjC,eAAA,CAAC6F,mBAAMpB,OAAO,EAAA;;AACZ,8BAAAnE,cAAA,CAACuF,mBAAMN,MAAM,EAAA;4CACXjF,cAAA,CAACuF,mBAAMC,KAAK,EAAA;AAAEpE,wBAAAA,QAAAA,EAAAA;;;gBAEf,OAAO+C,OAAAA,KAAY,2BAClBnE,cAACmE,CAAAA,OAAAA,EAAAA;oBAAQ1C,OAASE,EAAAA;AAElB,iBAAA,CAAA,iBAAA3B,cAAA,CAACuF,mBAAML,IAAI,EAAA;AAAEf,oBAAAA,QAAAA,EAAAA;;gBAEd,OAAOgB,MAAAA,KAAW,2BAAanF,cAACmF,CAAAA,MAAAA,EAAAA;oBAAO1D,OAASE,EAAAA;AAAkBwD,iBAAAA,CAAAA,GAAAA;;;;AAI3E,CAAA;AAEA,MAAMM,gBAAgB,CAACC,IAAAA,GAAAA;IACrB,IAAInG,KAAAA,CAAMC,OAAO,CAACkG,IAAO,CAAA,EAAA;QACvB,OAAOA,IAAAA,CAAKpB,GAAG,CAACmB,aAAAA,CAAAA;AAClB;AAEA,IAAA,IAAI,OAAOC,IAAAA,KAAS,QAAYA,IAAAA,IAAAA,KAAS,IAAM,EAAA;AAC7C,QAAA,IAAI,aAAaA,IAAM,EAAA;AACrB,YAAA,OAAOA,KAAKC,OAAO;AACrB;AAEA,QAAA,OAAOC,UAAUH,aAAeC,CAAAA,CAAAA,IAAAA,CAAAA;AAClC;IAEA,OAAOA,IAAAA;AACT,CAAA;AAEA;;AAEkG,qGAElG,MAAMG,aAAAA,GAAyC,CAAC,EAC9CC,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,cAAc,EACdC,IAAI,EACJC,QAAQ,EACT,GAAA;AACC,IAAA,MAAM,EACJC,eAAiB,EAAA,EAAEC,MAAM,EAAE,EAC5B,GAAGC,qCAAmB,CAAA,eAAA,CAAA;AAEvB,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;IACjB,MAAM,EAAE5F,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAE4F,+BAAAA,EAAiCC,sBAAsB,EAAE,GAAGC,8BAAAA,EAAAA;IACpE,MAAMC,UAAAA,GAAaC,wBAASC,gBAAe,CAAA,KAAA,IAAA;IAC3C,MAAMC,SAAAA,GAAYF,wBAASG,iBAAgB,CAAA,KAAA,IAAA;IAC3C,MAAM,EAAE1G,EAAE,EAAE,GAAG2G,wBAAAA,EAAAA;IACf,MAAM,EAAEpI,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMoI,aAAaC,4BAAgB,CAAA,eAAA,EAAiB,CAAC,EAAED,UAAU,EAAE,GAAKA,UAAAA,CAAAA;AACxE,IAAA,MAAM,EAAEE,OAAO,EAAEC,SAAS,EAAE,GAAGC,qCAAAA,EAAAA;AAC/B,IAAA,MAAMC,YAAYC,yBAAkB,CAAA,cAAA,EAAgB,CAACC,KAAUA,GAAAA,KAAAA,CAAMF,SAAS,EAAE,KAAA,CAAA;IAChF,MAAM,CACJG,mBACA,EAAA,EAAEL,SAAWM,EAAAA,uBAAuB,EAAEC,OAASC,EAAAA,qBAAqB,EAAE,CACvE,GAAGC,uCAAAA,EAAAA;AACJ,IAAA,MAAM,CAACC,0BAA4BC,EAAAA,6BAAAA,CAA8B,GAAGtH,gBAAAA,CAAMC,QAAQ,CAAC,CAAA,CAAA;AACnF,IAAA,MAAM,CAACsH,2BAA6BC,EAAAA,8BAAAA,CAA+B,GAAGxH,gBAAAA,CAAMC,QAAQ,CAAC,CAAA,CAAA;AAErF,IAAA,MAAM,CAAC,EAAEwH,QAAQ,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AAEvB,IAAA,MAAMC,WAAWC,mBAAQ,CAAA,eAAA,EAAiB,CAAC,EAAED,QAAQ,EAAE,GAAKA,QAAAA,CAAAA;AAC5D,IAAA,MAAME,gBAAgBD,mBAAQ,CAAA,eAAA,EAAiB,CAAC,EAAEC,aAAa,EAAE,GAAKA,aAAAA,CAAAA;AACtE,IAAA,MAAMC,eAAeF,mBAAQ,CAAA,eAAA,EAAiB,CAAC,EAAEE,YAAY,EAAE,GAAKA,YAAAA,CAAAA;AACpE,IAAA,MAAMC,WAAWH,mBAAQ,CAAA,eAAA,EAAiB,CAACb,KAAAA,GAAUA,MAAMgB,QAAQ,CAAA;AACnE,IAAA,MAAMC,YAAYJ,mBAAQ,CAAA,eAAA,EAAiB,CAACb,KAAAA,GAAUA,MAAMiB,SAAS,CAAA;AACrE,IAAA,MAAMC,aAAaL,mBAAQ,CAAA,eAAA,EAAiB,CAAC,EAAEM,MAAM,EAAE,GAAKA,MAAAA,CAAAA;AAC5D,IAAA,MAAMC,YAAYP,mBAAQ,CAAA,eAAA,EAAiB,CAAC,EAAEO,SAAS,EAAE,GAAKA,SAAAA,CAAAA;AAE9D,IAAA,MAAM,EAAEC,mBAAmB,EAAE,GAAGxC,qCAAmB,CAAA,eAAA,CAAA;IAEnD,MAAMyC,WAAAA,GAAcD,mBAAoB/C,CAAAA,UAAU,IAAIzF,EAAAA;AAEtDI,IAAAA,gBAAAA,CAAMsI,SAAS,CAAC,IAAA;AACd,QAAA,IAAInB,qBAAuB,EAAA;YACzBjH,kBAAmB,CAAA;gBACjBO,IAAM,EAAA,QAAA;AACNE,gBAAAA,OAAAA,EAASxC,aAAc,CAAA;AACrByB,oBAAAA,EAAAA,EAAI2I,2BAAe,CAAA,oCAAA,CAAA;oBACnB1I,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACF;KACC,EAAA;AAACsH,QAAAA,qBAAAA;AAAuBjH,QAAAA,kBAAAA;AAAoB/B,QAAAA;AAAc,KAAA,CAAA;AAE7D6B,IAAAA,gBAAAA,CAAMsI,SAAS,CAAC,IAAA;AACd,QAAA,MAAME,sBAAsB,IAAIC,GAAAA,EAAAA;AAEhC;;;;QAKA,MAAMC,wBAAwB,CAAC1D,IAAAA,GAAAA;AAC7B,YAAA,MAAM2D,SAAY3D,GAAAA,IAAAA,CAAK4D,OAAO,IAAI,EAAE;YACpCD,SAAUE,CAAAA,OAAO,CAAC,CAACC,QAAAA,GAAAA;gBACjB,IAAIA,QAAAA,CAASjI,MAAM,KAAK,OAAS,EAAA;oBAC/B2H,mBAAoBO,CAAAA,GAAG,CAACD,QAAAA,CAASlJ,EAAE,CAAA;AACrC;AACF,aAAA,CAAA;AACF,SAAA;AAEA;;;;QAKA,MAAMoJ,qBAAqB,CAAChE,IAAAA,GAAAA;YAC1BiE,MAAOC,CAAAA,OAAO,CAAClE,IAAM6D,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACM,KAAKC,KAAM,CAAA,GAAA;AACxC,gBAAA,IAAID,GAAQ,KAAA,SAAA,IAAatK,KAAMC,CAAAA,OAAO,CAACsK,KAAQ,CAAA,EAAA;oBAC7CV,qBAAsB,CAAA;wBAAEE,OAASQ,EAAAA;AAAM,qBAAA,CAAA;AACzC,iBAAA,MAAO,IAAI,OAAOA,KAAU,KAAA,QAAA,IAAYA,UAAU,IAAM,EAAA;oBACtDJ,kBAAmBI,CAAAA,KAAAA,CAAAA;AACrB;AACF,aAAA,CAAA;AACF,SAAA;QAEA,IAAI,CAAC/D,cAAcsC,QAAU,EAAA;YAC3BqB,kBAAmBf,CAAAA,UAAAA,CAAAA;AACnBX,YAAAA,6BAAAA,CAA8BkB,oBAAoBxF,IAAI,CAAA;AACxD;KACC,EAAA;AAACqC,QAAAA,UAAAA;AAAYsC,QAAAA,QAAAA;AAAUM,QAAAA,UAAAA;AAAYX,QAAAA;AAA8B,KAAA,CAAA;AAEpEtH,IAAAA,gBAAAA,CAAMsI,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAAC7C,QAAY,IAAA,CAACA,QAASJ,CAAAA,UAAU,IAAIa,UAAY,EAAA;AACnD,YAAA;AACF;AAEA,QAAA,MAAMmD,wBAA2B,GAAA,UAAA;AAC/B,YAAA,MAAM,EAAErE,IAAI,EAAEsE,KAAK,EAAE,GAAG,MAAMtC,mBAAoB,CAAA;AAChDzB,gBAAAA,cAAAA;AACAD,gBAAAA,KAAAA;AACAD,gBAAAA,UAAAA;AACAkE,gBAAAA,MAAAA,EAAQnB,oBAAoBmB;AAC9B,aAAA,CAAA;AAEA,YAAA,IAAID,KAAO,EAAA;gBACT,MAAMA,KAAAA;AACR;AAEA,YAAA,IAAItE,IAAM,EAAA;AACRwC,gBAAAA,8BAAAA,CAA+BxC,KAAKA,IAAI,CAAA;AAC1C;AACF,SAAA;AAEAqE,QAAAA,wBAAAA,EAAAA;KACC,EAAA;AACDnD,QAAAA,UAAAA;AACAT,QAAAA,QAAAA;AACAJ,QAAAA,UAAAA;AACA2B,QAAAA,mBAAAA;AACAzB,QAAAA,cAAAA;AACAD,QAAAA,KAAAA;AACA8C,QAAAA,mBAAAA,CAAoBmB;AACrB,KAAA,CAAA;AAED,IAAA,MAAMC,sBACJ,CAAC/D,WAAWgE,sCAAAA,CAA4B,IACtCjE,IAAMkE,EAAAA,eAAAA,CAAgBC,KAAK,CAACC,GAAAA,GAAQA,GAAG,CAACH,sCAAAA,CAA4B,KAAK,IAAI,CAAA,KAC/EhE,UAAU5E,MAAW,KAAA,UAAA;IAEvB,IAAI,CAAC8E,MAAQkE,EAAAA,OAAAA,EAASC,eAAiB,EAAA;QACrC,OAAO,IAAA;AACT;AAEA,IAAA,MAAMC,cAAiB,GAAA,UAAA;QACrBlC,aAAc,CAAA,IAAA,CAAA;QAEd,IAAI;AACF,YAAA,MAAM,EAAEmC,MAAM,EAAE,GAAG,MAAMjC,SAAS,IAAM,EAAA;gBACtClH,MAAQ,EAAA;AACV,aAAA,CAAA;AACA,YAAA,IAAImJ,MAAQ,EAAA;gBACV9J,kBAAmB,CAAA;oBACjBO,IAAM,EAAA,QAAA;AACNE,oBAAAA,OAAAA,EAASxC,aAAc,CAAA;wBACrByB,EAAI,EAAA,kCAAA;wBACJC,cACE,EAAA;AACJ,qBAAA;AACF,iBAAA,CAAA;AACA,gBAAA;AACF;YACA,MAAMoK,GAAAA,GAAM,MAAMvD,OAChB,CAAA;AACEnB,gBAAAA,cAAAA;AACAD,gBAAAA,KAAAA;AACAD,gBAAAA,UAAAA;AACAkE,gBAAAA,MAAAA,EAAQnB,oBAAoBmB;AAC9B,aAAA,EACAxE,aAAckD,CAAAA,UAAAA,CAAAA,CAAAA;;AAIhB,YAAA,IAAI,UAAUgC,GAAK,EAAA;AACjB9B,gBAAAA,SAAAA,EAAAA;AACF;YAEA,IAAI,MAAA,IAAU8B,GAAO1E,IAAAA,cAAAA,KAAmB2E,wBAAc,EAAA;AACpD;;YAGA,IAAI7B,gBAAgB,QAAU,EAAA;oBAC5BxC,QAAS,CAAA;AACPsE,wBAAAA,QAAAA,EAAU,CAAC,GAAG,EAAE5E,cAAAA,CAAe,CAAC,EAAED,KAAAA,CAAM,CAAC,EAAE2E,GAAIjF,CAAAA,IAAI,CAACK,UAAU,CAAC,CAAC;wBAChE+E,MAAQ3C,EAAAA;AACV,qBAAA,CAAA;AACF;AACF,aAAA,MAAO,IACL,OAAA,IAAWwC,GACXI,IAAAA,oBAAAA,CAAiBJ,GAAIX,CAAAA,KAAK,CAC1BW,IAAAA,GAAAA,CAAIX,KAAK,CAACgB,IAAI,KAAK,iBACnB,EAAA;gBACAtC,SAAUhC,CAAAA,sBAAAA,CAAuBiE,IAAIX,KAAK,CAAA,CAAA;AAC5C;SACQ,QAAA;YACRzB,aAAc,CAAA,KAAA,CAAA;AACd,YAAA,IAAIhB,SAAW,EAAA;AACbA,gBAAAA,SAAAA,EAAAA;AACF;AACF;AACF,KAAA;AAEA,IAAA,MAAM0D,sBAAsBlD,0BAA6BE,GAAAA,2BAAAA;;;AAGzD,IAAA,MAAMiD,yBAA4B,GAAA,KAAA;IAClC,MAAMC,iBAAAA,GAAoBD,yBAAmD;IAE7E,OAAO;QACL7I,OAASgF,EAAAA,SAAAA;QACTjI,QAAU,EAAA;AAAC,YAAA,OAAA;AAAS,YAAA,SAAA;AAAW,YAAA;AAAiB,SAAA;AAChD;;;;;;;;AAQC,QACD6C,QACE8E,EAAAA,SAAAA,IACAyB,YACAb,IAAAA,uBAAAA,IACA7B,cAAc,WACb,IAAA,CAACuC,QAAY6B,IAAAA,mBAAAA,IACb,CAAC7B,QAAAA,IAAY,CAAClC,QAAAA,EAAUJ,cACzB,CAACmB,UAAAA;AACH7G,QAAAA,KAAAA,EAAOxB,aAAc,CAAA;YACnByB,EAAI,EAAA,mBAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAS,OAAS,EAAA,UAAA;YAOP,MAAMyJ,cAAAA,EAAAA;AACR,SAAA;AACAxJ,QAAAA,MAAAA,EAAQkK,iBACJ,GAAA;YACEhK,IAAM,EAAA,QAAA;YACNjB,OAAS,EAAA,QAAA;YACToF,MAAQ,EAAA,IAAA;AACRlE,YAAAA,KAAAA,EAAOvC,aAAc,CAAA;gBACnByB,EAAI2I,EAAAA,2BAAAA,CAAe,CAAC,mDAAmD,CAAC,CAAA;gBACxE1I,cAAgB,EAAA;AAClB,aAAA,CAAA;AACAe,YAAAA,OAAAA,EAASzC,aACP,CAAA;gBACEyB,EAAI2I,EAAAA,2BAAAA,CAAe,CAAC,qDAAqD,CAAC,CAAA;gBAC1E1I,cACE,EAAA;aAEJ,EAAA;gBACE6K,KAAOH,EAAAA;AACT,aAAA,CAAA;YAEFnG,SAAW,EAAA,UAAA;gBACT,MAAM2F,cAAAA,EAAAA;AACR;SAEFpL,GAAAA;AACN,KAAA;AACF,CAAA;AAEAwG,aAAAA,CAAc1E,IAAI,GAAG,SAAA;AACrB0E,aAAAA,CAAczG,QAAQ,GAAG;AAAC,IAAA,OAAA;AAAS,IAAA,SAAA;AAAW,IAAA;AAAiB,CAAA;AAE/D,MAAMiM,YAAAA,GAAwC,CAAC,EAC7CvF,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,cAAc,EACf,GAAA;AACC,IAAA,MAAMM,QAAWC,GAAAA,0BAAAA,EAAAA;IACjB,MAAM,EAAE5F,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAE4F,+BAAAA,EAAiCC,sBAAsB,EAAE,GAAGC,8BAAAA,EAAAA;AACpE,IAAA,MAAM2E,aAAazE,uBAASG,CAAAA,iBAAAA,CAAAA;AAC5B,IAAA,MAAMD,YAAYuE,UAAe,KAAA,IAAA;IACjC,MAAM,EAAEzM,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEyM,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEpE,SAAS,EAAE,GAAGC,qCAAAA,EAAAA;AAC7C,IAAA,MAAM,CAAC,EAAEa,QAAQ,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AACvB,IAAA,MAAMb,YAAYC,yBAAkB,CAAA,cAAA,EAAgB,CAACC,KAAUA,GAAAA,KAAAA,CAAMF,SAAS,EAAE,KAAA,CAAA;AAEhF,IAAA,MAAMiB,eAAeF,mBAAQ,CAAA,cAAA,EAAgB,CAAC,EAAEE,YAAY,EAAE,GAAKA,YAAAA,CAAAA;AACnE,IAAA,MAAMH,WAAWC,mBAAQ,CAAA,cAAA,EAAgB,CAAC,EAAED,QAAQ,EAAE,GAAKA,QAAAA,CAAAA;AAC3D,IAAA,MAAME,gBAAgBD,mBAAQ,CAAA,cAAA,EAAgB,CAAC,EAAEC,aAAa,EAAE,GAAKA,aAAAA,CAAAA;AACrE,IAAA,MAAMpC,WAAWmC,mBAAQ,CAAA,cAAA,EAAgB,CAAC,EAAEM,MAAM,EAAE,GAAKA,MAAAA,CAAAA;AACzD,IAAA,MAAMH,WAAWH,mBAAQ,CAAA,cAAA,EAAgB,CAACb,KAAAA,GAAUA,MAAMgB,QAAQ,CAAA;AAClE,IAAA,MAAMC,YAAYJ,mBAAQ,CAAA,cAAA,EAAgB,CAACb,KAAAA,GAAUA,MAAMiB,SAAS,CAAA;AACpE,IAAA,MAAMG,YAAYP,mBAAQ,CAAA,eAAA,EAAiB,CAAC,EAAEO,SAAS,EAAE,GAAKA,SAAAA,CAAAA;AAE9D,IAAA,MAAM,EAAEC,mBAAmB,EAAE,GAAGxC,qCAAmB,CAAA,cAAA,CAAA;IAEnD,MAAMoF,YAAAA,GAAehL,gBAAMiL,CAAAA,WAAW,CAAC,UAAA;QACrCpD,aAAc,CAAA,IAAA,CAAA;QAEd,IAAI;AACF,YAAA,IAAI,CAACF,QAAU,EAAA;AACb,gBAAA;AACF;AAEA,YAAA,MAAM,EAAEqC,MAAM,EAAE,GAAG,MAAMjC,SAAS,IAAM,EAAA;gBACtClH,MAAQ,EAAA;AACV,aAAA,CAAA;AAEA,YAAA,IAAImJ,MAAQ,EAAA;gBACV9J,kBAAmB,CAAA;oBACjBO,IAAM,EAAA,QAAA;AACNE,oBAAAA,OAAAA,EAASxC,aAAc,CAAA;wBACrByB,EAAI,EAAA,kCAAA;wBACJC,cACE,EAAA;AACJ,qBAAA;AACF,iBAAA,CAAA;AAEA,gBAAA;AACF;AAEA,YAAA,IAAIwG,SAAW,EAAA;gBACb,MAAM4D,GAAAA,GAAM,MAAMc,KAChB,CAAA;AACEzF,oBAAAA,KAAAA;oBACAD,UAAYuF,EAAAA,UAAAA,CAAWrB,MAAM,CAAC2B,MAAM;AACpC3B,oBAAAA,MAAAA,EAAQnB,oBAAoBmB;AAC9B,iBAAA,EACAxE,aAAcU,CAAAA,QAAAA,CAAAA,CAAAA;AAGhB,gBAAA,IAAI,UAAUwE,GAAK,EAAA;oBACjBpE,QACE,CAAA;wBACEsE,QAAU,EAAA,CAAC,GAAG,EAAEF,GAAAA,CAAIjF,IAAI,CAACK,UAAU,CAAC,CAAC;wBACrC+E,MAAQ3C,EAAAA;qBAEV,EAAA;wBAAE0D,QAAU,EAAA;AAAO,qBAAA,CAAA;AAEvB,iBAAA,MAAO,IACL,OAAA,IAAWlB,GACXI,IAAAA,oBAAAA,CAAiBJ,GAAIX,CAAAA,KAAK,CAC1BW,IAAAA,GAAAA,CAAIX,KAAK,CAACgB,IAAI,KAAK,iBACnB,EAAA;oBACAtC,SAAUhC,CAAAA,sBAAAA,CAAuBiE,IAAIX,KAAK,CAAA,CAAA;AAC5C;aACK,MAAA,IAAIjE,UAAcE,IAAAA,cAAAA,KAAmB2E,wBAAc,EAAA;gBACxD,MAAMD,GAAAA,GAAM,MAAMa,MAChB,CAAA;AACEvF,oBAAAA,cAAAA;AACAD,oBAAAA,KAAAA;AACAD,oBAAAA,UAAAA;AACAkE,oBAAAA,MAAAA,EAAQnB,oBAAoBmB;AAC9B,iBAAA,EACAxE,aAAcU,CAAAA,QAAAA,CAAAA,CAAAA;gBAGhB,IAAI,OAAA,IAAWwE,GAAOI,IAAAA,oBAAAA,CAAiBJ,GAAIX,CAAAA,KAAK,CAAKW,IAAAA,GAAAA,CAAIX,KAAK,CAACgB,IAAI,KAAK,iBAAmB,EAAA;oBACzFtC,SAAUhC,CAAAA,sBAAAA,CAAuBiE,IAAIX,KAAK,CAAA,CAAA;iBACrC,MAAA;AACLnB,oBAAAA,SAAAA,EAAAA;AACF;aACK,MAAA;gBACL,MAAM8B,GAAAA,GAAM,MAAMY,MAChB,CAAA;AACEvF,oBAAAA,KAAAA;AACAiE,oBAAAA,MAAAA,EAAQnB,oBAAoBmB;AAC9B,iBAAA,EACAxE,aAAcU,CAAAA,QAAAA,CAAAA,CAAAA;gBAGhB,IAAI,MAAA,IAAUwE,GAAO1E,IAAAA,cAAAA,KAAmB2E,wBAAc,EAAA;oBACpDrE,QACE,CAAA;wBACEsE,QAAU,EAAA,CAAC,GAAG,EAAEF,GAAAA,CAAIjF,IAAI,CAACK,UAAU,CAAC,CAAC;wBACrC+E,MAAQ3C,EAAAA;qBAEV,EAAA;wBAAE2D,OAAS,EAAA,IAAA;wBAAMD,QAAU,EAAA;AAAO,qBAAA,CAAA;AAEtC,iBAAA,MAAO,IACL,OAAA,IAAWlB,GACXI,IAAAA,oBAAAA,CAAiBJ,GAAIX,CAAAA,KAAK,CAC1BW,IAAAA,GAAAA,CAAIX,KAAK,CAACgB,IAAI,KAAK,iBACnB,EAAA;oBACAtC,SAAUhC,CAAAA,sBAAAA,CAAuBiE,IAAIX,KAAK,CAAA,CAAA;AAC5C;AACF;SACQ,QAAA;YACRzB,aAAc,CAAA,KAAA,CAAA;AACd,YAAA,IAAIhB,SAAW,EAAA;AACbA,gBAAAA,SAAAA,EAAAA;AACF;AACF;KACC,EAAA;AACDkE,QAAAA,KAAAA;AACAH,QAAAA,UAAAA,EAAYrB,MAAO2B,CAAAA,MAAAA;AACnB3F,QAAAA,cAAAA;AACAsF,QAAAA,MAAAA;AACAzC,QAAAA,mBAAAA,CAAoBmB,MAAM;AAC1B9D,QAAAA,QAAAA;AACAJ,QAAAA,UAAAA;AACAlH,QAAAA,aAAAA;AACA6H,QAAAA,sBAAAA;AACAK,QAAAA,SAAAA;AACAf,QAAAA,KAAAA;AACAqC,QAAAA,QAAAA;AACA9B,QAAAA,QAAAA;AACA4B,QAAAA,QAAAA;AACAU,QAAAA,SAAAA;AACAH,QAAAA,SAAAA;AACAH,QAAAA,aAAAA;AACA3H,QAAAA,kBAAAA;AACA4K,QAAAA,MAAAA;AACA/C,QAAAA,QAAAA;AACAlB,QAAAA;AACD,KAAA,CAAA;;AAGD7G,IAAAA,gBAAAA,CAAMsI,SAAS,CAAC,IAAA;AACd,QAAA,MAAM+C,gBAAgB,CAAChL,CAAAA,GAAAA;YACrB,IAAIA,CAAAA,CAAE8I,GAAG,KAAK,OAAY9I,KAAAA,CAAEiL,CAAAA,OAAO,IAAIjL,CAAAA,CAAEkL,OAAM,CAAI,EAAA;AACjDlL,gBAAAA,CAAAA,CAAEW,cAAc,EAAA;AAChBgK,gBAAAA,YAAAA,EAAAA;AACF;AACF,SAAA;QAEAQ,MAAOC,CAAAA,gBAAgB,CAAC,SAAWJ,EAAAA,aAAAA,CAAAA;QAEnC,OAAO,IAAA;YACLG,MAAOE,CAAAA,mBAAmB,CAAC,SAAWL,EAAAA,aAAAA,CAAAA;AACxC,SAAA;KACC,EAAA;AAACL,QAAAA;AAAa,KAAA,CAAA;IAEjB,OAAO;QACLrJ,OAASgF,EAAAA,SAAAA;AACT;;;;;AAKC,QACDpF,UAAUuG,YAAiB,IAAA,CAACH,QAAY,IAAA,CAACtB,aAAcjB,SAAc,KAAA,WAAA;AACrEzF,QAAAA,KAAAA,EAAOxB,aAAc,CAAA;YACnByB,EAAI,EAAA,aAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAS,OAAS0K,EAAAA,YAAAA;QACTtM,QAAU,EAAA;AAAC,YAAA,OAAA;AAAS,YAAA,SAAA;AAAW,YAAA;AAAiB;AAClD,KAAA;AACF,CAAA;AAEAiM,YAAAA,CAAalK,IAAI,GAAG,QAAA;AACpBkK,YAAAA,CAAajM,QAAQ,GAAG;AAAC,IAAA,OAAA;AAAS,IAAA,SAAA;AAAW,IAAA;AAAiB,CAAA;AAE9D,MAAMiN,uBAA0B,GAAA;IAC9BC,IAAM,EAAA,MAAA;IACNC,OAAS,EAAA;AACX,CAAA;AAEA,MAAMC,eAA2C,GAAA,CAAC,EAChD1G,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,cAAc,EACdE,QAAQ,EACT,GAAA;IACC,MAAM,EAAEtH,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEuH,MAAM,EAAE,GAAGoG,kBAAAA,EAAAA;AACnB,IAAA,MAAMvF,aAAaC,4BAAgB,CAAA,iBAAA,EAAmB,CAAC,EAAED,UAAU,EAAE,GAAKA,UAAAA,CAAAA;IAC1E,MAAM,EAAEwF,SAAS,EAAE,GAAGpF,qCAAAA,EAAAA;AACtB,IAAA,MAAM,CAAC,EAAEqF,KAAK,EAAE,CAAC,GAAGvE,0BAAAA,EAAAA;AACpB,IAAA,MAAM6B,SAASvJ,gBAAMkM,CAAAA,OAAO,CAAC,IAAMC,qBAAiBF,KAAQ,CAAA,EAAA;AAACA,QAAAA;AAAM,KAAA,CAAA;IACnE,MAAM,EAAE/L,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,CAACiM,eAAiBC,EAAAA,kBAAAA,CAAmB,GAAGrM,gBAAAA,CAAMC,QAAQ,CAAC,IAAA,CAAA;IAE7D,MAAMqM,kBAAAA,GAAqB7G,UAAU5E,MAAW,KAAA,UAAA;AAEhD,IAAA,MAAM0L,eAAe,CAACnD,KAAAA,GAAAA;QACpBiD,kBAAmBjD,CAAAA,KAAAA,KAAUuC,wBAAwBC,IAAI,CAAA;AAC3D,KAAA;IAEA,IAAI,CAACjG,MAAQkE,EAAAA,OAAAA,EAASC,eAAiB,EAAA;QACrC,OAAO,IAAA;AACT;IAEA,OAAO;QACLvI,QACE,EAAA,CAACiF,cACDpB,SAAc,KAAA,WAAA,IACbK,UAAU5E,MAAW,KAAA,WAAA,IAAe4E,UAAU5E,MAAW,KAAA,UAAA;AAC5DlB,QAAAA,KAAAA,EAAOxB,aAAc,CAAA;YACnByB,EAAI,EAAA,qBAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;AACAyB,QAAAA,IAAAA,gBAAMhC,cAACkN,CAAAA,WAAAA,EAAAA,EAAAA,CAAAA;QACPlM,OAAS,EAAA,UAAA;AACP;;;;AAIC,UACD,IAAI,CAAE+E,UAAcE,IAAAA,cAAAA,KAAmB2E,4BAAiBoC,kBAAoB,EAAA;AAC1E,gBAAA,IAAI,CAACjH,UAAY,EAAA;;AAEfoH,oBAAAA,OAAAA,CAAQnD,KAAK,CACX,8GAAA,CAAA;oBAGFpJ,kBAAmB,CAAA;AACjBS,wBAAAA,OAAAA,EAASxC,aAAc,CAAA;4BACrByB,EAAI,EAAA,yCAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA,CAAA;wBACAY,IAAM,EAAA;AACR,qBAAA,CAAA;AACF;AAEA,gBAAA;AACF;AAEA,YAAA,MAAMuL,SAAU,CAAA;AACdzG,gBAAAA,cAAAA;AACAD,gBAAAA,KAAAA;AACAD,gBAAAA,UAAAA;AACAkE,gBAAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAhJ,QAAAA,MAAAA,EAAQ+L,kBACJ,GAAA;YACE7L,IAAM,EAAA,QAAA;AACNC,YAAAA,KAAAA,EAAOvC,aAAc,CAAA;gBACnByB,EAAI,EAAA,oCAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACAe,YAAAA,OAAAA,gBACE5B,eAACC,CAAAA,iBAAAA,EAAAA;gBAAKG,UAAW,EAAA,YAAA;gBAAaF,SAAU,EAAA,QAAA;gBAASC,GAAK,EAAA,CAAA;;kCACpDH,eAACC,CAAAA,iBAAAA,EAAAA;wBAAKI,KAAM,EAAA,MAAA;wBAAOH,SAAU,EAAA,QAAA;wBAASC,GAAK,EAAA,CAAA;;0CACzCG,cAACoN,CAAAA,mBAAAA,EAAAA;gCAAcrN,KAAM,EAAA,MAAA;gCAAOsN,MAAO,EAAA,MAAA;gCAAOC,IAAK,EAAA;;0CAC/CtN,cAACuN,CAAAA,uBAAAA,EAAAA;gCAAWrJ,GAAI,EAAA,GAAA;gCAAIhE,OAAQ,EAAA,OAAA;gCAAQsN,SAAU,EAAA,QAAA;0CAC3C3O,aAAc,CAAA;oCACbyB,EAAI,EAAA,+CAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;;;;AAGJ,kCAAAb,eAAA,CAAC+N,mBAAMC,KAAK,EAAA;AACVC,wBAAAA,YAAAA,EAActB,wBAAwBC,IAAI;wBAC1CtB,IAAK,EAAA,iBAAA;AACL4C,wBAAAA,YAAAA,EAAY/O,aAAc,CAAA;4BACxByB,EAAI,EAAA,sDAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA,CAAA;wBACAsN,aAAeZ,EAAAA,YAAAA;;AAEf,0CAAAjN,cAAA,CAACyN,mBAAM5K,IAAI,EAAA;gCAACiL,OAAShB,EAAAA,eAAAA;AAAiBhD,gCAAAA,KAAAA,EAAOuC,wBAAwBC,IAAI;0CACtEzN,aAAc,CAAA;oCACbyB,EAAI,EAAA,4DAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;;AAEF,0CAAAP,cAAA,CAACyN,mBAAM5K,IAAI,EAAA;AAACiL,gCAAAA,OAAAA,EAAS,CAAChB,eAAAA;AAAiBhD,gCAAAA,KAAAA,EAAOuC,wBAAwBE,OAAO;0CAC1E1N,aAAc,CAAA;oCACbyB,EAAI,EAAA,+DAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;;;;;;YAKRuE,SAAW,EAAA,UAAA;gBACT,IAAI,CAACiB,UAAcE,IAAAA,cAAAA,KAAmB2E,wBAAc,EAAA;;AAElDuC,oBAAAA,OAAAA,CAAQnD,KAAK,CACX,8GAAA,CAAA;oBAGFpJ,kBAAmB,CAAA;AACjBS,wBAAAA,OAAAA,EAASxC,aAAc,CAAA;4BACrByB,EAAI,EAAA,yCAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA,CAAA;wBACAY,IAAM,EAAA;AACR,qBAAA,CAAA;AACF;AAEA,gBAAA,MAAMuL,SACJ,CAAA;AACEzG,oBAAAA,cAAAA;AACAD,oBAAAA,KAAAA;AACAD,oBAAAA,UAAAA;AACAkE,oBAAAA;AACF,iBAAA,EACA,CAAC6C,eAAAA,CAAAA;AAEL;SAEFzN,GAAAA,SAAAA;QACJa,OAAS,EAAA,QAAA;QACTd,QAAU,EAAA;AAAC,YAAA,OAAA;AAAS,YAAA;AAAY;AAClC,KAAA;AACF,CAAA;AAEAoN,eAAAA,CAAgBrL,IAAI,GAAG,WAAA;AACvBqL,eAAAA,CAAgBpN,QAAQ,GAAG,OAAA;AAE3B,MAAM2O,aAAyC,GAAA,CAAC,EAC9CjI,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,cAAc,EACdE,QAAQ,EACT,GAAA;IACC,MAAM,EAAEtH,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEuH,MAAM,EAAE,GAAGoG,kBAAAA,EAAAA;AACnB,IAAA,MAAMuB,YAAY7G,4BAAgB,CAAA,eAAA,EAAiB,CAAC,EAAE6G,SAAS,EAAE,GAAKA,SAAAA,CAAAA;AACtE,IAAA,MAAM,EAAEC,OAAO,EAAE5G,SAAS,EAAE,GAAGC,qCAAAA,EAAAA;AAC/B,IAAA,MAAM,CAAC,EAAEqF,KAAK,EAAE,CAAC,GAAGvE,0BAAAA,EAAAA;AACpB,IAAA,MAAM6B,SAASvJ,gBAAMkM,CAAAA,OAAO,CAAC,IAAMC,qBAAiBF,KAAQ,CAAA,EAAA;AAACA,QAAAA;AAAM,KAAA,CAAA;IAEnE,IAAI,CAACtG,MAAQkE,EAAAA,OAAAA,EAASC,eAAiB,EAAA;QACrC,OAAO,IAAA;AACT;IAEA,OAAO;AACLvI,QAAAA,QAAAA,EAAU,CAAC+L,SAAAA,IAAalI,SAAc,KAAA,WAAA,IAAeK,UAAU5E,MAAW,KAAA,UAAA;AAC1ElB,QAAAA,KAAAA,EAAOxB,aAAc,CAAA;YACnByB,EAAI,EAAA,uCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;AACAyB,QAAAA,IAAAA,gBAAMhC,cAACkN,CAAAA,WAAAA,EAAAA,EAAAA,CAAAA;QACP9N,QAAU,EAAA;AAAC,YAAA,OAAA;AAAS,YAAA;AAAY,SAAA;QAChCc,OAAS,EAAA,QAAA;QACTe,MAAQ,EAAA;YACNE,IAAM,EAAA,QAAA;AACNC,YAAAA,KAAAA,EAAOvC,aAAc,CAAA;gBACnByB,EAAI,EAAA,oCAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACAe,YAAAA,OAAAA,gBACE5B,eAACC,CAAAA,iBAAAA,EAAAA;gBAAKC,SAAU,EAAA,QAAA;gBAASC,GAAK,EAAA,CAAA;;kCAC5BG,cAACoN,CAAAA,mBAAAA,EAAAA;wBAAcrN,KAAM,EAAA,MAAA;wBAAOsN,MAAO,EAAA,MAAA;wBAAOC,IAAK,EAAA;;kCAC/CtN,cAACuN,CAAAA,uBAAAA,EAAAA;wBAAWrJ,GAAI,EAAA,GAAA;wBAAIhE,OAAQ,EAAA,OAAA;wBAAQsN,SAAU,EAAA,QAAA;kCAC3C3O,aAAc,CAAA;4BACbyB,EAAI,EAAA,6CAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA;;;;YAIN8B,OAASgF,EAAAA,SAAAA;YACTvC,SAAW,EAAA,UAAA;AACT,gBAAA,MAAMmJ,OAAQ,CAAA;AACZhI,oBAAAA,cAAAA;AACAD,oBAAAA,KAAAA;AACAD,oBAAAA,UAAAA;AACAkE,oBAAAA;AACF,iBAAA,CAAA;AACF;AACF;AACF,KAAA;AACF,CAAA;AAEA8D,aAAAA,CAAc5M,IAAI,GAAG,SAAA;AACrB4M,aAAAA,CAAc3O,QAAQ,GAAG,OAAA;AAEzB,MAAM8O,eAAkB,GAAA;AAACrI,IAAAA,aAAAA;AAAewF,IAAAA,YAAAA;AAAcmB,IAAAA,eAAAA;AAAiBuB,IAAAA;AAAc;;;;;;;"}
@@ -1,21 +1,22 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { useNotification, useAPIErrorHandler, useQueryParams, useForm } from '@strapi/admin/strapi-admin';
4
- import { Menu, Flex, Typography, Radio, Button, VisuallyHidden, Dialog, Modal } from '@strapi/design-system';
5
- import { Cross, WarningCircle, More } from '@strapi/icons';
4
+ import { Menu, Flex, Button, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
5
+ import { More, Cross, WarningCircle } from '@strapi/icons';
6
6
  import mapValues from 'lodash/fp/mapValues';
7
7
  import { useIntl } from 'react-intl';
8
8
  import { useNavigate, useMatch, useParams } from 'react-router-dom';
9
9
  import { styled } from 'styled-components';
10
10
  import { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes.mjs';
11
11
  import { SINGLE_TYPES } from '../../../constants/collections.mjs';
12
- import { useDocumentContext } from '../../../features/DocumentContext.mjs';
13
12
  import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
14
13
  import { useDoc } from '../../../hooks/useDocument.mjs';
15
14
  import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
15
+ import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
16
+ import { usePreviewContext } from '../../../preview/pages/Preview.mjs';
16
17
  import { LIST_PATH, CLONE_PATH } from '../../../router.mjs';
17
18
  import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery } from '../../../services/documents.mjs';
18
- import { buildValidParams, isBaseQueryError } from '../../../utils/api.mjs';
19
+ import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
19
20
  import { getTranslation } from '../../../utils/translations.mjs';
20
21
 
21
22
  const DocumentActions = ({ actions })=>{
@@ -350,8 +351,8 @@ const transformData = (data)=>{
350
351
  };
351
352
  /* -------------------------------------------------------------------------------------------------
352
353
  * DocumentActionComponents
353
- * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document, onPreview, fromPreview = false, fromRelationModal = false })=>{
354
- const schema = useDocumentContext('PublishAction', (state)=>state.document.schema);
354
+ * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document })=>{
355
+ const { currentDocument: { schema } } = useDocumentContext('PublishAction');
355
356
  const navigate = useNavigate();
356
357
  const { toggleNotification } = useNotification();
357
358
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
@@ -360,22 +361,21 @@ const transformData = (data)=>{
360
361
  const { id } = useParams();
361
362
  const { formatMessage } = useIntl();
362
363
  const canPublish = useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
363
- const { publish, isLoading } = useDocumentActions(fromPreview, fromRelationModal);
364
+ const { publish, isLoading } = useDocumentActions();
365
+ const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
364
366
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
365
367
  const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React.useState(0);
366
368
  const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React.useState(0);
367
- const [{ query, rawQuery }] = useQueryParams();
368
- const params = React.useMemo(()=>buildValidParams(query), [
369
- query
370
- ]);
369
+ const [{ rawQuery }] = useQueryParams();
371
370
  const modified = useForm('PublishAction', ({ modified })=>modified);
372
371
  const setSubmitting = useForm('PublishAction', ({ setSubmitting })=>setSubmitting);
373
372
  const isSubmitting = useForm('PublishAction', ({ isSubmitting })=>isSubmitting);
374
373
  const validate = useForm('PublishAction', (state)=>state.validate);
375
374
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
376
375
  const formValues = useForm('PublishAction', ({ values })=>values);
377
- const rootDocumentMeta = useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
378
- const currentDocumentMeta = useDocumentContext('PublishAction', (state)=>state.meta);
376
+ const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
377
+ const { currentDocumentMeta } = useDocumentContext('PublishAction');
378
+ const idToPublish = currentDocumentMeta.documentId || id;
379
379
  React.useEffect(()=>{
380
380
  if (isErrorDraftRelations) {
381
381
  toggleNotification({
@@ -439,7 +439,7 @@ const transformData = (data)=>{
439
439
  collectionType,
440
440
  model,
441
441
  documentId,
442
- params
442
+ params: currentDocumentMeta.params
443
443
  });
444
444
  if (error) {
445
445
  throw error;
@@ -456,7 +456,7 @@ const transformData = (data)=>{
456
456
  countDraftRelations,
457
457
  collectionType,
458
458
  model,
459
- params
459
+ currentDocumentMeta.params
460
460
  ]);
461
461
  const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
462
462
  if (!schema?.options?.draftAndPublish) {
@@ -478,17 +478,20 @@ const transformData = (data)=>{
478
478
  });
479
479
  return;
480
480
  }
481
- const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
482
481
  const res = await publish({
483
482
  collectionType,
484
483
  model,
485
484
  documentId,
486
- params: isPublishingRelation ? currentDocumentMeta.params : params
485
+ params: currentDocumentMeta.params
487
486
  }, transformData(formValues));
487
+ // Reset form if successful
488
+ if ('data' in res) {
489
+ resetForm();
490
+ }
488
491
  if ('data' in res && collectionType !== SINGLE_TYPES) {
489
492
  /**
490
493
  * TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
491
- */ if (id === 'create') {
494
+ */ if (idToPublish === 'create') {
492
495
  navigate({
493
496
  pathname: `../${collectionType}/${model}/${res.data.documentId}`,
494
497
  search: rawQuery
@@ -558,18 +561,16 @@ PublishAction.position = [
558
561
  'preview',
559
562
  'relation-modal'
560
563
  ];
561
- const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview, fromPreview = false, fromRelationModal = false })=>{
564
+ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
562
565
  const navigate = useNavigate();
563
566
  const { toggleNotification } = useNotification();
564
567
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
565
568
  const cloneMatch = useMatch(CLONE_PATH);
566
569
  const isCloning = cloneMatch !== null;
567
570
  const { formatMessage } = useIntl();
568
- const { create, update, clone, isLoading } = useDocumentActions(fromPreview, fromRelationModal);
569
- const [{ query, rawQuery }] = useQueryParams();
570
- const params = React.useMemo(()=>buildValidParams(query), [
571
- query
572
- ]);
571
+ const { create, update, clone, isLoading } = useDocumentActions();
572
+ const [{ rawQuery }] = useQueryParams();
573
+ const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
573
574
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
574
575
  const modified = useForm('UpdateAction', ({ modified })=>modified);
575
576
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
@@ -577,8 +578,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
577
578
  const validate = useForm('UpdateAction', (state)=>state.validate);
578
579
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
579
580
  const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
580
- const rootDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
581
- const currentDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.meta);
581
+ const { currentDocumentMeta } = useDocumentContext('UpdateAction');
582
582
  const handleUpdate = React.useCallback(async ()=>{
583
583
  setSubmitting(true);
584
584
  try {
@@ -602,7 +602,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
602
602
  const res = await clone({
603
603
  model,
604
604
  documentId: cloneMatch.params.origin,
605
- params
605
+ params: currentDocumentMeta.params
606
606
  }, transformData(document));
607
607
  if ('data' in res) {
608
608
  navigate({
@@ -615,12 +615,11 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
615
615
  setErrors(formatValidationErrors(res.error));
616
616
  }
617
617
  } else if (documentId || collectionType === SINGLE_TYPES) {
618
- const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
619
618
  const res = await update({
620
619
  collectionType,
621
620
  model,
622
621
  documentId,
623
- params: isEditingRelation ? currentDocumentMeta.params : params
622
+ params: currentDocumentMeta.params
624
623
  }, transformData(document));
625
624
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
626
625
  setErrors(formatValidationErrors(res.error));
@@ -630,7 +629,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
630
629
  } else {
631
630
  const res = await create({
632
631
  model,
633
- params
632
+ params: currentDocumentMeta.params
634
633
  }, transformData(document));
635
634
  if ('data' in res && collectionType !== SINGLE_TYPES) {
636
635
  navigate({
@@ -655,7 +654,6 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
655
654
  cloneMatch?.params.origin,
656
655
  collectionType,
657
656
  create,
658
- currentDocumentMeta.documentId,
659
657
  currentDocumentMeta.params,
660
658
  document,
661
659
  documentId,
@@ -665,16 +663,14 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
665
663
  model,
666
664
  modified,
667
665
  navigate,
668
- onPreview,
669
- params,
670
666
  rawQuery,
671
667
  resetForm,
672
- rootDocumentMeta.documentId,
673
668
  setErrors,
674
669
  setSubmitting,
675
670
  toggleNotification,
676
671
  update,
677
- validate
672
+ validate,
673
+ onPreview
678
674
  ]);
679
675
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
680
676
  React.useEffect(()=>{