@strapi/content-manager 5.48.0 → 5.49.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 +3 -2
- package/dist/admin/components/ActionsDrawer.js.map +1 -1
- package/dist/admin/components/ComponentIcon.js +4 -3
- package/dist/admin/components/ComponentIcon.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js +3 -2
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.js +3 -2
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js +7 -3
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/LeftMenu.js +3 -2
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/RelativeTime.js +3 -2
- package/dist/admin/components/RelativeTime.js.map +1 -1
- package/dist/admin/components/Widgets.js +3 -2
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/features/DocumentRBAC.js +12 -3
- package/dist/admin/features/DocumentRBAC.js.map +1 -1
- package/dist/admin/features/DocumentRBAC.mjs +9 -1
- package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
- package/dist/admin/history/components/VersionContent.js +7 -3
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +3 -2
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js +3 -2
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/pages/History.js +3 -2
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/routes.js +3 -2
- package/dist/admin/history/routes.js.map +1 -1
- package/dist/admin/hooks/useContentTypeSchema.js +40 -19
- package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
- package/dist/admin/hooks/useContentTypeSchema.mjs +37 -17
- package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -1
- package/dist/admin/hooks/useDocument.js +3 -2
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +3 -2
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentContext.js +3 -2
- package/dist/admin/hooks/useDocumentContext.js.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.js +46 -6
- package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.mjs +43 -4
- package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
- package/dist/admin/hooks/useDragAndDrop.js +3 -2
- package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
- package/dist/admin/hooks/useKeyboardDragAndDrop.js +3 -2
- package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
- package/dist/admin/hooks/useOnce.js +3 -2
- package/dist/admin/hooks/useOnce.js.map +1 -1
- package/dist/admin/hooks/usePersistentQueryParams.js +7 -2
- package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.js +9 -5
- package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.mjs +6 -3
- package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/EditConfigurationPage.js +3 -2
- package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +3 -2
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +80 -39
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +67 -33
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +3 -2
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +4 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +8 -4
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +5 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +14 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +11 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +16 -7
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +9 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +8 -4
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +5 -28
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +2 -26
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +15 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +76 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs +70 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormLayout.js +3 -2
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +3 -2
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +3 -2
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/Panels.js +3 -2
- package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +5 -1
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/keyboardShortcuts.js +35 -0
- package/dist/admin/pages/EditView/utils/keyboardShortcuts.js.map +1 -0
- package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs +33 -0
- package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs.map +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +7 -10
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +5 -9
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +3 -2
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +3 -2
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.js +3 -2
- package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +9 -12
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs +6 -10
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +3 -2
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js +3 -2
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +3 -2
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +3 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +10 -11
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +7 -9
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js +3 -2
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +7 -3
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -2
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js +5 -4
- package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs +5 -4
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +3 -2
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/formatComponentConfigurationEditLayout.js +15 -9
- package/dist/admin/pages/formatComponentConfigurationEditLayout.js.map +1 -1
- package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs +15 -9
- package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +3 -2
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +3 -2
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
- package/dist/admin/preview/pages/Preview.js +3 -2
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/routes.js +3 -2
- package/dist/admin/preview/routes.js.map +1 -1
- package/dist/admin/services/components.js +3 -2
- package/dist/admin/services/components.js.map +1 -1
- package/dist/admin/services/components.mjs +3 -2
- package/dist/admin/services/components.mjs.map +1 -1
- package/dist/admin/services/contentTypes.js +4 -3
- package/dist/admin/services/contentTypes.js.map +1 -1
- package/dist/admin/services/contentTypes.mjs +4 -3
- package/dist/admin/services/contentTypes.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.d.ts +2 -0
- package/dist/admin/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -0
- package/dist/admin/src/pages/ListConfiguration/components/SortDisplayedFields.d.ts +2 -2
- package/dist/admin/src/pages/ListView/components/TableCells/Media.d.ts +2 -2
- package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +3 -1
- package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +24 -0
- package/dist/admin/translations/cs.json.js +2 -1
- package/dist/admin/translations/cs.json.js.map +1 -1
- package/dist/admin/translations/cs.json.mjs +2 -1
- package/dist/admin/translations/cs.json.mjs.map +1 -1
- package/dist/admin/translations/de.json.js +2 -1
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +2 -1
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +3 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +3 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +2 -1
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +2 -1
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +2 -1
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +2 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/translations/nl.json.js +2 -1
- package/dist/admin/translations/nl.json.js.map +1 -1
- package/dist/admin/translations/nl.json.mjs +2 -1
- package/dist/admin/translations/nl.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +2 -1
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +2 -1
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/admin/translations/sk.json.js +2 -1
- package/dist/admin/translations/sk.json.js.map +1 -1
- package/dist/admin/translations/sk.json.mjs +2 -1
- package/dist/admin/translations/sk.json.mjs.map +1 -1
- package/dist/admin/utils/attributes.js +17 -2
- package/dist/admin/utils/attributes.js.map +1 -1
- package/dist/admin/utils/attributes.mjs +17 -2
- package/dist/admin/utils/attributes.mjs.map +1 -1
- package/dist/admin/utils/layouts/normalizeContentManagerLayout.js +329 -0
- package/dist/admin/utils/layouts/normalizeContentManagerLayout.js.map +1 -0
- package/dist/admin/utils/layouts/normalizeContentManagerLayout.mjs +321 -0
- package/dist/admin/utils/layouts/normalizeContentManagerLayout.mjs.map +1 -0
- package/dist/admin/utils/objects.js +9 -4
- package/dist/admin/utils/objects.js.map +1 -1
- package/dist/admin/utils/validation.js +7 -3
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/server/controllers/collection-types.js +7 -2
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +7 -2
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/utils/clone.js +5 -1
- package/dist/server/controllers/utils/clone.js.map +1 -1
- package/dist/server/controllers/utils/clone.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +6 -2
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/homepage/services/homepage.js +6 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +6 -1
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/mcp/handlers/collection-handlers.js +15 -18
- package/dist/server/mcp/handlers/collection-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/collection-handlers.mjs +16 -19
- package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -1
- package/dist/server/mcp/handlers/single-type-handlers.js +12 -12
- package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/single-type-handlers.mjs +13 -13
- package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.js +4 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs +4 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
- package/dist/server/mcp/sanitizers/shape-relations.js +108 -0
- package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -0
- package/dist/server/mcp/sanitizers/shape-relations.mjs +103 -0
- package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -0
- package/dist/server/mcp/schemas/data-schema.js +0 -3
- package/dist/server/mcp/schemas/data-schema.js.map +1 -1
- package/dist/server/mcp/schemas/data-schema.mjs +0 -3
- package/dist/server/mcp/schemas/data-schema.mjs.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.js +30 -4
- package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.mjs +30 -4
- package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
- package/dist/server/mcp/utils.js +30 -3
- package/dist/server/mcp/utils.js.map +1 -1
- package/dist/server/mcp/utils.mjs +30 -4
- package/dist/server/mcp/utils.mjs.map +1 -1
- package/dist/server/middlewares/routing.js +5 -1
- package/dist/server/middlewares/routing.js.map +1 -1
- package/dist/server/services/populate-builder.js.map +1 -1
- package/dist/server/services/populate-builder.mjs.map +1 -1
- package/dist/server/services/uid.js +9 -4
- package/dist/server/services/uid.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js +14 -10
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/layouts.js +8 -4
- package/dist/server/services/utils/configuration/layouts.js.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.js +19 -15
- package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
- package/dist/server/services/utils/configuration/settings.js +5 -1
- package/dist/server/services/utils/configuration/settings.js.map +1 -1
- package/dist/server/services/utils/draft.js +5 -1
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/populate.js +8 -4
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/services/utils/store.js +9 -5
- package/dist/server/services/utils/store.js.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/clone.d.ts +1 -1
- package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +2 -1
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/mcp/sanitizers/shape-relations.d.ts +38 -0
- package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/data-schema.d.ts +0 -3
- package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/output-schemas.d.ts +2 -2
- package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
- package/dist/server/src/mcp/types.d.ts +2 -2
- package/dist/server/src/mcp/types.d.ts.map +1 -1
- package/dist/server/src/mcp/utils.d.ts +19 -1
- package/dist/server/src/mcp/utils.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +3 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/populate-builder.d.ts +3 -1
- package/dist/server/src/services/populate-builder.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts +3 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"History.js","sources":["../../../../admin/src/history/pages/History.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useQueryParams,\n Page,\n createContext,\n useRBAC,\n HEIGHT_TOP_NAVIGATION,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, Main, Portal, Link } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams, NavLink } from 'react-router-dom';\n\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useGetContentTypeConfigurationQuery } from '../../services/contentTypes';\nimport { buildValidParams } from '../../utils/api';\nimport { VersionContent } from '../components/VersionContent';\nimport { VersionHeader } from '../components/VersionHeader';\nimport { VersionsList } from '../components/VersionsList';\nimport { useGetHistoryVersionsQuery } from '../services/historyVersion';\n\nimport type {\n ContentType,\n FindContentTypeConfiguration,\n} from '../../../../shared/contracts/content-types';\nimport type {\n HistoryVersionDataResponse,\n GetHistoryVersions,\n} from '../../../../shared/contracts/history-versions';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HistoryContextValue {\n contentType: UID.ContentType;\n id?: string; // null for single types\n layout: EditLayout['layout'];\n configuration: FindContentTypeConfiguration.Response['data'];\n selectedVersion: HistoryVersionDataResponse;\n // Errors are handled outside of the provider, so we exclude errors from the response type\n versions: Extract<GetHistoryVersions.Response, { data: Array<HistoryVersionDataResponse> }>;\n page: number;\n mainField: string;\n schema: ContentType;\n}\n\nconst [HistoryProvider, useHistoryContext] = createContext<HistoryContextValue>('HistoryPage');\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HistoryPage = () => {\n const headerId = React.useId();\n const { formatMessage } = useIntl();\n const {\n slug,\n id: documentId,\n collectionType,\n } = useParams<{\n collectionType: string;\n slug: UID.ContentType;\n id: string;\n }>();\n\n const { isLoading: isLoadingDocument, schema } = useDocument({\n collectionType: collectionType!,\n model: slug!,\n });\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { displayName, mainField },\n },\n } = useDocumentLayout(slug!);\n const { data: configuration, isLoading: isLoadingConfiguration } =\n useGetContentTypeConfigurationQuery(slug!);\n\n // Parse state from query params\n const [{ query }] = useQueryParams<{\n page?: number;\n id?: string;\n plugins?: Record<string, unknown>;\n }>();\n const { id: selectedVersionId, ...queryWithoutId } = query;\n const validQueryParamsWithoutId = buildValidParams(queryWithoutId);\n const page = validQueryParamsWithoutId.page ? Number(validQueryParamsWithoutId.page) : 1;\n\n const versionsResponse = useGetHistoryVersionsQuery(\n {\n contentType: slug!,\n ...(documentId ? { documentId } : {}),\n // Omit id since it's not needed by the endpoint and caused extra refetches\n ...validQueryParamsWithoutId,\n },\n { refetchOnMountOrArgChange: true }\n );\n\n /**\n * When the page is first mounted, if there's already data in the cache, RTK has a fullfilled\n * status for the first render, right before it triggers a new request. This means the code\n * briefly reaches the part that redirects to the first history version (if none is set).\n * But since that data is stale, that means auto-selecting a version that may not be the most\n * recent. To avoid this, we identify through requestId if the query is stale despite the\n * fullfilled status, and show the loader in that case.\n * This means we essentially don't want cache. We always refetch when the page mounts, and\n * we always show the loader until we have the most recent data. That's fine for this page.\n */\n const initialRequestId = React.useRef(versionsResponse.requestId);\n const isStaleRequest = versionsResponse.requestId === initialRequestId.current;\n\n /**\n * Ensure that we have the necessary data to render the page:\n * - slug for single types\n * - slug _and_ documentId for collection types\n */\n if (!slug || (collectionType === COLLECTION_TYPES && !documentId)) {\n return <Navigate to=\"/content-manager\" />;\n }\n\n if (\n isLoadingDocument ||\n isLoadingLayout ||\n versionsResponse.isFetching ||\n isStaleRequest ||\n isLoadingConfiguration\n ) {\n return <Page.Loading />;\n }\n\n // It was a success, handle empty data\n if (!versionsResponse.isError && !versionsResponse.data?.data?.length) {\n return (\n <>\n <Page.NoData\n action={\n <Link\n tag={NavLink}\n to={`/content-manager/${collectionType}/${slug}${documentId ? `/${documentId}` : ''}`}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n </>\n );\n }\n\n // We have data, handle selected version\n if (versionsResponse.data?.data?.length && !selectedVersionId) {\n return (\n <Navigate\n to={{ search: stringify({ ...query, id: versionsResponse.data.data[0].id }) }}\n replace\n />\n );\n }\n\n const selectedVersion = versionsResponse.data?.data?.find(\n (version) => version.id.toString() === selectedVersionId\n );\n if (\n versionsResponse.isError ||\n !layout ||\n !schema ||\n !selectedVersion ||\n !configuration ||\n // This should not happen as it's covered by versionsResponse.isError, but we need it for TS\n versionsResponse.data.error\n ) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.history.page-title',\n defaultMessage: '{contentType} history',\n },\n {\n contentType: displayName,\n }\n )}\n </Page.Title>\n <HistoryProvider\n contentType={slug}\n id={documentId}\n schema={schema}\n layout={layout}\n configuration={configuration}\n selectedVersion={selectedVersion}\n versions={versionsResponse.data}\n page={page}\n mainField={mainField}\n >\n <Flex\n direction={{ initial: 'column', medium: 'row' }}\n alignItems=\"flex-start\"\n height=\"100%\"\n overflow=\"hidden\"\n >\n <Main\n grow={1}\n width=\"100%\"\n height=\"100%\"\n background=\"neutral100\"\n paddingBottom={6}\n overflow=\"hidden auto\"\n labelledBy={headerId}\n >\n <VersionHeader headerId={headerId} />\n <VersionContent />\n </Main>\n <VersionsList />\n </Flex>\n </HistoryProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedHistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedHistoryPageImpl = () => {\n const { slug } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return (\n <Box\n width=\"100dvw\"\n position=\"fixed\"\n top={{ initial: HEIGHT_TOP_NAVIGATION, large: 0 }}\n bottom={0}\n left={0}\n zIndex={{ initial: 2, large: 4 }}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n width=\"100dvw\"\n position=\"fixed\"\n top={{ initial: HEIGHT_TOP_NAVIGATION, large: 0 }}\n bottom={0}\n left={0}\n zIndex={{ initial: 2, large: 4 }}\n background=\"neutral0\"\n >\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <HistoryPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedHistoryPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedHistoryPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedHistoryPage, HistoryProvider, useHistoryContext };\nexport type { HistoryContextValue };\n"],"names":["HistoryProvider","useHistoryContext","createContext","HistoryPage","headerId","React","useId","formatMessage","useIntl","slug","id","documentId","collectionType","useParams","isLoading","isLoadingDocument","schema","useDocument","model","isLoadingLayout","edit","layout","settings","displayName","mainField","useDocumentLayout","data","configuration","isLoadingConfiguration","useGetContentTypeConfigurationQuery","query","useQueryParams","selectedVersionId","queryWithoutId","validQueryParamsWithoutId","buildValidParams","page","Number","versionsResponse","useGetHistoryVersionsQuery","contentType","refetchOnMountOrArgChange","initialRequestId","useRef","requestId","isStaleRequest","current","COLLECTION_TYPES","_jsx","Navigate","to","isFetching","Page","Loading","isError","length","_Fragment","NoData","action","Link","tag","NavLink","defaultMessage","search","stringify","replace","selectedVersion","find","version","toString","error","Error","_jsxs","Title","versions","Flex","direction","initial","medium","alignItems","height","overflow","Main","grow","width","background","paddingBottom","labelledBy","VersionHeader","VersionContent","VersionsList","ProtectedHistoryPageImpl","permissions","useRBAC","PERMISSIONS","map","subject","Box","position","top","HEIGHT_TOP_NAVIGATION","large","bottom","left","zIndex","Protect","DocumentRBAC","ProtectedHistoryPage","Portal","FocusTrap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"History.js","sources":["../../../../admin/src/history/pages/History.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useQueryParams,\n Page,\n createContext,\n useRBAC,\n HEIGHT_TOP_NAVIGATION,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, Main, Portal, Link } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams, NavLink } from 'react-router-dom';\n\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useGetContentTypeConfigurationQuery } from '../../services/contentTypes';\nimport { buildValidParams } from '../../utils/api';\nimport { VersionContent } from '../components/VersionContent';\nimport { VersionHeader } from '../components/VersionHeader';\nimport { VersionsList } from '../components/VersionsList';\nimport { useGetHistoryVersionsQuery } from '../services/historyVersion';\n\nimport type {\n ContentType,\n FindContentTypeConfiguration,\n} from '../../../../shared/contracts/content-types';\nimport type {\n HistoryVersionDataResponse,\n GetHistoryVersions,\n} from '../../../../shared/contracts/history-versions';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HistoryContextValue {\n contentType: UID.ContentType;\n id?: string; // null for single types\n layout: EditLayout['layout'];\n configuration: FindContentTypeConfiguration.Response['data'];\n selectedVersion: HistoryVersionDataResponse;\n // Errors are handled outside of the provider, so we exclude errors from the response type\n versions: Extract<GetHistoryVersions.Response, { data: Array<HistoryVersionDataResponse> }>;\n page: number;\n mainField: string;\n schema: ContentType;\n}\n\nconst [HistoryProvider, useHistoryContext] = createContext<HistoryContextValue>('HistoryPage');\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HistoryPage = () => {\n const headerId = React.useId();\n const { formatMessage } = useIntl();\n const {\n slug,\n id: documentId,\n collectionType,\n } = useParams<{\n collectionType: string;\n slug: UID.ContentType;\n id: string;\n }>();\n\n const { isLoading: isLoadingDocument, schema } = useDocument({\n collectionType: collectionType!,\n model: slug!,\n });\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { displayName, mainField },\n },\n } = useDocumentLayout(slug!);\n const { data: configuration, isLoading: isLoadingConfiguration } =\n useGetContentTypeConfigurationQuery(slug!);\n\n // Parse state from query params\n const [{ query }] = useQueryParams<{\n page?: number;\n id?: string;\n plugins?: Record<string, unknown>;\n }>();\n const { id: selectedVersionId, ...queryWithoutId } = query;\n const validQueryParamsWithoutId = buildValidParams(queryWithoutId);\n const page = validQueryParamsWithoutId.page ? Number(validQueryParamsWithoutId.page) : 1;\n\n const versionsResponse = useGetHistoryVersionsQuery(\n {\n contentType: slug!,\n ...(documentId ? { documentId } : {}),\n // Omit id since it's not needed by the endpoint and caused extra refetches\n ...validQueryParamsWithoutId,\n },\n { refetchOnMountOrArgChange: true }\n );\n\n /**\n * When the page is first mounted, if there's already data in the cache, RTK has a fullfilled\n * status for the first render, right before it triggers a new request. This means the code\n * briefly reaches the part that redirects to the first history version (if none is set).\n * But since that data is stale, that means auto-selecting a version that may not be the most\n * recent. To avoid this, we identify through requestId if the query is stale despite the\n * fullfilled status, and show the loader in that case.\n * This means we essentially don't want cache. We always refetch when the page mounts, and\n * we always show the loader until we have the most recent data. That's fine for this page.\n */\n const initialRequestId = React.useRef(versionsResponse.requestId);\n const isStaleRequest = versionsResponse.requestId === initialRequestId.current;\n\n /**\n * Ensure that we have the necessary data to render the page:\n * - slug for single types\n * - slug _and_ documentId for collection types\n */\n if (!slug || (collectionType === COLLECTION_TYPES && !documentId)) {\n return <Navigate to=\"/content-manager\" />;\n }\n\n if (\n isLoadingDocument ||\n isLoadingLayout ||\n versionsResponse.isFetching ||\n isStaleRequest ||\n isLoadingConfiguration\n ) {\n return <Page.Loading />;\n }\n\n // It was a success, handle empty data\n if (!versionsResponse.isError && !versionsResponse.data?.data?.length) {\n return (\n <>\n <Page.NoData\n action={\n <Link\n tag={NavLink}\n to={`/content-manager/${collectionType}/${slug}${documentId ? `/${documentId}` : ''}`}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n </>\n );\n }\n\n // We have data, handle selected version\n if (versionsResponse.data?.data?.length && !selectedVersionId) {\n return (\n <Navigate\n to={{ search: stringify({ ...query, id: versionsResponse.data.data[0].id }) }}\n replace\n />\n );\n }\n\n const selectedVersion = versionsResponse.data?.data?.find(\n (version) => version.id.toString() === selectedVersionId\n );\n if (\n versionsResponse.isError ||\n !layout ||\n !schema ||\n !selectedVersion ||\n !configuration ||\n // This should not happen as it's covered by versionsResponse.isError, but we need it for TS\n versionsResponse.data.error\n ) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.history.page-title',\n defaultMessage: '{contentType} history',\n },\n {\n contentType: displayName,\n }\n )}\n </Page.Title>\n <HistoryProvider\n contentType={slug}\n id={documentId}\n schema={schema}\n layout={layout}\n configuration={configuration}\n selectedVersion={selectedVersion}\n versions={versionsResponse.data}\n page={page}\n mainField={mainField}\n >\n <Flex\n direction={{ initial: 'column', medium: 'row' }}\n alignItems=\"flex-start\"\n height=\"100%\"\n overflow=\"hidden\"\n >\n <Main\n grow={1}\n width=\"100%\"\n height=\"100%\"\n background=\"neutral100\"\n paddingBottom={6}\n overflow=\"hidden auto\"\n labelledBy={headerId}\n >\n <VersionHeader headerId={headerId} />\n <VersionContent />\n </Main>\n <VersionsList />\n </Flex>\n </HistoryProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedHistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedHistoryPageImpl = () => {\n const { slug } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return (\n <Box\n width=\"100dvw\"\n position=\"fixed\"\n top={{ initial: HEIGHT_TOP_NAVIGATION, large: 0 }}\n bottom={0}\n left={0}\n zIndex={{ initial: 2, large: 4 }}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n width=\"100dvw\"\n position=\"fixed\"\n top={{ initial: HEIGHT_TOP_NAVIGATION, large: 0 }}\n bottom={0}\n left={0}\n zIndex={{ initial: 2, large: 4 }}\n background=\"neutral0\"\n >\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <HistoryPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedHistoryPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedHistoryPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedHistoryPage, HistoryProvider, useHistoryContext };\nexport type { HistoryContextValue };\n"],"names":["HistoryProvider","useHistoryContext","createContext","HistoryPage","headerId","React","useId","formatMessage","useIntl","slug","id","documentId","collectionType","useParams","isLoading","isLoadingDocument","schema","useDocument","model","isLoadingLayout","edit","layout","settings","displayName","mainField","useDocumentLayout","data","configuration","isLoadingConfiguration","useGetContentTypeConfigurationQuery","query","useQueryParams","selectedVersionId","queryWithoutId","validQueryParamsWithoutId","buildValidParams","page","Number","versionsResponse","useGetHistoryVersionsQuery","contentType","refetchOnMountOrArgChange","initialRequestId","useRef","requestId","isStaleRequest","current","COLLECTION_TYPES","_jsx","Navigate","to","isFetching","Page","Loading","isError","length","_Fragment","NoData","action","Link","tag","NavLink","defaultMessage","search","stringify","replace","selectedVersion","find","version","toString","error","Error","_jsxs","Title","versions","Flex","direction","initial","medium","alignItems","height","overflow","Main","grow","width","background","paddingBottom","labelledBy","VersionHeader","VersionContent","VersionsList","ProtectedHistoryPageImpl","permissions","useRBAC","PERMISSIONS","map","subject","Box","position","top","HEIGHT_TOP_NAVIGATION","large","bottom","left","zIndex","Protect","DocumentRBAC","ProtectedHistoryPage","Portal","FocusTrap"],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
|
|
5
|
-
function
|
|
5
|
+
function _interopNamespace(e) {
|
|
6
|
+
if (e && e.__esModule) return e;
|
|
6
7
|
var n = Object.create(null);
|
|
7
8
|
if (e) {
|
|
8
9
|
Object.keys(e).forEach(function (k) {
|
|
@@ -19,7 +20,7 @@ function _interopNamespaceDefault(e) {
|
|
|
19
20
|
return Object.freeze(n);
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
var React__namespace = /*#__PURE__*/
|
|
23
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
23
24
|
|
|
24
25
|
const ProtectedHistoryPage = /*#__PURE__*/ React__namespace.lazy(()=>Promise.resolve().then(function () { return require('./pages/History.js'); }).then((mod)=>({
|
|
25
26
|
default: mod.ProtectedHistoryPage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sources":["../../../admin/src/history/routes.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { type PathRouteProps } from 'react-router-dom';\n\nconst ProtectedHistoryPage = React.lazy(() =>\n import('./pages/History').then((mod) => ({ default: mod.ProtectedHistoryPage }))\n);\n\n/**\n * These routes will be merged with the rest of the Content Manager routes\n */\nconst routes: PathRouteProps[] = [\n {\n path: ':collectionType/:slug/:id/history',\n Component: ProtectedHistoryPage,\n },\n {\n path: ':collectionType/:slug/history',\n Component: ProtectedHistoryPage,\n },\n];\n\nexport { routes };\n"],"names":["ProtectedHistoryPage","React","lazy","then","mod","default","routes","path","Component"],"mappings":"
|
|
1
|
+
{"version":3,"file":"routes.js","sources":["../../../admin/src/history/routes.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { type PathRouteProps } from 'react-router-dom';\n\nconst ProtectedHistoryPage = React.lazy(() =>\n import('./pages/History').then((mod) => ({ default: mod.ProtectedHistoryPage }))\n);\n\n/**\n * These routes will be merged with the rest of the Content Manager routes\n */\nconst routes: PathRouteProps[] = [\n {\n path: ':collectionType/:slug/:id/history',\n Component: ProtectedHistoryPage,\n },\n {\n path: ':collectionType/:slug/history',\n Component: ProtectedHistoryPage,\n },\n];\n\nexport { routes };\n"],"names":["ProtectedHistoryPage","React","lazy","then","mod","default","routes","path","Component"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,oBAAAA,iBAAuBC,gBAAAA,CAAMC,IAAI,CAAC,IACtC,oDAAO,oBAAA,KAAA,CAAmBC,IAAI,CAAC,CAACC,GAAAA,IAAS;AAAEC,YAAAA,OAAAA,EAASD,IAAIJ;SAAqB,CAAA,CAAA,CAAA;AAG/E;;AAEC,UACKM,MAAAA,GAA2B;AAC/B,IAAA;QACEC,IAAAA,EAAM,mCAAA;QACNC,SAAAA,EAAWR;AACb,KAAA;AACA,IAAA;QACEO,IAAAA,EAAM,+BAAA;QACNC,SAAAA,EAAWR;AACb;AACD;;;;"}
|
|
@@ -4,7 +4,8 @@ var React = require('react');
|
|
|
4
4
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
5
5
|
var init = require('../services/init.js');
|
|
6
6
|
|
|
7
|
-
function
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
8
9
|
var n = Object.create(null);
|
|
9
10
|
if (e) {
|
|
10
11
|
Object.keys(e).forEach(function (k) {
|
|
@@ -21,8 +22,43 @@ function _interopNamespaceDefault(e) {
|
|
|
21
22
|
return Object.freeze(n);
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
var React__namespace = /*#__PURE__*/
|
|
25
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
25
26
|
|
|
27
|
+
const EMPTY_COMPONENTS = {};
|
|
28
|
+
// Module-level cache preserves schema derivation identities across hook instances;
|
|
29
|
+
// `useMemo` would only stabilize values inside a single component tree.
|
|
30
|
+
const schemaInfoCache = new WeakMap();
|
|
31
|
+
const getSchemaInfo = (data, model)=>{
|
|
32
|
+
if (!data) {
|
|
33
|
+
return {
|
|
34
|
+
components: undefined,
|
|
35
|
+
contentType: undefined,
|
|
36
|
+
contentTypes: []
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
let cachedByModel = schemaInfoCache.get(data);
|
|
40
|
+
if (!cachedByModel) {
|
|
41
|
+
cachedByModel = new Map();
|
|
42
|
+
schemaInfoCache.set(data, cachedByModel);
|
|
43
|
+
}
|
|
44
|
+
const cached = cachedByModel.get(model);
|
|
45
|
+
if (cached) {
|
|
46
|
+
return cached;
|
|
47
|
+
}
|
|
48
|
+
const contentType = data.contentTypes.find((ct)=>ct.uid === model);
|
|
49
|
+
const componentsByKey = data.components.reduce((acc, component)=>{
|
|
50
|
+
acc[component.uid] = component;
|
|
51
|
+
return acc;
|
|
52
|
+
}, {});
|
|
53
|
+
const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);
|
|
54
|
+
const schemaInfo = {
|
|
55
|
+
components: Object.keys(components).length === 0 ? undefined : components,
|
|
56
|
+
contentType,
|
|
57
|
+
contentTypes: data.contentTypes
|
|
58
|
+
};
|
|
59
|
+
cachedByModel.set(model, schemaInfo);
|
|
60
|
+
return schemaInfo;
|
|
61
|
+
};
|
|
26
62
|
/**
|
|
27
63
|
* @internal
|
|
28
64
|
* @description Given a model UID, return the schema and the schemas
|
|
@@ -35,19 +71,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
35
71
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
36
72
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
37
73
|
const { data, error, isLoading, isFetching } = init.useGetInitialDataQuery(undefined);
|
|
38
|
-
const { components, contentType, contentTypes } = React__namespace.useMemo(()=>
|
|
39
|
-
const contentType = data?.contentTypes.find((ct)=>ct.uid === model);
|
|
40
|
-
const componentsByKey = data?.components.reduce((acc, component)=>{
|
|
41
|
-
acc[component.uid] = component;
|
|
42
|
-
return acc;
|
|
43
|
-
}, {});
|
|
44
|
-
const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);
|
|
45
|
-
return {
|
|
46
|
-
components: Object.keys(components).length === 0 ? undefined : components,
|
|
47
|
-
contentType,
|
|
48
|
-
contentTypes: data?.contentTypes ?? []
|
|
49
|
-
};
|
|
50
|
-
}, [
|
|
74
|
+
const { components, contentType, contentTypes } = React__namespace.useMemo(()=>getSchemaInfo(data, model), [
|
|
51
75
|
model,
|
|
52
76
|
data
|
|
53
77
|
]);
|
|
@@ -64,10 +88,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
64
88
|
formatAPIError
|
|
65
89
|
]);
|
|
66
90
|
return {
|
|
67
|
-
|
|
68
|
-
components: React__namespace.useMemo(()=>components ?? {}, [
|
|
69
|
-
components
|
|
70
|
-
]),
|
|
91
|
+
components: components ?? EMPTY_COMPONENTS,
|
|
71
92
|
schema: contentType,
|
|
72
93
|
schemas: contentTypes,
|
|
73
94
|
isLoading: isLoading || isFetching
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentTypeSchema.js","sources":["../../../admin/src/hooks/useContentTypeSchema.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\
|
|
1
|
+
{"version":3,"file":"useContentTypeSchema.js","sources":["../../../admin/src/hooks/useContentTypeSchema.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\nconst EMPTY_COMPONENTS: ComponentsDictionary = {};\n\ntype InitialData = GetInitData.Response['data'];\n\n// Module-level cache preserves schema derivation identities across hook instances;\n// `useMemo` would only stabilize values inside a single component tree.\nconst schemaInfoCache = new WeakMap<\n InitialData,\n Map<\n string | undefined,\n {\n components?: ComponentsDictionary;\n contentType?: ContentType;\n contentTypes: ContentType[];\n }\n >\n>();\n\nconst getSchemaInfo = (data: InitialData | undefined, model?: string) => {\n if (!data) {\n return {\n components: undefined,\n contentType: undefined,\n contentTypes: [],\n };\n }\n\n let cachedByModel = schemaInfoCache.get(data);\n\n if (!cachedByModel) {\n cachedByModel = new Map();\n schemaInfoCache.set(data, cachedByModel);\n }\n\n const cached = cachedByModel.get(model);\n\n if (cached) {\n return cached;\n }\n\n const contentType = data.contentTypes.find((ct) => ct.uid === model);\n\n const componentsByKey = data.components.reduce<ComponentsDictionary>((acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n }, {});\n\n const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);\n\n const schemaInfo = {\n components: Object.keys(components).length === 0 ? undefined : components,\n contentType,\n contentTypes: data.contentTypes,\n };\n\n cachedByModel.set(model, schemaInfo);\n\n return schemaInfo;\n};\n\n/**\n * @internal\n * @description Given a model UID, return the schema and the schemas\n * of the associated components within said model's schema. A wrapper\n * implementation around the `useGetInitialDataQuery` with a unique\n * `selectFromResult` function to memoize the calculation.\n *\n * If no model is provided, the hook will return all the schemas.\n */\nconst useContentTypeSchema = (model?: string) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading, isFetching } = useGetInitialDataQuery(undefined);\n\n const { components, contentType, contentTypes } = React.useMemo(\n () => getSchemaInfo(data, model),\n [model, data]\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError]);\n\n return {\n components: components ?? EMPTY_COMPONENTS,\n schema: contentType,\n schemas: contentTypes,\n isLoading: isLoading || isFetching,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * extractContentTypeComponents\n * -----------------------------------------------------------------------------------------------*/\n/**\n * @internal\n * @description Extracts the components used in a content type's attributes recursively.\n */\nconst extractContentTypeComponents = (\n attributes: ContentType['attributes'] = {},\n allComponents: ComponentsDictionary = {}\n): ComponentsDictionary => {\n const getComponents = (attributes: Schema.Attribute.AnyAttribute[]) => {\n return attributes.reduce<string[]>((acc, attribute) => {\n /**\n * If the attribute is a component or dynamiczone, we need to recursively\n * extract the component UIDs from its attributes.\n */\n if (attribute.type === 'component') {\n const componentAttributes = Object.values(\n allComponents[attribute.component]?.attributes ?? {}\n );\n\n acc.push(attribute.component, ...getComponents(componentAttributes));\n } else if (attribute.type === 'dynamiczone') {\n acc.push(\n ...attribute.components,\n /**\n * Dynamic zones have an array of components, so we flatMap over them\n * performing the same search as above.\n */\n ...attribute.components.flatMap((componentUid) => {\n const componentAttributes = Object.values(\n allComponents[componentUid]?.attributes ?? {}\n );\n\n return getComponents(componentAttributes);\n })\n );\n }\n\n return acc;\n }, []);\n };\n\n const componentUids = getComponents(Object.values(attributes));\n\n const uniqueComponentUids = [...new Set(componentUids)];\n\n const componentsByKey = uniqueComponentUids.reduce<ComponentsDictionary>((acc, uid) => {\n const component = allComponents[uid];\n if (component) {\n acc[uid] = component;\n }\n\n return acc;\n }, {});\n\n return componentsByKey;\n};\n\nexport { useContentTypeSchema, extractContentTypeComponents };\nexport type { ComponentsDictionary };\n"],"names":["EMPTY_COMPONENTS","schemaInfoCache","WeakMap","getSchemaInfo","data","model","components","undefined","contentType","contentTypes","cachedByModel","get","Map","set","cached","find","ct","uid","componentsByKey","reduce","acc","component","extractContentTypeComponents","attributes","schemaInfo","Object","keys","length","useContentTypeSchema","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","error","isLoading","isFetching","useGetInitialDataQuery","React","useMemo","useEffect","type","message","schema","schemas","allComponents","getComponents","attribute","componentAttributes","values","push","flatMap","componentUid","componentUids","uniqueComponentUids","Set"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAMA,mBAAyC,EAAC;AAIhD;AACA;AACA,MAAMC,kBAAkB,IAAIC,OAAAA,EAAAA;AAY5B,MAAMC,aAAAA,GAAgB,CAACC,IAAAA,EAA+BC,KAAAA,GAAAA;AACpD,IAAA,IAAI,CAACD,IAAAA,EAAM;QACT,OAAO;YACLE,UAAAA,EAAYC,SAAAA;YACZC,WAAAA,EAAaD,SAAAA;AACbE,YAAAA,YAAAA,EAAc;AAChB,SAAA;AACF,IAAA;IAEA,IAAIC,aAAAA,GAAgBT,eAAAA,CAAgBU,GAAG,CAACP,IAAAA,CAAAA;AAExC,IAAA,IAAI,CAACM,aAAAA,EAAe;AAClBA,QAAAA,aAAAA,GAAgB,IAAIE,GAAAA,EAAAA;QACpBX,eAAAA,CAAgBY,GAAG,CAACT,IAAAA,EAAMM,aAAAA,CAAAA;AAC5B,IAAA;IAEA,MAAMI,MAAAA,GAASJ,aAAAA,CAAcC,GAAG,CAACN,KAAAA,CAAAA;AAEjC,IAAA,IAAIS,MAAAA,EAAQ;QACV,OAAOA,MAAAA;AACT,IAAA;IAEA,MAAMN,WAAAA,GAAcJ,IAAAA,CAAKK,YAAY,CAACM,IAAI,CAAC,CAACC,EAAAA,GAAOA,EAAAA,CAAGC,GAAG,KAAKZ,KAAAA,CAAAA;AAE9D,IAAA,MAAMa,kBAAkBd,IAAAA,CAAKE,UAAU,CAACa,MAAM,CAAuB,CAACC,GAAAA,EAAKC,SAAAA,GAAAA;AACzED,QAAAA,GAAG,CAACC,SAAAA,CAAUJ,GAAG,CAAC,GAAGI,SAAAA;QAErB,OAAOD,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;IAEJ,MAAMd,UAAAA,GAAagB,4BAAAA,CAA6Bd,WAAAA,EAAae,UAAAA,EAAYL,eAAAA,CAAAA;AAEzE,IAAA,MAAMM,UAAAA,GAAa;AACjBlB,QAAAA,UAAAA,EAAYmB,OAAOC,IAAI,CAACpB,YAAYqB,MAAM,KAAK,IAAIpB,SAAAA,GAAYD,UAAAA;AAC/DE,QAAAA,WAAAA;AACAC,QAAAA,YAAAA,EAAcL,KAAKK;AACrB,KAAA;IAEAC,aAAAA,CAAcG,GAAG,CAACR,KAAAA,EAAOmB,UAAAA,CAAAA;IAEzB,OAAOA,UAAAA;AACT,CAAA;AAEA;;;;;;;;IASA,MAAMI,uBAAuB,CAACvB,KAAAA,GAAAA;IAC5B,MAAM,EAAEwB,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,8BAAAA,EAAAA;IAEpD,MAAM,EAAE7B,IAAI,EAAE8B,KAAK,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGC,2BAAAA,CAAuB9B,SAAAA,CAAAA;AAEtE,IAAA,MAAM,EAAED,UAAU,EAAEE,WAAW,EAAEC,YAAY,EAAE,GAAG6B,gBAAAA,CAAMC,OAAO,CAC7D,IAAMpC,aAAAA,CAAcC,MAAMC,KAAAA,CAAAA,EAC1B;AAACA,QAAAA,KAAAA;AAAOD,QAAAA;AAAK,KAAA,CAAA;AAGfkC,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,IAAIN,KAAAA,EAAO;YACTL,kBAAAA,CAAmB;gBACjBY,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASV,cAAAA,CAAeE,KAAAA;AAC1B,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACL,QAAAA,kBAAAA;AAAoBK,QAAAA,KAAAA;AAAOF,QAAAA;AAAe,KAAA,CAAA;IAE9C,OAAO;AACL1B,QAAAA,UAAAA,EAAYA,UAAAA,IAAcN,gBAAAA;QAC1B2C,MAAAA,EAAQnC,WAAAA;QACRoC,OAAAA,EAASnC,YAAAA;AACT0B,QAAAA,SAAAA,EAAWA,SAAAA,IAAaC;AAC1B,KAAA;AACF;AAEA;;;;;IAOA,MAAMd,+BAA+B,CACnCC,UAAAA,GAAwC,EAAE,EAC1CsB,aAAAA,GAAsC,EAAE,GAAA;AAExC,IAAA,MAAMC,gBAAgB,CAACvB,UAAAA,GAAAA;AACrB,QAAA,OAAOA,UAAAA,CAAWJ,MAAM,CAAW,CAACC,GAAAA,EAAK2B,SAAAA,GAAAA;AACvC;;;AAGC,UACD,IAAIA,SAAAA,CAAUN,IAAI,KAAK,WAAA,EAAa;gBAClC,MAAMO,mBAAAA,GAAsBvB,MAAAA,CAAOwB,MAAM,CACvCJ,aAAa,CAACE,SAAAA,CAAU1B,SAAS,CAAC,EAAEE,UAAAA,IAAc,EAAC,CAAA;AAGrDH,gBAAAA,GAAAA,CAAI8B,IAAI,CAACH,SAAAA,CAAU1B,SAAS,KAAKyB,aAAAA,CAAcE,mBAAAA,CAAAA,CAAAA;AACjD,YAAA,CAAA,MAAO,IAAID,SAAAA,CAAUN,IAAI,KAAK,aAAA,EAAe;AAC3CrB,gBAAAA,GAAAA,CAAI8B,IAAI,CAAA,GACHH,SAAAA,CAAUzC,UAAU;;;AAItB,cAAA,GACEyC,SAAAA,CAAUzC,UAAU,CAAC6C,OAAO,CAAC,CAACC,YAAAA,GAAAA;oBAC/B,MAAMJ,mBAAAA,GAAsBvB,OAAOwB,MAAM,CACvCJ,aAAa,CAACO,YAAAA,CAAa,EAAE7B,UAAAA,IAAc,EAAC,CAAA;AAG9C,oBAAA,OAAOuB,aAAAA,CAAcE,mBAAAA,CAAAA;AACvB,gBAAA,CAAA,CAAA,CAAA;AAEJ,YAAA;YAEA,OAAO5B,GAAAA;AACT,QAAA,CAAA,EAAG,EAAE,CAAA;AACP,IAAA,CAAA;AAEA,IAAA,MAAMiC,aAAAA,GAAgBP,aAAAA,CAAcrB,MAAAA,CAAOwB,MAAM,CAAC1B,UAAAA,CAAAA,CAAAA;AAElD,IAAA,MAAM+B,mBAAAA,GAAsB;AAAI,QAAA,GAAA,IAAIC,GAAAA,CAAIF,aAAAA;AAAe,KAAA;AAEvD,IAAA,MAAMnC,eAAAA,GAAkBoC,mBAAAA,CAAoBnC,MAAM,CAAuB,CAACC,GAAAA,EAAKH,GAAAA,GAAAA;QAC7E,MAAMI,SAAAA,GAAYwB,aAAa,CAAC5B,GAAAA,CAAI;AACpC,QAAA,IAAII,SAAAA,EAAW;YACbD,GAAG,CAACH,IAAI,GAAGI,SAAAA;AACb,QAAA;QAEA,OAAOD,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;IAEJ,OAAOF,eAAAA;AACT;;;;;"}
|
|
@@ -2,6 +2,41 @@ import * as React from 'react';
|
|
|
2
2
|
import { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';
|
|
3
3
|
import { useGetInitialDataQuery } from '../services/init.mjs';
|
|
4
4
|
|
|
5
|
+
const EMPTY_COMPONENTS = {};
|
|
6
|
+
// Module-level cache preserves schema derivation identities across hook instances;
|
|
7
|
+
// `useMemo` would only stabilize values inside a single component tree.
|
|
8
|
+
const schemaInfoCache = new WeakMap();
|
|
9
|
+
const getSchemaInfo = (data, model)=>{
|
|
10
|
+
if (!data) {
|
|
11
|
+
return {
|
|
12
|
+
components: undefined,
|
|
13
|
+
contentType: undefined,
|
|
14
|
+
contentTypes: []
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
let cachedByModel = schemaInfoCache.get(data);
|
|
18
|
+
if (!cachedByModel) {
|
|
19
|
+
cachedByModel = new Map();
|
|
20
|
+
schemaInfoCache.set(data, cachedByModel);
|
|
21
|
+
}
|
|
22
|
+
const cached = cachedByModel.get(model);
|
|
23
|
+
if (cached) {
|
|
24
|
+
return cached;
|
|
25
|
+
}
|
|
26
|
+
const contentType = data.contentTypes.find((ct)=>ct.uid === model);
|
|
27
|
+
const componentsByKey = data.components.reduce((acc, component)=>{
|
|
28
|
+
acc[component.uid] = component;
|
|
29
|
+
return acc;
|
|
30
|
+
}, {});
|
|
31
|
+
const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);
|
|
32
|
+
const schemaInfo = {
|
|
33
|
+
components: Object.keys(components).length === 0 ? undefined : components,
|
|
34
|
+
contentType,
|
|
35
|
+
contentTypes: data.contentTypes
|
|
36
|
+
};
|
|
37
|
+
cachedByModel.set(model, schemaInfo);
|
|
38
|
+
return schemaInfo;
|
|
39
|
+
};
|
|
5
40
|
/**
|
|
6
41
|
* @internal
|
|
7
42
|
* @description Given a model UID, return the schema and the schemas
|
|
@@ -14,19 +49,7 @@ import { useGetInitialDataQuery } from '../services/init.mjs';
|
|
|
14
49
|
const { toggleNotification } = useNotification();
|
|
15
50
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
16
51
|
const { data, error, isLoading, isFetching } = useGetInitialDataQuery(undefined);
|
|
17
|
-
const { components, contentType, contentTypes } = React.useMemo(()=>
|
|
18
|
-
const contentType = data?.contentTypes.find((ct)=>ct.uid === model);
|
|
19
|
-
const componentsByKey = data?.components.reduce((acc, component)=>{
|
|
20
|
-
acc[component.uid] = component;
|
|
21
|
-
return acc;
|
|
22
|
-
}, {});
|
|
23
|
-
const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);
|
|
24
|
-
return {
|
|
25
|
-
components: Object.keys(components).length === 0 ? undefined : components,
|
|
26
|
-
contentType,
|
|
27
|
-
contentTypes: data?.contentTypes ?? []
|
|
28
|
-
};
|
|
29
|
-
}, [
|
|
52
|
+
const { components, contentType, contentTypes } = React.useMemo(()=>getSchemaInfo(data, model), [
|
|
30
53
|
model,
|
|
31
54
|
data
|
|
32
55
|
]);
|
|
@@ -43,10 +66,7 @@ import { useGetInitialDataQuery } from '../services/init.mjs';
|
|
|
43
66
|
formatAPIError
|
|
44
67
|
]);
|
|
45
68
|
return {
|
|
46
|
-
|
|
47
|
-
components: React.useMemo(()=>components ?? {}, [
|
|
48
|
-
components
|
|
49
|
-
]),
|
|
69
|
+
components: components ?? EMPTY_COMPONENTS,
|
|
50
70
|
schema: contentType,
|
|
51
71
|
schemas: contentTypes,
|
|
52
72
|
isLoading: isLoading || isFetching
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentTypeSchema.mjs","sources":["../../../admin/src/hooks/useContentTypeSchema.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\
|
|
1
|
+
{"version":3,"file":"useContentTypeSchema.mjs","sources":["../../../admin/src/hooks/useContentTypeSchema.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\n\nimport { useGetInitialDataQuery } from '../services/init';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useContentTypeSchema\n * -----------------------------------------------------------------------------------------------*/\ntype ComponentsDictionary = Record<string, Component>;\n\nconst EMPTY_COMPONENTS: ComponentsDictionary = {};\n\ntype InitialData = GetInitData.Response['data'];\n\n// Module-level cache preserves schema derivation identities across hook instances;\n// `useMemo` would only stabilize values inside a single component tree.\nconst schemaInfoCache = new WeakMap<\n InitialData,\n Map<\n string | undefined,\n {\n components?: ComponentsDictionary;\n contentType?: ContentType;\n contentTypes: ContentType[];\n }\n >\n>();\n\nconst getSchemaInfo = (data: InitialData | undefined, model?: string) => {\n if (!data) {\n return {\n components: undefined,\n contentType: undefined,\n contentTypes: [],\n };\n }\n\n let cachedByModel = schemaInfoCache.get(data);\n\n if (!cachedByModel) {\n cachedByModel = new Map();\n schemaInfoCache.set(data, cachedByModel);\n }\n\n const cached = cachedByModel.get(model);\n\n if (cached) {\n return cached;\n }\n\n const contentType = data.contentTypes.find((ct) => ct.uid === model);\n\n const componentsByKey = data.components.reduce<ComponentsDictionary>((acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n }, {});\n\n const components = extractContentTypeComponents(contentType?.attributes, componentsByKey);\n\n const schemaInfo = {\n components: Object.keys(components).length === 0 ? undefined : components,\n contentType,\n contentTypes: data.contentTypes,\n };\n\n cachedByModel.set(model, schemaInfo);\n\n return schemaInfo;\n};\n\n/**\n * @internal\n * @description Given a model UID, return the schema and the schemas\n * of the associated components within said model's schema. A wrapper\n * implementation around the `useGetInitialDataQuery` with a unique\n * `selectFromResult` function to memoize the calculation.\n *\n * If no model is provided, the hook will return all the schemas.\n */\nconst useContentTypeSchema = (model?: string) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading, isFetching } = useGetInitialDataQuery(undefined);\n\n const { components, contentType, contentTypes } = React.useMemo(\n () => getSchemaInfo(data, model),\n [model, data]\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError]);\n\n return {\n components: components ?? EMPTY_COMPONENTS,\n schema: contentType,\n schemas: contentTypes,\n isLoading: isLoading || isFetching,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * extractContentTypeComponents\n * -----------------------------------------------------------------------------------------------*/\n/**\n * @internal\n * @description Extracts the components used in a content type's attributes recursively.\n */\nconst extractContentTypeComponents = (\n attributes: ContentType['attributes'] = {},\n allComponents: ComponentsDictionary = {}\n): ComponentsDictionary => {\n const getComponents = (attributes: Schema.Attribute.AnyAttribute[]) => {\n return attributes.reduce<string[]>((acc, attribute) => {\n /**\n * If the attribute is a component or dynamiczone, we need to recursively\n * extract the component UIDs from its attributes.\n */\n if (attribute.type === 'component') {\n const componentAttributes = Object.values(\n allComponents[attribute.component]?.attributes ?? {}\n );\n\n acc.push(attribute.component, ...getComponents(componentAttributes));\n } else if (attribute.type === 'dynamiczone') {\n acc.push(\n ...attribute.components,\n /**\n * Dynamic zones have an array of components, so we flatMap over them\n * performing the same search as above.\n */\n ...attribute.components.flatMap((componentUid) => {\n const componentAttributes = Object.values(\n allComponents[componentUid]?.attributes ?? {}\n );\n\n return getComponents(componentAttributes);\n })\n );\n }\n\n return acc;\n }, []);\n };\n\n const componentUids = getComponents(Object.values(attributes));\n\n const uniqueComponentUids = [...new Set(componentUids)];\n\n const componentsByKey = uniqueComponentUids.reduce<ComponentsDictionary>((acc, uid) => {\n const component = allComponents[uid];\n if (component) {\n acc[uid] = component;\n }\n\n return acc;\n }, {});\n\n return componentsByKey;\n};\n\nexport { useContentTypeSchema, extractContentTypeComponents };\nexport type { ComponentsDictionary };\n"],"names":["EMPTY_COMPONENTS","schemaInfoCache","WeakMap","getSchemaInfo","data","model","components","undefined","contentType","contentTypes","cachedByModel","get","Map","set","cached","find","ct","uid","componentsByKey","reduce","acc","component","extractContentTypeComponents","attributes","schemaInfo","Object","keys","length","useContentTypeSchema","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","error","isLoading","isFetching","useGetInitialDataQuery","React","useMemo","useEffect","type","message","schema","schemas","allComponents","getComponents","attribute","componentAttributes","values","push","flatMap","componentUid","componentUids","uniqueComponentUids","Set"],"mappings":"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"}
|
|
@@ -14,7 +14,8 @@ var validation = require('../utils/validation.js');
|
|
|
14
14
|
var useContentTypeSchema = require('./useContentTypeSchema.js');
|
|
15
15
|
var useDocumentLayout = require('./useDocumentLayout.js');
|
|
16
16
|
|
|
17
|
-
function
|
|
17
|
+
function _interopNamespace(e) {
|
|
18
|
+
if (e && e.__esModule) return e;
|
|
18
19
|
var n = Object.create(null);
|
|
19
20
|
if (e) {
|
|
20
21
|
Object.keys(e).forEach(function (k) {
|
|
@@ -31,7 +32,7 @@ function _interopNamespaceDefault(e) {
|
|
|
31
32
|
return Object.freeze(n);
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
var React__namespace = /*#__PURE__*/
|
|
35
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
35
36
|
|
|
36
37
|
/**
|
|
37
38
|
* Mirrors the server's `isLocalizedAttribute` in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDocument.js","sources":["../../../admin/src/hooks/useDocument.ts"],"sourcesContent":["/**\n * This hook doesn't use a context provider because we fetch directly from the server,\n * this sounds expensive but actually, it's really not. Because we have redux-toolkit-query\n * being a cache layer so if nothing invalidates the cache, we don't fetch again.\n */\n\nimport * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n FormErrors,\n getYupValidationErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\nimport { ValidationError } from 'yup';\n\nimport { SINGLE_TYPES } from '../constants/collections';\nimport { type AnyData, transformDocument } from '../pages/EditView/utils/data';\nimport { createDefaultForm } from '../pages/EditView/utils/forms';\nimport { useGetDocumentQuery } from '../services/documents';\nimport { buildValidParams } from '../utils/api';\nimport { createYupSchema } from '../utils/validation';\n\nimport { useContentTypeSchema, ComponentsDictionary } from './useContentTypeSchema';\nimport { useDocumentLayout } from './useDocumentLayout';\n\nimport type { FindOne } from '../../../shared/contracts/collection-types';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Modules } from '@strapi/types';\n\ninterface UseDocumentArgs {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n}\n\ntype UseDocumentOpts = Parameters<typeof useGetDocumentQuery>[1];\n\ntype Document = FindOne.Response['data'];\n\ntype Schema = ContentType;\n\ntype UseDocument = (\n args: UseDocumentArgs,\n opts?: UseDocumentOpts\n) => {\n /**\n * These are the schemas of the components used in the content type, organised\n * by their uid.\n */\n components: ComponentsDictionary;\n document?: Document;\n meta?: FindOne.Response['meta'];\n isLoading: boolean;\n /**\n * This is the schema of the content type, it is not the same as the layout.\n */\n schema?: Schema;\n schemas?: Schema[];\n hasError?: boolean;\n refetch: () => void;\n validate: (document: Document) => null | FormErrors;\n /**\n * Get the document's title\n */\n getTitle: (mainField: string) => string;\n /**\n * Get the initial form values for the document\n */\n getInitialFormValues: (isCreatingDocument?: boolean) => AnyData | undefined;\n};\n\n/**\n * Mirrors the server's `isLocalizedAttribute` in\n * `packages/plugins/i18n/server/src/services/content-types.ts`: an attribute\n * counts as localized only when `pluginOptions.i18n.localized` is explicitly\n * `true`. Both `false` and `undefined` mean \"non-localized\" — important here\n * because attributes created without the i18n plugin omit the field entirely,\n * and we still want them inherited when creating a new locale draft.\n */\nconst isLocalizedAttribute = (attribute: { pluginOptions?: object }): boolean => {\n // `pluginOptions` on the base attribute is typed as `object`, so we have to\n // narrow it to the i18n-specific shape here.\n const i18nOptions = attribute.pluginOptions as { i18n?: { localized?: boolean } } | undefined;\n return i18nOptions?.i18n?.localized === true;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocument\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha\n * @public\n * @description Returns a document based on the model, collection type & id passed as arguments.\n * Also extracts its schema from the redux cache to be used for creating a validation schema.\n * @example\n * ```tsx\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n *\n * if(!model || !collectionType) return null;\n *\n * const { document, isLoading, validate } = useDocument({ documentId: id, model, collectionType, params: { locale: 'en-GB' } })\n * const { update } = useDocumentActions()\n *\n * const onSubmit = async (document: Document) => {\n * const errors = validate(document);\n *\n * if(errors) {\n * // handle errors\n * }\n *\n * await update({ collectionType, model, id }, document)\n * }\n * ```\n *\n */\nconst useDocument: UseDocument = (args, opts) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n\n const {\n currentData: data,\n isLoading: isLoadingDocument,\n isFetching: isFetchingDocument,\n error,\n refetch,\n } = useGetDocumentQuery(args, {\n ...opts,\n skip: (!args.documentId && args.collectionType !== SINGLE_TYPES) || opts?.skip,\n });\n const document = data?.data;\n const meta = data?.meta;\n\n const {\n components,\n schema,\n schemas,\n isLoading: isLoadingSchema,\n } = useContentTypeSchema(args.model);\n const isSingleType = schema?.kind === 'singleType';\n\n const getTitle = React.useCallback(\n (mainField: string) => {\n // Always use mainField if it's not an id\n if (mainField !== 'id' && document?.[mainField]) {\n return document[mainField];\n }\n\n // When it's a singleType without a mainField, use the contentType displayName\n if (schema?.kind === 'singleType' && schema.info.displayName) {\n return formatMessage({\n id: schema.info.displayName,\n defaultMessage: schema.info.displayName,\n });\n }\n\n // Otherwise, use a fallback\n return formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n },\n [document, formatMessage, schema]\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError, args.collectionType]);\n\n const validationSchema = React.useMemo(() => {\n if (!schema) {\n return null;\n }\n\n return createYupSchema(schema.attributes, components);\n }, [schema, components]);\n\n const validate = React.useCallback(\n (document: Modules.Documents.AnyDocument): FormErrors | null => {\n if (!validationSchema) {\n throw new Error(\n 'There is no validation schema generated, this is likely due to the schema not being loaded yet.'\n );\n }\n\n try {\n validationSchema.validateSync(document, { abortEarly: false, strict: true });\n return null;\n } catch (error) {\n if (error instanceof ValidationError) {\n return getYupValidationErrors(error);\n }\n\n throw error;\n }\n },\n [validationSchema]\n );\n\n /**\n * Schema attributes that should be inherited from a sibling locale when\n * creating a new locale draft.\n *\n * Scope intentionally matches what the server populates into\n * `meta.availableLocales` (see `packages/core/content-manager/server/src/services/document-metadata.ts`):\n * - non-localized — `isLocalizedAttribute` semantics, so attributes whose\n * `pluginOptions.i18n.localized` is `undefined` count as non-localized\n * (an attribute created without the i18n plugin has no i18n options at\n * all but is still inherited at save by `copyNonLocalizedFields`).\n * - scalar or media — `component` / `dynamiczone` / `relation` are excluded\n * because the server doesn't populate them in `availableLocales` either,\n * so there'd be nothing to copy from.\n */\n const nonLocalizedScalarAndMediaFields = React.useMemo(() => {\n if (!schema?.attributes) {\n return [];\n }\n\n return Object.keys(schema.attributes).filter((name) => {\n const attribute = schema.attributes[name];\n\n if (isLocalizedAttribute(attribute)) {\n return false;\n }\n\n return (\n attribute.type !== 'component' &&\n attribute.type !== 'dynamiczone' &&\n attribute.type !== 'relation'\n );\n });\n }, [schema]);\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n * - inherit non-localized scalar/media values from a sibling locale.\n * Scope is intentionally limited to scalars and media — that is exactly\n * what the server populates into `meta.availableLocales` (see\n * `packages/core/content-manager/server/src/services/document-metadata.ts`).\n * Components, dynamic zones, and relations are not in that payload; the\n * server fills them at save time via `copyNonLocalizedFields` (in\n * `packages/core/core/src/services/document-service/internationalization.ts`)\n * when the new locale row is first created.\n * Baking the inheritance into `initialValues` here is what lets it survive\n * `<Form>` re-inits: the `SET_INITIAL_VALUES` effect in\n * `packages/core/admin/admin/src/components/Form.tsx` re-applies these\n * values whenever `initialValues` changes (e.g. after a locale switch),\n * which the previous side-effect-based prefill in `LocalePickerAction`\n * could not survive on revisits.\n */\n const getInitialFormValues = React.useCallback(\n (isCreatingDocument: boolean = false) => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n if (document?.id) {\n return transformDocument(schema, components)(document);\n }\n\n let form: AnyData = createDefaultForm(schema, components);\n\n // Intentionally use `availableLocales[0]`:\n // - The server sorts `getAvailableLocales` with the default locale first\n // (see `document-metadata.ts`), so index 0 is the canonical inheritance\n // source. Sibling locales can drift on non-localized fields because the\n // server only syncs them at locale-creation time, not on subsequent\n // updates — preferring the default keeps the surfaced values stable.\n // - Avoids coupling this hook to `useGetLocalesQuery` just to find the\n // default locale.\n const sibling = meta?.availableLocales?.[0] as Record<string, unknown> | undefined;\n if (sibling && nonLocalizedScalarAndMediaFields.length > 0) {\n const inherited = nonLocalizedScalarAndMediaFields.reduce<AnyData>((acc, name) => {\n if (name in sibling) {\n acc[name] = sibling[name];\n }\n return acc;\n }, {});\n\n form = { ...form, ...inherited };\n }\n\n return transformDocument(schema, components)(form);\n },\n [\n document,\n isSingleType,\n schema,\n components,\n meta?.availableLocales,\n nonLocalizedScalarAndMediaFields,\n ]\n );\n\n const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;\n const hasError = !!error;\n\n return React.useMemo(\n () =>\n ({\n components,\n document,\n meta,\n isLoading,\n hasError,\n schema,\n schemas,\n validate,\n getTitle,\n getInitialFormValues,\n refetch,\n }) satisfies ReturnType<UseDocument>,\n [\n components,\n document,\n meta,\n isLoading,\n hasError,\n schema,\n schemas,\n validate,\n getTitle,\n getInitialFormValues,\n refetch,\n ]\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDoc\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the router to extract the model, collection type & id from the url.\n * therefore, it shouldn't be used outside of the content-manager because it won't work as intended.\n */\nconst useDoc = (opts?: UseDocumentOpts) => {\n const { id, slug, collectionType, origin } = useParams<{\n id: string;\n origin: string;\n slug: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!slug) {\n throw new Error('Could not find model in url params');\n }\n\n const document = useDocument(\n { documentId: origin || id, model: slug, collectionType, params },\n {\n ...opts,\n skip: id === 'create' || (!origin && !id && collectionType !== SINGLE_TYPES) || opts?.skip,\n }\n );\n\n const returnId = origin || (id === 'create' ? undefined : id);\n\n return {\n collectionType,\n model: slug,\n id: returnId,\n ...document,\n };\n};\n\n/**\n * @public\n * @experimental\n * Content manager context hooks for plugin development.\n * Make sure to use this hook inside the content manager.\n */\nconst useContentManagerContext = () => {\n const {\n collectionType,\n model,\n id,\n components,\n isLoading: isLoadingDoc,\n schema,\n schemas,\n } = useDoc();\n\n const layout = useDocumentLayout(model);\n\n const form = useForm<unknown>('useContentManagerContext', (state) => state);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n const slug = model;\n const isCreatingEntry = id === 'create';\n\n const {} = useContentTypeSchema();\n\n const isLoading = isLoadingDoc || layout.isLoading;\n const error = layout.error;\n\n return {\n error,\n isLoading,\n\n // Base metadata\n model,\n collectionType,\n id,\n slug,\n isCreatingEntry,\n isSingleType,\n hasDraftAndPublish: schema?.options?.draftAndPublish ?? false,\n\n // All schema infos\n components,\n contentType: schema,\n contentTypes: schemas,\n\n // Form state\n form,\n\n // layout infos\n layout,\n };\n};\n\nexport { useDocument, useDoc, useContentManagerContext };\nexport type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };\n"],"names":["isLocalizedAttribute","attribute","i18nOptions","pluginOptions","i18n","localized","useDocument","args","opts","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","currentData","data","isLoading","isLoadingDocument","isFetching","isFetchingDocument","error","refetch","useGetDocumentQuery","skip","documentId","collectionType","SINGLE_TYPES","document","meta","components","schema","schemas","isLoadingSchema","useContentTypeSchema","model","isSingleType","kind","getTitle","React","useCallback","mainField","info","displayName","id","defaultMessage","useEffect","type","message","validationSchema","useMemo","createYupSchema","attributes","validate","Error","validateSync","abortEarly","strict","ValidationError","getYupValidationErrors","nonLocalizedScalarAndMediaFields","Object","keys","filter","name","getInitialFormValues","isCreatingDocument","undefined","transformDocument","form","createDefaultForm","sibling","availableLocales","length","inherited","reduce","acc","hasError","useDoc","slug","origin","useParams","query","useQueryParams","params","buildValidParams","returnId","useContentManagerContext","isLoadingDoc","layout","useDocumentLayout","useForm","state","isCreatingEntry","hasDraftAndPublish","options","draftAndPublish","contentType","contentTypes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDocument.js","sources":["../../../admin/src/hooks/useDocument.ts"],"sourcesContent":["/**\n * This hook doesn't use a context provider because we fetch directly from the server,\n * this sounds expensive but actually, it's really not. Because we have redux-toolkit-query\n * being a cache layer so if nothing invalidates the cache, we don't fetch again.\n */\n\nimport * as React from 'react';\n\nimport {\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n FormErrors,\n getYupValidationErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\nimport { ValidationError } from 'yup';\n\nimport { SINGLE_TYPES } from '../constants/collections';\nimport { type AnyData, transformDocument } from '../pages/EditView/utils/data';\nimport { createDefaultForm } from '../pages/EditView/utils/forms';\nimport { useGetDocumentQuery } from '../services/documents';\nimport { buildValidParams } from '../utils/api';\nimport { createYupSchema } from '../utils/validation';\n\nimport { useContentTypeSchema, ComponentsDictionary } from './useContentTypeSchema';\nimport { useDocumentLayout } from './useDocumentLayout';\n\nimport type { FindOne } from '../../../shared/contracts/collection-types';\nimport type { ContentType } from '../../../shared/contracts/content-types';\nimport type { Modules } from '@strapi/types';\n\ninterface UseDocumentArgs {\n collectionType: string;\n model: string;\n documentId?: string;\n params?: object;\n}\n\ntype UseDocumentOpts = Parameters<typeof useGetDocumentQuery>[1];\n\ntype Document = FindOne.Response['data'];\n\ntype Schema = ContentType;\n\ntype UseDocument = (\n args: UseDocumentArgs,\n opts?: UseDocumentOpts\n) => {\n /**\n * These are the schemas of the components used in the content type, organised\n * by their uid.\n */\n components: ComponentsDictionary;\n document?: Document;\n meta?: FindOne.Response['meta'];\n isLoading: boolean;\n /**\n * This is the schema of the content type, it is not the same as the layout.\n */\n schema?: Schema;\n schemas?: Schema[];\n hasError?: boolean;\n refetch: () => void;\n validate: (document: Document) => null | FormErrors;\n /**\n * Get the document's title\n */\n getTitle: (mainField: string) => string;\n /**\n * Get the initial form values for the document\n */\n getInitialFormValues: (isCreatingDocument?: boolean) => AnyData | undefined;\n};\n\n/**\n * Mirrors the server's `isLocalizedAttribute` in\n * `packages/plugins/i18n/server/src/services/content-types.ts`: an attribute\n * counts as localized only when `pluginOptions.i18n.localized` is explicitly\n * `true`. Both `false` and `undefined` mean \"non-localized\" — important here\n * because attributes created without the i18n plugin omit the field entirely,\n * and we still want them inherited when creating a new locale draft.\n */\nconst isLocalizedAttribute = (attribute: { pluginOptions?: object }): boolean => {\n // `pluginOptions` on the base attribute is typed as `object`, so we have to\n // narrow it to the i18n-specific shape here.\n const i18nOptions = attribute.pluginOptions as { i18n?: { localized?: boolean } } | undefined;\n return i18nOptions?.i18n?.localized === true;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocument\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha\n * @public\n * @description Returns a document based on the model, collection type & id passed as arguments.\n * Also extracts its schema from the redux cache to be used for creating a validation schema.\n * @example\n * ```tsx\n * const { id, model, collectionType } = useParams<{ id: string; model: string; collectionType: string }>();\n *\n * if(!model || !collectionType) return null;\n *\n * const { document, isLoading, validate } = useDocument({ documentId: id, model, collectionType, params: { locale: 'en-GB' } })\n * const { update } = useDocumentActions()\n *\n * const onSubmit = async (document: Document) => {\n * const errors = validate(document);\n *\n * if(errors) {\n * // handle errors\n * }\n *\n * await update({ collectionType, model, id }, document)\n * }\n * ```\n *\n */\nconst useDocument: UseDocument = (args, opts) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n\n const {\n currentData: data,\n isLoading: isLoadingDocument,\n isFetching: isFetchingDocument,\n error,\n refetch,\n } = useGetDocumentQuery(args, {\n ...opts,\n skip: (!args.documentId && args.collectionType !== SINGLE_TYPES) || opts?.skip,\n });\n const document = data?.data;\n const meta = data?.meta;\n\n const {\n components,\n schema,\n schemas,\n isLoading: isLoadingSchema,\n } = useContentTypeSchema(args.model);\n const isSingleType = schema?.kind === 'singleType';\n\n const getTitle = React.useCallback(\n (mainField: string) => {\n // Always use mainField if it's not an id\n if (mainField !== 'id' && document?.[mainField]) {\n return document[mainField];\n }\n\n // When it's a singleType without a mainField, use the contentType displayName\n if (schema?.kind === 'singleType' && schema.info.displayName) {\n return formatMessage({\n id: schema.info.displayName,\n defaultMessage: schema.info.displayName,\n });\n }\n\n // Otherwise, use a fallback\n return formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n },\n [document, formatMessage, schema]\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [toggleNotification, error, formatAPIError, args.collectionType]);\n\n const validationSchema = React.useMemo(() => {\n if (!schema) {\n return null;\n }\n\n return createYupSchema(schema.attributes, components);\n }, [schema, components]);\n\n const validate = React.useCallback(\n (document: Modules.Documents.AnyDocument): FormErrors | null => {\n if (!validationSchema) {\n throw new Error(\n 'There is no validation schema generated, this is likely due to the schema not being loaded yet.'\n );\n }\n\n try {\n validationSchema.validateSync(document, { abortEarly: false, strict: true });\n return null;\n } catch (error) {\n if (error instanceof ValidationError) {\n return getYupValidationErrors(error);\n }\n\n throw error;\n }\n },\n [validationSchema]\n );\n\n /**\n * Schema attributes that should be inherited from a sibling locale when\n * creating a new locale draft.\n *\n * Scope intentionally matches what the server populates into\n * `meta.availableLocales` (see `packages/core/content-manager/server/src/services/document-metadata.ts`):\n * - non-localized — `isLocalizedAttribute` semantics, so attributes whose\n * `pluginOptions.i18n.localized` is `undefined` count as non-localized\n * (an attribute created without the i18n plugin has no i18n options at\n * all but is still inherited at save by `copyNonLocalizedFields`).\n * - scalar or media — `component` / `dynamiczone` / `relation` are excluded\n * because the server doesn't populate them in `availableLocales` either,\n * so there'd be nothing to copy from.\n */\n const nonLocalizedScalarAndMediaFields = React.useMemo(() => {\n if (!schema?.attributes) {\n return [];\n }\n\n return Object.keys(schema.attributes).filter((name) => {\n const attribute = schema.attributes[name];\n\n if (isLocalizedAttribute(attribute)) {\n return false;\n }\n\n return (\n attribute.type !== 'component' &&\n attribute.type !== 'dynamiczone' &&\n attribute.type !== 'relation'\n );\n });\n }, [schema]);\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n * - inherit non-localized scalar/media values from a sibling locale.\n * Scope is intentionally limited to scalars and media — that is exactly\n * what the server populates into `meta.availableLocales` (see\n * `packages/core/content-manager/server/src/services/document-metadata.ts`).\n * Components, dynamic zones, and relations are not in that payload; the\n * server fills them at save time via `copyNonLocalizedFields` (in\n * `packages/core/core/src/services/document-service/internationalization.ts`)\n * when the new locale row is first created.\n * Baking the inheritance into `initialValues` here is what lets it survive\n * `<Form>` re-inits: the `SET_INITIAL_VALUES` effect in\n * `packages/core/admin/admin/src/components/Form.tsx` re-applies these\n * values whenever `initialValues` changes (e.g. after a locale switch),\n * which the previous side-effect-based prefill in `LocalePickerAction`\n * could not survive on revisits.\n */\n const getInitialFormValues = React.useCallback(\n (isCreatingDocument: boolean = false) => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n if (document?.id) {\n return transformDocument(schema, components)(document);\n }\n\n let form: AnyData = createDefaultForm(schema, components);\n\n // Intentionally use `availableLocales[0]`:\n // - The server sorts `getAvailableLocales` with the default locale first\n // (see `document-metadata.ts`), so index 0 is the canonical inheritance\n // source. Sibling locales can drift on non-localized fields because the\n // server only syncs them at locale-creation time, not on subsequent\n // updates — preferring the default keeps the surfaced values stable.\n // - Avoids coupling this hook to `useGetLocalesQuery` just to find the\n // default locale.\n const sibling = meta?.availableLocales?.[0] as Record<string, unknown> | undefined;\n if (sibling && nonLocalizedScalarAndMediaFields.length > 0) {\n const inherited = nonLocalizedScalarAndMediaFields.reduce<AnyData>((acc, name) => {\n if (name in sibling) {\n acc[name] = sibling[name];\n }\n return acc;\n }, {});\n\n form = { ...form, ...inherited };\n }\n\n return transformDocument(schema, components)(form);\n },\n [\n document,\n isSingleType,\n schema,\n components,\n meta?.availableLocales,\n nonLocalizedScalarAndMediaFields,\n ]\n );\n\n const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;\n const hasError = !!error;\n\n return React.useMemo(\n () =>\n ({\n components,\n document,\n meta,\n isLoading,\n hasError,\n schema,\n schemas,\n validate,\n getTitle,\n getInitialFormValues,\n refetch,\n }) satisfies ReturnType<UseDocument>,\n [\n components,\n document,\n meta,\n isLoading,\n hasError,\n schema,\n schemas,\n validate,\n getTitle,\n getInitialFormValues,\n refetch,\n ]\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDoc\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the router to extract the model, collection type & id from the url.\n * therefore, it shouldn't be used outside of the content-manager because it won't work as intended.\n */\nconst useDoc = (opts?: UseDocumentOpts) => {\n const { id, slug, collectionType, origin } = useParams<{\n id: string;\n origin: string;\n slug: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!slug) {\n throw new Error('Could not find model in url params');\n }\n\n const document = useDocument(\n { documentId: origin || id, model: slug, collectionType, params },\n {\n ...opts,\n skip: id === 'create' || (!origin && !id && collectionType !== SINGLE_TYPES) || opts?.skip,\n }\n );\n\n const returnId = origin || (id === 'create' ? undefined : id);\n\n return {\n collectionType,\n model: slug,\n id: returnId,\n ...document,\n };\n};\n\n/**\n * @public\n * @experimental\n * Content manager context hooks for plugin development.\n * Make sure to use this hook inside the content manager.\n */\nconst useContentManagerContext = () => {\n const {\n collectionType,\n model,\n id,\n components,\n isLoading: isLoadingDoc,\n schema,\n schemas,\n } = useDoc();\n\n const layout = useDocumentLayout(model);\n\n const form = useForm<unknown>('useContentManagerContext', (state) => state);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n const slug = model;\n const isCreatingEntry = id === 'create';\n\n const {} = useContentTypeSchema();\n\n const isLoading = isLoadingDoc || layout.isLoading;\n const error = layout.error;\n\n return {\n error,\n isLoading,\n\n // Base metadata\n model,\n collectionType,\n id,\n slug,\n isCreatingEntry,\n isSingleType,\n hasDraftAndPublish: schema?.options?.draftAndPublish ?? false,\n\n // All schema infos\n components,\n contentType: schema,\n contentTypes: schemas,\n\n // Form state\n form,\n\n // layout infos\n layout,\n };\n};\n\nexport { useDocument, useDoc, useContentManagerContext };\nexport type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };\n"],"names":["isLocalizedAttribute","attribute","i18nOptions","pluginOptions","i18n","localized","useDocument","args","opts","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","currentData","data","isLoading","isLoadingDocument","isFetching","isFetchingDocument","error","refetch","useGetDocumentQuery","skip","documentId","collectionType","SINGLE_TYPES","document","meta","components","schema","schemas","isLoadingSchema","useContentTypeSchema","model","isSingleType","kind","getTitle","React","useCallback","mainField","info","displayName","id","defaultMessage","useEffect","type","message","validationSchema","useMemo","createYupSchema","attributes","validate","Error","validateSync","abortEarly","strict","ValidationError","getYupValidationErrors","nonLocalizedScalarAndMediaFields","Object","keys","filter","name","getInitialFormValues","isCreatingDocument","undefined","transformDocument","form","createDefaultForm","sibling","availableLocales","length","inherited","reduce","acc","hasError","useDoc","slug","origin","useParams","query","useQueryParams","params","buildValidParams","returnId","useContentManagerContext","isLoadingDoc","layout","useDocumentLayout","useForm","state","isCreatingEntry","hasDraftAndPublish","options","draftAndPublish","contentType","contentTypes"],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@ var Preview = require('../preview/pages/Preview.js');
|
|
|
10
10
|
var documents = require('../services/documents.js');
|
|
11
11
|
var translations = require('../utils/translations.js');
|
|
12
12
|
|
|
13
|
-
function
|
|
13
|
+
function _interopNamespace(e) {
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
14
15
|
var n = Object.create(null);
|
|
15
16
|
if (e) {
|
|
16
17
|
Object.keys(e).forEach(function (k) {
|
|
@@ -27,7 +28,7 @@ function _interopNamespaceDefault(e) {
|
|
|
27
28
|
return Object.freeze(n);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
var React__namespace = /*#__PURE__*/
|
|
31
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
31
32
|
|
|
32
33
|
const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
33
34
|
id: 'notification.error',
|