@strapi/content-manager 5.53.0 → 5.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ActionsDrawer.js +17 -6
- package/dist/admin/components/ActionsDrawer.js.map +1 -1
- package/dist/admin/components/ActionsDrawer.mjs +19 -8
- package/dist/admin/components/ActionsDrawer.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +131 -52
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +133 -54
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/history/components/VersionsList.js +37 -43
- package/dist/admin/history/components/VersionsList.js.map +1 -1
- package/dist/admin/history/components/VersionsList.mjs +37 -43
- package/dist/admin/history/components/VersionsList.mjs.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.js +3 -2
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.mjs +3 -2
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +3 -1
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +4 -2
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/layout.js +2 -4
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +2 -4
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/modules/app.js +3 -1
- package/dist/admin/modules/app.js.map +1 -1
- package/dist/admin/modules/app.mjs +3 -1
- package/dist/admin/modules/app.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +15 -20
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +15 -20
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +2 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +2 -0
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +74 -7
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +74 -7
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +7 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +7 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +59 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +60 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +58 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +58 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +25 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +5 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +5 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +6 -2
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +1 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +1 -0
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +64 -46
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/components/InputPopover.mjs +66 -49
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +23 -7
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +25 -9
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +19 -0
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +20 -1
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +9 -3
- package/dist/admin/preview/utils/constants.js.map +1 -1
- package/dist/admin/preview/utils/constants.mjs +9 -3
- package/dist/admin/preview/utils/constants.mjs.map +1 -1
- package/dist/admin/src/components/ActionsDrawer.d.ts +1 -0
- package/dist/admin/src/modules/app.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +2 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.d.ts +5 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +14 -1
- package/dist/admin/src/preview/components/InputPopover.d.ts +2 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +1 -0
- package/dist/admin/src/preview/utils/constants.d.ts +8 -1
- package/dist/admin/src/services/init.d.ts +1 -0
- package/dist/admin/src/utils/contentStructure.d.ts +59 -0
- package/dist/admin/utils/contentStructure.js +136 -0
- package/dist/admin/utils/contentStructure.js.map +1 -0
- package/dist/admin/utils/contentStructure.mjs +130 -0
- package/dist/admin/utils/contentStructure.mjs.map +1 -0
- package/dist/server/controllers/init.js +7 -2
- package/dist/server/controllers/init.js.map +1 -1
- package/dist/server/controllers/init.mjs +7 -2
- package/dist/server/controllers/init.mjs.map +1 -1
- package/dist/server/preview/controllers/previewScript.js +548 -22
- package/dist/server/services/content-structure.js +53 -0
- package/dist/server/services/content-structure.js.map +1 -0
- package/dist/server/services/content-structure.mjs +51 -0
- package/dist/server/services/content-structure.mjs.map +1 -0
- package/dist/server/services/index.js +2 -0
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +2 -0
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/controllers/init.d.ts +1 -1
- package/dist/server/src/controllers/init.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +6 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/content-structure.d.ts +8 -0
- package/dist/server/src/services/content-structure.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +5 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/init.d.ts +2 -0
- package/dist/shared/contracts/init.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDocumentActions.mjs","sources":["../../../admin/src/hooks/useDocumentActions.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useTracking,\n type TrackingEvent,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useGetAiFeatureConfigQuery, useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { useRelationModal } from '../pages/EditView/components/FormInputs/Relations/RelationModal';\nimport { usePreviewContext } from '../preview/pages/Preview';\nimport {\n useAutoCloneDocumentMutation,\n useCloneDocumentMutation,\n useCreateDocumentMutation,\n useDeleteDocumentMutation,\n useDeleteManyDocumentsMutation,\n useDiscardDocumentMutation,\n useLazyGetDocumentQuery,\n usePublishDocumentMutation,\n usePublishManyDocumentsMutation,\n useUnpublishDocumentMutation,\n useUnpublishManyDocumentsMutation,\n useUpdateDocumentMutation,\n} from '../services/documents';\nimport { BaseQueryError } from '../utils/api';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Document } from './useDocument';\nimport type {\n AutoClone,\n Clone,\n Create,\n Delete,\n BulkDelete,\n Discard,\n FindOne,\n Publish,\n BulkPublish,\n Update,\n Unpublish,\n BulkUnpublish,\n} from '../../../shared/contracts/collection-types';\n\nconst DEFAULT_UNEXPECTED_ERROR_MSG = {\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again',\n} satisfies MessageDescriptor;\n\ntype OperationResponse<TResponse extends { data: unknown; meta?: unknown; error?: unknown }> =\n | Pick<TResponse, 'data'>\n | Pick<TResponse, 'data' | 'meta'>\n | { error: BaseQueryError | SerializedError };\n\ntype BulkOperationResponse<TResponse extends { data: unknown; error?: unknown }> =\n | Pick<TResponse, 'data'>\n | { error: BaseQueryError | SerializedError };\n\ntype QueryParams = Record<string, unknown>;\n\ntype UseDocumentActions = (\n fromPreview?: boolean,\n fromRelationModal?: boolean\n) => {\n /**\n * @description Attempts to clone a document based on the provided sourceId.\n * This will return a list of the fields as an error if it's unable to clone.\n * You most likely want to use the `clone` action instead.\n */\n isLoading: boolean;\n autoClone: (args: {\n model: string;\n sourceId: string;\n locale?: string;\n }) => Promise<OperationResponse<AutoClone.Response>>;\n clone: (\n args: {\n model: string;\n documentId: string;\n params?: QueryParams;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Clone.Response>>;\n create: (\n args: {\n model: string;\n params?: QueryParams;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Create.Response>>;\n delete: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry' }\n >['properties']\n ) => Promise<OperationResponse<Delete.Response>>;\n deleteMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkDelete.Response>>;\n discard: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n }) => Promise<OperationResponse<Discard.Response>>;\n getDocument: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n }) => Promise<FindOne.Response | undefined>;\n publish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n document: Partial<Document>\n ) => Promise<OperationResponse<Publish.Response>>;\n publishMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkPublish.Response>>;\n update: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n document: Partial<Document>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry' }\n >['properties']\n ) => Promise<OperationResponse<Update.Response>>;\n unpublish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n discardDraft?: boolean\n ) => Promise<OperationResponse<Unpublish.Response>>;\n unpublishMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkUnpublish.Response>>;\n};\n\ntype IUseDocumentActs = ReturnType<UseDocumentActions>;\n\n/**\n * @alpha\n * @public\n * @description Contains all the operations that can be performed on a single document.\n * Designed to be able to be used anywhere within a Strapi app. The hooks will handle\n * notifications should the operation fail, however the response is always returned incase\n * the user needs to handle side-effects.\n * @example\n * ```tsx\n * import { Form } from '@strapi/admin/admin';\n *\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n * const { update } = useDocumentActions();\n *\n * const handleSubmit = async (data) => {\n * await update({ collectionType, model, documentId: id }, data);\n * }\n *\n * return <Form method=\"PUT\" onSubmit={handleSubmit} />\n * ```\n *\n */\nconst useDocumentActions: UseDocumentActions = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const { data: aiFeatureConfig } = useGetAiFeatureConfigQuery();\n const isAiAvailable = useAIAvailability();\n const isAiI18nConfigured = Boolean(aiFeatureConfig?.isAiI18nConfigured);\n\n // Get metadata from context providers for tracking purposes\n const previewContext = usePreviewContext('useDocumentActions', () => true, false);\n const relationContext = useRelationModal('useDocumentActions', () => true, false);\n const fromPreview = previewContext != undefined;\n const fromRelationModal = relationContext != undefined;\n\n const [deleteDocument, { isLoading: isDeleting }] = useDeleteDocumentMutation();\n const _delete: IUseDocumentActs['delete'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, trackerProperty) => {\n try {\n trackUsage('willDeleteEntry', trackerProperty);\n\n const res = await deleteDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.delete'),\n defaultMessage: 'Deleted document',\n }),\n });\n\n trackUsage('didDeleteEntry', trackerProperty);\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [trackUsage, deleteDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [deleteManyDocuments, { isLoading: isDeletingMany }] = useDeleteManyDocumentsMutation();\n\n const deleteMany: IUseDocumentActs['deleteMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkDeleteEntries');\n\n const res = await deleteManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.delete'),\n defaultMessage: 'Successfully deleted.',\n }),\n message: '',\n });\n\n trackUsage('didBulkDeleteEntries');\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkDeleteEntries');\n\n throw err;\n }\n },\n [trackUsage, deleteManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [discardDocument, { isLoading: isDiscardingDocument }] = useDiscardDocumentMutation();\n const discard: IUseDocumentActs['discard'] = React.useCallback(\n async ({ collectionType, model, documentId, params }) => {\n try {\n const res = await discardDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.success.record.discard',\n defaultMessage: 'Changes discarded',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [discardDocument, formatAPIError, formatMessage, toggleNotification]\n );\n\n const [publishDocument, { isLoading: isPublishing }] = usePublishDocumentMutation();\n\n const publish: IUseDocumentActs['publish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data) => {\n try {\n trackUsage('willPublishEntry', { documentId });\n\n const res = await publishDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n trackUsage('didPublishEntry', {\n documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [\n trackUsage,\n publishDocument,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n formatMessage,\n formatAPIError,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [publishManyDocuments, { isLoading: isPublishingMany }] = usePublishManyDocumentsMutation();\n const publishMany: IUseDocumentActs['publishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n // TODO Confirm tracking events for bulk publish?\n\n const res = await publishManyDocuments({\n model,\n documentIds,\n params,\n });\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n throw err;\n }\n },\n [\n // trackUsage,\n publishManyDocuments,\n toggleNotification,\n formatMessage,\n formatAPIError,\n ]\n );\n\n const [updateDocument, { isLoading: isUpdating }] = useUpdateDocumentMutation();\n const update: IUseDocumentActs['update'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data, trackerProperty) => {\n try {\n trackUsage('willEditEntry', trackerProperty);\n\n const res = await updateDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotEditEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didEditEntry', {\n ...trackerProperty,\n documentId: res.data.data.documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n trackUsage('didNotEditEntry', { error: err, ...trackerProperty });\n\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [\n trackUsage,\n updateDocument,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n formatMessage,\n formatAPIError,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [unpublishDocument] = useUnpublishDocumentMutation();\n const unpublish: IUseDocumentActs['unpublish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, discardDraft = false) => {\n try {\n trackUsage('willUnpublishEntry');\n\n const res = await unpublishDocument({\n collectionType,\n model,\n documentId,\n params,\n data: {\n discardDraft,\n },\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didUnpublishEntry');\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.unpublish'),\n defaultMessage: 'Unpublished document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [trackUsage, unpublishDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [unpublishManyDocuments, { isLoading: isUnpublishingMany }] =\n useUnpublishManyDocumentsMutation();\n const unpublishMany: IUseDocumentActs['unpublishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkUnpublishEntries');\n\n const res = await unpublishManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didBulkUnpublishEntries');\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.unpublish'),\n defaultMessage: 'Successfully unpublished.',\n }),\n message: '',\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkUnpublishEntries');\n\n throw err;\n }\n },\n [trackUsage, unpublishManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [createDocument] = useCreateDocumentMutation();\n const create: IUseDocumentActs['create'] = React.useCallback(\n async ({ model, params }, data, trackerProperty) => {\n try {\n const res = await createDocument({\n model,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n trackUsage('didCreateEntry', {\n ...trackerProperty,\n documentId: res.data.data.documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [\n createDocument,\n formatAPIError,\n formatMessage,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n trackUsage,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [autoCloneDocument] = useAutoCloneDocumentMutation();\n const autoClone: IUseDocumentActs['autoClone'] = React.useCallback(\n async ({ model, sourceId, locale }) => {\n try {\n const res = await autoCloneDocument({\n model,\n sourceId,\n params: locale ? { locale } : undefined,\n });\n\n if ('error' in res) {\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [autoCloneDocument, formatMessage, toggleNotification]\n );\n\n const [cloneDocument] = useCloneDocumentMutation();\n const clone: IUseDocumentActs['clone'] = React.useCallback(\n async ({ model, documentId, params }, body, trackerProperty) => {\n try {\n // Omit id and documentId so they are not copied to the clone\n const { id: _id, documentId: _documentId, ...restBody } = body;\n\n /**\n * If we're cloning we want to post directly to this endpoint\n * so that the relations even if they're not listed in the EditView\n * are correctly attached to the entry.\n */\n const res = await cloneDocument({\n model,\n sourceId: documentId,\n data: restBody,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didCreateEntry', {\n ...trackerProperty,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n // Redirect to normal edit view\n navigate(`../../${res.data.data.documentId}`, { relative: 'path' });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [\n cloneDocument,\n trackUsage,\n toggleNotification,\n formatMessage,\n formatAPIError,\n navigate,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [getDoc] = useLazyGetDocumentQuery();\n const getDocument: IUseDocumentActs['getDocument'] = React.useCallback(\n async (args) => {\n const { data } = await getDoc(args);\n\n return data;\n },\n [getDoc]\n );\n\n return {\n isLoading:\n isPublishing ||\n isUpdating ||\n isDiscardingDocument ||\n isDeleting ||\n isDeletingMany ||\n isUnpublishingMany ||\n isPublishingMany,\n autoClone,\n clone,\n create,\n delete: _delete,\n deleteMany,\n discard,\n getDocument,\n publish,\n publishMany,\n unpublish,\n unpublishMany,\n update,\n } satisfies IUseDocumentActs;\n};\n\nexport { useDocumentActions };\nexport type { UseDocumentActions, OperationResponse };\n"],"names":["DEFAULT_UNEXPECTED_ERROR_MSG","id","defaultMessage","useDocumentActions","toggleNotification","useNotification","formatMessage","useIntl","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","navigate","useNavigate","data","aiFeatureConfig","useGetAiFeatureConfigQuery","isAiAvailable","useAIAvailability","isAiI18nConfigured","Boolean","previewContext","usePreviewContext","relationContext","useRelationModal","fromPreview","undefined","fromRelationModal","deleteDocument","isLoading","isDeleting","useDeleteDocumentMutation","_delete","React","useCallback","collectionType","model","documentId","params","trackerProperty","res","type","message","error","getTranslation","err","deleteManyDocuments","isDeletingMany","useDeleteManyDocumentsMutation","deleteMany","documentIds","title","discardDocument","isDiscardingDocument","useDiscardDocumentMutation","discard","publishDocument","isPublishing","usePublishDocumentMutation","publish","publishManyDocuments","isPublishingMany","usePublishManyDocumentsMutation","publishMany","updateDocument","isUpdating","useUpdateDocumentMutation","update","unpublishDocument","useUnpublishDocumentMutation","unpublish","discardDraft","unpublishManyDocuments","isUnpublishingMany","useUnpublishManyDocumentsMutation","unpublishMany","createDocument","useCreateDocumentMutation","create","autoCloneDocument","useAutoCloneDocumentMutation","autoClone","sourceId","locale","cloneDocument","useCloneDocumentMutation","clone","body","_id","_documentId","restBody","relative","getDoc","useLazyGetDocumentQuery","getDocument","args","delete"],"mappings":";;;;;;;;;;AAgDA,MAAMA,4BAAAA,GAA+B;IACnCC,EAAAA,EAAI,oBAAA;IACJC,cAAAA,EAAgB;AAClB,CAAA;AA6HA;;;;;;;;;;;;;;;;;;;;;AAqBC,UACKC,kBAAAA,GAAyC,IAAA;IAC7C,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AACpD,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,IAAAA,EAAMC,eAAe,EAAE,GAAGC,0BAAAA,EAAAA;AAClC,IAAA,MAAMC,aAAAA,GAAgBC,iBAAAA,EAAAA;IACtB,MAAMC,kBAAAA,GAAqBC,QAAQL,eAAAA,EAAiBI,kBAAAA,CAAAA;;AAGpD,IAAA,MAAME,cAAAA,GAAiBC,iBAAAA,CAAkB,oBAAA,EAAsB,IAAM,IAAA,EAAM,KAAA,CAAA;AAC3E,IAAA,MAAMC,eAAAA,GAAkBC,gBAAAA,CAAiB,oBAAA,EAAsB,IAAM,IAAA,EAAM,KAAA,CAAA;AAC3E,IAAA,MAAMC,cAAcJ,cAAAA,IAAkBK,SAAAA;AACtC,IAAA,MAAMC,oBAAoBJ,eAAAA,IAAmBG,SAAAA;AAE7C,IAAA,MAAM,CAACE,cAAAA,EAAgB,EAAEC,WAAWC,UAAU,EAAE,CAAC,GAAGC,yBAAAA,EAAAA;AACpD,IAAA,MAAMC,OAAAA,GAAsCC,KAAAA,CAAMC,WAAW,CAC3D,OAAO,EAAEC,cAAc,EAAEC,KAAK,EAAEC,UAAU,EAAEC,MAAM,EAAE,EAAEC,eAAAA,GAAAA;QACpD,IAAI;AACFhC,YAAAA,UAAAA,CAAW,iBAAA,EAAmBgC,eAAAA,CAAAA;YAE9B,MAAMC,GAAAA,GAAM,MAAMZ,cAAAA,CAAe;AAC/BO,gBAAAA,cAAAA;AACAC,gBAAAA,KAAAA;AACAC,gBAAAA,UAAAA;AACAC,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBACjBsC,IAAAA,EAAM,QAAA;oBACNC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AACnC,iBAAA,CAAA;gBAEA,OAAO;AAAEA,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;YAEAxC,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;AACrBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,uBAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEAM,YAAAA,UAAAA,CAAW,gBAAA,EAAkBgC,eAAAA,CAAAA;AAE7B,YAAA,OAAOC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;AAEAQ,YAAAA,UAAAA,CAAW,mBAAA,EAAqB;gBAAEoC,KAAAA,EAAOE,GAAAA;AAAK,gBAAA,GAAGN;AAAgB,aAAA,CAAA;YAEjE,MAAMM,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AAACtC,QAAAA,UAAAA;AAAYqB,QAAAA,cAAAA;AAAgBzB,QAAAA,kBAAAA;AAAoBE,QAAAA,aAAAA;AAAeK,QAAAA;AAAe,KAAA,CAAA;AAGjF,IAAA,MAAM,CAACoC,mBAAAA,EAAqB,EAAEjB,WAAWkB,cAAc,EAAE,CAAC,GAAGC,8BAAAA,EAAAA;IAE7D,MAAMC,UAAAA,GAA6ChB,KAAAA,CAAMC,WAAW,CAClE,OAAO,EAAEE,KAAK,EAAEc,WAAW,EAAEZ,MAAM,EAAE,GAAA;QACnC,IAAI;YACF/B,UAAAA,CAAW,uBAAA,CAAA;YAEX,MAAMiC,GAAAA,GAAM,MAAMM,mBAAAA,CAAoB;AACpCV,gBAAAA,KAAAA;AACAc,gBAAAA,WAAAA;AACAZ,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBACjBsC,IAAAA,EAAM,QAAA;oBACNC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AACnC,iBAAA,CAAA;gBAEA,OAAO;AAAEA,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;YAEAxC,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNU,gBAAAA,KAAAA,EAAO9C,aAAAA,CAAc;AACnBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,wBAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAyC,OAAAA,EAAS;AACX,aAAA,CAAA;YAEAnC,UAAAA,CAAW,sBAAA,CAAA;AAEX,YAAA,OAAOiC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;YAEAQ,UAAAA,CAAW,yBAAA,CAAA;YAEX,MAAMsC,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AAACtC,QAAAA,UAAAA;AAAYuC,QAAAA,mBAAAA;AAAqB3C,QAAAA,kBAAAA;AAAoBE,QAAAA,aAAAA;AAAeK,QAAAA;AAAe,KAAA,CAAA;AAGtF,IAAA,MAAM,CAAC0C,eAAAA,EAAiB,EAAEvB,WAAWwB,oBAAoB,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AAC/D,IAAA,MAAMC,OAAAA,GAAuCtB,KAAAA,CAAMC,WAAW,CAC5D,OAAO,EAAEC,cAAc,EAAEC,KAAK,EAAEC,UAAU,EAAEC,MAAM,EAAE,GAAA;QAClD,IAAI;YACF,MAAME,GAAAA,GAAM,MAAMY,eAAAA,CAAgB;AAChCjB,gBAAAA,cAAAA;AACAC,gBAAAA,KAAAA;AACAC,gBAAAA,UAAAA;AACAC,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBACjBsC,IAAAA,EAAM,QAAA;oBACNC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AACnC,iBAAA,CAAA;gBAEA,OAAO;AAAEA,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;YAEAxC,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;oBACrBL,EAAAA,EAAI,wCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA,OAAOuC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;YAEA,MAAM8C,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AAACO,QAAAA,eAAAA;AAAiB1C,QAAAA,cAAAA;AAAgBL,QAAAA,aAAAA;AAAeF,QAAAA;AAAmB,KAAA,CAAA;AAGtE,IAAA,MAAM,CAACqD,eAAAA,EAAiB,EAAE3B,WAAW4B,YAAY,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AAEvD,IAAA,MAAMC,OAAAA,GAAuC1B,KAAAA,CAAMC,WAAW,CAC5D,OAAO,EAAEC,cAAc,EAAEC,KAAK,EAAEC,UAAU,EAAEC,MAAM,EAAE,EAAExB,IAAAA,GAAAA;QACpD,IAAI;AACFP,YAAAA,UAAAA,CAAW,kBAAA,EAAoB;AAAE8B,gBAAAA;AAAW,aAAA,CAAA;YAE5C,MAAMG,GAAAA,GAAM,MAAMgB,eAAAA,CAAgB;AAChCrB,gBAAAA,cAAAA;AACAC,gBAAAA,KAAAA;AACAC,gBAAAA,UAAAA;AACAvB,gBAAAA,IAAAA;AACAwB,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBAAEsC,IAAAA,EAAM,QAAA;oBAAUC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AAAE,iBAAA,CAAA;gBACxE,OAAO;AAAEA,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;AAEApC,YAAAA,UAAAA,CAAW,iBAAA,EAAmB;AAC5B8B,gBAAAA,UAAAA;AACAZ,gBAAAA,WAAAA;AACAE,gBAAAA,iBAAAA;AACA,gBAAA,GAAIV,aAAAA,GAAgB;AAAEE,oBAAAA;AAAmB,iBAAA,GAAI;AAC/C,aAAA,CAAA;YAEAhB,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;AACrBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,wBAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA,OAAOuC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;YAEA,MAAM8C,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AACEtC,QAAAA,UAAAA;AACAiD,QAAAA,eAAAA;AACA/B,QAAAA,WAAAA;AACAE,QAAAA,iBAAAA;AACAxB,QAAAA,kBAAAA;AACAE,QAAAA,aAAAA;AACAK,QAAAA,cAAAA;AACAO,QAAAA,aAAAA;AACAE,QAAAA;AACD,KAAA,CAAA;AAGH,IAAA,MAAM,CAACyC,oBAAAA,EAAsB,EAAE/B,WAAWgC,gBAAgB,EAAE,CAAC,GAAGC,+BAAAA,EAAAA;IAChE,MAAMC,WAAAA,GAA+C9B,KAAAA,CAAMC,WAAW,CACpE,OAAO,EAAEE,KAAK,EAAEc,WAAW,EAAEZ,MAAM,EAAE,GAAA;QACnC,IAAI;;YAGF,MAAME,GAAAA,GAAM,MAAMoB,oBAAAA,CAAqB;AACrCxB,gBAAAA,KAAAA;AACAc,gBAAAA,WAAAA;AACAZ,gBAAAA;AACF,aAAA,CAAA;AACA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBAAEsC,IAAAA,EAAM,QAAA;oBAAUC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AAAE,iBAAA,CAAA;gBACxE,OAAO;AAAEA,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;YAEAxC,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;AACrBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,wBAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA,OAAOuC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;YACA,MAAM8C,GAAAA;AACR,QAAA;IACF,CAAA,EACA;;AAEEe,QAAAA,oBAAAA;AACAzD,QAAAA,kBAAAA;AACAE,QAAAA,aAAAA;AACAK,QAAAA;AACD,KAAA,CAAA;AAGH,IAAA,MAAM,CAACsD,cAAAA,EAAgB,EAAEnC,WAAWoC,UAAU,EAAE,CAAC,GAAGC,yBAAAA,EAAAA;AACpD,IAAA,MAAMC,MAAAA,GAAqClC,KAAAA,CAAMC,WAAW,CAC1D,OAAO,EAAEC,cAAc,EAAEC,KAAK,EAAEC,UAAU,EAAEC,MAAM,EAAE,EAAExB,IAAAA,EAAMyB,eAAAA,GAAAA;QAC1D,IAAI;AACFhC,YAAAA,UAAAA,CAAW,eAAA,EAAiBgC,eAAAA,CAAAA;YAE5B,MAAMC,GAAAA,GAAM,MAAMwB,cAAAA,CAAe;AAC/B7B,gBAAAA,cAAAA;AACAC,gBAAAA,KAAAA;AACAC,gBAAAA,UAAAA;AACAvB,gBAAAA,IAAAA;AACAwB,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBAAEsC,IAAAA,EAAM,QAAA;oBAAUC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AAAE,iBAAA,CAAA;AAExEpC,gBAAAA,UAAAA,CAAW,iBAAA,EAAmB;AAAEoC,oBAAAA,KAAAA,EAAOH,IAAIG,KAAK;AAAE,oBAAA,GAAGJ;AAAgB,iBAAA,CAAA;gBAErE,OAAO;AAAEI,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;AAEApC,YAAAA,UAAAA,CAAW,cAAA,EAAgB;AACzB,gBAAA,GAAGgC,eAAe;AAClBF,gBAAAA,UAAAA,EAAYG,GAAAA,CAAI1B,IAAI,CAACA,IAAI,CAACuB,UAAU;AACpCZ,gBAAAA,WAAAA;AACAE,gBAAAA,iBAAAA;AACA,gBAAA,GAAIV,aAAAA,GAAgB;AAAEE,oBAAAA;AAAmB,iBAAA,GAAI;AAC/C,aAAA,CAAA;YACAhB,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;AACrBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,qBAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA,OAAOuC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;AACZtC,YAAAA,UAAAA,CAAW,iBAAA,EAAmB;gBAAEoC,KAAAA,EAAOE,GAAAA;AAAK,gBAAA,GAAGN;AAAgB,aAAA,CAAA;YAE/DpC,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;YAEA,MAAM8C,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AACEtC,QAAAA,UAAAA;AACAyD,QAAAA,cAAAA;AACAvC,QAAAA,WAAAA;AACAE,QAAAA,iBAAAA;AACAxB,QAAAA,kBAAAA;AACAE,QAAAA,aAAAA;AACAK,QAAAA,cAAAA;AACAO,QAAAA,aAAAA;AACAE,QAAAA;AACD,KAAA,CAAA;IAGH,MAAM,CAACiD,kBAAkB,GAAGC,4BAAAA,EAAAA;AAC5B,IAAA,MAAMC,YAA2CrC,KAAAA,CAAMC,WAAW,CAChE,OAAO,EAAEC,cAAc,EAAEC,KAAK,EAAEC,UAAU,EAAEC,MAAM,EAAE,EAAEiC,eAAe,KAAK,GAAA;QACxE,IAAI;YACFhE,UAAAA,CAAW,oBAAA,CAAA;YAEX,MAAMiC,GAAAA,GAAM,MAAM4B,iBAAAA,CAAkB;AAClCjC,gBAAAA,cAAAA;AACAC,gBAAAA,KAAAA;AACAC,gBAAAA,UAAAA;AACAC,gBAAAA,MAAAA;gBACAxB,IAAAA,EAAM;AACJyD,oBAAAA;AACF;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAW/B,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBAAEsC,IAAAA,EAAM,QAAA;oBAAUC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AAAE,iBAAA,CAAA;gBAExE,OAAO;AAAEA,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;YAEApC,UAAAA,CAAW,mBAAA,CAAA;YAEXJ,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;AACrBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,0BAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA,OAAOuC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;YAEA,MAAM8C,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AAACtC,QAAAA,UAAAA;AAAY6D,QAAAA,iBAAAA;AAAmBjE,QAAAA,kBAAAA;AAAoBE,QAAAA,aAAAA;AAAeK,QAAAA;AAAe,KAAA,CAAA;AAGpF,IAAA,MAAM,CAAC8D,sBAAAA,EAAwB,EAAE3C,WAAW4C,kBAAkB,EAAE,CAAC,GAC/DC,iCAAAA,EAAAA;IACF,MAAMC,aAAAA,GAAmD1C,KAAAA,CAAMC,WAAW,CACxE,OAAO,EAAEE,KAAK,EAAEc,WAAW,EAAEZ,MAAM,EAAE,GAAA;QACnC,IAAI;YACF/B,UAAAA,CAAW,0BAAA,CAAA;YAEX,MAAMiC,GAAAA,GAAM,MAAMgC,sBAAAA,CAAuB;AACvCpC,gBAAAA,KAAAA;AACAc,gBAAAA,WAAAA;AACAZ,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBAAEsC,IAAAA,EAAM,QAAA;oBAAUC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AAAE,iBAAA,CAAA;gBAExE,OAAO;AAAEA,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;YAEApC,UAAAA,CAAW,yBAAA,CAAA;YAEXJ,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNU,gBAAAA,KAAAA,EAAO9C,aAAAA,CAAc;AACnBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,2BAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAyC,OAAAA,EAAS;AACX,aAAA,CAAA;AAEA,YAAA,OAAOF,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;YAEAQ,UAAAA,CAAW,4BAAA,CAAA;YAEX,MAAMsC,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AAACtC,QAAAA,UAAAA;AAAYiE,QAAAA,sBAAAA;AAAwBrE,QAAAA,kBAAAA;AAAoBE,QAAAA,aAAAA;AAAeK,QAAAA;AAAe,KAAA,CAAA;IAGzF,MAAM,CAACkE,eAAe,GAAGC,yBAAAA,EAAAA;IACzB,MAAMC,MAAAA,GAAqC7C,KAAAA,CAAMC,WAAW,CAC1D,OAAO,EAAEE,KAAK,EAAEE,MAAM,EAAE,EAAExB,IAAAA,EAAMyB,eAAAA,GAAAA;QAC9B,IAAI;YACF,MAAMC,GAAAA,GAAM,MAAMoC,cAAAA,CAAe;AAC/BxC,gBAAAA,KAAAA;AACAtB,gBAAAA,IAAAA;AACAwB,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBAAEsC,IAAAA,EAAM,QAAA;oBAAUC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AAAE,iBAAA,CAAA;AAExEpC,gBAAAA,UAAAA,CAAW,mBAAA,EAAqB;AAAEoC,oBAAAA,KAAAA,EAAOH,IAAIG,KAAK;AAAE,oBAAA,GAAGJ;AAAgB,iBAAA,CAAA;gBAEvE,OAAO;AAAEI,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;AACApC,YAAAA,UAAAA,CAAW,gBAAA,EAAkB;AAC3B,gBAAA,GAAGgC,eAAe;AAClBF,gBAAAA,UAAAA,EAAYG,GAAAA,CAAI1B,IAAI,CAACA,IAAI,CAACuB,UAAU;AACpCZ,gBAAAA,WAAAA;AACAE,gBAAAA,iBAAAA;AACA,gBAAA,GAAIV,aAAAA,GAAgB;AAAEE,oBAAAA;AAAmB,iBAAA,GAAI;AAC/C,aAAA,CAAA;YAEAhB,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;AACrBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,qBAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA,OAAOuC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;AAEAQ,YAAAA,UAAAA,CAAW,mBAAA,EAAqB;gBAAEoC,KAAAA,EAAOE,GAAAA;AAAK,gBAAA,GAAGN;AAAgB,aAAA,CAAA;YAEjE,MAAMM,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AACE+B,QAAAA,cAAAA;AACAlE,QAAAA,cAAAA;AACAL,QAAAA,aAAAA;AACAoB,QAAAA,WAAAA;AACAE,QAAAA,iBAAAA;AACAxB,QAAAA,kBAAAA;AACAI,QAAAA,UAAAA;AACAU,QAAAA,aAAAA;AACAE,QAAAA;AACD,KAAA,CAAA;IAGH,MAAM,CAAC4D,kBAAkB,GAAGC,4BAAAA,EAAAA;IAC5B,MAAMC,SAAAA,GAA2ChD,KAAAA,CAAMC,WAAW,CAChE,OAAO,EAAEE,KAAK,EAAE8C,QAAQ,EAAEC,MAAM,EAAE,GAAA;QAChC,IAAI;YACF,MAAM3C,GAAAA,GAAM,MAAMuC,iBAAAA,CAAkB;AAClC3C,gBAAAA,KAAAA;AACA8C,gBAAAA,QAAAA;AACA5C,gBAAAA,MAAAA,EAAQ6C,MAAAA,GAAS;AAAEA,oBAAAA;iBAAO,GAAIzD;AAChC,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWc,GAAAA,EAAK;gBAClB,OAAO;AAAEG,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;YAEAxC,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;AACrBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,sBAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA,OAAOuC,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;YAEA,MAAM8C,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AAACkC,QAAAA,iBAAAA;AAAmB1E,QAAAA,aAAAA;AAAeF,QAAAA;AAAmB,KAAA,CAAA;IAGxD,MAAM,CAACiF,cAAc,GAAGC,wBAAAA,EAAAA;AACxB,IAAA,MAAMC,KAAAA,GAAmCrD,KAAAA,CAAMC,WAAW,CACxD,OAAO,EAAEE,KAAK,EAAEC,UAAU,EAAEC,MAAM,EAAE,EAAEiD,IAAAA,EAAMhD,eAAAA,GAAAA;QAC1C,IAAI;;YAEF,MAAM,EAAEvC,IAAIwF,GAAG,EAAEnD,YAAYoD,WAAW,EAAE,GAAGC,QAAAA,EAAU,GAAGH,IAAAA;AAE1D;;;;YAKA,MAAM/C,GAAAA,GAAM,MAAM4C,aAAAA,CAAc;AAC9BhD,gBAAAA,KAAAA;gBACA8C,QAAAA,EAAU7C,UAAAA;gBACVvB,IAAAA,EAAM4E,QAAAA;AACNpD,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClBrC,kBAAAA,CAAmB;oBAAEsC,IAAAA,EAAM,QAAA;oBAAUC,OAAAA,EAAShC,cAAAA,CAAe8B,IAAIG,KAAK;AAAE,iBAAA,CAAA;AAExEpC,gBAAAA,UAAAA,CAAW,mBAAA,EAAqB;AAAEoC,oBAAAA,KAAAA,EAAOH,IAAIG,KAAK;AAAE,oBAAA,GAAGJ;AAAgB,iBAAA,CAAA;gBAEvE,OAAO;AAAEI,oBAAAA,KAAAA,EAAOH,IAAIG;AAAM,iBAAA;AAC5B,YAAA;AAEApC,YAAAA,UAAAA,CAAW,gBAAA,EAAkB;AAC3B,gBAAA,GAAGgC,eAAe;AAClB,gBAAA,GAAItB,aAAAA,GAAgB;AAAEE,oBAAAA;AAAmB,iBAAA,GAAI;AAC/C,aAAA,CAAA;YACAhB,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;AACrBL,oBAAAA,EAAAA,EAAI4C,cAAAA,CAAe,sBAAA,CAAA;oBACnB3C,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;;YAGAW,QAAAA,CAAS,CAAC,MAAM,EAAE4B,GAAAA,CAAI1B,IAAI,CAACA,IAAI,CAACuB,UAAU,CAAA,CAAE,EAAE;gBAAEsD,QAAAA,EAAU;AAAO,aAAA,CAAA;AAEjE,YAAA,OAAOnD,IAAI1B,IAAI;AACjB,QAAA,CAAA,CAAE,OAAO+B,GAAAA,EAAK;YACZ1C,kBAAAA,CAAmB;gBACjBsC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAcN,4BAAAA;AACzB,aAAA,CAAA;AAEAQ,YAAAA,UAAAA,CAAW,mBAAA,EAAqB;gBAAEoC,KAAAA,EAAOE,GAAAA;AAAK,gBAAA,GAAGN;AAAgB,aAAA,CAAA;YAEjE,MAAMM,GAAAA;AACR,QAAA;IACF,CAAA,EACA;AACEuC,QAAAA,aAAAA;AACA7E,QAAAA,UAAAA;AACAJ,QAAAA,kBAAAA;AACAE,QAAAA,aAAAA;AACAK,QAAAA,cAAAA;AACAE,QAAAA,QAAAA;AACAK,QAAAA,aAAAA;AACAE,QAAAA;AACD,KAAA,CAAA;IAGH,MAAM,CAACyE,OAAO,GAAGC,uBAAAA,EAAAA;AACjB,IAAA,MAAMC,WAAAA,GAA+C7D,KAAAA,CAAMC,WAAW,CACpE,OAAO6D,IAAAA,GAAAA;AACL,QAAA,MAAM,EAAEjF,IAAI,EAAE,GAAG,MAAM8E,MAAAA,CAAOG,IAAAA,CAAAA;QAE9B,OAAOjF,IAAAA;IACT,CAAA,EACA;AAAC8E,QAAAA;AAAO,KAAA,CAAA;IAGV,OAAO;AACL/D,QAAAA,SAAAA,EACE4B,YAAAA,IACAQ,UAAAA,IACAZ,oBAAAA,IACAvB,UAAAA,IACAiB,kBACA0B,kBAAAA,IACAZ,gBAAAA;AACFoB,QAAAA,SAAAA;AACAK,QAAAA,KAAAA;AACAR,QAAAA,MAAAA;QACAkB,MAAAA,EAAQhE,OAAAA;AACRiB,QAAAA,UAAAA;AACAM,QAAAA,OAAAA;AACAuC,QAAAA,WAAAA;AACAnC,QAAAA,OAAAA;AACAI,QAAAA,WAAAA;AACAO,QAAAA,SAAAA;AACAK,QAAAA,aAAAA;AACAR,QAAAA;AACF,KAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"useDocumentActions.mjs","sources":["../../../admin/src/hooks/useDocumentActions.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useTracking,\n type TrackingEvent,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useGetAiFeatureConfigQuery, useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { useRelationModal } from '../pages/EditView/components/FormInputs/Relations/RelationModal';\nimport { usePreviewContext } from '../preview/pages/Preview';\nimport {\n useAutoCloneDocumentMutation,\n useCloneDocumentMutation,\n useCreateDocumentMutation,\n useDeleteDocumentMutation,\n useDeleteManyDocumentsMutation,\n useDiscardDocumentMutation,\n useLazyGetDocumentQuery,\n usePublishDocumentMutation,\n usePublishManyDocumentsMutation,\n useUnpublishDocumentMutation,\n useUnpublishManyDocumentsMutation,\n useUpdateDocumentMutation,\n} from '../services/documents';\nimport { BaseQueryError } from '../utils/api';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Document } from './useDocument';\nimport type {\n AutoClone,\n Clone,\n Create,\n Delete,\n BulkDelete,\n Discard,\n FindOne,\n Publish,\n BulkPublish,\n Update,\n Unpublish,\n BulkUnpublish,\n} from '../../../shared/contracts/collection-types';\n\nconst DEFAULT_UNEXPECTED_ERROR_MSG = {\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again',\n} satisfies MessageDescriptor;\n\ntype OperationResponse<TResponse extends { data: unknown; meta?: unknown; error?: unknown }> =\n | Pick<TResponse, 'data'>\n | Pick<TResponse, 'data' | 'meta'>\n | { error: BaseQueryError | SerializedError };\n\ntype BulkOperationResponse<TResponse extends { data: unknown; error?: unknown }> =\n | Pick<TResponse, 'data'>\n | { error: BaseQueryError | SerializedError };\n\ntype QueryParams = Record<string, unknown>;\n\ntype UseDocumentActions = (\n fromPreview?: boolean,\n fromRelationModal?: boolean\n) => {\n /**\n * @description Attempts to clone a document based on the provided sourceId.\n * This will return a list of the fields as an error if it's unable to clone.\n * You most likely want to use the `clone` action instead.\n */\n isLoading: boolean;\n autoClone: (args: {\n model: string;\n sourceId: string;\n locale?: string;\n }) => Promise<OperationResponse<AutoClone.Response>>;\n clone: (\n args: {\n model: string;\n documentId: string;\n params?: QueryParams;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Clone.Response>>;\n create: (\n args: {\n model: string;\n params?: QueryParams;\n },\n document: Omit<Document, 'id'>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry' }\n >['properties']\n ) => Promise<OperationResponse<Create.Response>>;\n delete: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry' }\n >['properties']\n ) => Promise<OperationResponse<Delete.Response>>;\n deleteMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkDelete.Response>>;\n discard: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n }) => Promise<OperationResponse<Discard.Response>>;\n getDocument: (args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n }) => Promise<FindOne.Response | undefined>;\n publish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n document: Partial<Document>\n ) => Promise<OperationResponse<Publish.Response>>;\n publishMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkPublish.Response>>;\n update: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n document: Partial<Document>,\n trackerProperty?: Extract<\n TrackingEvent,\n { name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry' }\n >['properties']\n ) => Promise<OperationResponse<Update.Response>>;\n unpublish: (\n args: {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: QueryParams;\n },\n discardDraft?: boolean\n ) => Promise<OperationResponse<Unpublish.Response>>;\n unpublishMany: (args: {\n model: string;\n documentIds: string[];\n params?: QueryParams;\n }) => Promise<BulkOperationResponse<BulkUnpublish.Response>>;\n};\n\ntype IUseDocumentActs = ReturnType<UseDocumentActions>;\n\n/**\n * @alpha\n * @public\n * @description Contains all the operations that can be performed on a single document.\n * Designed to be able to be used anywhere within a Strapi app. The hooks will handle\n * notifications should the operation fail, however the response is always returned incase\n * the user needs to handle side-effects.\n * @example\n * ```tsx\n * import { Form } from '@strapi/admin/admin';\n *\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n * const { update } = useDocumentActions();\n *\n * const handleSubmit = async (data) => {\n * await update({ collectionType, model, documentId: id }, data);\n * }\n *\n * return <Form method=\"PUT\" onSubmit={handleSubmit} />\n * ```\n *\n */\nconst useDocumentActions: UseDocumentActions = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const isAiAvailable = useAIAvailability();\n const { data: aiFeatureConfig } = useGetAiFeatureConfigQuery(undefined, {\n skip: !isAiAvailable,\n });\n const isAiI18nConfigured = Boolean(aiFeatureConfig?.isAiI18nConfigured);\n\n // Get metadata from context providers for tracking purposes\n const previewContext = usePreviewContext('useDocumentActions', () => true, false);\n const relationContext = useRelationModal('useDocumentActions', () => true, false);\n const fromPreview = previewContext != undefined;\n const fromRelationModal = relationContext != undefined;\n\n const [deleteDocument, { isLoading: isDeleting }] = useDeleteDocumentMutation();\n const _delete: IUseDocumentActs['delete'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, trackerProperty) => {\n try {\n trackUsage('willDeleteEntry', trackerProperty);\n\n const res = await deleteDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.delete'),\n defaultMessage: 'Deleted document',\n }),\n });\n\n trackUsage('didDeleteEntry', trackerProperty);\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [trackUsage, deleteDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [deleteManyDocuments, { isLoading: isDeletingMany }] = useDeleteManyDocumentsMutation();\n\n const deleteMany: IUseDocumentActs['deleteMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkDeleteEntries');\n\n const res = await deleteManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.delete'),\n defaultMessage: 'Successfully deleted.',\n }),\n message: '',\n });\n\n trackUsage('didBulkDeleteEntries');\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkDeleteEntries');\n\n throw err;\n }\n },\n [trackUsage, deleteManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [discardDocument, { isLoading: isDiscardingDocument }] = useDiscardDocumentMutation();\n const discard: IUseDocumentActs['discard'] = React.useCallback(\n async ({ collectionType, model, documentId, params }) => {\n try {\n const res = await discardDocument({\n collectionType,\n model,\n documentId,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.success.record.discard',\n defaultMessage: 'Changes discarded',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [discardDocument, formatAPIError, formatMessage, toggleNotification]\n );\n\n const [publishDocument, { isLoading: isPublishing }] = usePublishDocumentMutation();\n\n const publish: IUseDocumentActs['publish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data) => {\n try {\n trackUsage('willPublishEntry', { documentId });\n\n const res = await publishDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n trackUsage('didPublishEntry', {\n documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [\n trackUsage,\n publishDocument,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n formatMessage,\n formatAPIError,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [publishManyDocuments, { isLoading: isPublishingMany }] = usePublishManyDocumentsMutation();\n const publishMany: IUseDocumentActs['publishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n // TODO Confirm tracking events for bulk publish?\n\n const res = await publishManyDocuments({\n model,\n documentIds,\n params,\n });\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.publish'),\n defaultMessage: 'Published document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n throw err;\n }\n },\n [\n // trackUsage,\n publishManyDocuments,\n toggleNotification,\n formatMessage,\n formatAPIError,\n ]\n );\n\n const [updateDocument, { isLoading: isUpdating }] = useUpdateDocumentMutation();\n const update: IUseDocumentActs['update'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, data, trackerProperty) => {\n try {\n trackUsage('willEditEntry', trackerProperty);\n\n const res = await updateDocument({\n collectionType,\n model,\n documentId,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotEditEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didEditEntry', {\n ...trackerProperty,\n documentId: res.data.data.documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n trackUsage('didNotEditEntry', { error: err, ...trackerProperty });\n\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [\n trackUsage,\n updateDocument,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n formatMessage,\n formatAPIError,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [unpublishDocument] = useUnpublishDocumentMutation();\n const unpublish: IUseDocumentActs['unpublish'] = React.useCallback(\n async ({ collectionType, model, documentId, params }, discardDraft = false) => {\n try {\n trackUsage('willUnpublishEntry');\n\n const res = await unpublishDocument({\n collectionType,\n model,\n documentId,\n params,\n data: {\n discardDraft,\n },\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didUnpublishEntry');\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.unpublish'),\n defaultMessage: 'Unpublished document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [trackUsage, unpublishDocument, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [unpublishManyDocuments, { isLoading: isUnpublishingMany }] =\n useUnpublishManyDocumentsMutation();\n const unpublishMany: IUseDocumentActs['unpublishMany'] = React.useCallback(\n async ({ model, documentIds, params }) => {\n try {\n trackUsage('willBulkUnpublishEntries');\n\n const res = await unpublishManyDocuments({\n model,\n documentIds,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n return { error: res.error };\n }\n\n trackUsage('didBulkUnpublishEntries');\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: getTranslation('success.records.unpublish'),\n defaultMessage: 'Successfully unpublished.',\n }),\n message: '',\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotBulkUnpublishEntries');\n\n throw err;\n }\n },\n [trackUsage, unpublishManyDocuments, toggleNotification, formatMessage, formatAPIError]\n );\n\n const [createDocument] = useCreateDocumentMutation();\n const create: IUseDocumentActs['create'] = React.useCallback(\n async ({ model, params }, data, trackerProperty) => {\n try {\n const res = await createDocument({\n model,\n data,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n trackUsage('didCreateEntry', {\n ...trackerProperty,\n documentId: res.data.data.documentId,\n fromPreview,\n fromRelationModal,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.save'),\n defaultMessage: 'Saved document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [\n createDocument,\n formatAPIError,\n formatMessage,\n fromPreview,\n fromRelationModal,\n toggleNotification,\n trackUsage,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [autoCloneDocument] = useAutoCloneDocumentMutation();\n const autoClone: IUseDocumentActs['autoClone'] = React.useCallback(\n async ({ model, sourceId, locale }) => {\n try {\n const res = await autoCloneDocument({\n model,\n sourceId,\n params: locale ? { locale } : undefined,\n });\n\n if ('error' in res) {\n return { error: res.error };\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n throw err;\n }\n },\n [autoCloneDocument, formatMessage, toggleNotification]\n );\n\n const [cloneDocument] = useCloneDocumentMutation();\n const clone: IUseDocumentActs['clone'] = React.useCallback(\n async ({ model, documentId, params }, body, trackerProperty) => {\n try {\n // Omit id and documentId so they are not copied to the clone\n const { id: _id, documentId: _documentId, ...restBody } = body;\n\n /**\n * If we're cloning we want to post directly to this endpoint\n * so that the relations even if they're not listed in the EditView\n * are correctly attached to the entry.\n */\n const res = await cloneDocument({\n model,\n sourceId: documentId,\n data: restBody,\n params,\n });\n\n if ('error' in res) {\n toggleNotification({ type: 'danger', message: formatAPIError(res.error) });\n\n trackUsage('didNotCreateEntry', { error: res.error, ...trackerProperty });\n\n return { error: res.error };\n }\n\n trackUsage('didCreateEntry', {\n ...trackerProperty,\n ...(isAiAvailable ? { isAiI18nConfigured } : {}),\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslation('success.record.clone'),\n defaultMessage: 'Cloned document',\n }),\n });\n\n // Redirect to normal edit view\n navigate(`../../${res.data.data.documentId}`, { relative: 'path' });\n\n return res.data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(DEFAULT_UNEXPECTED_ERROR_MSG),\n });\n\n trackUsage('didNotCreateEntry', { error: err, ...trackerProperty });\n\n throw err;\n }\n },\n [\n cloneDocument,\n trackUsage,\n toggleNotification,\n formatMessage,\n formatAPIError,\n navigate,\n isAiAvailable,\n isAiI18nConfigured,\n ]\n );\n\n const [getDoc] = useLazyGetDocumentQuery();\n const getDocument: IUseDocumentActs['getDocument'] = React.useCallback(\n async (args) => {\n const { data } = await getDoc(args);\n\n return data;\n },\n [getDoc]\n );\n\n return {\n isLoading:\n isPublishing ||\n isUpdating ||\n isDiscardingDocument ||\n isDeleting ||\n isDeletingMany ||\n isUnpublishingMany ||\n isPublishingMany,\n autoClone,\n clone,\n create,\n delete: _delete,\n deleteMany,\n discard,\n getDocument,\n publish,\n publishMany,\n unpublish,\n unpublishMany,\n update,\n } satisfies IUseDocumentActs;\n};\n\nexport { useDocumentActions };\nexport type { UseDocumentActions, OperationResponse };\n"],"names":["DEFAULT_UNEXPECTED_ERROR_MSG","id","defaultMessage","useDocumentActions","toggleNotification","useNotification","formatMessage","useIntl","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","navigate","useNavigate","isAiAvailable","useAIAvailability","data","aiFeatureConfig","useGetAiFeatureConfigQuery","undefined","skip","isAiI18nConfigured","Boolean","previewContext","usePreviewContext","relationContext","useRelationModal","fromPreview","fromRelationModal","deleteDocument","isLoading","isDeleting","useDeleteDocumentMutation","_delete","React","useCallback","collectionType","model","documentId","params","trackerProperty","res","type","message","error","getTranslation","err","deleteManyDocuments","isDeletingMany","useDeleteManyDocumentsMutation","deleteMany","documentIds","title","discardDocument","isDiscardingDocument","useDiscardDocumentMutation","discard","publishDocument","isPublishing","usePublishDocumentMutation","publish","publishManyDocuments","isPublishingMany","usePublishManyDocumentsMutation","publishMany","updateDocument","isUpdating","useUpdateDocumentMutation","update","unpublishDocument","useUnpublishDocumentMutation","unpublish","discardDraft","unpublishManyDocuments","isUnpublishingMany","useUnpublishManyDocumentsMutation","unpublishMany","createDocument","useCreateDocumentMutation","create","autoCloneDocument","useAutoCloneDocumentMutation","autoClone","sourceId","locale","cloneDocument","useCloneDocumentMutation","clone","body","_id","_documentId","restBody","relative","getDoc","useLazyGetDocumentQuery","getDocument","args","delete"],"mappings":"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"}
|
package/dist/admin/layout.js
CHANGED
|
@@ -107,11 +107,9 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
107
107
|
if (!contentTypeMatch && authorisedModels.length > 0 && pathname !== '/content-manager/403' && pathname !== '/content-manager/no-content-types') {
|
|
108
108
|
// On desktop: redirect to first collection type
|
|
109
109
|
if (!isMobile) {
|
|
110
|
+
// Let the list restore saved preferences before applying its defaults.
|
|
110
111
|
return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
|
|
111
|
-
to:
|
|
112
|
-
pathname: authorisedModels[0].to,
|
|
113
|
-
search: authorisedModels[0].search ?? ''
|
|
114
|
-
},
|
|
112
|
+
to: authorisedModels[0].to,
|
|
115
113
|
replace: true
|
|
116
114
|
});
|
|
117
115
|
}
|
package/dist/admin/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sources":["../../admin/src/layout.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport {\n Page,\n Layouts,\n SubNav,\n useIsMobile,\n LazyOutlet,\n useQueryParams,\n useNotification,\n useAuth,\n} from '@strapi/admin/strapi-admin';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\nimport type { CardDragPreviewProps } from './components/DragPreviews/CardDragPreview';\nimport type { ComponentDragPreviewProps } from './components/DragPreviews/ComponentDragPreview';\nimport type { RelationDragPreviewProps } from './components/DragPreviews/RelationDragPreview';\nimport type { To } from 'react-router-dom';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n const isMobile = useIsMobile();\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const permissions = useAuth('Layout', (state) => state.permissions);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n const requestedLocale = query.plugins?.i18n?.locale;\n const localeScopedPermissions = permissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n Array.isArray(permission.properties?.locales)\n );\n const contentTypePermissions = localeScopedPermissions.filter(\n (permission) => permission.subject === contentTypeMatch?.params.uid\n );\n const accessibleLocales = Array.from(\n new Set(\n (contentTypePermissions.length > 0\n ? contentTypePermissions\n : localeScopedPermissions\n ).flatMap((permission) => permission.properties?.locales as string[])\n )\n );\n\n if (typeof requestedLocale === 'string' && accessibleLocales.length > 0) {\n if (!accessibleLocales.includes(requestedLocale)) {\n const search = stringify({\n ...query,\n plugins: {\n ...query.plugins,\n i18n: { ...query.plugins?.i18n, locale: accessibleLocales[0] },\n },\n });\n\n return <NavigateWithLocaleWarning to={{ pathname, search }} />;\n }\n } else {\n return <Navigate to=\"/content-manager/403\" replace />;\n }\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/content-manager/no-content-types') {\n return <Navigate to=\"/content-manager/no-content-types\" replace />;\n }\n\n // On /content-manager base route\n if (\n !contentTypeMatch &&\n authorisedModels.length > 0 &&\n pathname !== '/content-manager/403' &&\n pathname !== '/content-manager/no-content-types'\n ) {\n // On desktop: redirect to first collection type\n if (!isMobile) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n // On mobile: show navigation page\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <SubNav.PageWrapper>\n <LeftMenu isFullPage />\n </SubNav.PageWrapper>\n </>\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <LazyOutlet nested />\n </Layouts.Root>\n </>\n );\n};\n\nconst NavigateWithLocaleWarning = ({ to }: { to: To }) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n toggleNotification({\n type: 'warning',\n message: formatMessage({\n id: getTranslation('permissions.not-allowed.locale'),\n defaultMessage:\n \"You don't have the permissions to access this content for the requested locale\",\n }),\n });\n }, [toggleNotification, formatMessage]);\n\n return <Navigate to={to} replace />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return isCardDragItem(item) ? <CardDragPreview label={item.label} /> : null;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return isComponentDragItem(item) ? (\n <ComponentDragPreview displayedValue={item.displayedValue} />\n ) : null;\n\n case ItemTypes.RELATION:\n return isRelationDragItem(item) ? <RelationDragPreview {...item} /> : null;\n\n default:\n return null;\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object';\n};\n\nconst isCardDragItem = (item: unknown): item is CardDragPreviewProps => {\n return isRecord(item) && typeof item.label === 'string';\n};\n\nconst isComponentDragItem = (item: unknown): item is ComponentDragPreviewProps => {\n return isRecord(item) && typeof item.displayedValue === 'string';\n};\n\nconst isRelationDragItem = (item: unknown): item is RelationDragPreviewProps => {\n return (\n isRecord(item) &&\n typeof item.displayedValue === 'string' &&\n (typeof item.id === 'string' || typeof item.id === 'number') &&\n typeof item.index === 'number' &&\n typeof item.width === 'number' &&\n (item.status === undefined || typeof item.status === 'string')\n );\n};\n\nexport { Layout };\n"],"names":["Layout","contentTypeMatch","useMatch","isMobile","useIsMobile","isLoading","collectionTypeLinks","models","singleTypeLinks","useContentManagerInitData","authorisedModels","sort","a","b","title","localeCompare","pathname","useLocation","formatMessage","useIntl","query","useQueryParams","permissions","useAuth","state","_jsxs","_Fragment","_jsx","Page","Title","id","getTranslation","defaultMessage","Loading","supportedModelsToDisplay","filter","isDisplayed","length","requestedLocale","plugins","i18n","locale","localeScopedPermissions","permission","action","Array","isArray","properties","locales","contentTypePermissions","subject","params","uid","accessibleLocales","from","Set","flatMap","includes","search","stringify","NavigateWithLocaleWarning","to","Navigate","replace","SubNav","PageWrapper","LeftMenu","isFullPage","Layouts","Root","sideNav","DragLayer","renderItem","renderDraglayerItem","LazyOutlet","nested","toggleNotification","useNotification","React","useEffect","type","message","item","actualType","split","ItemTypes","EDIT_FIELD","FIELD","isCardDragItem","CardDragPreview","label","COMPONENT","DYNAMIC_ZONE","isComponentDragItem","ComponentDragPreview","displayedValue","RELATION","isRelationDragItem","RelationDragPreview","isRecord","value","index","width","status","undefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layout.js","sources":["../../admin/src/layout.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport {\n Page,\n Layouts,\n SubNav,\n useIsMobile,\n LazyOutlet,\n useQueryParams,\n useNotification,\n useAuth,\n} from '@strapi/admin/strapi-admin';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\nimport type { CardDragPreviewProps } from './components/DragPreviews/CardDragPreview';\nimport type { ComponentDragPreviewProps } from './components/DragPreviews/ComponentDragPreview';\nimport type { RelationDragPreviewProps } from './components/DragPreviews/RelationDragPreview';\nimport type { To } from 'react-router-dom';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n const isMobile = useIsMobile();\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const permissions = useAuth('Layout', (state) => state.permissions);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n const requestedLocale = query.plugins?.i18n?.locale;\n const localeScopedPermissions = permissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n Array.isArray(permission.properties?.locales)\n );\n const contentTypePermissions = localeScopedPermissions.filter(\n (permission) => permission.subject === contentTypeMatch?.params.uid\n );\n const accessibleLocales = Array.from(\n new Set(\n (contentTypePermissions.length > 0\n ? contentTypePermissions\n : localeScopedPermissions\n ).flatMap((permission) => permission.properties?.locales as string[])\n )\n );\n\n if (typeof requestedLocale === 'string' && accessibleLocales.length > 0) {\n if (!accessibleLocales.includes(requestedLocale)) {\n const search = stringify({\n ...query,\n plugins: {\n ...query.plugins,\n i18n: { ...query.plugins?.i18n, locale: accessibleLocales[0] },\n },\n });\n\n return <NavigateWithLocaleWarning to={{ pathname, search }} />;\n }\n } else {\n return <Navigate to=\"/content-manager/403\" replace />;\n }\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/content-manager/no-content-types') {\n return <Navigate to=\"/content-manager/no-content-types\" replace />;\n }\n\n // On /content-manager base route\n if (\n !contentTypeMatch &&\n authorisedModels.length > 0 &&\n pathname !== '/content-manager/403' &&\n pathname !== '/content-manager/no-content-types'\n ) {\n // On desktop: redirect to first collection type\n if (!isMobile) {\n // Let the list restore saved preferences before applying its defaults.\n return <Navigate to={authorisedModels[0].to} replace />;\n }\n\n // On mobile: show navigation page\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <SubNav.PageWrapper>\n <LeftMenu isFullPage />\n </SubNav.PageWrapper>\n </>\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <LazyOutlet nested />\n </Layouts.Root>\n </>\n );\n};\n\nconst NavigateWithLocaleWarning = ({ to }: { to: To }) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n toggleNotification({\n type: 'warning',\n message: formatMessage({\n id: getTranslation('permissions.not-allowed.locale'),\n defaultMessage:\n \"You don't have the permissions to access this content for the requested locale\",\n }),\n });\n }, [toggleNotification, formatMessage]);\n\n return <Navigate to={to} replace />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return isCardDragItem(item) ? <CardDragPreview label={item.label} /> : null;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return isComponentDragItem(item) ? (\n <ComponentDragPreview displayedValue={item.displayedValue} />\n ) : null;\n\n case ItemTypes.RELATION:\n return isRelationDragItem(item) ? <RelationDragPreview {...item} /> : null;\n\n default:\n return null;\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object';\n};\n\nconst isCardDragItem = (item: unknown): item is CardDragPreviewProps => {\n return isRecord(item) && typeof item.label === 'string';\n};\n\nconst isComponentDragItem = (item: unknown): item is ComponentDragPreviewProps => {\n return isRecord(item) && typeof item.displayedValue === 'string';\n};\n\nconst isRelationDragItem = (item: unknown): item is RelationDragPreviewProps => {\n return (\n isRecord(item) &&\n typeof item.displayedValue === 'string' &&\n (typeof item.id === 'string' || typeof item.id === 'number') &&\n typeof item.index === 'number' &&\n typeof item.width === 'number' &&\n (item.status === undefined || typeof item.status === 'string')\n );\n};\n\nexport { Layout };\n"],"names":["Layout","contentTypeMatch","useMatch","isMobile","useIsMobile","isLoading","collectionTypeLinks","models","singleTypeLinks","useContentManagerInitData","authorisedModels","sort","a","b","title","localeCompare","pathname","useLocation","formatMessage","useIntl","query","useQueryParams","permissions","useAuth","state","_jsxs","_Fragment","_jsx","Page","Title","id","getTranslation","defaultMessage","Loading","supportedModelsToDisplay","filter","isDisplayed","length","requestedLocale","plugins","i18n","locale","localeScopedPermissions","permission","action","Array","isArray","properties","locales","contentTypePermissions","subject","params","uid","accessibleLocales","from","Set","flatMap","includes","search","stringify","NavigateWithLocaleWarning","to","Navigate","replace","SubNav","PageWrapper","LeftMenu","isFullPage","Layouts","Root","sideNav","DragLayer","renderItem","renderDraglayerItem","LazyOutlet","nested","toggleNotification","useNotification","React","useEffect","type","message","item","actualType","split","ItemTypes","EDIT_FIELD","FIELD","isCardDragItem","CardDragPreview","label","COMPONENT","DYNAMIC_ZONE","isComponentDragItem","ComponentDragPreview","displayedValue","RELATION","isRelationDragItem","RelationDragPreview","isRecord","value","index","width","status","undefined"],"mappings":"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"}
|
package/dist/admin/layout.mjs
CHANGED
|
@@ -85,11 +85,9 @@ import { getTranslation } from './utils/translations.mjs';
|
|
|
85
85
|
if (!contentTypeMatch && authorisedModels.length > 0 && pathname !== '/content-manager/403' && pathname !== '/content-manager/no-content-types') {
|
|
86
86
|
// On desktop: redirect to first collection type
|
|
87
87
|
if (!isMobile) {
|
|
88
|
+
// Let the list restore saved preferences before applying its defaults.
|
|
88
89
|
return /*#__PURE__*/ jsx(Navigate, {
|
|
89
|
-
to:
|
|
90
|
-
pathname: authorisedModels[0].to,
|
|
91
|
-
search: authorisedModels[0].search ?? ''
|
|
92
|
-
},
|
|
90
|
+
to: authorisedModels[0].to,
|
|
93
91
|
replace: true
|
|
94
92
|
});
|
|
95
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.mjs","sources":["../../admin/src/layout.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport {\n Page,\n Layouts,\n SubNav,\n useIsMobile,\n LazyOutlet,\n useQueryParams,\n useNotification,\n useAuth,\n} from '@strapi/admin/strapi-admin';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\nimport type { CardDragPreviewProps } from './components/DragPreviews/CardDragPreview';\nimport type { ComponentDragPreviewProps } from './components/DragPreviews/ComponentDragPreview';\nimport type { RelationDragPreviewProps } from './components/DragPreviews/RelationDragPreview';\nimport type { To } from 'react-router-dom';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n const isMobile = useIsMobile();\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const permissions = useAuth('Layout', (state) => state.permissions);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n const requestedLocale = query.plugins?.i18n?.locale;\n const localeScopedPermissions = permissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n Array.isArray(permission.properties?.locales)\n );\n const contentTypePermissions = localeScopedPermissions.filter(\n (permission) => permission.subject === contentTypeMatch?.params.uid\n );\n const accessibleLocales = Array.from(\n new Set(\n (contentTypePermissions.length > 0\n ? contentTypePermissions\n : localeScopedPermissions\n ).flatMap((permission) => permission.properties?.locales as string[])\n )\n );\n\n if (typeof requestedLocale === 'string' && accessibleLocales.length > 0) {\n if (!accessibleLocales.includes(requestedLocale)) {\n const search = stringify({\n ...query,\n plugins: {\n ...query.plugins,\n i18n: { ...query.plugins?.i18n, locale: accessibleLocales[0] },\n },\n });\n\n return <NavigateWithLocaleWarning to={{ pathname, search }} />;\n }\n } else {\n return <Navigate to=\"/content-manager/403\" replace />;\n }\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/content-manager/no-content-types') {\n return <Navigate to=\"/content-manager/no-content-types\" replace />;\n }\n\n // On /content-manager base route\n if (\n !contentTypeMatch &&\n authorisedModels.length > 0 &&\n pathname !== '/content-manager/403' &&\n pathname !== '/content-manager/no-content-types'\n ) {\n // On desktop: redirect to first collection type\n if (!isMobile) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n // On mobile: show navigation page\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <SubNav.PageWrapper>\n <LeftMenu isFullPage />\n </SubNav.PageWrapper>\n </>\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <LazyOutlet nested />\n </Layouts.Root>\n </>\n );\n};\n\nconst NavigateWithLocaleWarning = ({ to }: { to: To }) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n toggleNotification({\n type: 'warning',\n message: formatMessage({\n id: getTranslation('permissions.not-allowed.locale'),\n defaultMessage:\n \"You don't have the permissions to access this content for the requested locale\",\n }),\n });\n }, [toggleNotification, formatMessage]);\n\n return <Navigate to={to} replace />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return isCardDragItem(item) ? <CardDragPreview label={item.label} /> : null;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return isComponentDragItem(item) ? (\n <ComponentDragPreview displayedValue={item.displayedValue} />\n ) : null;\n\n case ItemTypes.RELATION:\n return isRelationDragItem(item) ? <RelationDragPreview {...item} /> : null;\n\n default:\n return null;\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object';\n};\n\nconst isCardDragItem = (item: unknown): item is CardDragPreviewProps => {\n return isRecord(item) && typeof item.label === 'string';\n};\n\nconst isComponentDragItem = (item: unknown): item is ComponentDragPreviewProps => {\n return isRecord(item) && typeof item.displayedValue === 'string';\n};\n\nconst isRelationDragItem = (item: unknown): item is RelationDragPreviewProps => {\n return (\n isRecord(item) &&\n typeof item.displayedValue === 'string' &&\n (typeof item.id === 'string' || typeof item.id === 'number') &&\n typeof item.index === 'number' &&\n typeof item.width === 'number' &&\n (item.status === undefined || typeof item.status === 'string')\n );\n};\n\nexport { Layout };\n"],"names":["Layout","contentTypeMatch","useMatch","isMobile","useIsMobile","isLoading","collectionTypeLinks","models","singleTypeLinks","useContentManagerInitData","authorisedModels","sort","a","b","title","localeCompare","pathname","useLocation","formatMessage","useIntl","query","useQueryParams","permissions","useAuth","state","_jsxs","_Fragment","_jsx","Page","Title","id","getTranslation","defaultMessage","Loading","supportedModelsToDisplay","filter","isDisplayed","length","requestedLocale","plugins","i18n","locale","localeScopedPermissions","permission","action","Array","isArray","properties","locales","contentTypePermissions","subject","params","uid","accessibleLocales","from","Set","flatMap","includes","search","stringify","NavigateWithLocaleWarning","to","Navigate","replace","SubNav","PageWrapper","LeftMenu","isFullPage","Layouts","Root","sideNav","DragLayer","renderItem","renderDraglayerItem","LazyOutlet","nested","toggleNotification","useNotification","React","useEffect","type","message","item","actualType","split","ItemTypes","EDIT_FIELD","FIELD","isCardDragItem","CardDragPreview","label","COMPONENT","DYNAMIC_ZONE","isComponentDragItem","ComponentDragPreview","displayedValue","RELATION","isRelationDragItem","RelationDragPreview","isRecord","value","index","width","status","undefined"],"mappings":";;;;;;;;;;;;;;;AA+BA;;AAEkG,2GAE5FA,MAAAA,GAAS,IAAA;AACb,IAAA,MAAMC,mBAAmBC,QAAAA,CAAS,+BAAA,CAAA;AAClC,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;IAEjB,MAAM,EAAEC,SAAS,EAAEC,mBAAmB,EAAEC,MAAM,EAAEC,eAAe,EAAE,GAAGC,yBAAAA,EAAAA;AACpE,IAAA,MAAMC,gBAAAA,GAAmB;AAAIJ,QAAAA,GAAAA,mBAAAA;AAAwBE,QAAAA,GAAAA;KAAgB,CAACG,IAAI,CAAC,CAACC,CAAAA,EAAGC,CAAAA,GAC7ED,CAAAA,CAAEE,KAAK,CAACC,aAAa,CAACF,CAAAA,CAAEC,KAAK,CAAA,CAAA;IAG/B,MAAM,EAAEE,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;IACrB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,cAAcC,OAAAA,CAAQ,QAAA,EAAU,CAACC,KAAAA,GAAUA,MAAMF,WAAW,CAAA;AAElE,IAAA,IAAIjB,SAAAA,EAAW;QACb,qBACEoB,IAAA,CAAAC,QAAA,EAAA;;AACE,8BAAAC,GAAA,CAACC,KAAKC,KAAK,EAAA;8BACRX,aAAAA,CAAc;AACbY,wBAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;wBACnBC,cAAAA,EAAgB;AAClB,qBAAA;;AAEF,8BAAAL,GAAA,CAACC,KAAKK,OAAO,EAAA,EAAA;;;AAGnB,IAAA;;IAGA,MAAMC,wBAAAA,GAA2B3B,OAAO4B,MAAM,CAAC,CAAC,EAAEC,WAAW,EAAE,GAAKA,WAAAA,CAAAA;;IAGpE,IACE1B,gBAAAA,CAAiB2B,MAAM,KAAK,CAAA,IAC5BH,yBAAyBG,MAAM,GAAG,CAAA,IAClCrB,QAAAA,KAAa,sBAAA,EACb;AACA,QAAA,MAAMsB,eAAAA,GAAkBlB,KAAAA,CAAMmB,OAAO,EAAEC,IAAAA,EAAMC,MAAAA;AAC7C,QAAA,MAAMC,uBAAAA,GAA0BpB,WAAAA,CAAYa,MAAM,CAChD,CAACQ,UAAAA,GACCA,UAAAA,CAAWC,MAAM,KAAK,2CACtBC,KAAAA,CAAMC,OAAO,CAACH,UAAAA,CAAWI,UAAU,EAAEC,OAAAA,CAAAA,CAAAA;QAEzC,MAAMC,sBAAAA,GAAyBP,uBAAAA,CAAwBP,MAAM,CAC3D,CAACQ,aAAeA,UAAAA,CAAWO,OAAO,KAAKjD,gBAAAA,EAAkBkD,MAAAA,CAAOC,GAAAA,CAAAA;QAElE,MAAMC,iBAAAA,GAAoBR,MAAMS,IAAI,CAClC,IAAIC,GAAAA,CACDN,CAAAA,sBAAAA,CAAuBZ,MAAM,GAAG,CAAA,GAC7BY,sBAAAA,GACAP,uBAAsB,EACxBc,OAAO,CAAC,CAACb,UAAAA,GAAeA,UAAAA,CAAWI,UAAU,EAAEC,OAAAA,CAAAA,CAAAA,CAAAA;AAIrD,QAAA,IAAI,OAAOV,eAAAA,KAAoB,QAAA,IAAYe,iBAAAA,CAAkBhB,MAAM,GAAG,CAAA,EAAG;AACvE,YAAA,IAAI,CAACgB,iBAAAA,CAAkBI,QAAQ,CAACnB,eAAAA,CAAAA,EAAkB;AAChD,gBAAA,MAAMoB,SAASC,SAAAA,CAAU;AACvB,oBAAA,GAAGvC,KAAK;oBACRmB,OAAAA,EAAS;AACP,wBAAA,GAAGnB,MAAMmB,OAAO;wBAChBC,IAAAA,EAAM;4BAAE,GAAGpB,KAAAA,CAAMmB,OAAO,EAAEC,IAAI;4BAAEC,MAAAA,EAAQY,iBAAiB,CAAC,CAAA;AAAG;AAC/D;AACF,iBAAA,CAAA;AAEA,gBAAA,qBAAO1B,GAAA,CAACiC,yBAAAA,EAAAA;oBAA0BC,EAAAA,EAAI;AAAE7C,wBAAAA,QAAAA;AAAU0C,wBAAAA;AAAO;;AAC3D,YAAA;QACF,CAAA,MAAO;AACL,YAAA,qBAAO/B,GAAA,CAACmC,QAAAA,EAAAA;gBAASD,EAAAA,EAAG,sBAAA;gBAAuBE,OAAO,EAAA;;AACpD,QAAA;AACF,IAAA;;AAGA,IAAA,IAAI7B,wBAAAA,CAAyBG,MAAM,KAAK,CAAA,IAAKrB,aAAa,mCAAA,EAAqC;AAC7F,QAAA,qBAAOW,GAAA,CAACmC,QAAAA,EAAAA;YAASD,EAAAA,EAAG,mCAAA;YAAoCE,OAAO,EAAA;;AACjE,IAAA;;IAGA,IACE,CAAC9D,oBACDS,gBAAAA,CAAiB2B,MAAM,GAAG,CAAA,IAC1BrB,QAAAA,KAAa,sBAAA,IACbA,QAAAA,KAAa,mCAAA,EACb;;AAEA,QAAA,IAAI,CAACb,QAAAA,EAAU;AACb,YAAA,qBACEwB,GAAA,CAACmC,QAAAA,EAAAA;gBACCD,EAAAA,EAAI;AACF7C,oBAAAA,QAAAA,EAAUN,gBAAgB,CAAC,CAAA,CAAE,CAACmD,EAAE;AAChCH,oBAAAA,MAAAA,EAAQhD,gBAAgB,CAAC,CAAA,CAAE,CAACgD,MAAM,IAAI;AACxC,iBAAA;gBACAK,OAAO,EAAA;;AAGb,QAAA;;QAGA,qBACEtC,IAAA,CAAAC,QAAA,EAAA;;AACE,8BAAAC,GAAA,CAACC,KAAKC,KAAK,EAAA;8BACRX,aAAAA,CAAc;AACbY,wBAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;wBACnBC,cAAAA,EAAgB;AAClB,qBAAA;;AAEF,8BAAAL,GAAA,CAACqC,OAAOC,WAAW,EAAA;AACjB,oBAAA,QAAA,gBAAAtC,GAAA,CAACuC,QAAAA,EAAAA;wBAASC,UAAU,EAAA;;;;;AAI5B,IAAA;IAEA,qBACE1C,IAAA,CAAAC,QAAA,EAAA;;AACE,0BAAAC,GAAA,CAACC,KAAKC,KAAK,EAAA;0BACRX,aAAAA,CAAc;AACbY,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;oBACnBC,cAAAA,EAAgB;AAClB,iBAAA;;AAEF,0BAAAP,IAAA,CAAC2C,QAAQC,IAAI,EAAA;AAACC,gBAAAA,OAAAA,gBAAS3C,GAAA,CAACuC,QAAAA,EAAAA,EAAAA,CAAAA;;kCACtBvC,GAAA,CAAC4C,SAAAA,EAAAA;wBAAUC,UAAAA,EAAYC;;kCACvB9C,GAAA,CAAC+C,UAAAA,EAAAA;wBAAWC,MAAM,EAAA;;;;;;AAI1B;AAEA,MAAMf,yBAAAA,GAA4B,CAAC,EAAEC,EAAE,EAAc,GAAA;IACnD,MAAM,EAAEe,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAE3D,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B2D,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;QACdH,kBAAAA,CAAmB;YACjBI,IAAAA,EAAM,SAAA;AACNC,YAAAA,OAAAA,EAAS/D,aAAAA,CAAc;AACrBY,gBAAAA,EAAAA,EAAIC,cAAAA,CAAe,gCAAA,CAAA;gBACnBC,cAAAA,EACE;AACJ,aAAA;AACF,SAAA,CAAA;IACF,CAAA,EAAG;AAAC4C,QAAAA,kBAAAA;AAAoB1D,QAAAA;AAAc,KAAA,CAAA;AAEtC,IAAA,qBAAOS,GAAA,CAACmC,QAAAA,EAAAA;QAASD,EAAAA,EAAIA,EAAAA;QAAIE,OAAO,EAAA;;AAClC,CAAA;AAEA;;AAEkG,qGAElG,SAASU,mBAAAA,CAAoB,EAAEO,IAAI,EAAEE,IAAI,EAA+C,EAAA;AACtF,IAAA,IAAI,CAACF,IAAAA,IAASA,IAAAA,IAAQ,OAAOA,SAAS,QAAA,EAAW;QAC/C,OAAO,IAAA;AACT,IAAA;AAEA;;;;AAIC,MACD,MAAM,CAACG,UAAAA,CAAW,GAAGH,IAAAA,CAAKI,KAAK,CAAC,GAAA,CAAA;IAEhC,OAAQD,UAAAA;AACN,QAAA,KAAKE,UAAUC,UAAU;AACzB,QAAA,KAAKD,UAAUE,KAAK;YAClB,OAAOC,cAAAA,CAAeN,sBAAQvD,GAAA,CAAC8D,eAAAA,EAAAA;AAAgBC,gBAAAA,KAAAA,EAAOR,KAAKQ;AAAY,aAAA,CAAA,GAAA,IAAA;AACzE,QAAA,KAAKL,UAAUM,SAAS;AACxB,QAAA,KAAKN,UAAUO,YAAY;YACzB,OAAOC,mBAAAA,CAAoBX,sBACzBvD,GAAA,CAACmE,oBAAAA,EAAAA;AAAqBC,gBAAAA,cAAAA,EAAgBb,KAAKa;AACzC,aAAA,CAAA,GAAA,IAAA;AAEN,QAAA,KAAKV,UAAUW,QAAQ;YACrB,OAAOC,kBAAAA,CAAmBf,sBAAQvD,GAAA,CAACuE,mBAAAA,EAAAA;AAAqB,gBAAA,GAAGhB;AAAW,aAAA,CAAA,GAAA,IAAA;AAExE,QAAA;YACE,OAAO,IAAA;AACX;AACF;AAEA,MAAMiB,WAAW,CAACC,KAAAA,GAAAA;IAChB,OAAOA,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA;AAC5C,CAAA;AAEA,MAAMZ,iBAAiB,CAACN,IAAAA,GAAAA;AACtB,IAAA,OAAOiB,QAAAA,CAASjB,IAAAA,CAAAA,IAAS,OAAOA,IAAAA,CAAKQ,KAAK,KAAK,QAAA;AACjD,CAAA;AAEA,MAAMG,sBAAsB,CAACX,IAAAA,GAAAA;AAC3B,IAAA,OAAOiB,QAAAA,CAASjB,IAAAA,CAAAA,IAAS,OAAOA,IAAAA,CAAKa,cAAc,KAAK,QAAA;AAC1D,CAAA;AAEA,MAAME,qBAAqB,CAACf,IAAAA,GAAAA;AAC1B,IAAA,OACEiB,SAASjB,IAAAA,CAAAA,IACT,OAAOA,IAAAA,CAAKa,cAAc,KAAK,QAAA,KAC9B,OAAOb,IAAAA,CAAKpD,EAAE,KAAK,QAAA,IAAY,OAAOoD,IAAAA,CAAKpD,EAAE,KAAK,QAAO,CAAA,IAC1D,OAAOoD,IAAAA,CAAKmB,KAAK,KAAK,QAAA,IACtB,OAAOnB,IAAAA,CAAKoB,KAAK,KAAK,QAAA,KACrBpB,IAAAA,CAAKqB,MAAM,KAAKC,SAAAA,IAAa,OAAOtB,IAAAA,CAAKqB,MAAM,KAAK,QAAO,CAAA;AAEhE,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"layout.mjs","sources":["../../admin/src/layout.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport {\n Page,\n Layouts,\n SubNav,\n useIsMobile,\n LazyOutlet,\n useQueryParams,\n useNotification,\n useAuth,\n} from '@strapi/admin/strapi-admin';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\nimport type { CardDragPreviewProps } from './components/DragPreviews/CardDragPreview';\nimport type { ComponentDragPreviewProps } from './components/DragPreviews/ComponentDragPreview';\nimport type { RelationDragPreviewProps } from './components/DragPreviews/RelationDragPreview';\nimport type { To } from 'react-router-dom';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n const isMobile = useIsMobile();\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const permissions = useAuth('Layout', (state) => state.permissions);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n const requestedLocale = query.plugins?.i18n?.locale;\n const localeScopedPermissions = permissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n Array.isArray(permission.properties?.locales)\n );\n const contentTypePermissions = localeScopedPermissions.filter(\n (permission) => permission.subject === contentTypeMatch?.params.uid\n );\n const accessibleLocales = Array.from(\n new Set(\n (contentTypePermissions.length > 0\n ? contentTypePermissions\n : localeScopedPermissions\n ).flatMap((permission) => permission.properties?.locales as string[])\n )\n );\n\n if (typeof requestedLocale === 'string' && accessibleLocales.length > 0) {\n if (!accessibleLocales.includes(requestedLocale)) {\n const search = stringify({\n ...query,\n plugins: {\n ...query.plugins,\n i18n: { ...query.plugins?.i18n, locale: accessibleLocales[0] },\n },\n });\n\n return <NavigateWithLocaleWarning to={{ pathname, search }} />;\n }\n } else {\n return <Navigate to=\"/content-manager/403\" replace />;\n }\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/content-manager/no-content-types') {\n return <Navigate to=\"/content-manager/no-content-types\" replace />;\n }\n\n // On /content-manager base route\n if (\n !contentTypeMatch &&\n authorisedModels.length > 0 &&\n pathname !== '/content-manager/403' &&\n pathname !== '/content-manager/no-content-types'\n ) {\n // On desktop: redirect to first collection type\n if (!isMobile) {\n // Let the list restore saved preferences before applying its defaults.\n return <Navigate to={authorisedModels[0].to} replace />;\n }\n\n // On mobile: show navigation page\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <SubNav.PageWrapper>\n <LeftMenu isFullPage />\n </SubNav.PageWrapper>\n </>\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <LazyOutlet nested />\n </Layouts.Root>\n </>\n );\n};\n\nconst NavigateWithLocaleWarning = ({ to }: { to: To }) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n toggleNotification({\n type: 'warning',\n message: formatMessage({\n id: getTranslation('permissions.not-allowed.locale'),\n defaultMessage:\n \"You don't have the permissions to access this content for the requested locale\",\n }),\n });\n }, [toggleNotification, formatMessage]);\n\n return <Navigate to={to} replace />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return isCardDragItem(item) ? <CardDragPreview label={item.label} /> : null;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return isComponentDragItem(item) ? (\n <ComponentDragPreview displayedValue={item.displayedValue} />\n ) : null;\n\n case ItemTypes.RELATION:\n return isRelationDragItem(item) ? <RelationDragPreview {...item} /> : null;\n\n default:\n return null;\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object';\n};\n\nconst isCardDragItem = (item: unknown): item is CardDragPreviewProps => {\n return isRecord(item) && typeof item.label === 'string';\n};\n\nconst isComponentDragItem = (item: unknown): item is ComponentDragPreviewProps => {\n return isRecord(item) && typeof item.displayedValue === 'string';\n};\n\nconst isRelationDragItem = (item: unknown): item is RelationDragPreviewProps => {\n return (\n isRecord(item) &&\n typeof item.displayedValue === 'string' &&\n (typeof item.id === 'string' || typeof item.id === 'number') &&\n typeof item.index === 'number' &&\n typeof item.width === 'number' &&\n (item.status === undefined || typeof item.status === 'string')\n );\n};\n\nexport { Layout };\n"],"names":["Layout","contentTypeMatch","useMatch","isMobile","useIsMobile","isLoading","collectionTypeLinks","models","singleTypeLinks","useContentManagerInitData","authorisedModels","sort","a","b","title","localeCompare","pathname","useLocation","formatMessage","useIntl","query","useQueryParams","permissions","useAuth","state","_jsxs","_Fragment","_jsx","Page","Title","id","getTranslation","defaultMessage","Loading","supportedModelsToDisplay","filter","isDisplayed","length","requestedLocale","plugins","i18n","locale","localeScopedPermissions","permission","action","Array","isArray","properties","locales","contentTypePermissions","subject","params","uid","accessibleLocales","from","Set","flatMap","includes","search","stringify","NavigateWithLocaleWarning","to","Navigate","replace","SubNav","PageWrapper","LeftMenu","isFullPage","Layouts","Root","sideNav","DragLayer","renderItem","renderDraglayerItem","LazyOutlet","nested","toggleNotification","useNotification","React","useEffect","type","message","item","actualType","split","ItemTypes","EDIT_FIELD","FIELD","isCardDragItem","CardDragPreview","label","COMPONENT","DYNAMIC_ZONE","isComponentDragItem","ComponentDragPreview","displayedValue","RELATION","isRelationDragItem","RelationDragPreview","isRecord","value","index","width","status","undefined"],"mappings":";;;;;;;;;;;;;;;AA+BA;;AAEkG,2GAE5FA,MAAAA,GAAS,IAAA;AACb,IAAA,MAAMC,mBAAmBC,QAAAA,CAAS,+BAAA,CAAA;AAClC,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;IAEjB,MAAM,EAAEC,SAAS,EAAEC,mBAAmB,EAAEC,MAAM,EAAEC,eAAe,EAAE,GAAGC,yBAAAA,EAAAA;AACpE,IAAA,MAAMC,gBAAAA,GAAmB;AAAIJ,QAAAA,GAAAA,mBAAAA;AAAwBE,QAAAA,GAAAA;KAAgB,CAACG,IAAI,CAAC,CAACC,CAAAA,EAAGC,CAAAA,GAC7ED,CAAAA,CAAEE,KAAK,CAACC,aAAa,CAACF,CAAAA,CAAEC,KAAK,CAAA,CAAA;IAG/B,MAAM,EAAEE,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;IACrB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,cAAcC,OAAAA,CAAQ,QAAA,EAAU,CAACC,KAAAA,GAAUA,MAAMF,WAAW,CAAA;AAElE,IAAA,IAAIjB,SAAAA,EAAW;QACb,qBACEoB,IAAA,CAAAC,QAAA,EAAA;;AACE,8BAAAC,GAAA,CAACC,KAAKC,KAAK,EAAA;8BACRX,aAAAA,CAAc;AACbY,wBAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;wBACnBC,cAAAA,EAAgB;AAClB,qBAAA;;AAEF,8BAAAL,GAAA,CAACC,KAAKK,OAAO,EAAA,EAAA;;;AAGnB,IAAA;;IAGA,MAAMC,wBAAAA,GAA2B3B,OAAO4B,MAAM,CAAC,CAAC,EAAEC,WAAW,EAAE,GAAKA,WAAAA,CAAAA;;IAGpE,IACE1B,gBAAAA,CAAiB2B,MAAM,KAAK,CAAA,IAC5BH,yBAAyBG,MAAM,GAAG,CAAA,IAClCrB,QAAAA,KAAa,sBAAA,EACb;AACA,QAAA,MAAMsB,eAAAA,GAAkBlB,KAAAA,CAAMmB,OAAO,EAAEC,IAAAA,EAAMC,MAAAA;AAC7C,QAAA,MAAMC,uBAAAA,GAA0BpB,WAAAA,CAAYa,MAAM,CAChD,CAACQ,UAAAA,GACCA,UAAAA,CAAWC,MAAM,KAAK,2CACtBC,KAAAA,CAAMC,OAAO,CAACH,UAAAA,CAAWI,UAAU,EAAEC,OAAAA,CAAAA,CAAAA;QAEzC,MAAMC,sBAAAA,GAAyBP,uBAAAA,CAAwBP,MAAM,CAC3D,CAACQ,aAAeA,UAAAA,CAAWO,OAAO,KAAKjD,gBAAAA,EAAkBkD,MAAAA,CAAOC,GAAAA,CAAAA;QAElE,MAAMC,iBAAAA,GAAoBR,MAAMS,IAAI,CAClC,IAAIC,GAAAA,CACDN,CAAAA,sBAAAA,CAAuBZ,MAAM,GAAG,CAAA,GAC7BY,sBAAAA,GACAP,uBAAsB,EACxBc,OAAO,CAAC,CAACb,UAAAA,GAAeA,UAAAA,CAAWI,UAAU,EAAEC,OAAAA,CAAAA,CAAAA,CAAAA;AAIrD,QAAA,IAAI,OAAOV,eAAAA,KAAoB,QAAA,IAAYe,iBAAAA,CAAkBhB,MAAM,GAAG,CAAA,EAAG;AACvE,YAAA,IAAI,CAACgB,iBAAAA,CAAkBI,QAAQ,CAACnB,eAAAA,CAAAA,EAAkB;AAChD,gBAAA,MAAMoB,SAASC,SAAAA,CAAU;AACvB,oBAAA,GAAGvC,KAAK;oBACRmB,OAAAA,EAAS;AACP,wBAAA,GAAGnB,MAAMmB,OAAO;wBAChBC,IAAAA,EAAM;4BAAE,GAAGpB,KAAAA,CAAMmB,OAAO,EAAEC,IAAI;4BAAEC,MAAAA,EAAQY,iBAAiB,CAAC,CAAA;AAAG;AAC/D;AACF,iBAAA,CAAA;AAEA,gBAAA,qBAAO1B,GAAA,CAACiC,yBAAAA,EAAAA;oBAA0BC,EAAAA,EAAI;AAAE7C,wBAAAA,QAAAA;AAAU0C,wBAAAA;AAAO;;AAC3D,YAAA;QACF,CAAA,MAAO;AACL,YAAA,qBAAO/B,GAAA,CAACmC,QAAAA,EAAAA;gBAASD,EAAAA,EAAG,sBAAA;gBAAuBE,OAAO,EAAA;;AACpD,QAAA;AACF,IAAA;;AAGA,IAAA,IAAI7B,wBAAAA,CAAyBG,MAAM,KAAK,CAAA,IAAKrB,aAAa,mCAAA,EAAqC;AAC7F,QAAA,qBAAOW,GAAA,CAACmC,QAAAA,EAAAA;YAASD,EAAAA,EAAG,mCAAA;YAAoCE,OAAO,EAAA;;AACjE,IAAA;;IAGA,IACE,CAAC9D,oBACDS,gBAAAA,CAAiB2B,MAAM,GAAG,CAAA,IAC1BrB,QAAAA,KAAa,sBAAA,IACbA,QAAAA,KAAa,mCAAA,EACb;;AAEA,QAAA,IAAI,CAACb,QAAAA,EAAU;;AAEb,YAAA,qBAAOwB,GAAA,CAACmC,QAAAA,EAAAA;AAASD,gBAAAA,EAAAA,EAAInD,gBAAgB,CAAC,CAAA,CAAE,CAACmD,EAAE;gBAAEE,OAAO,EAAA;;AACtD,QAAA;;QAGA,qBACEtC,IAAA,CAAAC,QAAA,EAAA;;AACE,8BAAAC,GAAA,CAACC,KAAKC,KAAK,EAAA;8BACRX,aAAAA,CAAc;AACbY,wBAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;wBACnBC,cAAAA,EAAgB;AAClB,qBAAA;;AAEF,8BAAAL,GAAA,CAACqC,OAAOC,WAAW,EAAA;AACjB,oBAAA,QAAA,gBAAAtC,GAAA,CAACuC,QAAAA,EAAAA;wBAASC,UAAU,EAAA;;;;;AAI5B,IAAA;IAEA,qBACE1C,IAAA,CAAAC,QAAA,EAAA;;AACE,0BAAAC,GAAA,CAACC,KAAKC,KAAK,EAAA;0BACRX,aAAAA,CAAc;AACbY,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;oBACnBC,cAAAA,EAAgB;AAClB,iBAAA;;AAEF,0BAAAP,IAAA,CAAC2C,QAAQC,IAAI,EAAA;AAACC,gBAAAA,OAAAA,gBAAS3C,GAAA,CAACuC,QAAAA,EAAAA,EAAAA,CAAAA;;kCACtBvC,GAAA,CAAC4C,SAAAA,EAAAA;wBAAUC,UAAAA,EAAYC;;kCACvB9C,GAAA,CAAC+C,UAAAA,EAAAA;wBAAWC,MAAM,EAAA;;;;;;AAI1B;AAEA,MAAMf,yBAAAA,GAA4B,CAAC,EAAEC,EAAE,EAAc,GAAA;IACnD,MAAM,EAAEe,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAE3D,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B2D,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;QACdH,kBAAAA,CAAmB;YACjBI,IAAAA,EAAM,SAAA;AACNC,YAAAA,OAAAA,EAAS/D,aAAAA,CAAc;AACrBY,gBAAAA,EAAAA,EAAIC,cAAAA,CAAe,gCAAA,CAAA;gBACnBC,cAAAA,EACE;AACJ,aAAA;AACF,SAAA,CAAA;IACF,CAAA,EAAG;AAAC4C,QAAAA,kBAAAA;AAAoB1D,QAAAA;AAAc,KAAA,CAAA;AAEtC,IAAA,qBAAOS,GAAA,CAACmC,QAAAA,EAAAA;QAASD,EAAAA,EAAIA,EAAAA;QAAIE,OAAO,EAAA;;AAClC,CAAA;AAEA;;AAEkG,qGAElG,SAASU,mBAAAA,CAAoB,EAAEO,IAAI,EAAEE,IAAI,EAA+C,EAAA;AACtF,IAAA,IAAI,CAACF,IAAAA,IAASA,IAAAA,IAAQ,OAAOA,SAAS,QAAA,EAAW;QAC/C,OAAO,IAAA;AACT,IAAA;AAEA;;;;AAIC,MACD,MAAM,CAACG,UAAAA,CAAW,GAAGH,IAAAA,CAAKI,KAAK,CAAC,GAAA,CAAA;IAEhC,OAAQD,UAAAA;AACN,QAAA,KAAKE,UAAUC,UAAU;AACzB,QAAA,KAAKD,UAAUE,KAAK;YAClB,OAAOC,cAAAA,CAAeN,sBAAQvD,GAAA,CAAC8D,eAAAA,EAAAA;AAAgBC,gBAAAA,KAAAA,EAAOR,KAAKQ;AAAY,aAAA,CAAA,GAAA,IAAA;AACzE,QAAA,KAAKL,UAAUM,SAAS;AACxB,QAAA,KAAKN,UAAUO,YAAY;YACzB,OAAOC,mBAAAA,CAAoBX,sBACzBvD,GAAA,CAACmE,oBAAAA,EAAAA;AAAqBC,gBAAAA,cAAAA,EAAgBb,KAAKa;AACzC,aAAA,CAAA,GAAA,IAAA;AAEN,QAAA,KAAKV,UAAUW,QAAQ;YACrB,OAAOC,kBAAAA,CAAmBf,sBAAQvD,GAAA,CAACuE,mBAAAA,EAAAA;AAAqB,gBAAA,GAAGhB;AAAW,aAAA,CAAA,GAAA,IAAA;AAExE,QAAA;YACE,OAAO,IAAA;AACX;AACF;AAEA,MAAMiB,WAAW,CAACC,KAAAA,GAAAA;IAChB,OAAOA,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA;AAC5C,CAAA;AAEA,MAAMZ,iBAAiB,CAACN,IAAAA,GAAAA;AACtB,IAAA,OAAOiB,QAAAA,CAASjB,IAAAA,CAAAA,IAAS,OAAOA,IAAAA,CAAKQ,KAAK,KAAK,QAAA;AACjD,CAAA;AAEA,MAAMG,sBAAsB,CAACX,IAAAA,GAAAA;AAC3B,IAAA,OAAOiB,QAAAA,CAASjB,IAAAA,CAAAA,IAAS,OAAOA,IAAAA,CAAKa,cAAc,KAAK,QAAA;AAC1D,CAAA;AAEA,MAAME,qBAAqB,CAACf,IAAAA,GAAAA;AAC1B,IAAA,OACEiB,SAASjB,IAAAA,CAAAA,IACT,OAAOA,IAAAA,CAAKa,cAAc,KAAK,QAAA,KAC9B,OAAOb,IAAAA,CAAKpD,EAAE,KAAK,QAAA,IAAY,OAAOoD,IAAAA,CAAKpD,EAAE,KAAK,QAAO,CAAA,IAC1D,OAAOoD,IAAAA,CAAKmB,KAAK,KAAK,QAAA,IACtB,OAAOnB,IAAAA,CAAKoB,KAAK,KAAK,QAAA,KACrBpB,IAAAA,CAAKqB,MAAM,KAAKC,SAAAA,IAAa,OAAOtB,IAAAA,CAAKqB,MAAM,KAAK,QAAO,CAAA;AAEhE,CAAA;;;;"}
|
|
@@ -5,6 +5,7 @@ var toolkit = require('@reduxjs/toolkit');
|
|
|
5
5
|
const initialState = {
|
|
6
6
|
collectionTypeLinks: [],
|
|
7
7
|
components: [],
|
|
8
|
+
contentStructure: undefined,
|
|
8
9
|
fieldSizes: {},
|
|
9
10
|
models: [],
|
|
10
11
|
singleTypeLinks: [],
|
|
@@ -15,10 +16,11 @@ const appSlice = toolkit.createSlice({
|
|
|
15
16
|
initialState,
|
|
16
17
|
reducers: {
|
|
17
18
|
setInitialData (state, action) {
|
|
18
|
-
const { authorizedCollectionTypeLinks, authorizedSingleTypeLinks, components, contentTypeSchemas, fieldSizes } = action.payload;
|
|
19
|
+
const { authorizedCollectionTypeLinks, authorizedSingleTypeLinks, components, contentStructure, contentTypeSchemas, fieldSizes } = action.payload;
|
|
19
20
|
state.collectionTypeLinks = authorizedCollectionTypeLinks.filter(({ isDisplayed })=>isDisplayed);
|
|
20
21
|
state.singleTypeLinks = authorizedSingleTypeLinks.filter(({ isDisplayed })=>isDisplayed);
|
|
21
22
|
state.components = components;
|
|
23
|
+
state.contentStructure = contentStructure;
|
|
22
24
|
state.models = contentTypeSchemas;
|
|
23
25
|
state.fieldSizes = fieldSizes;
|
|
24
26
|
state.isLoading = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sources":["../../../admin/src/modules/app.ts"],"sourcesContent":["import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { GetInitData } from '../../../shared/contracts/init';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\ninterface AppState {\n collectionTypeLinks: ContentManagerLink[];\n components: GetInitData.Response['data']['components'];\n fieldSizes: GetInitData.Response['data']['fieldSizes'];\n models: GetInitData.Response['data']['contentTypes'];\n singleTypeLinks: ContentManagerLink[];\n isLoading: boolean;\n}\n\nconst initialState: AppState = {\n collectionTypeLinks: [],\n components: [],\n fieldSizes: {},\n models: [],\n singleTypeLinks: [],\n isLoading: true,\n};\n\nconst appSlice = createSlice({\n name: 'app',\n initialState,\n reducers: {\n setInitialData(\n state,\n action: PayloadAction<{\n authorizedCollectionTypeLinks: AppState['collectionTypeLinks'];\n authorizedSingleTypeLinks: AppState['singleTypeLinks'];\n components: AppState['components'];\n contentTypeSchemas: AppState['models'];\n fieldSizes: AppState['fieldSizes'];\n }>\n ) {\n const {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n components,\n contentTypeSchemas,\n fieldSizes,\n } = action.payload;\n state.collectionTypeLinks = authorizedCollectionTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n state.singleTypeLinks = authorizedSingleTypeLinks.filter(({ isDisplayed }) => isDisplayed);\n state.components = components;\n state.models = contentTypeSchemas;\n state.fieldSizes = fieldSizes;\n state.isLoading = false;\n },\n },\n});\n\nconst { actions, reducer } = appSlice;\nconst { setInitialData } = actions;\n\nexport { reducer, setInitialData };\nexport type { AppState };\n"],"names":["initialState","collectionTypeLinks","components","fieldSizes","models","singleTypeLinks","isLoading","appSlice","createSlice","name","reducers","setInitialData","state","action","authorizedCollectionTypeLinks","authorizedSingleTypeLinks","contentTypeSchemas","payload","filter","isDisplayed","actions","reducer"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"app.js","sources":["../../../admin/src/modules/app.ts"],"sourcesContent":["import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { GetInitData } from '../../../shared/contracts/init';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\ninterface AppState {\n collectionTypeLinks: ContentManagerLink[];\n components: GetInitData.Response['data']['components'];\n contentStructure?: GetInitData.Response['data']['contentStructure'];\n fieldSizes: GetInitData.Response['data']['fieldSizes'];\n models: GetInitData.Response['data']['contentTypes'];\n singleTypeLinks: ContentManagerLink[];\n isLoading: boolean;\n}\n\nconst initialState: AppState = {\n collectionTypeLinks: [],\n components: [],\n contentStructure: undefined,\n fieldSizes: {},\n models: [],\n singleTypeLinks: [],\n isLoading: true,\n};\n\nconst appSlice = createSlice({\n name: 'app',\n initialState,\n reducers: {\n setInitialData(\n state,\n action: PayloadAction<{\n authorizedCollectionTypeLinks: AppState['collectionTypeLinks'];\n authorizedSingleTypeLinks: AppState['singleTypeLinks'];\n components: AppState['components'];\n contentStructure?: AppState['contentStructure'];\n contentTypeSchemas: AppState['models'];\n fieldSizes: AppState['fieldSizes'];\n }>\n ) {\n const {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n components,\n contentStructure,\n contentTypeSchemas,\n fieldSizes,\n } = action.payload;\n state.collectionTypeLinks = authorizedCollectionTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n state.singleTypeLinks = authorizedSingleTypeLinks.filter(({ isDisplayed }) => isDisplayed);\n state.components = components;\n state.contentStructure = contentStructure;\n state.models = contentTypeSchemas;\n state.fieldSizes = fieldSizes;\n state.isLoading = false;\n },\n },\n});\n\nconst { actions, reducer } = appSlice;\nconst { setInitialData } = actions;\n\nexport { reducer, setInitialData };\nexport type { AppState };\n"],"names":["initialState","collectionTypeLinks","components","contentStructure","undefined","fieldSizes","models","singleTypeLinks","isLoading","appSlice","createSlice","name","reducers","setInitialData","state","action","authorizedCollectionTypeLinks","authorizedSingleTypeLinks","contentTypeSchemas","payload","filter","isDisplayed","actions","reducer"],"mappings":";;;;AAgBA,MAAMA,YAAAA,GAAyB;AAC7BC,IAAAA,mBAAAA,EAAqB,EAAE;AACvBC,IAAAA,UAAAA,EAAY,EAAE;IACdC,gBAAAA,EAAkBC,SAAAA;AAClBC,IAAAA,UAAAA,EAAY,EAAC;AACbC,IAAAA,MAAAA,EAAQ,EAAE;AACVC,IAAAA,eAAAA,EAAiB,EAAE;IACnBC,SAAAA,EAAW;AACb,CAAA;AAEA,MAAMC,WAAWC,mBAAAA,CAAY;IAC3BC,IAAAA,EAAM,KAAA;AACNX,IAAAA,YAAAA;IACAY,QAAAA,EAAU;QACRC,cAAAA,CAAAA,CACEC,KAAK,EACLC,MAOE,EAAA;AAEF,YAAA,MAAM,EACJC,6BAA6B,EAC7BC,yBAAyB,EACzBf,UAAU,EACVC,gBAAgB,EAChBe,kBAAkB,EAClBb,UAAU,EACX,GAAGU,OAAOI,OAAO;YAClBL,KAAAA,CAAMb,mBAAmB,GAAGe,6BAAAA,CAA8BI,MAAM,CAC9D,CAAC,EAAEC,WAAW,EAAE,GAAKA,WAAAA,CAAAA;YAEvBP,KAAAA,CAAMP,eAAe,GAAGU,yBAAAA,CAA0BG,MAAM,CAAC,CAAC,EAAEC,WAAW,EAAE,GAAKA,WAAAA,CAAAA;AAC9EP,YAAAA,KAAAA,CAAMZ,UAAU,GAAGA,UAAAA;AACnBY,YAAAA,KAAAA,CAAMX,gBAAgB,GAAGA,gBAAAA;AACzBW,YAAAA,KAAAA,CAAMR,MAAM,GAAGY,kBAAAA;AACfJ,YAAAA,KAAAA,CAAMT,UAAU,GAAGA,UAAAA;AACnBS,YAAAA,KAAAA,CAAMN,SAAS,GAAG,KAAA;AACpB,QAAA;AACF;AACF,CAAA,CAAA;AAEA,MAAM,EAAEc,OAAO,EAAEC,OAAO,EAAE,GAAGd;AAC7B,MAAM,EAAEI,cAAc,EAAE,GAAGS;;;;;"}
|
|
@@ -3,6 +3,7 @@ import { createSlice } from '@reduxjs/toolkit';
|
|
|
3
3
|
const initialState = {
|
|
4
4
|
collectionTypeLinks: [],
|
|
5
5
|
components: [],
|
|
6
|
+
contentStructure: undefined,
|
|
6
7
|
fieldSizes: {},
|
|
7
8
|
models: [],
|
|
8
9
|
singleTypeLinks: [],
|
|
@@ -13,10 +14,11 @@ const appSlice = createSlice({
|
|
|
13
14
|
initialState,
|
|
14
15
|
reducers: {
|
|
15
16
|
setInitialData (state, action) {
|
|
16
|
-
const { authorizedCollectionTypeLinks, authorizedSingleTypeLinks, components, contentTypeSchemas, fieldSizes } = action.payload;
|
|
17
|
+
const { authorizedCollectionTypeLinks, authorizedSingleTypeLinks, components, contentStructure, contentTypeSchemas, fieldSizes } = action.payload;
|
|
17
18
|
state.collectionTypeLinks = authorizedCollectionTypeLinks.filter(({ isDisplayed })=>isDisplayed);
|
|
18
19
|
state.singleTypeLinks = authorizedSingleTypeLinks.filter(({ isDisplayed })=>isDisplayed);
|
|
19
20
|
state.components = components;
|
|
21
|
+
state.contentStructure = contentStructure;
|
|
20
22
|
state.models = contentTypeSchemas;
|
|
21
23
|
state.fieldSizes = fieldSizes;
|
|
22
24
|
state.isLoading = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.mjs","sources":["../../../admin/src/modules/app.ts"],"sourcesContent":["import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { GetInitData } from '../../../shared/contracts/init';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\ninterface AppState {\n collectionTypeLinks: ContentManagerLink[];\n components: GetInitData.Response['data']['components'];\n fieldSizes: GetInitData.Response['data']['fieldSizes'];\n models: GetInitData.Response['data']['contentTypes'];\n singleTypeLinks: ContentManagerLink[];\n isLoading: boolean;\n}\n\nconst initialState: AppState = {\n collectionTypeLinks: [],\n components: [],\n fieldSizes: {},\n models: [],\n singleTypeLinks: [],\n isLoading: true,\n};\n\nconst appSlice = createSlice({\n name: 'app',\n initialState,\n reducers: {\n setInitialData(\n state,\n action: PayloadAction<{\n authorizedCollectionTypeLinks: AppState['collectionTypeLinks'];\n authorizedSingleTypeLinks: AppState['singleTypeLinks'];\n components: AppState['components'];\n contentTypeSchemas: AppState['models'];\n fieldSizes: AppState['fieldSizes'];\n }>\n ) {\n const {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n components,\n contentTypeSchemas,\n fieldSizes,\n } = action.payload;\n state.collectionTypeLinks = authorizedCollectionTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n state.singleTypeLinks = authorizedSingleTypeLinks.filter(({ isDisplayed }) => isDisplayed);\n state.components = components;\n state.models = contentTypeSchemas;\n state.fieldSizes = fieldSizes;\n state.isLoading = false;\n },\n },\n});\n\nconst { actions, reducer } = appSlice;\nconst { setInitialData } = actions;\n\nexport { reducer, setInitialData };\nexport type { AppState };\n"],"names":["initialState","collectionTypeLinks","components","fieldSizes","models","singleTypeLinks","isLoading","appSlice","createSlice","name","reducers","setInitialData","state","action","authorizedCollectionTypeLinks","authorizedSingleTypeLinks","contentTypeSchemas","payload","filter","isDisplayed","actions","reducer"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"app.mjs","sources":["../../../admin/src/modules/app.ts"],"sourcesContent":["import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { GetInitData } from '../../../shared/contracts/init';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\ninterface AppState {\n collectionTypeLinks: ContentManagerLink[];\n components: GetInitData.Response['data']['components'];\n contentStructure?: GetInitData.Response['data']['contentStructure'];\n fieldSizes: GetInitData.Response['data']['fieldSizes'];\n models: GetInitData.Response['data']['contentTypes'];\n singleTypeLinks: ContentManagerLink[];\n isLoading: boolean;\n}\n\nconst initialState: AppState = {\n collectionTypeLinks: [],\n components: [],\n contentStructure: undefined,\n fieldSizes: {},\n models: [],\n singleTypeLinks: [],\n isLoading: true,\n};\n\nconst appSlice = createSlice({\n name: 'app',\n initialState,\n reducers: {\n setInitialData(\n state,\n action: PayloadAction<{\n authorizedCollectionTypeLinks: AppState['collectionTypeLinks'];\n authorizedSingleTypeLinks: AppState['singleTypeLinks'];\n components: AppState['components'];\n contentStructure?: AppState['contentStructure'];\n contentTypeSchemas: AppState['models'];\n fieldSizes: AppState['fieldSizes'];\n }>\n ) {\n const {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n components,\n contentStructure,\n contentTypeSchemas,\n fieldSizes,\n } = action.payload;\n state.collectionTypeLinks = authorizedCollectionTypeLinks.filter(\n ({ isDisplayed }) => isDisplayed\n );\n state.singleTypeLinks = authorizedSingleTypeLinks.filter(({ isDisplayed }) => isDisplayed);\n state.components = components;\n state.contentStructure = contentStructure;\n state.models = contentTypeSchemas;\n state.fieldSizes = fieldSizes;\n state.isLoading = false;\n },\n },\n});\n\nconst { actions, reducer } = appSlice;\nconst { setInitialData } = actions;\n\nexport { reducer, setInitialData };\nexport type { AppState };\n"],"names":["initialState","collectionTypeLinks","components","contentStructure","undefined","fieldSizes","models","singleTypeLinks","isLoading","appSlice","createSlice","name","reducers","setInitialData","state","action","authorizedCollectionTypeLinks","authorizedSingleTypeLinks","contentTypeSchemas","payload","filter","isDisplayed","actions","reducer"],"mappings":";;AAgBA,MAAMA,YAAAA,GAAyB;AAC7BC,IAAAA,mBAAAA,EAAqB,EAAE;AACvBC,IAAAA,UAAAA,EAAY,EAAE;IACdC,gBAAAA,EAAkBC,SAAAA;AAClBC,IAAAA,UAAAA,EAAY,EAAC;AACbC,IAAAA,MAAAA,EAAQ,EAAE;AACVC,IAAAA,eAAAA,EAAiB,EAAE;IACnBC,SAAAA,EAAW;AACb,CAAA;AAEA,MAAMC,WAAWC,WAAAA,CAAY;IAC3BC,IAAAA,EAAM,KAAA;AACNX,IAAAA,YAAAA;IACAY,QAAAA,EAAU;QACRC,cAAAA,CAAAA,CACEC,KAAK,EACLC,MAOE,EAAA;AAEF,YAAA,MAAM,EACJC,6BAA6B,EAC7BC,yBAAyB,EACzBf,UAAU,EACVC,gBAAgB,EAChBe,kBAAkB,EAClBb,UAAU,EACX,GAAGU,OAAOI,OAAO;YAClBL,KAAAA,CAAMb,mBAAmB,GAAGe,6BAAAA,CAA8BI,MAAM,CAC9D,CAAC,EAAEC,WAAW,EAAE,GAAKA,WAAAA,CAAAA;YAEvBP,KAAAA,CAAMP,eAAe,GAAGU,yBAAAA,CAA0BG,MAAM,CAAC,CAAC,EAAEC,WAAW,EAAE,GAAKA,WAAAA,CAAAA;AAC9EP,YAAAA,KAAAA,CAAMZ,UAAU,GAAGA,UAAAA;AACnBY,YAAAA,KAAAA,CAAMX,gBAAgB,GAAGA,gBAAAA;AACzBW,YAAAA,KAAAA,CAAMR,MAAM,GAAGY,kBAAAA;AACfJ,YAAAA,KAAAA,CAAMT,UAAU,GAAGA,UAAAA;AACnBS,YAAAA,KAAAA,CAAMN,SAAS,GAAG,KAAA;AACpB,QAAA;AACF;AACF,CAAA,CAAA;AAEA,MAAM,EAAEc,OAAO,EAAEC,OAAO,EAAE,GAAGd;AAC7B,MAAM,EAAEI,cAAc,EAAE,GAAGS;;;;"}
|
|
@@ -236,27 +236,22 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
236
236
|
})
|
|
237
237
|
]
|
|
238
238
|
}),
|
|
239
|
-
!isDesktop && /*#__PURE__*/ jsxRuntime.
|
|
240
|
-
children:
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
250
|
-
|
|
251
|
-
withActions: false
|
|
252
|
-
})
|
|
239
|
+
!isDesktop && /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
240
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(ActionsDrawer.ActionsDrawer.Root, {
|
|
241
|
+
hasContent: drawerHasContent,
|
|
242
|
+
hasSideNav: true,
|
|
243
|
+
children: [
|
|
244
|
+
/*#__PURE__*/ jsxRuntime.jsx(ActionsDrawer.ActionsDrawer.Overlay, {}),
|
|
245
|
+
/*#__PURE__*/ jsxRuntime.jsx(ActionsDrawer.ActionsDrawer.Header, {
|
|
246
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(Panels.ActionsPanelContent, {})
|
|
247
|
+
}),
|
|
248
|
+
/*#__PURE__*/ jsxRuntime.jsx(ActionsDrawer.ActionsDrawer.Content, {
|
|
249
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(Panels.Panels, {
|
|
250
|
+
withActions: false
|
|
253
251
|
})
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
height: "6.5rem"
|
|
258
|
-
})
|
|
259
|
-
]
|
|
252
|
+
})
|
|
253
|
+
]
|
|
254
|
+
})
|
|
260
255
|
})
|
|
261
256
|
]
|
|
262
257
|
}),
|