@strapi/content-manager 5.48.1 → 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 +3 -2
- package/dist/admin/features/DocumentRBAC.js.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 +3 -2
- package/dist/admin/hooks/useContentTypeSchema.js.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 +3 -2
- package/dist/admin/hooks/useDocumentLayout.js.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 +3 -2
- package/dist/admin/pages/ComponentConfigurationPage.js.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 +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.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 +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.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 +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.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 +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -1
- 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 +3 -2
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.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 +3 -2
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.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 +3 -2
- package/dist/admin/pages/ListView/components/Filters.js.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/Relations.js +3 -2
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.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/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -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 +2 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +2 -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/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/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/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 +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDocumentLayout.js","sources":["../../../admin/src/hooks/useDocumentLayout.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\n\nimport { HOOKS } from '../constants/hooks';\nimport { useGetContentTypeConfigurationQuery } from '../services/contentTypes';\nimport { BaseQueryError } from '../utils/api';\nimport { getMainField } from '../utils/attributes';\nimport { normalizeContentManagerLayout } from '../utils/layouts/normalizeContentManagerLayout';\n\nimport { useContentTypeSchema } from './useContentTypeSchema';\nimport {\n type ComponentsDictionary,\n type Document,\n type Schema,\n useDoc,\n useDocument,\n} from './useDocument';\n\nimport type { ComponentConfiguration } from '../../../shared/contracts/components';\nimport type {\n Metadatas,\n FindContentTypeConfiguration,\n Settings,\n} from '../../../shared/contracts/content-types';\nimport type { Filters, InputProps, Table } from '@strapi/admin/strapi-admin';\nimport type { Schema as SchemaUtils } from '@strapi/types';\n\ntype LayoutOptions = Schema['options'] & Schema['pluginOptions'] & object;\n\ninterface LayoutSettings extends Settings {\n displayName?: string;\n icon?: never;\n}\n\ninterface ListFieldLayout\n extends Table.Header<Document, ListFieldLayout>,\n Pick<Filters.Filter, 'mainField'> {\n attribute: SchemaUtils.Attribute.AnyAttribute | { type: 'custom' };\n}\n\ninterface ListLayout {\n layout: ListFieldLayout[];\n components?: never;\n metadatas: {\n [K in keyof Metadatas]: Metadatas[K]['list'];\n };\n options: LayoutOptions;\n settings: LayoutSettings;\n}\ninterface EditFieldSharedProps\n extends Omit<InputProps, 'hint' | 'label' | 'type'>,\n Pick<Filters.Filter, 'mainField'> {\n hint?: string;\n label: string;\n size: number;\n unique?: boolean;\n visible?: boolean;\n}\n\n/**\n * Map over all the types in Attribute Types and use that to create a union of new types where the attribute type\n * is under the property attribute and the type is under the property type.\n */\ntype EditFieldLayout = {\n [K in SchemaUtils.Attribute.Kind]: EditFieldSharedProps & {\n attribute: Extract<SchemaUtils.Attribute.AnyAttribute, { type: K }>;\n type: K;\n };\n}[SchemaUtils.Attribute.Kind];\n\ninterface EditLayout {\n layout: Array<Array<EditFieldLayout[]>>;\n components: {\n [uid: string]: {\n layout: Array<EditFieldLayout[]>;\n settings: ComponentConfiguration['settings'] & {\n displayName?: string;\n icon?: string;\n };\n };\n };\n metadatas: {\n [K in keyof Metadatas]: Metadatas[K]['edit'];\n };\n options: LayoutOptions;\n settings: LayoutSettings;\n}\n\n/**\n * Data required to resolve `mainField` when converting list column names to field layouts for\n * component and relation attributes; mirrors the fourth and fifth arguments of `formatListLayout`.\n */\ntype ListViewConversionContext = {\n componentConfigurations: FindContentTypeConfiguration.Response['data']['components'];\n componentSchemas: ComponentsDictionary;\n contentTypeSchemas: Schema[];\n};\n\ntype UseDocumentLayout = (model: string) => {\n error?: BaseQueryError | SerializedError;\n isLoading: boolean;\n /**\n * This is the layout for the edit view,\n */\n edit: EditLayout;\n list: ListLayout;\n /**\n * Populated when configuration is loaded; pass into `convertListLayoutToFieldLayouts` with\n * `list.metadatas` when mapping persisted list column names (e.g. custom displayed headers).\n */\n listViewConversionContext: ListViewConversionContext | null;\n};\n\ntype ResolvedLayouts = {\n edit: EditLayout;\n list: ListLayout;\n listViewConversionContext: ListViewConversionContext;\n};\n\ntype ResolvedLayoutCacheEntry = {\n components: ComponentsDictionary;\n data: LayoutData;\n model: string;\n schema?: Schema;\n schemas: Schema[];\n value: ResolvedLayouts;\n};\n\nconst RESOLVED_LAYOUT_CACHE_LIMIT = 25;\n// Module-level cache keeps resolved layout object identities stable across hook instances\n// when RTK Query returns the same schema/configuration references.\nconst resolvedLayoutCache: ResolvedLayoutCacheEntry[] = [];\n\nconst getCachedResolvedLayouts = ({\n components,\n data,\n model,\n schema,\n schemas,\n}: Omit<ResolvedLayoutCacheEntry, 'value'>) => {\n return resolvedLayoutCache.find(\n (entry) =>\n entry.components === components &&\n entry.data === data &&\n entry.model === model &&\n entry.schema === schema &&\n entry.schemas === schemas\n )?.value;\n};\n\nconst setCachedResolvedLayouts = (entry: ResolvedLayoutCacheEntry) => {\n resolvedLayoutCache.unshift(entry);\n\n if (resolvedLayoutCache.length > RESOLVED_LAYOUT_CACHE_LIMIT) {\n resolvedLayoutCache.pop();\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocumentLayout\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEFAULT_SETTINGS = {\n bulkable: false,\n filterable: false,\n searchable: false,\n pagination: false,\n defaultSortBy: '',\n defaultSortOrder: 'asc',\n mainField: 'id',\n pageSize: 10,\n relationOpenMode: 'modal' as const,\n};\n\n/**\n * @alpha\n * @description This hook is used to get the layouts for either the edit view or list view of a specific content-type\n * including the layouts for the components used in the content-type. It also runs the mutation hook waterfall so the data\n * is consistent wherever it is used. It's a light wrapper around the `useDocument` hook, but provides the `skip` option a document\n * is not fetched, however, it does fetch the schemas & components if they do not already exist in the cache.\n *\n * If the fetch fails, it will display a notification to the user.\n *\n * @example\n * ```tsx\n * const { model } = useParams<{ model: string }>();\n * const { edit: { schema: layout } } = useDocumentLayout(model);\n *\n * return layout.map(panel => panel.map(row => row.map(field => <Field.Root {...field} />)))\n * ```\n *\n */\nconst useDocumentLayout: UseDocumentLayout = (model) => {\n const { schema, components } = useDocument({ model, collectionType: '' }, { skip: true });\n const [{ query }] = useQueryParams();\n const runHookWaterfall = useStrapiApp('useDocumentLayout', (state) => state.runHookWaterfall);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { isLoading: isLoadingSchemas, schemas } = useContentTypeSchema();\n\n const {\n currentData: data,\n isLoading: isLoadingConfigs,\n error,\n } = useGetContentTypeConfigurationQuery(model);\n\n const isConfigResolvedForModel = data?.contentType?.uid === model;\n const isLoading = isLoadingSchemas || isLoadingConfigs || (!error && !isConfigResolvedForModel);\n const stableLayoutsByModelRef = React.useRef(\n new Map<\n string,\n {\n edit: EditLayout;\n list: ListLayout;\n listViewConversionContext: ListViewConversionContext | null;\n }\n >()\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const resolvedLayouts = React.useMemo(() => {\n if (!data || isLoading) {\n return null;\n }\n\n const cachedLayouts = getCachedResolvedLayouts({ components, data, model, schema, schemas });\n\n if (cachedLayouts) {\n return cachedLayouts;\n }\n\n const normalizedData = normalizeContentManagerLayout(data, { schemas, schema, components });\n const edit = formatEditLayout(normalizedData, { schemas, schema, components });\n const list = formatListLayout(normalizedData, { schemas, schema, components });\n const listViewConversionContext: ListViewConversionContext = {\n componentConfigurations: normalizedData.components,\n componentSchemas: components,\n contentTypeSchemas: schemas,\n };\n\n const layouts = { edit, list, listViewConversionContext };\n\n setCachedResolvedLayouts({ components, data, model, schema, schemas, value: layouts });\n\n return layouts;\n }, [data, isLoading, model, schemas, schema, components]);\n\n React.useEffect(() => {\n if (resolvedLayouts) {\n stableLayoutsByModelRef.current.set(model, resolvedLayouts);\n }\n }, [model, resolvedLayouts]);\n\n const stableLayouts = resolvedLayouts ?? stableLayoutsByModelRef.current.get(model) ?? null;\n\n const editLayout = React.useMemo(\n () =>\n stableLayouts?.edit ??\n ({\n layout: [],\n components: {},\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as EditLayout),\n [stableLayouts]\n );\n\n const listLayout = React.useMemo(\n () =>\n stableLayouts?.list ??\n ({\n layout: [],\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as ListLayout),\n [stableLayouts]\n );\n\n const { layout: edit } = React.useMemo(\n () =>\n runHookWaterfall(HOOKS.MUTATE_EDIT_VIEW_LAYOUT, {\n layout: editLayout,\n query,\n }),\n [editLayout, query, runHookWaterfall]\n );\n\n const listViewConversionContext = stableLayouts?.listViewConversionContext ?? null;\n\n return {\n error,\n isLoading,\n edit,\n list: listLayout,\n listViewConversionContext,\n } satisfies ReturnType<UseDocumentLayout>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocLayout\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the internal useDoc hook, as such it shouldn't be used outside of the\n * content-manager because it won't work as intended.\n */\nconst useDocLayout = () => {\n const { model } = useDoc();\n return useDocumentLayout(model);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatEditLayout\n * -----------------------------------------------------------------------------------------------*/\ntype LayoutData = FindContentTypeConfiguration.Response['data'];\n\n/**\n * @internal\n * @description takes the configuration data, the schema & the components used in the schema and formats the edit view\n * versions of the schema & components. This is then used to render the edit view of the content-type.\n */\nconst formatEditLayout = (\n data: LayoutData,\n {\n schemas,\n schema,\n components,\n }: { schemas: Schema[]; schema?: Schema; components: ComponentsDictionary }\n): EditLayout => {\n let currentPanelIndex = 0;\n /**\n * The fields arranged by the panels, new panels are made for dynamic zones only.\n */\n const panelledEditAttributes = convertEditLayoutToFieldLayouts(\n data.contentType.layouts.edit,\n schema?.attributes,\n data.contentType.metadatas,\n { configurations: data.components, schemas: components },\n schemas\n ).reduce<Array<EditFieldLayout[][]>>((panels, row) => {\n if (row.some((field) => field.type === 'dynamiczone')) {\n panels.push([row]);\n currentPanelIndex += 2;\n } else {\n if (!panels[currentPanelIndex]) {\n panels.push([row]);\n } else {\n panels[currentPanelIndex].push(row);\n }\n }\n\n return panels;\n }, []);\n\n const componentEditAttributes = Object.entries(data.components).reduce<EditLayout['components']>(\n (acc, [uid, configuration]) => {\n const componentSchema = components[uid];\n\n // Persisted configuration can reference component UIDs absent from `/init`.\n if (!componentSchema) {\n return acc;\n }\n\n acc[uid] = {\n layout: convertEditLayoutToFieldLayouts(\n configuration.layouts.edit,\n componentSchema.attributes,\n configuration.metadatas,\n { configurations: data.components, schemas: components }\n ),\n settings: {\n ...configuration.settings,\n icon: componentSchema.info.icon,\n displayName: componentSchema.info.displayName,\n },\n };\n return acc;\n },\n {}\n );\n\n const editMetadatas = Object.entries(data.contentType.metadatas).reduce<EditLayout['metadatas']>(\n (acc, [attribute, metadata]) => {\n return {\n ...acc,\n [attribute]: metadata.edit,\n };\n },\n {}\n );\n\n return {\n layout: panelledEditAttributes,\n components: componentEditAttributes,\n metadatas: editMetadatas,\n settings: {\n ...data.contentType.settings,\n displayName: schema?.info?.displayName,\n },\n options: {\n ...schema?.options,\n ...schema?.pluginOptions,\n ...data.contentType.options,\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * convertEditLayoutToFieldLayouts\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the edit layout from either a content-type or a component\n * and formats it into a generic object that can be used to correctly render\n * the form fields.\n */\nconst convertEditLayoutToFieldLayouts = (\n rows: LayoutData['contentType']['layouts']['edit'],\n attributes: Schema['attributes'] = {},\n metadatas: Metadatas,\n components?: {\n configurations: Record<string, ComponentConfiguration>;\n schemas: ComponentsDictionary;\n },\n schemas: Schema[] = []\n) => {\n return rows.map((row) =>\n row\n .map((field) => {\n const attribute = attributes[field.name];\n\n if (!attribute) {\n return null;\n }\n\n const fieldMetadata = metadatas[field.name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { edit: metadata } = fieldMetadata;\n\n const settings: Partial<Settings> =\n attribute.type === 'component' && components\n ? (components.configurations[attribute.component]?.settings ?? {})\n : {};\n\n return {\n attribute,\n disabled: !metadata.editable,\n hint: metadata.description,\n label: metadata.label ?? '',\n name: field.name,\n // @ts-expect-error – mainField does exist on the metadata for a relation.\n mainField: getMainField(attribute, metadata.mainField || settings.mainField, {\n schemas,\n components: components?.schemas ?? {},\n }),\n placeholder: metadata.placeholder ?? '',\n required: attribute.required ?? false,\n size: field.size,\n unique: 'unique' in attribute ? attribute.unique : false,\n visible: metadata.visible ?? true,\n type: attribute.type,\n };\n })\n .filter((field) => field !== null)\n ) as EditFieldLayout[][];\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatListLayout\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the complete configuration data, the schema & the components used in the schema and\n * formats a list view layout for the content-type. This is much simpler than the edit view layout as there\n * are less options to consider.\n */\nconst formatListLayout = (\n data: LayoutData,\n {\n schemas,\n schema,\n components,\n }: { schemas: Schema[]; schema?: Schema; components: ComponentsDictionary }\n): ListLayout => {\n const listMetadatas = Object.entries(data.contentType.metadatas).reduce<ListLayout['metadatas']>(\n (acc, [attribute, metadata]) => {\n return {\n ...acc,\n [attribute]: metadata.list,\n };\n },\n {}\n );\n /**\n * The fields arranged by the panels, new panels are made for dynamic zones only.\n */\n const listAttributes = convertListLayoutToFieldLayouts(\n data.contentType.layouts.list,\n schema?.attributes,\n listMetadatas,\n { configurations: data.components, schemas: components },\n schemas\n );\n\n return {\n layout: listAttributes,\n settings: { ...data.contentType.settings, displayName: schema?.info?.displayName },\n metadatas: listMetadatas,\n options: {\n ...schema?.options,\n ...schema?.pluginOptions,\n ...data.contentType.options,\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * convertListLayoutToFieldLayouts\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the columns from the list view configuration and formats them into a generic object\n * combinining metadata and attribute data.\n *\n * @note We do use this to reformat the list of strings when updating the displayed headers for the list view.\n */\nconst convertListLayoutToFieldLayouts = (\n columns: LayoutData['contentType']['layouts']['list'],\n attributes: Schema['attributes'] = {},\n metadatas: ListLayout['metadatas'],\n components?: {\n configurations: Record<string, ComponentConfiguration>;\n schemas: ComponentsDictionary;\n },\n schemas: Schema[] = []\n) => {\n return columns\n .map((name) => {\n const attribute = attributes[name];\n\n if (!attribute) {\n return null;\n }\n\n const metadata = metadatas[name];\n if (!metadata) {\n return null;\n }\n\n const settings: Partial<Settings> =\n attribute.type === 'component' && components\n ? (components.configurations[attribute.component]?.settings ?? {})\n : {};\n\n return {\n attribute,\n label: metadata.label ?? '',\n mainField: getMainField(attribute, metadata.mainField || settings.mainField, {\n schemas,\n components: components?.schemas ?? {},\n }),\n name: name,\n searchable: metadata.searchable ?? true,\n sortable: metadata.sortable ?? true,\n } satisfies ListFieldLayout;\n })\n .filter((field) => field !== null) as ListFieldLayout[];\n};\n\nexport {\n useDocLayout,\n useDocumentLayout,\n convertListLayoutToFieldLayouts,\n convertEditLayoutToFieldLayouts,\n DEFAULT_SETTINGS,\n};\nexport type { EditLayout, EditFieldLayout, ListLayout, ListFieldLayout, UseDocumentLayout };\n"],"names":["RESOLVED_LAYOUT_CACHE_LIMIT","resolvedLayoutCache","getCachedResolvedLayouts","components","data","model","schema","schemas","find","entry","value","setCachedResolvedLayouts","unshift","length","pop","DEFAULT_SETTINGS","bulkable","filterable","searchable","pagination","defaultSortBy","defaultSortOrder","mainField","pageSize","relationOpenMode","useDocumentLayout","useDocument","collectionType","skip","query","useQueryParams","runHookWaterfall","useStrapiApp","state","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isLoading","isLoadingSchemas","useContentTypeSchema","currentData","isLoadingConfigs","error","useGetContentTypeConfigurationQuery","isConfigResolvedForModel","contentType","uid","stableLayoutsByModelRef","React","useRef","Map","useEffect","type","message","resolvedLayouts","useMemo","cachedLayouts","normalizedData","normalizeContentManagerLayout","edit","formatEditLayout","list","formatListLayout","listViewConversionContext","componentConfigurations","componentSchemas","contentTypeSchemas","layouts","current","set","stableLayouts","get","editLayout","layout","metadatas","options","settings","listLayout","HOOKS","MUTATE_EDIT_VIEW_LAYOUT","useDocLayout","useDoc","currentPanelIndex","panelledEditAttributes","convertEditLayoutToFieldLayouts","attributes","configurations","reduce","panels","row","some","field","push","componentEditAttributes","Object","entries","acc","configuration","componentSchema","icon","info","displayName","editMetadatas","attribute","metadata","pluginOptions","rows","map","name","fieldMetadata","component","disabled","editable","hint","description","label","getMainField","placeholder","required","size","unique","visible","filter","listMetadatas","listAttributes","convertListLayoutToFieldLayouts","columns","sortable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDocumentLayout.js","sources":["../../../admin/src/hooks/useDocumentLayout.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\n\nimport { HOOKS } from '../constants/hooks';\nimport { useGetContentTypeConfigurationQuery } from '../services/contentTypes';\nimport { BaseQueryError } from '../utils/api';\nimport { getMainField } from '../utils/attributes';\nimport { normalizeContentManagerLayout } from '../utils/layouts/normalizeContentManagerLayout';\n\nimport { useContentTypeSchema } from './useContentTypeSchema';\nimport {\n type ComponentsDictionary,\n type Document,\n type Schema,\n useDoc,\n useDocument,\n} from './useDocument';\n\nimport type { ComponentConfiguration } from '../../../shared/contracts/components';\nimport type {\n Metadatas,\n FindContentTypeConfiguration,\n Settings,\n} from '../../../shared/contracts/content-types';\nimport type { Filters, InputProps, Table } from '@strapi/admin/strapi-admin';\nimport type { Schema as SchemaUtils } from '@strapi/types';\n\ntype LayoutOptions = Schema['options'] & Schema['pluginOptions'] & object;\n\ninterface LayoutSettings extends Settings {\n displayName?: string;\n icon?: never;\n}\n\ninterface ListFieldLayout\n extends Table.Header<Document, ListFieldLayout>,\n Pick<Filters.Filter, 'mainField'> {\n attribute: SchemaUtils.Attribute.AnyAttribute | { type: 'custom' };\n}\n\ninterface ListLayout {\n layout: ListFieldLayout[];\n components?: never;\n metadatas: {\n [K in keyof Metadatas]: Metadatas[K]['list'];\n };\n options: LayoutOptions;\n settings: LayoutSettings;\n}\ninterface EditFieldSharedProps\n extends Omit<InputProps, 'hint' | 'label' | 'type'>,\n Pick<Filters.Filter, 'mainField'> {\n hint?: string;\n label: string;\n size: number;\n unique?: boolean;\n visible?: boolean;\n}\n\n/**\n * Map over all the types in Attribute Types and use that to create a union of new types where the attribute type\n * is under the property attribute and the type is under the property type.\n */\ntype EditFieldLayout = {\n [K in SchemaUtils.Attribute.Kind]: EditFieldSharedProps & {\n attribute: Extract<SchemaUtils.Attribute.AnyAttribute, { type: K }>;\n type: K;\n };\n}[SchemaUtils.Attribute.Kind];\n\ninterface EditLayout {\n layout: Array<Array<EditFieldLayout[]>>;\n components: {\n [uid: string]: {\n layout: Array<EditFieldLayout[]>;\n settings: ComponentConfiguration['settings'] & {\n displayName?: string;\n icon?: string;\n };\n };\n };\n metadatas: {\n [K in keyof Metadatas]: Metadatas[K]['edit'];\n };\n options: LayoutOptions;\n settings: LayoutSettings;\n}\n\n/**\n * Data required to resolve `mainField` when converting list column names to field layouts for\n * component and relation attributes; mirrors the fourth and fifth arguments of `formatListLayout`.\n */\ntype ListViewConversionContext = {\n componentConfigurations: FindContentTypeConfiguration.Response['data']['components'];\n componentSchemas: ComponentsDictionary;\n contentTypeSchemas: Schema[];\n};\n\ntype UseDocumentLayout = (model: string) => {\n error?: BaseQueryError | SerializedError;\n isLoading: boolean;\n /**\n * This is the layout for the edit view,\n */\n edit: EditLayout;\n list: ListLayout;\n /**\n * Populated when configuration is loaded; pass into `convertListLayoutToFieldLayouts` with\n * `list.metadatas` when mapping persisted list column names (e.g. custom displayed headers).\n */\n listViewConversionContext: ListViewConversionContext | null;\n};\n\ntype ResolvedLayouts = {\n edit: EditLayout;\n list: ListLayout;\n listViewConversionContext: ListViewConversionContext;\n};\n\ntype ResolvedLayoutCacheEntry = {\n components: ComponentsDictionary;\n data: LayoutData;\n model: string;\n schema?: Schema;\n schemas: Schema[];\n value: ResolvedLayouts;\n};\n\nconst RESOLVED_LAYOUT_CACHE_LIMIT = 25;\n// Module-level cache keeps resolved layout object identities stable across hook instances\n// when RTK Query returns the same schema/configuration references.\nconst resolvedLayoutCache: ResolvedLayoutCacheEntry[] = [];\n\nconst getCachedResolvedLayouts = ({\n components,\n data,\n model,\n schema,\n schemas,\n}: Omit<ResolvedLayoutCacheEntry, 'value'>) => {\n return resolvedLayoutCache.find(\n (entry) =>\n entry.components === components &&\n entry.data === data &&\n entry.model === model &&\n entry.schema === schema &&\n entry.schemas === schemas\n )?.value;\n};\n\nconst setCachedResolvedLayouts = (entry: ResolvedLayoutCacheEntry) => {\n resolvedLayoutCache.unshift(entry);\n\n if (resolvedLayoutCache.length > RESOLVED_LAYOUT_CACHE_LIMIT) {\n resolvedLayoutCache.pop();\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocumentLayout\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEFAULT_SETTINGS = {\n bulkable: false,\n filterable: false,\n searchable: false,\n pagination: false,\n defaultSortBy: '',\n defaultSortOrder: 'asc',\n mainField: 'id',\n pageSize: 10,\n relationOpenMode: 'modal' as const,\n};\n\n/**\n * @alpha\n * @description This hook is used to get the layouts for either the edit view or list view of a specific content-type\n * including the layouts for the components used in the content-type. It also runs the mutation hook waterfall so the data\n * is consistent wherever it is used. It's a light wrapper around the `useDocument` hook, but provides the `skip` option a document\n * is not fetched, however, it does fetch the schemas & components if they do not already exist in the cache.\n *\n * If the fetch fails, it will display a notification to the user.\n *\n * @example\n * ```tsx\n * const { model } = useParams<{ model: string }>();\n * const { edit: { schema: layout } } = useDocumentLayout(model);\n *\n * return layout.map(panel => panel.map(row => row.map(field => <Field.Root {...field} />)))\n * ```\n *\n */\nconst useDocumentLayout: UseDocumentLayout = (model) => {\n const { schema, components } = useDocument({ model, collectionType: '' }, { skip: true });\n const [{ query }] = useQueryParams();\n const runHookWaterfall = useStrapiApp('useDocumentLayout', (state) => state.runHookWaterfall);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { isLoading: isLoadingSchemas, schemas } = useContentTypeSchema();\n\n const {\n currentData: data,\n isLoading: isLoadingConfigs,\n error,\n } = useGetContentTypeConfigurationQuery(model);\n\n const isConfigResolvedForModel = data?.contentType?.uid === model;\n const isLoading = isLoadingSchemas || isLoadingConfigs || (!error && !isConfigResolvedForModel);\n const stableLayoutsByModelRef = React.useRef(\n new Map<\n string,\n {\n edit: EditLayout;\n list: ListLayout;\n listViewConversionContext: ListViewConversionContext | null;\n }\n >()\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const resolvedLayouts = React.useMemo(() => {\n if (!data || isLoading) {\n return null;\n }\n\n const cachedLayouts = getCachedResolvedLayouts({ components, data, model, schema, schemas });\n\n if (cachedLayouts) {\n return cachedLayouts;\n }\n\n const normalizedData = normalizeContentManagerLayout(data, { schemas, schema, components });\n const edit = formatEditLayout(normalizedData, { schemas, schema, components });\n const list = formatListLayout(normalizedData, { schemas, schema, components });\n const listViewConversionContext: ListViewConversionContext = {\n componentConfigurations: normalizedData.components,\n componentSchemas: components,\n contentTypeSchemas: schemas,\n };\n\n const layouts = { edit, list, listViewConversionContext };\n\n setCachedResolvedLayouts({ components, data, model, schema, schemas, value: layouts });\n\n return layouts;\n }, [data, isLoading, model, schemas, schema, components]);\n\n React.useEffect(() => {\n if (resolvedLayouts) {\n stableLayoutsByModelRef.current.set(model, resolvedLayouts);\n }\n }, [model, resolvedLayouts]);\n\n const stableLayouts = resolvedLayouts ?? stableLayoutsByModelRef.current.get(model) ?? null;\n\n const editLayout = React.useMemo(\n () =>\n stableLayouts?.edit ??\n ({\n layout: [],\n components: {},\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as EditLayout),\n [stableLayouts]\n );\n\n const listLayout = React.useMemo(\n () =>\n stableLayouts?.list ??\n ({\n layout: [],\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as ListLayout),\n [stableLayouts]\n );\n\n const { layout: edit } = React.useMemo(\n () =>\n runHookWaterfall(HOOKS.MUTATE_EDIT_VIEW_LAYOUT, {\n layout: editLayout,\n query,\n }),\n [editLayout, query, runHookWaterfall]\n );\n\n const listViewConversionContext = stableLayouts?.listViewConversionContext ?? null;\n\n return {\n error,\n isLoading,\n edit,\n list: listLayout,\n listViewConversionContext,\n } satisfies ReturnType<UseDocumentLayout>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocLayout\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the internal useDoc hook, as such it shouldn't be used outside of the\n * content-manager because it won't work as intended.\n */\nconst useDocLayout = () => {\n const { model } = useDoc();\n return useDocumentLayout(model);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatEditLayout\n * -----------------------------------------------------------------------------------------------*/\ntype LayoutData = FindContentTypeConfiguration.Response['data'];\n\n/**\n * @internal\n * @description takes the configuration data, the schema & the components used in the schema and formats the edit view\n * versions of the schema & components. This is then used to render the edit view of the content-type.\n */\nconst formatEditLayout = (\n data: LayoutData,\n {\n schemas,\n schema,\n components,\n }: { schemas: Schema[]; schema?: Schema; components: ComponentsDictionary }\n): EditLayout => {\n let currentPanelIndex = 0;\n /**\n * The fields arranged by the panels, new panels are made for dynamic zones only.\n */\n const panelledEditAttributes = convertEditLayoutToFieldLayouts(\n data.contentType.layouts.edit,\n schema?.attributes,\n data.contentType.metadatas,\n { configurations: data.components, schemas: components },\n schemas\n ).reduce<Array<EditFieldLayout[][]>>((panels, row) => {\n if (row.some((field) => field.type === 'dynamiczone')) {\n panels.push([row]);\n currentPanelIndex += 2;\n } else {\n if (!panels[currentPanelIndex]) {\n panels.push([row]);\n } else {\n panels[currentPanelIndex].push(row);\n }\n }\n\n return panels;\n }, []);\n\n const componentEditAttributes = Object.entries(data.components).reduce<EditLayout['components']>(\n (acc, [uid, configuration]) => {\n const componentSchema = components[uid];\n\n // Persisted configuration can reference component UIDs absent from `/init`.\n if (!componentSchema) {\n return acc;\n }\n\n acc[uid] = {\n layout: convertEditLayoutToFieldLayouts(\n configuration.layouts.edit,\n componentSchema.attributes,\n configuration.metadatas,\n { configurations: data.components, schemas: components }\n ),\n settings: {\n ...configuration.settings,\n icon: componentSchema.info.icon,\n displayName: componentSchema.info.displayName,\n },\n };\n return acc;\n },\n {}\n );\n\n const editMetadatas = Object.entries(data.contentType.metadatas).reduce<EditLayout['metadatas']>(\n (acc, [attribute, metadata]) => {\n return {\n ...acc,\n [attribute]: metadata.edit,\n };\n },\n {}\n );\n\n return {\n layout: panelledEditAttributes,\n components: componentEditAttributes,\n metadatas: editMetadatas,\n settings: {\n ...data.contentType.settings,\n displayName: schema?.info?.displayName,\n },\n options: {\n ...schema?.options,\n ...schema?.pluginOptions,\n ...data.contentType.options,\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * convertEditLayoutToFieldLayouts\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the edit layout from either a content-type or a component\n * and formats it into a generic object that can be used to correctly render\n * the form fields.\n */\nconst convertEditLayoutToFieldLayouts = (\n rows: LayoutData['contentType']['layouts']['edit'],\n attributes: Schema['attributes'] = {},\n metadatas: Metadatas,\n components?: {\n configurations: Record<string, ComponentConfiguration>;\n schemas: ComponentsDictionary;\n },\n schemas: Schema[] = []\n) => {\n return rows.map((row) =>\n row\n .map((field) => {\n const attribute = attributes[field.name];\n\n if (!attribute) {\n return null;\n }\n\n const fieldMetadata = metadatas[field.name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { edit: metadata } = fieldMetadata;\n\n const settings: Partial<Settings> =\n attribute.type === 'component' && components\n ? (components.configurations[attribute.component]?.settings ?? {})\n : {};\n\n return {\n attribute,\n disabled: !metadata.editable,\n hint: metadata.description,\n label: metadata.label ?? '',\n name: field.name,\n // @ts-expect-error – mainField does exist on the metadata for a relation.\n mainField: getMainField(attribute, metadata.mainField || settings.mainField, {\n schemas,\n components: components?.schemas ?? {},\n }),\n placeholder: metadata.placeholder ?? '',\n required: attribute.required ?? false,\n size: field.size,\n unique: 'unique' in attribute ? attribute.unique : false,\n visible: metadata.visible ?? true,\n type: attribute.type,\n };\n })\n .filter((field) => field !== null)\n ) as EditFieldLayout[][];\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatListLayout\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the complete configuration data, the schema & the components used in the schema and\n * formats a list view layout for the content-type. This is much simpler than the edit view layout as there\n * are less options to consider.\n */\nconst formatListLayout = (\n data: LayoutData,\n {\n schemas,\n schema,\n components,\n }: { schemas: Schema[]; schema?: Schema; components: ComponentsDictionary }\n): ListLayout => {\n const listMetadatas = Object.entries(data.contentType.metadatas).reduce<ListLayout['metadatas']>(\n (acc, [attribute, metadata]) => {\n return {\n ...acc,\n [attribute]: metadata.list,\n };\n },\n {}\n );\n /**\n * The fields arranged by the panels, new panels are made for dynamic zones only.\n */\n const listAttributes = convertListLayoutToFieldLayouts(\n data.contentType.layouts.list,\n schema?.attributes,\n listMetadatas,\n { configurations: data.components, schemas: components },\n schemas\n );\n\n return {\n layout: listAttributes,\n settings: { ...data.contentType.settings, displayName: schema?.info?.displayName },\n metadatas: listMetadatas,\n options: {\n ...schema?.options,\n ...schema?.pluginOptions,\n ...data.contentType.options,\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * convertListLayoutToFieldLayouts\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the columns from the list view configuration and formats them into a generic object\n * combinining metadata and attribute data.\n *\n * @note We do use this to reformat the list of strings when updating the displayed headers for the list view.\n */\nconst convertListLayoutToFieldLayouts = (\n columns: LayoutData['contentType']['layouts']['list'],\n attributes: Schema['attributes'] = {},\n metadatas: ListLayout['metadatas'],\n components?: {\n configurations: Record<string, ComponentConfiguration>;\n schemas: ComponentsDictionary;\n },\n schemas: Schema[] = []\n) => {\n return columns\n .map((name) => {\n const attribute = attributes[name];\n\n if (!attribute) {\n return null;\n }\n\n const metadata = metadatas[name];\n if (!metadata) {\n return null;\n }\n\n const settings: Partial<Settings> =\n attribute.type === 'component' && components\n ? (components.configurations[attribute.component]?.settings ?? {})\n : {};\n\n return {\n attribute,\n label: metadata.label ?? '',\n mainField: getMainField(attribute, metadata.mainField || settings.mainField, {\n schemas,\n components: components?.schemas ?? {},\n }),\n name: name,\n searchable: metadata.searchable ?? true,\n sortable: metadata.sortable ?? true,\n } satisfies ListFieldLayout;\n })\n .filter((field) => field !== null) as ListFieldLayout[];\n};\n\nexport {\n useDocLayout,\n useDocumentLayout,\n convertListLayoutToFieldLayouts,\n convertEditLayoutToFieldLayouts,\n DEFAULT_SETTINGS,\n};\nexport type { EditLayout, EditFieldLayout, ListLayout, ListFieldLayout, UseDocumentLayout };\n"],"names":["RESOLVED_LAYOUT_CACHE_LIMIT","resolvedLayoutCache","getCachedResolvedLayouts","components","data","model","schema","schemas","find","entry","value","setCachedResolvedLayouts","unshift","length","pop","DEFAULT_SETTINGS","bulkable","filterable","searchable","pagination","defaultSortBy","defaultSortOrder","mainField","pageSize","relationOpenMode","useDocumentLayout","useDocument","collectionType","skip","query","useQueryParams","runHookWaterfall","useStrapiApp","state","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isLoading","isLoadingSchemas","useContentTypeSchema","currentData","isLoadingConfigs","error","useGetContentTypeConfigurationQuery","isConfigResolvedForModel","contentType","uid","stableLayoutsByModelRef","React","useRef","Map","useEffect","type","message","resolvedLayouts","useMemo","cachedLayouts","normalizedData","normalizeContentManagerLayout","edit","formatEditLayout","list","formatListLayout","listViewConversionContext","componentConfigurations","componentSchemas","contentTypeSchemas","layouts","current","set","stableLayouts","get","editLayout","layout","metadatas","options","settings","listLayout","HOOKS","MUTATE_EDIT_VIEW_LAYOUT","useDocLayout","useDoc","currentPanelIndex","panelledEditAttributes","convertEditLayoutToFieldLayouts","attributes","configurations","reduce","panels","row","some","field","push","componentEditAttributes","Object","entries","acc","configuration","componentSchema","icon","info","displayName","editMetadatas","attribute","metadata","pluginOptions","rows","map","name","fieldMetadata","component","disabled","editable","hint","description","label","getMainField","placeholder","required","size","unique","visible","filter","listMetadatas","listAttributes","convertListLayoutToFieldLayouts","columns","sortable"],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ var React = require('react');
|
|
|
4
4
|
var reactDnd = require('react-dnd');
|
|
5
5
|
var useKeyboardDragAndDrop = require('./useKeyboardDragAndDrop.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,7 +22,7 @@ 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
|
|
|
26
27
|
const DIRECTIONS = {
|
|
27
28
|
UPWARD: 'upward',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDragAndDrop.js","sources":["../../../admin/src/hooks/useDragAndDrop.ts"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useDrag,\n useDrop,\n type HandlerManager,\n type ConnectDragSource,\n type ConnectDropTarget,\n type ConnectDragPreview,\n type DragSourceMonitor,\n} from 'react-dnd';\n\nimport {\n useKeyboardDragAndDrop,\n type UseKeyboardDragAndDropCallbacks,\n} from './useKeyboardDragAndDrop';\n\nimport type { Data } from '@strapi/types';\n\nconst DIRECTIONS = {\n UPWARD: 'upward',\n DOWNWARD: 'downward',\n} as const;\n\nconst DROP_SENSITIVITY = {\n REGULAR: 'regular',\n IMMEDIATE: 'immediate',\n} as const;\n\ninterface UseDragAndDropOptions<\n TIndex extends number | Array<number> = number,\n TItem extends { index: TIndex } = { index: TIndex },\n> extends UseKeyboardDragAndDropCallbacks<TIndex> {\n type?: string;\n index: TIndex;\n item?: TItem;\n onStart?: () => void;\n onEnd?: () => void;\n dropSensitivity?: (typeof DROP_SENSITIVITY)[keyof typeof DROP_SENSITIVITY];\n}\n\ntype Identifier = ReturnType<HandlerManager['getHandlerId']>;\n\ntype UseDragAndDropReturn<E extends Element = HTMLElement> = [\n props: {\n handlerId: Identifier;\n isDragging: boolean;\n handleKeyDown: <E extends Element>(event: React.KeyboardEvent<E>) => void;\n isOverDropTarget: boolean;\n direction: (typeof DIRECTIONS)[keyof typeof DIRECTIONS] | null;\n },\n objectRef: React.RefObject<E>,\n dropRef: ConnectDropTarget,\n dragRef: ConnectDragSource,\n dragPreviewRef: ConnectDragPreview,\n];\n\ntype DropCollectedProps = {\n handlerId: Identifier;\n isOver: boolean;\n};\n\n/**\n * A utility hook abstracting the general drag and drop hooks from react-dnd.\n * Centralising the same behaviours and by default offering keyboard support.\n */\nconst useDragAndDrop = <\n TIndex extends number | Array<number>,\n TItem extends { index: TIndex; id?: Data.ID; [key: string]: unknown } = {\n index: TIndex;\n [key: string]: unknown;\n },\n E extends Element = HTMLElement,\n>(\n active: boolean,\n {\n type = 'STRAPI_DND',\n index,\n item,\n onStart,\n onEnd,\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n dropSensitivity = DROP_SENSITIVITY.REGULAR,\n }: UseDragAndDropOptions<TIndex, TItem>\n): UseDragAndDropReturn<E> => {\n const objectRef = React.useRef<E>(null);\n\n const [{ handlerId, isOver }, dropRef] = useDrop<TItem, void, DropCollectedProps>({\n accept: type,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n isOver: monitor.isOver({ shallow: true }),\n };\n },\n drop(item) {\n const draggedIndex = item.index;\n const newIndex = index;\n\n if (isOver && onDropItem) {\n onDropItem(draggedIndex, newIndex);\n }\n },\n hover(item, monitor) {\n if (!objectRef.current || !onMoveItem) {\n return;\n }\n\n const dragIndex = item.index;\n const newIndex = index;\n\n const hoverBoundingRect = objectRef.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (!clientOffset) return;\n\n const hoverClientY = clientOffset && clientOffset.y - hoverBoundingRect.top;\n if (typeof dragIndex === 'number' && typeof newIndex === 'number') {\n if (dragIndex === newIndex) {\n // Don't replace items with themselves\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (dragIndex < newIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragIndex > newIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n\n // Time to actually perform the action\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n } else {\n // Using numbers as indices doesn't work for nested list items with path like [1, 1, 0]\n if (Array.isArray(dragIndex) && Array.isArray(newIndex)) {\n // Indices comparison to find item position in nested list\n const minLength = Math.min(dragIndex.length, newIndex.length);\n let areEqual = true;\n let isLessThan = false;\n let isGreaterThan = false;\n\n for (let i = 0; i < minLength; i++) {\n if (dragIndex[i] < newIndex[i]) {\n isLessThan = true;\n areEqual = false;\n break;\n } else if (dragIndex[i] > newIndex[i]) {\n isGreaterThan = true;\n areEqual = false;\n break;\n }\n }\n\n // Don't replace items with themselves\n if (areEqual && dragIndex.length === newIndex.length) {\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (isLessThan && !isGreaterThan && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (isGreaterThan && !isLessThan && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n }\n\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n }\n },\n });\n\n const getDragDirection = (monitor: DragSourceMonitor<TItem, void>) => {\n if (\n monitor &&\n monitor.isDragging() &&\n !monitor.didDrop() &&\n monitor.getInitialClientOffset() &&\n monitor.getClientOffset()\n ) {\n const deltaY = monitor.getInitialClientOffset()!.y - monitor.getClientOffset()!.y;\n\n if (deltaY > 0) return DIRECTIONS.UPWARD;\n\n if (deltaY < 0) return DIRECTIONS.DOWNWARD;\n\n return null;\n }\n\n return null;\n };\n\n const [{ isDragging, direction }, dragRef, dragPreviewRef] = useDrag({\n type,\n item() {\n if (onStart) {\n onStart();\n }\n\n /**\n * This will be attached and it helps define the preview sizes\n * when a component is flexy e.g. Relations\n */\n const { width } = objectRef.current?.getBoundingClientRect() ?? {};\n\n return { index, width, ...item };\n },\n end() {\n if (onEnd) {\n onEnd();\n }\n },\n canDrag: active,\n /**\n * This is useful when the item is in a virtualized list.\n * However, if we don't have an ID then we want the libraries\n * defaults to take care of this.\n */\n isDragging: item?.id\n ? (monitor) => {\n return item.id === monitor.getItem().id;\n }\n : undefined,\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n initialOffset: monitor.getInitialClientOffset(),\n currentOffset: monitor.getClientOffset(),\n direction: getDragDirection(monitor),\n }),\n });\n\n const handleKeyDown = useKeyboardDragAndDrop(active, index, {\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n });\n\n return [\n { handlerId, isDragging, handleKeyDown, isOverDropTarget: isOver, direction },\n objectRef,\n dropRef,\n dragRef,\n dragPreviewRef,\n ];\n};\n\nexport {\n useDragAndDrop,\n UseDragAndDropReturn,\n UseDragAndDropOptions,\n DIRECTIONS,\n DROP_SENSITIVITY,\n};\n"],"names":["DIRECTIONS","UPWARD","DOWNWARD","DROP_SENSITIVITY","REGULAR","useDragAndDrop","active","type","index","item","onStart","onEnd","onGrabItem","onDropItem","onCancel","onMoveItem","dropSensitivity","objectRef","React","useRef","handlerId","isOver","dropRef","useDrop","accept","collect","monitor","getHandlerId","shallow","drop","draggedIndex","newIndex","hover","current","dragIndex","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","bottom","top","clientOffset","getClientOffset","hoverClientY","y","Array","isArray","minLength","Math","min","length","areEqual","isLessThan","isGreaterThan","i","getDragDirection","isDragging","didDrop","getInitialClientOffset","deltaY","direction","dragRef","dragPreviewRef","useDrag","width","end","canDrag","id","getItem","undefined","initialOffset","currentOffset","handleKeyDown","useKeyboardDragAndDrop","isOverDropTarget"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAMA,UAAAA,GAAa;IACjBC,MAAAA,EAAQ,QAAA;IACRC,QAAAA,EAAU;AACZ;AAEA,MAAMC,gBAAAA,GAAmB;IACvBC,OAAAA,EAAS,SAEX;AAmCA;;;IAIA,MAAMC,cAAAA,GAAiB,CAQrBC,MAAAA,EACA,EACEC,IAAAA,GAAO,YAAY,EACnBC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,KAAK,EACLC,UAAU,EACVC,UAAU,EACVC,QAAQ,EACRC,UAAU,EACVC,eAAAA,GAAkBb,gBAAAA,CAAiBC,OAAO,EACL,GAAA;IAEvC,MAAMa,SAAAA,GAAYC,gBAAAA,CAAMC,MAAM,CAAI,IAAA,CAAA;IAElC,MAAM,CAAC,EAAEC,SAAS,EAAEC,MAAM,EAAE,EAAEC,OAAAA,CAAQ,GAAGC,gBAAAA,CAAyC;QAChFC,MAAAA,EAAQjB,IAAAA;AACRkB,QAAAA,OAAAA,CAAAA,CAAQC,OAAO,EAAA;YACb,OAAO;AACLN,gBAAAA,SAAAA,EAAWM,QAAQC,YAAY,EAAA;gBAC/BN,MAAAA,EAAQK,OAAAA,CAAQL,MAAM,CAAC;oBAAEO,OAAAA,EAAS;AAAK,iBAAA;AACzC,aAAA;AACF,QAAA,CAAA;AACAC,QAAAA,IAAAA,CAAAA,CAAKpB,IAAI,EAAA;YACP,MAAMqB,YAAAA,GAAerB,KAAKD,KAAK;AAC/B,YAAA,MAAMuB,QAAAA,GAAWvB,KAAAA;AAEjB,YAAA,IAAIa,UAAUR,UAAAA,EAAY;AACxBA,gBAAAA,UAAAA,CAAWiB,YAAAA,EAAcC,QAAAA,CAAAA;AAC3B,YAAA;AACF,QAAA,CAAA;QACAC,KAAAA,CAAAA,CAAMvB,IAAI,EAAEiB,OAAO,EAAA;AACjB,YAAA,IAAI,CAACT,SAAAA,CAAUgB,OAAO,IAAI,CAAClB,UAAAA,EAAY;AACrC,gBAAA;AACF,YAAA;YAEA,MAAMmB,SAAAA,GAAYzB,KAAKD,KAAK;AAC5B,YAAA,MAAMuB,QAAAA,GAAWvB,KAAAA;YAEjB,MAAM2B,iBAAAA,GAAoBlB,SAAAA,CAAUgB,OAAO,EAAEG,qBAAAA,EAAAA;YAC7C,MAAMC,YAAAA,GAAe,CAACF,iBAAAA,CAAkBG,MAAM,GAAGH,iBAAAA,CAAkBI,GAAE,IAAK,CAAA;YAC1E,MAAMC,YAAAA,GAAed,QAAQe,eAAe,EAAA;AAC5C,YAAA,IAAI,CAACD,YAAAA,EAAc;AAEnB,YAAA,MAAME,eAAeF,YAAAA,IAAgBA,YAAAA,CAAaG,CAAC,GAAGR,kBAAkBI,GAAG;AAC3E,YAAA,IAAI,OAAOL,SAAAA,KAAc,QAAA,IAAY,OAAOH,aAAa,QAAA,EAAU;AACjE,gBAAA,IAAIG,cAAcH,QAAAA,EAAU;;AAE1B,oBAAA;AACF,gBAAA;gBAEA,IAAIf,eAAAA,KAAoBb,gBAAAA,CAAiBC,OAAO,EAAE;;oBAEhD,IAAI8B,SAAAA,GAAYH,QAAAA,IAAYW,YAAAA,GAAeL,YAAAA,EAAc;AACvD,wBAAA;AACF,oBAAA;;oBAGA,IAAIH,SAAAA,GAAYH,QAAAA,IAAYW,YAAAA,GAAeL,YAAAA,EAAc;AACvD,wBAAA;AACF,oBAAA;AACF,gBAAA;;AAGAtB,gBAAAA,UAAAA,CAAWgB,QAAAA,EAAUG,SAAAA,CAAAA;AACrBzB,gBAAAA,IAAAA,CAAKD,KAAK,GAAGuB,QAAAA;YACf,CAAA,MAAO;;AAEL,gBAAA,IAAIa,MAAMC,OAAO,CAACX,cAAcU,KAAAA,CAAMC,OAAO,CAACd,QAAAA,CAAAA,EAAW;;oBAEvD,MAAMe,SAAAA,GAAYC,KAAKC,GAAG,CAACd,UAAUe,MAAM,EAAElB,SAASkB,MAAM,CAAA;AAC5D,oBAAA,IAAIC,QAAAA,GAAW,IAAA;AACf,oBAAA,IAAIC,UAAAA,GAAa,KAAA;AACjB,oBAAA,IAAIC,aAAAA,GAAgB,KAAA;AAEpB,oBAAA,IAAK,IAAIC,CAAAA,GAAI,CAAA,EAAGA,CAAAA,GAAIP,WAAWO,CAAAA,EAAAA,CAAK;AAClC,wBAAA,IAAInB,SAAS,CAACmB,CAAAA,CAAE,GAAGtB,QAAQ,CAACsB,EAAE,EAAE;4BAC9BF,UAAAA,GAAa,IAAA;4BACbD,QAAAA,GAAW,KAAA;AACX,4BAAA;wBACF,CAAA,MAAO,IAAIhB,SAAS,CAACmB,CAAAA,CAAE,GAAGtB,QAAQ,CAACsB,EAAE,EAAE;4BACrCD,aAAAA,GAAgB,IAAA;4BAChBF,QAAAA,GAAW,KAAA;AACX,4BAAA;AACF,wBAAA;AACF,oBAAA;;AAGA,oBAAA,IAAIA,YAAYhB,SAAAA,CAAUe,MAAM,KAAKlB,QAAAA,CAASkB,MAAM,EAAE;AACpD,wBAAA;AACF,oBAAA;oBAEA,IAAIjC,eAAAA,KAAoBb,gBAAAA,CAAiBC,OAAO,EAAE;;AAEhD,wBAAA,IAAI+C,UAAAA,IAAc,CAACC,aAAAA,IAAiBV,YAAAA,GAAeL,YAAAA,EAAc;AAC/D,4BAAA;AACF,wBAAA;;AAGA,wBAAA,IAAIe,aAAAA,IAAiB,CAACD,UAAAA,IAAcT,YAAAA,GAAeL,YAAAA,EAAc;AAC/D,4BAAA;AACF,wBAAA;AACF,oBAAA;AACF,gBAAA;AAEAtB,gBAAAA,UAAAA,CAAWgB,QAAAA,EAAUG,SAAAA,CAAAA;AACrBzB,gBAAAA,IAAAA,CAAKD,KAAK,GAAGuB,QAAAA;AACf,YAAA;AACF,QAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMuB,mBAAmB,CAAC5B,OAAAA,GAAAA;AACxB,QAAA,IACEA,OAAAA,IACAA,OAAAA,CAAQ6B,UAAU,EAAA,IAClB,CAAC7B,OAAAA,CAAQ8B,OAAO,EAAA,IAChB9B,OAAAA,CAAQ+B,sBAAsB,EAAA,IAC9B/B,OAAAA,CAAQe,eAAe,EAAA,EACvB;YACA,MAAMiB,MAAAA,GAAShC,QAAQ+B,sBAAsB,EAAA,CAAId,CAAC,GAAGjB,OAAAA,CAAQe,eAAe,EAAA,CAAIE,CAAC;AAEjF,YAAA,IAAIe,MAAAA,GAAS,CAAA,EAAG,OAAO1D,UAAAA,CAAWC,MAAM;AAExC,YAAA,IAAIyD,MAAAA,GAAS,CAAA,EAAG,OAAO1D,UAAAA,CAAWE,QAAQ;YAE1C,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,IAAA;AACT,IAAA,CAAA;IAEA,MAAM,CAAC,EAAEqD,UAAU,EAAEI,SAAS,EAAE,EAAEC,OAAAA,EAASC,cAAAA,CAAe,GAAGC,gBAAAA,CAAQ;AACnEvD,QAAAA,IAAAA;AACAE,QAAAA,IAAAA,CAAAA,GAAAA;AACE,YAAA,IAAIC,OAAAA,EAAS;AACXA,gBAAAA,OAAAA,EAAAA;AACF,YAAA;AAEA;;;UAIA,MAAM,EAAEqD,KAAK,EAAE,GAAG9C,SAAAA,CAAUgB,OAAO,EAAEG,qBAAAA,EAAAA,IAA2B,EAAC;YAEjE,OAAO;AAAE5B,gBAAAA,KAAAA;AAAOuD,gBAAAA,KAAAA;AAAO,gBAAA,GAAGtD;AAAK,aAAA;AACjC,QAAA,CAAA;AACAuD,QAAAA,GAAAA,CAAAA,GAAAA;AACE,YAAA,IAAIrD,KAAAA,EAAO;AACTA,gBAAAA,KAAAA,EAAAA;AACF,YAAA;AACF,QAAA,CAAA;QACAsD,OAAAA,EAAS3D,MAAAA;AACT;;;;QAKAiD,UAAAA,EAAY9C,IAAAA,EAAMyD,EAAAA,GACd,CAACxC,OAAAA,GAAAA;AACC,YAAA,OAAOjB,KAAKyD,EAAE,KAAKxC,OAAAA,CAAQyC,OAAO,GAAGD,EAAE;QACzC,CAAA,GACAE,SAAAA;QACJ3C,OAAAA,EAAS,CAACC,WAAa;AACrB6B,gBAAAA,UAAAA,EAAY7B,QAAQ6B,UAAU,EAAA;AAC9Bc,gBAAAA,aAAAA,EAAe3C,QAAQ+B,sBAAsB,EAAA;AAC7Ca,gBAAAA,aAAAA,EAAe5C,QAAQe,eAAe,EAAA;AACtCkB,gBAAAA,SAAAA,EAAWL,gBAAAA,CAAiB5B,OAAAA;aAC9B;AACF,KAAA,CAAA;IAEA,MAAM6C,aAAAA,GAAgBC,6CAAAA,CAAuBlE,MAAAA,EAAQE,KAAAA,EAAO;AAC1DI,QAAAA,UAAAA;AACAC,QAAAA,UAAAA;AACAC,QAAAA,QAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;IAEA,OAAO;AACL,QAAA;AAAEK,YAAAA,SAAAA;AAAWmC,YAAAA,UAAAA;AAAYgB,YAAAA,aAAAA;YAAeE,gBAAAA,EAAkBpD,MAAAA;AAAQsC,YAAAA;AAAU,SAAA;AAC5E1C,QAAAA,SAAAA;AACAK,QAAAA,OAAAA;AACAsC,QAAAA,OAAAA;AACAC,QAAAA;AACD,KAAA;AACH;;;;;;"}
|
|
1
|
+
{"version":3,"file":"useDragAndDrop.js","sources":["../../../admin/src/hooks/useDragAndDrop.ts"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useDrag,\n useDrop,\n type HandlerManager,\n type ConnectDragSource,\n type ConnectDropTarget,\n type ConnectDragPreview,\n type DragSourceMonitor,\n} from 'react-dnd';\n\nimport {\n useKeyboardDragAndDrop,\n type UseKeyboardDragAndDropCallbacks,\n} from './useKeyboardDragAndDrop';\n\nimport type { Data } from '@strapi/types';\n\nconst DIRECTIONS = {\n UPWARD: 'upward',\n DOWNWARD: 'downward',\n} as const;\n\nconst DROP_SENSITIVITY = {\n REGULAR: 'regular',\n IMMEDIATE: 'immediate',\n} as const;\n\ninterface UseDragAndDropOptions<\n TIndex extends number | Array<number> = number,\n TItem extends { index: TIndex } = { index: TIndex },\n> extends UseKeyboardDragAndDropCallbacks<TIndex> {\n type?: string;\n index: TIndex;\n item?: TItem;\n onStart?: () => void;\n onEnd?: () => void;\n dropSensitivity?: (typeof DROP_SENSITIVITY)[keyof typeof DROP_SENSITIVITY];\n}\n\ntype Identifier = ReturnType<HandlerManager['getHandlerId']>;\n\ntype UseDragAndDropReturn<E extends Element = HTMLElement> = [\n props: {\n handlerId: Identifier;\n isDragging: boolean;\n handleKeyDown: <E extends Element>(event: React.KeyboardEvent<E>) => void;\n isOverDropTarget: boolean;\n direction: (typeof DIRECTIONS)[keyof typeof DIRECTIONS] | null;\n },\n objectRef: React.RefObject<E>,\n dropRef: ConnectDropTarget,\n dragRef: ConnectDragSource,\n dragPreviewRef: ConnectDragPreview,\n];\n\ntype DropCollectedProps = {\n handlerId: Identifier;\n isOver: boolean;\n};\n\n/**\n * A utility hook abstracting the general drag and drop hooks from react-dnd.\n * Centralising the same behaviours and by default offering keyboard support.\n */\nconst useDragAndDrop = <\n TIndex extends number | Array<number>,\n TItem extends { index: TIndex; id?: Data.ID; [key: string]: unknown } = {\n index: TIndex;\n [key: string]: unknown;\n },\n E extends Element = HTMLElement,\n>(\n active: boolean,\n {\n type = 'STRAPI_DND',\n index,\n item,\n onStart,\n onEnd,\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n dropSensitivity = DROP_SENSITIVITY.REGULAR,\n }: UseDragAndDropOptions<TIndex, TItem>\n): UseDragAndDropReturn<E> => {\n const objectRef = React.useRef<E>(null);\n\n const [{ handlerId, isOver }, dropRef] = useDrop<TItem, void, DropCollectedProps>({\n accept: type,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n isOver: monitor.isOver({ shallow: true }),\n };\n },\n drop(item) {\n const draggedIndex = item.index;\n const newIndex = index;\n\n if (isOver && onDropItem) {\n onDropItem(draggedIndex, newIndex);\n }\n },\n hover(item, monitor) {\n if (!objectRef.current || !onMoveItem) {\n return;\n }\n\n const dragIndex = item.index;\n const newIndex = index;\n\n const hoverBoundingRect = objectRef.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (!clientOffset) return;\n\n const hoverClientY = clientOffset && clientOffset.y - hoverBoundingRect.top;\n if (typeof dragIndex === 'number' && typeof newIndex === 'number') {\n if (dragIndex === newIndex) {\n // Don't replace items with themselves\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (dragIndex < newIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragIndex > newIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n\n // Time to actually perform the action\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n } else {\n // Using numbers as indices doesn't work for nested list items with path like [1, 1, 0]\n if (Array.isArray(dragIndex) && Array.isArray(newIndex)) {\n // Indices comparison to find item position in nested list\n const minLength = Math.min(dragIndex.length, newIndex.length);\n let areEqual = true;\n let isLessThan = false;\n let isGreaterThan = false;\n\n for (let i = 0; i < minLength; i++) {\n if (dragIndex[i] < newIndex[i]) {\n isLessThan = true;\n areEqual = false;\n break;\n } else if (dragIndex[i] > newIndex[i]) {\n isGreaterThan = true;\n areEqual = false;\n break;\n }\n }\n\n // Don't replace items with themselves\n if (areEqual && dragIndex.length === newIndex.length) {\n return;\n }\n\n if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {\n // Dragging downwards\n if (isLessThan && !isGreaterThan && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (isGreaterThan && !isLessThan && hoverClientY > hoverMiddleY) {\n return;\n }\n }\n }\n\n onMoveItem(newIndex, dragIndex);\n item.index = newIndex;\n }\n },\n });\n\n const getDragDirection = (monitor: DragSourceMonitor<TItem, void>) => {\n if (\n monitor &&\n monitor.isDragging() &&\n !monitor.didDrop() &&\n monitor.getInitialClientOffset() &&\n monitor.getClientOffset()\n ) {\n const deltaY = monitor.getInitialClientOffset()!.y - monitor.getClientOffset()!.y;\n\n if (deltaY > 0) return DIRECTIONS.UPWARD;\n\n if (deltaY < 0) return DIRECTIONS.DOWNWARD;\n\n return null;\n }\n\n return null;\n };\n\n const [{ isDragging, direction }, dragRef, dragPreviewRef] = useDrag({\n type,\n item() {\n if (onStart) {\n onStart();\n }\n\n /**\n * This will be attached and it helps define the preview sizes\n * when a component is flexy e.g. Relations\n */\n const { width } = objectRef.current?.getBoundingClientRect() ?? {};\n\n return { index, width, ...item };\n },\n end() {\n if (onEnd) {\n onEnd();\n }\n },\n canDrag: active,\n /**\n * This is useful when the item is in a virtualized list.\n * However, if we don't have an ID then we want the libraries\n * defaults to take care of this.\n */\n isDragging: item?.id\n ? (monitor) => {\n return item.id === monitor.getItem().id;\n }\n : undefined,\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n initialOffset: monitor.getInitialClientOffset(),\n currentOffset: monitor.getClientOffset(),\n direction: getDragDirection(monitor),\n }),\n });\n\n const handleKeyDown = useKeyboardDragAndDrop(active, index, {\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem,\n });\n\n return [\n { handlerId, isDragging, handleKeyDown, isOverDropTarget: isOver, direction },\n objectRef,\n dropRef,\n dragRef,\n dragPreviewRef,\n ];\n};\n\nexport {\n useDragAndDrop,\n UseDragAndDropReturn,\n UseDragAndDropOptions,\n DIRECTIONS,\n DROP_SENSITIVITY,\n};\n"],"names":["DIRECTIONS","UPWARD","DOWNWARD","DROP_SENSITIVITY","REGULAR","useDragAndDrop","active","type","index","item","onStart","onEnd","onGrabItem","onDropItem","onCancel","onMoveItem","dropSensitivity","objectRef","React","useRef","handlerId","isOver","dropRef","useDrop","accept","collect","monitor","getHandlerId","shallow","drop","draggedIndex","newIndex","hover","current","dragIndex","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","bottom","top","clientOffset","getClientOffset","hoverClientY","y","Array","isArray","minLength","Math","min","length","areEqual","isLessThan","isGreaterThan","i","getDragDirection","isDragging","didDrop","getInitialClientOffset","deltaY","direction","dragRef","dragPreviewRef","useDrag","width","end","canDrag","id","getItem","undefined","initialOffset","currentOffset","handleKeyDown","useKeyboardDragAndDrop","isOverDropTarget"],"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
|
/**
|
|
25
26
|
* Utility hook designed to implement keyboard accessibile drag and drop by
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboardDragAndDrop.js","sources":["../../../admin/src/hooks/useKeyboardDragAndDrop.ts"],"sourcesContent":["import * as React from 'react';\n\nexport type UseKeyboardDragAndDropCallbacks<TIndex extends number | Array<number> = number> = {\n onCancel?: (index: TIndex) => void;\n onDropItem?: (currentIndex: TIndex, newIndex?: TIndex) => void;\n onGrabItem?: (index: TIndex) => void;\n onMoveItem?: (newIndex: TIndex, currentIndex: TIndex) => void;\n};\n\n/**\n * Utility hook designed to implement keyboard accessibile drag and drop by\n * returning an onKeyDown handler to be passed to the drag icon button.\n *\n * @internal - You should use `useDragAndDrop` instead.\n */\nexport const useKeyboardDragAndDrop = <TIndex extends number | Array<number> = number>(\n active: boolean,\n index: TIndex,\n { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks<TIndex>\n) => {\n const [isSelected, setIsSelected] = React.useState(false);\n\n const handleMove = (movement: 'UP' | 'DOWN') => {\n if (!isSelected) {\n return;\n }\n if (typeof index === 'number' && onMoveItem) {\n if (movement === 'UP') {\n onMoveItem((index - 1) as TIndex, index);\n } else if (movement === 'DOWN') {\n onMoveItem((index + 1) as TIndex, index);\n }\n }\n };\n\n const handleDragClick = () => {\n if (isSelected) {\n if (onDropItem) {\n onDropItem(index);\n }\n setIsSelected(false);\n } else {\n if (onGrabItem) {\n onGrabItem(index);\n }\n setIsSelected(true);\n }\n };\n\n const handleCancel = () => {\n if (isSelected) {\n setIsSelected(false);\n\n if (onCancel) {\n onCancel(index);\n }\n }\n };\n\n const handleKeyDown = <E extends Element>(e: React.KeyboardEvent<E>) => {\n if (!active) {\n return;\n }\n\n if (e.key === 'Tab' && !isSelected) {\n return;\n }\n\n e.preventDefault();\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n handleDragClick();\n break;\n\n case 'Escape':\n handleCancel();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n handleMove('DOWN');\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n handleMove('UP');\n break;\n\n default:\n }\n };\n\n return handleKeyDown;\n};\n"],"names":["useKeyboardDragAndDrop","active","index","onCancel","onDropItem","onGrabItem","onMoveItem","isSelected","setIsSelected","React","useState","handleMove","movement","handleDragClick","handleCancel","handleKeyDown","e","key","preventDefault"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useKeyboardDragAndDrop.js","sources":["../../../admin/src/hooks/useKeyboardDragAndDrop.ts"],"sourcesContent":["import * as React from 'react';\n\nexport type UseKeyboardDragAndDropCallbacks<TIndex extends number | Array<number> = number> = {\n onCancel?: (index: TIndex) => void;\n onDropItem?: (currentIndex: TIndex, newIndex?: TIndex) => void;\n onGrabItem?: (index: TIndex) => void;\n onMoveItem?: (newIndex: TIndex, currentIndex: TIndex) => void;\n};\n\n/**\n * Utility hook designed to implement keyboard accessibile drag and drop by\n * returning an onKeyDown handler to be passed to the drag icon button.\n *\n * @internal - You should use `useDragAndDrop` instead.\n */\nexport const useKeyboardDragAndDrop = <TIndex extends number | Array<number> = number>(\n active: boolean,\n index: TIndex,\n { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks<TIndex>\n) => {\n const [isSelected, setIsSelected] = React.useState(false);\n\n const handleMove = (movement: 'UP' | 'DOWN') => {\n if (!isSelected) {\n return;\n }\n if (typeof index === 'number' && onMoveItem) {\n if (movement === 'UP') {\n onMoveItem((index - 1) as TIndex, index);\n } else if (movement === 'DOWN') {\n onMoveItem((index + 1) as TIndex, index);\n }\n }\n };\n\n const handleDragClick = () => {\n if (isSelected) {\n if (onDropItem) {\n onDropItem(index);\n }\n setIsSelected(false);\n } else {\n if (onGrabItem) {\n onGrabItem(index);\n }\n setIsSelected(true);\n }\n };\n\n const handleCancel = () => {\n if (isSelected) {\n setIsSelected(false);\n\n if (onCancel) {\n onCancel(index);\n }\n }\n };\n\n const handleKeyDown = <E extends Element>(e: React.KeyboardEvent<E>) => {\n if (!active) {\n return;\n }\n\n if (e.key === 'Tab' && !isSelected) {\n return;\n }\n\n e.preventDefault();\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n handleDragClick();\n break;\n\n case 'Escape':\n handleCancel();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n handleMove('DOWN');\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n handleMove('UP');\n break;\n\n default:\n }\n };\n\n return handleKeyDown;\n};\n"],"names":["useKeyboardDragAndDrop","active","index","onCancel","onDropItem","onGrabItem","onMoveItem","isSelected","setIsSelected","React","useState","handleMove","movement","handleDragClick","handleCancel","handleKeyDown","e","key","preventDefault"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AASA;;;;;AAKC,IACM,MAAMA,sBAAAA,GAAyB,CACpCC,QACAC,KAAAA,EACA,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,UAAU,EAAEC,UAAU,EAA2C,GAAA;AAEzF,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEnD,IAAA,MAAMC,aAAa,CAACC,QAAAA,GAAAA;AAClB,QAAA,IAAI,CAACL,UAAAA,EAAY;AACf,YAAA;AACF,QAAA;QACA,IAAI,OAAOL,KAAAA,KAAU,QAAA,IAAYI,UAAAA,EAAY;AAC3C,YAAA,IAAIM,aAAa,IAAA,EAAM;AACrBN,gBAAAA,UAAAA,CAAYJ,QAAQ,CAAA,EAAcA,KAAAA,CAAAA;YACpC,CAAA,MAAO,IAAIU,aAAa,MAAA,EAAQ;AAC9BN,gBAAAA,UAAAA,CAAYJ,QAAQ,CAAA,EAAcA,KAAAA,CAAAA;AACpC,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMW,eAAAA,GAAkB,IAAA;AACtB,QAAA,IAAIN,UAAAA,EAAY;AACd,YAAA,IAAIH,UAAAA,EAAY;gBACdA,UAAAA,CAAWF,KAAAA,CAAAA;AACb,YAAA;YACAM,aAAAA,CAAc,KAAA,CAAA;QAChB,CAAA,MAAO;AACL,YAAA,IAAIH,UAAAA,EAAY;gBACdA,UAAAA,CAAWH,KAAAA,CAAAA;AACb,YAAA;YACAM,aAAAA,CAAc,IAAA,CAAA;AAChB,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMM,YAAAA,GAAe,IAAA;AACnB,QAAA,IAAIP,UAAAA,EAAY;YACdC,aAAAA,CAAc,KAAA,CAAA;AAEd,YAAA,IAAIL,QAAAA,EAAU;gBACZA,QAAAA,CAASD,KAAAA,CAAAA;AACX,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMa,gBAAgB,CAAoBC,CAAAA,GAAAA;AACxC,QAAA,IAAI,CAACf,MAAAA,EAAQ;AACX,YAAA;AACF,QAAA;AAEA,QAAA,IAAIe,CAAAA,CAAEC,GAAG,KAAK,KAAA,IAAS,CAACV,UAAAA,EAAY;AAClC,YAAA;AACF,QAAA;AAEAS,QAAAA,CAAAA,CAAEE,cAAc,EAAA;AAEhB,QAAA,OAAQF,EAAEC,GAAG;YACX,KAAK,GAAA;YACL,KAAK,OAAA;AACHJ,gBAAAA,eAAAA,EAAAA;AACA,gBAAA;YAEF,KAAK,QAAA;AACHC,gBAAAA,YAAAA,EAAAA;AACA,gBAAA;YAEF,KAAK,WAAA;YACL,KAAK,YAAA;gBACHH,UAAAA,CAAW,MAAA,CAAA;AACX,gBAAA;YAEF,KAAK,SAAA;YACL,KAAK,WAAA;gBACHA,UAAAA,CAAW,IAAA,CAAA;AACX,gBAAA;AAGJ;AACF,IAAA,CAAA;IAEA,OAAOI,aAAAA;AACT;;;;"}
|
|
@@ -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 useOnce = (effect)=>React__namespace.useEffect(effect, emptyDeps);
|
|
25
26
|
const emptyDeps = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOnce.js","sources":["../../../admin/src/hooks/useOnce.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\nexport const useOnce = (effect: React.EffectCallback) => React.useEffect(effect, emptyDeps);\n\nconst emptyDeps: React.DependencyList = [];\n"],"names":["useOnce","effect","React","useEffect","emptyDeps"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useOnce.js","sources":["../../../admin/src/hooks/useOnce.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\nexport const useOnce = (effect: React.EffectCallback) => React.useEffect(effect, emptyDeps);\n\nconst emptyDeps: React.DependencyList = [];\n"],"names":["useOnce","effect","React","useEffect","emptyDeps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAMA,UAAU,CAACC,MAAAA,GAAiCC,iBAAMC,SAAS,CAACF,QAAQG,SAAAA;AAEjF,MAAMA,YAAkC,EAAE;;;;"}
|
|
@@ -5,12 +5,17 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
|
5
5
|
var get = require('lodash/get');
|
|
6
6
|
var set = require('lodash/set');
|
|
7
7
|
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var get__default = /*#__PURE__*/_interopDefault(get);
|
|
11
|
+
var set__default = /*#__PURE__*/_interopDefault(set);
|
|
12
|
+
|
|
8
13
|
const filterObjectKeys = (obj, keys)=>{
|
|
9
14
|
const result = {};
|
|
10
15
|
for (const path of keys){
|
|
11
|
-
const value =
|
|
16
|
+
const value = get__default.default(obj, path);
|
|
12
17
|
if (value !== undefined) {
|
|
13
|
-
|
|
18
|
+
set__default.default(result, path, value);
|
|
14
19
|
}
|
|
15
20
|
}
|
|
16
21
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePersistentQueryParams.js","sources":["../../../admin/src/hooks/usePersistentQueryParams.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { usePersistentStateScope, useQueryParams } from '@strapi/admin/strapi-admin';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\ntype PropertyPath = Parameters<typeof get>[1];\n\ninterface PersistentQueryConfigEntry {\n paths: PropertyPath[];\n scoped?: boolean;\n}\n\nconst filterObjectKeys = (obj: object, keys: PropertyPath[]) => {\n const result: Record<string, unknown> = {};\n\n for (const path of keys) {\n const value = get(obj, path);\n\n if (value !== undefined) {\n set(result, path, value);\n }\n }\n\n return result;\n};\n\nexport type PersistentQueryConfig = Record<string, PersistentQueryConfigEntry>;\n\nconst normalizeConfigEntry = (\n key: string,\n entry: PersistentQueryConfigEntry,\n scope: string | false | undefined\n) => {\n const { paths } = entry;\n const isScoped = entry.scoped === true && !!scope;\n\n return {\n key: isScoped ? `${key}:${scope}` : key,\n paths,\n };\n};\n\nexport const usePersistentPartialQueryParams = (config: PersistentQueryConfig) => {\n const scope = usePersistentStateScope();\n const [{ query }, setQuery] = useQueryParams();\n const clonedConfig = JSON.stringify(config);\n const [isHydrated, setIsHydrated] = useState(false);\n\n // load query params from local storge\n useEffect(() => {\n const mergedFilteredQuery: Record<string, unknown> = {};\n\n for (const [keyPrefix, entry] of Object.entries(config)) {\n const { key, paths } = normalizeConfigEntry(keyPrefix, entry, scope);\n\n const savedQueryParams = window.localStorage.getItem(key);\n if (!savedQueryParams) continue;\n\n let parsedSavedParams: Record<string, unknown>;\n try {\n parsedSavedParams = JSON.parse(savedQueryParams);\n } catch {\n continue;\n }\n if (Object.keys(parsedSavedParams).length === 0) continue;\n\n const filteredQuery = filterObjectKeys(parsedSavedParams, paths);\n Object.assign(mergedFilteredQuery, filteredQuery);\n }\n\n if (Object.keys(mergedFilteredQuery).length > 0) {\n setQuery({ ...mergedFilteredQuery, ...query }, 'push', true);\n }\n setIsHydrated(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clonedConfig, scope]);\n\n // update local storage\n useEffect(() => {\n for (const [keyPrefix, entry] of Object.entries(config)) {\n const { key, paths } = normalizeConfigEntry(keyPrefix, entry, scope);\n\n const paramsToPersist = filterObjectKeys(query, paths);\n if (Object.keys(paramsToPersist).length === 0) {\n window.localStorage.removeItem(key);\n continue;\n }\n\n window.localStorage.setItem(key, JSON.stringify(paramsToPersist));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query, clonedConfig, scope]);\n\n return { isHydrated };\n};\n"],"names":["filterObjectKeys","obj","keys","result","path","value","get","undefined","set","normalizeConfigEntry","key","entry","scope","paths","isScoped","scoped","usePersistentPartialQueryParams","config","usePersistentStateScope","query","setQuery","useQueryParams","clonedConfig","JSON","stringify","isHydrated","setIsHydrated","useState","useEffect","mergedFilteredQuery","keyPrefix","Object","entries","savedQueryParams","window","localStorage","getItem","parsedSavedParams","parse","length","filteredQuery","assign","paramsToPersist","removeItem","setItem"],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePersistentQueryParams.js","sources":["../../../admin/src/hooks/usePersistentQueryParams.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { usePersistentStateScope, useQueryParams } from '@strapi/admin/strapi-admin';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\ntype PropertyPath = Parameters<typeof get>[1];\n\ninterface PersistentQueryConfigEntry {\n paths: PropertyPath[];\n scoped?: boolean;\n}\n\nconst filterObjectKeys = (obj: object, keys: PropertyPath[]) => {\n const result: Record<string, unknown> = {};\n\n for (const path of keys) {\n const value = get(obj, path);\n\n if (value !== undefined) {\n set(result, path, value);\n }\n }\n\n return result;\n};\n\nexport type PersistentQueryConfig = Record<string, PersistentQueryConfigEntry>;\n\nconst normalizeConfigEntry = (\n key: string,\n entry: PersistentQueryConfigEntry,\n scope: string | false | undefined\n) => {\n const { paths } = entry;\n const isScoped = entry.scoped === true && !!scope;\n\n return {\n key: isScoped ? `${key}:${scope}` : key,\n paths,\n };\n};\n\nexport const usePersistentPartialQueryParams = (config: PersistentQueryConfig) => {\n const scope = usePersistentStateScope();\n const [{ query }, setQuery] = useQueryParams();\n const clonedConfig = JSON.stringify(config);\n const [isHydrated, setIsHydrated] = useState(false);\n\n // load query params from local storge\n useEffect(() => {\n const mergedFilteredQuery: Record<string, unknown> = {};\n\n for (const [keyPrefix, entry] of Object.entries(config)) {\n const { key, paths } = normalizeConfigEntry(keyPrefix, entry, scope);\n\n const savedQueryParams = window.localStorage.getItem(key);\n if (!savedQueryParams) continue;\n\n let parsedSavedParams: Record<string, unknown>;\n try {\n parsedSavedParams = JSON.parse(savedQueryParams);\n } catch {\n continue;\n }\n if (Object.keys(parsedSavedParams).length === 0) continue;\n\n const filteredQuery = filterObjectKeys(parsedSavedParams, paths);\n Object.assign(mergedFilteredQuery, filteredQuery);\n }\n\n if (Object.keys(mergedFilteredQuery).length > 0) {\n setQuery({ ...mergedFilteredQuery, ...query }, 'push', true);\n }\n setIsHydrated(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clonedConfig, scope]);\n\n // update local storage\n useEffect(() => {\n for (const [keyPrefix, entry] of Object.entries(config)) {\n const { key, paths } = normalizeConfigEntry(keyPrefix, entry, scope);\n\n const paramsToPersist = filterObjectKeys(query, paths);\n if (Object.keys(paramsToPersist).length === 0) {\n window.localStorage.removeItem(key);\n continue;\n }\n\n window.localStorage.setItem(key, JSON.stringify(paramsToPersist));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query, clonedConfig, scope]);\n\n return { isHydrated };\n};\n"],"names":["filterObjectKeys","obj","keys","result","path","value","get","undefined","set","normalizeConfigEntry","key","entry","scope","paths","isScoped","scoped","usePersistentPartialQueryParams","config","usePersistentStateScope","query","setQuery","useQueryParams","clonedConfig","JSON","stringify","isHydrated","setIsHydrated","useState","useEffect","mergedFilteredQuery","keyPrefix","Object","entries","savedQueryParams","window","localStorage","getItem","parsedSavedParams","parse","length","filteredQuery","assign","paramsToPersist","removeItem","setItem"],"mappings":"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"}
|
|
@@ -15,7 +15,8 @@ var init = require('../services/init.js');
|
|
|
15
15
|
var objects = require('../utils/objects.js');
|
|
16
16
|
var formatComponentConfigurationEditLayout = require('./formatComponentConfigurationEditLayout.js');
|
|
17
17
|
|
|
18
|
-
function
|
|
18
|
+
function _interopNamespace(e) {
|
|
19
|
+
if (e && e.__esModule) return e;
|
|
19
20
|
var n = Object.create(null);
|
|
20
21
|
if (e) {
|
|
21
22
|
Object.keys(e).forEach(function (k) {
|
|
@@ -32,7 +33,7 @@ function _interopNamespaceDefault(e) {
|
|
|
32
33
|
return Object.freeze(n);
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
var React__namespace = /*#__PURE__*/
|
|
36
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
36
37
|
|
|
37
38
|
/* -------------------------------------------------------------------------------------------------
|
|
38
39
|
* ComponentConfigurationPage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentConfigurationPage.js","sources":["../../../admin/src/pages/ComponentConfigurationPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Page, useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { TEMP_FIELD_NAME } from '../components/ConfigurationForm/Fields';\nimport { ConfigurationForm, ConfigurationFormProps } from '../components/ConfigurationForm/Form';\nimport { ComponentsDictionary, extractContentTypeComponents } from '../hooks/useContentTypeSchema';\nimport { DEFAULT_SETTINGS, EditLayout } from '../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../modules/hooks';\nimport {\n useGetComponentConfigurationQuery,\n useUpdateComponentConfigurationMutation,\n} from '../services/components';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { setIn } from '../utils/objects';\n\nimport { formatComponentConfigurationEditLayout } from './formatComponentConfigurationEditLayout';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { Metadatas } from '../../../shared/contracts/content-types';\n\n/* -------------------------------------------------------------------------------------------------\n * ComponentConfigurationPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ComponentConfigurationPage = () => {\n /**\n * useDocumentLayout only works for documents, not components,\n * it feels weird to make that hook work for both when this is SUCH\n * a unique use case and we only do it here, so in short, we essentially\n * just extracted the logic to make an edit view layout and reproduced it here.\n */\n const { slug: model } = useParams<{ slug: string }>();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const {\n components,\n fieldSizes,\n schema,\n schemas,\n error: errorSchema,\n isLoading: isLoadingSchema,\n isFetching: isFetchingSchema,\n } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n const schema = res.data?.components.find((ct) => ct.uid === model);\n\n const componentsByKey = res.data?.components.reduce<ComponentsDictionary>(\n (acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n },\n {}\n );\n\n const components = extractContentTypeComponents(schema?.attributes, componentsByKey);\n\n const fieldSizes = Object.entries(res.data?.fieldSizes ?? {}).reduce<\n ConfigurationFormProps['fieldSizes']\n >((acc, [attributeName, { default: size }]) => {\n acc[attributeName] = size;\n\n return acc;\n }, {});\n\n return {\n isFetching: res.isFetching,\n isLoading: res.isLoading,\n error: res.error,\n components,\n schema,\n schemas: res.data?.contentTypes ?? [],\n fieldSizes,\n };\n },\n });\n\n React.useEffect(() => {\n if (errorSchema) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(errorSchema),\n });\n }\n }, [errorSchema, formatAPIError, toggleNotification]);\n\n const {\n data,\n isLoading: isLoadingConfig,\n isFetching: isFetchingConfig,\n error,\n } = useGetComponentConfigurationQuery(model ?? '');\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n /**\n * you **must** check if we're loading or fetching in case the component gets new props\n * but nothing was unmounted, it then becomes a fetch, not a load.\n */\n const isLoading = isLoadingConfig || isLoadingSchema || isFetchingConfig || isFetchingSchema;\n\n const editLayout = React.useMemo(\n () =>\n data && !isLoading\n ? formatComponentConfigurationEditLayout(data, { schema, components, schemas })\n : ({\n layout: [],\n components: {},\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as EditLayout),\n [data, isLoading, schema, components, schemas]\n );\n\n const [updateConfiguration] = useUpdateComponentConfigurationMutation();\n const handleSubmit: ConfigurationFormProps['onSubmit'] = async (formData) => {\n try {\n /**\n * We reconstruct the metadatas object by taking the existing list metadatas\n * and re-merging that by attribute name with the current list metadatas, whilst overwriting\n * the data from the form we've built.\n */\n const meta = Object.entries(data?.component.metadatas ?? {}).reduce<Metadatas>(\n (acc, [name, { edit, list }]) => {\n const {\n __temp_key__,\n size: _size,\n name: _name,\n ...editedMetadata\n } = formData.layout.flatMap((row) => row.children).find((field) => field.name === name) ??\n {};\n\n acc[name] = {\n edit: {\n ...edit,\n ...editedMetadata,\n },\n list,\n };\n\n return acc;\n },\n {}\n );\n\n const res = await updateConfiguration({\n layouts: {\n edit: formData.layout.map((row) =>\n row.children.reduce<Array<{ name: string; size: number }>>((acc, { name, size }) => {\n if (name !== TEMP_FIELD_NAME) {\n return [...acc, { name, size }];\n }\n\n return acc;\n }, [])\n ),\n list: data?.component.layouts.list,\n },\n settings: setIn(formData.settings, 'displayName', undefined),\n metadatas: meta,\n uid: model,\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || errorSchema || !schema) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>{`Configure ${editLayout.settings.displayName} Edit View`}</Page.Title>\n <ConfigurationForm\n onSubmit={handleSubmit}\n attributes={schema.attributes}\n fieldSizes={fieldSizes}\n layout={editLayout}\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedComponentConfigurationPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.componentsConfigurations\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ComponentConfigurationPage />\n </Page.Protect>\n );\n};\n\nexport { ComponentConfigurationPage, ProtectedComponentConfigurationPage };\n"],"names":["ComponentConfigurationPage","slug","model","useParams","toggleNotification","useNotification","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","components","fieldSizes","schema","schemas","error","errorSchema","isLoading","isLoadingSchema","isFetching","isFetchingSchema","useGetInitialDataQuery","undefined","selectFromResult","res","data","find","ct","uid","componentsByKey","reduce","acc","component","extractContentTypeComponents","attributes","Object","entries","attributeName","default","size","contentTypes","React","useEffect","type","message","isLoadingConfig","isFetchingConfig","useGetComponentConfigurationQuery","editLayout","useMemo","formatComponentConfigurationEditLayout","layout","metadatas","options","settings","DEFAULT_SETTINGS","updateConfiguration","useUpdateComponentConfigurationMutation","handleSubmit","formData","meta","name","edit","list","__temp_key__","_size","_name","editedMetadata","flatMap","row","children","field","layouts","map","TEMP_FIELD_NAME","setIn","id","defaultMessage","_jsx","Page","Loading","Error","_jsxs","_Fragment","Title","displayName","ConfigurationForm","onSubmit","ProtectedComponentConfigurationPage","permissions","useTypedSelector","state","admin_app","contentManager","componentsConfigurations","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ComponentConfigurationPage.js","sources":["../../../admin/src/pages/ComponentConfigurationPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Page, useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { TEMP_FIELD_NAME } from '../components/ConfigurationForm/Fields';\nimport { ConfigurationForm, ConfigurationFormProps } from '../components/ConfigurationForm/Form';\nimport { ComponentsDictionary, extractContentTypeComponents } from '../hooks/useContentTypeSchema';\nimport { DEFAULT_SETTINGS, EditLayout } from '../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../modules/hooks';\nimport {\n useGetComponentConfigurationQuery,\n useUpdateComponentConfigurationMutation,\n} from '../services/components';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { setIn } from '../utils/objects';\n\nimport { formatComponentConfigurationEditLayout } from './formatComponentConfigurationEditLayout';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type { Metadatas } from '../../../shared/contracts/content-types';\n\n/* -------------------------------------------------------------------------------------------------\n * ComponentConfigurationPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ComponentConfigurationPage = () => {\n /**\n * useDocumentLayout only works for documents, not components,\n * it feels weird to make that hook work for both when this is SUCH\n * a unique use case and we only do it here, so in short, we essentially\n * just extracted the logic to make an edit view layout and reproduced it here.\n */\n const { slug: model } = useParams<{ slug: string }>();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const {\n components,\n fieldSizes,\n schema,\n schemas,\n error: errorSchema,\n isLoading: isLoadingSchema,\n isFetching: isFetchingSchema,\n } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n const schema = res.data?.components.find((ct) => ct.uid === model);\n\n const componentsByKey = res.data?.components.reduce<ComponentsDictionary>(\n (acc, component) => {\n acc[component.uid] = component;\n\n return acc;\n },\n {}\n );\n\n const components = extractContentTypeComponents(schema?.attributes, componentsByKey);\n\n const fieldSizes = Object.entries(res.data?.fieldSizes ?? {}).reduce<\n ConfigurationFormProps['fieldSizes']\n >((acc, [attributeName, { default: size }]) => {\n acc[attributeName] = size;\n\n return acc;\n }, {});\n\n return {\n isFetching: res.isFetching,\n isLoading: res.isLoading,\n error: res.error,\n components,\n schema,\n schemas: res.data?.contentTypes ?? [],\n fieldSizes,\n };\n },\n });\n\n React.useEffect(() => {\n if (errorSchema) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(errorSchema),\n });\n }\n }, [errorSchema, formatAPIError, toggleNotification]);\n\n const {\n data,\n isLoading: isLoadingConfig,\n isFetching: isFetchingConfig,\n error,\n } = useGetComponentConfigurationQuery(model ?? '');\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n /**\n * you **must** check if we're loading or fetching in case the component gets new props\n * but nothing was unmounted, it then becomes a fetch, not a load.\n */\n const isLoading = isLoadingConfig || isLoadingSchema || isFetchingConfig || isFetchingSchema;\n\n const editLayout = React.useMemo(\n () =>\n data && !isLoading\n ? formatComponentConfigurationEditLayout(data, { schema, components, schemas })\n : ({\n layout: [],\n components: {},\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as EditLayout),\n [data, isLoading, schema, components, schemas]\n );\n\n const [updateConfiguration] = useUpdateComponentConfigurationMutation();\n const handleSubmit: ConfigurationFormProps['onSubmit'] = async (formData) => {\n try {\n /**\n * We reconstruct the metadatas object by taking the existing list metadatas\n * and re-merging that by attribute name with the current list metadatas, whilst overwriting\n * the data from the form we've built.\n */\n const meta = Object.entries(data?.component.metadatas ?? {}).reduce<Metadatas>(\n (acc, [name, { edit, list }]) => {\n const {\n __temp_key__,\n size: _size,\n name: _name,\n ...editedMetadata\n } = formData.layout.flatMap((row) => row.children).find((field) => field.name === name) ??\n {};\n\n acc[name] = {\n edit: {\n ...edit,\n ...editedMetadata,\n },\n list,\n };\n\n return acc;\n },\n {}\n );\n\n const res = await updateConfiguration({\n layouts: {\n edit: formData.layout.map((row) =>\n row.children.reduce<Array<{ name: string; size: number }>>((acc, { name, size }) => {\n if (name !== TEMP_FIELD_NAME) {\n return [...acc, { name, size }];\n }\n\n return acc;\n }, [])\n ),\n list: data?.component.layouts.list,\n },\n settings: setIn(formData.settings, 'displayName', undefined),\n metadatas: meta,\n uid: model,\n });\n\n if ('data' in res) {\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || errorSchema || !schema) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>{`Configure ${editLayout.settings.displayName} Edit View`}</Page.Title>\n <ConfigurationForm\n onSubmit={handleSubmit}\n attributes={schema.attributes}\n fieldSizes={fieldSizes}\n layout={editLayout}\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedComponentConfigurationPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.componentsConfigurations\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ComponentConfigurationPage />\n </Page.Protect>\n );\n};\n\nexport { ComponentConfigurationPage, ProtectedComponentConfigurationPage };\n"],"names":["ComponentConfigurationPage","slug","model","useParams","toggleNotification","useNotification","formatMessage","useIntl","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","components","fieldSizes","schema","schemas","error","errorSchema","isLoading","isLoadingSchema","isFetching","isFetchingSchema","useGetInitialDataQuery","undefined","selectFromResult","res","data","find","ct","uid","componentsByKey","reduce","acc","component","extractContentTypeComponents","attributes","Object","entries","attributeName","default","size","contentTypes","React","useEffect","type","message","isLoadingConfig","isFetchingConfig","useGetComponentConfigurationQuery","editLayout","useMemo","formatComponentConfigurationEditLayout","layout","metadatas","options","settings","DEFAULT_SETTINGS","updateConfiguration","useUpdateComponentConfigurationMutation","handleSubmit","formData","meta","name","edit","list","__temp_key__","_size","_name","editedMetadata","flatMap","row","children","field","layouts","map","TEMP_FIELD_NAME","setIn","id","defaultMessage","_jsx","Page","Loading","Error","_jsxs","_Fragment","Title","displayName","ConfigurationForm","onSubmit","ProtectedComponentConfigurationPage","permissions","useTypedSelector","state","admin_app","contentManager","componentsConfigurations","Protect"],"mappings":"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"}
|
|
@@ -13,7 +13,8 @@ var contentTypes = require('../services/contentTypes.js');
|
|
|
13
13
|
var init = require('../services/init.js');
|
|
14
14
|
var objects = require('../utils/objects.js');
|
|
15
15
|
|
|
16
|
-
function
|
|
16
|
+
function _interopNamespace(e) {
|
|
17
|
+
if (e && e.__esModule) return e;
|
|
17
18
|
var n = Object.create(null);
|
|
18
19
|
if (e) {
|
|
19
20
|
Object.keys(e).forEach(function (k) {
|
|
@@ -30,7 +31,7 @@ function _interopNamespaceDefault(e) {
|
|
|
30
31
|
return Object.freeze(n);
|
|
31
32
|
}
|
|
32
33
|
|
|
33
|
-
var React__namespace = /*#__PURE__*/
|
|
34
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
34
35
|
|
|
35
36
|
const EditConfigurationPage = ()=>{
|
|
36
37
|
const { trackUsage } = strapiAdmin.useTracking();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditConfigurationPage.js","sources":["../../../admin/src/pages/EditConfigurationPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Page, useNotification, useTracking, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { TEMP_FIELD_NAME } from '../components/ConfigurationForm/Fields';\nimport { ConfigurationForm, ConfigurationFormProps } from '../components/ConfigurationForm/Form';\nimport { useDoc } from '../hooks/useDocument';\nimport { useDocLayout } from '../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../modules/hooks';\nimport { useUpdateContentTypeConfigurationMutation } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { setIn } from '../utils/objects';\n\nimport type { Metadatas } from '../../../shared/contracts/content-types';\n\nconst EditConfigurationPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { isLoading: isLoadingSchema, schema, model } = useDoc();\n const { isLoading: isLoadingLayout, error, list, edit } = useDocLayout();\n\n const {\n fieldSizes,\n error: errorFieldSizes,\n isLoading: isLoadingFieldSizes,\n isFetching: isFetchingFieldSizes,\n } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n const fieldSizes = Object.entries(res.data?.fieldSizes ?? {}).reduce<\n ConfigurationFormProps['fieldSizes']\n >((acc, [attributeName, { default: size }]) => {\n acc[attributeName] = size;\n\n return acc;\n }, {});\n\n return {\n isFetching: res.isFetching,\n isLoading: res.isLoading,\n error: res.error,\n fieldSizes,\n };\n },\n });\n\n React.useEffect(() => {\n if (errorFieldSizes) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(errorFieldSizes),\n });\n }\n }, [errorFieldSizes, formatAPIError, toggleNotification]);\n\n const isLoading =\n isLoadingSchema || isLoadingLayout || isLoadingFieldSizes || isFetchingFieldSizes;\n\n const [updateConfiguration] = useUpdateContentTypeConfigurationMutation();\n const handleSubmit: ConfigurationFormProps['onSubmit'] = async (data) => {\n try {\n trackUsage('willSaveContentTypeLayout');\n\n /**\n * We reconstruct the metadatas object by taking the existing list metadatas\n * and re-merging that by attribute name with the current list metadatas, whilst overwriting\n * the data from the form we've built.\n */\n const meta = Object.entries(list.metadatas).reduce<Metadatas>(\n (acc, [name, { mainField: _mainField, ...listMeta }]) => {\n const existingEditMeta = edit.metadatas[name];\n\n const {\n __temp_key__,\n size: _size,\n name: _name,\n ...editedMetadata\n } = data.layout.flatMap((row) => row.children).find((field) => field.name === name) ?? {};\n\n acc[name] = {\n edit: {\n ...existingEditMeta,\n ...editedMetadata,\n },\n list: listMeta,\n };\n\n return acc;\n },\n {}\n );\n\n const res = await updateConfiguration({\n layouts: {\n edit: data.layout.map((row) =>\n row.children.reduce<Array<{ name: string; size: number }>>((acc, { name, size }) => {\n if (name !== TEMP_FIELD_NAME) {\n return [...acc, { name, size }];\n }\n\n return acc;\n }, [])\n ),\n list: list.layout.map((field) => field.name),\n },\n settings: setIn(data.settings, 'displayName', undefined),\n metadatas: meta,\n uid: model,\n });\n\n if ('data' in res) {\n trackUsage('didEditEditSettings');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (errorFieldSizes || error || !schema) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>{`Configure ${edit.settings.displayName} Edit View`}</Page.Title>\n <ConfigurationForm\n onSubmit={handleSubmit}\n attributes={schema.attributes}\n fieldSizes={fieldSizes}\n layout={edit}\n />\n </>\n );\n};\n\nconst ProtectedEditConfigurationPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditConfigurationPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedEditConfigurationPage, EditConfigurationPage };\n"],"names":["EditConfigurationPage","trackUsage","useTracking","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isLoading","isLoadingSchema","schema","model","useDoc","isLoadingLayout","error","list","edit","useDocLayout","fieldSizes","errorFieldSizes","isLoadingFieldSizes","isFetching","isFetchingFieldSizes","useGetInitialDataQuery","undefined","selectFromResult","res","Object","entries","data","reduce","acc","attributeName","default","size","React","useEffect","type","message","updateConfiguration","useUpdateContentTypeConfigurationMutation","handleSubmit","meta","metadatas","name","mainField","_mainField","listMeta","existingEditMeta","__temp_key__","_size","_name","editedMetadata","layout","flatMap","row","children","find","field","layouts","map","TEMP_FIELD_NAME","settings","setIn","uid","id","defaultMessage","_jsx","Page","Loading","Error","_jsxs","_Fragment","Title","displayName","ConfigurationForm","onSubmit","attributes","ProtectedEditConfigurationPage","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditConfigurationPage.js","sources":["../../../admin/src/pages/EditConfigurationPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Page, useNotification, useTracking, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { TEMP_FIELD_NAME } from '../components/ConfigurationForm/Fields';\nimport { ConfigurationForm, ConfigurationFormProps } from '../components/ConfigurationForm/Form';\nimport { useDoc } from '../hooks/useDocument';\nimport { useDocLayout } from '../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../modules/hooks';\nimport { useUpdateContentTypeConfigurationMutation } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { setIn } from '../utils/objects';\n\nimport type { Metadatas } from '../../../shared/contracts/content-types';\n\nconst EditConfigurationPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { isLoading: isLoadingSchema, schema, model } = useDoc();\n const { isLoading: isLoadingLayout, error, list, edit } = useDocLayout();\n\n const {\n fieldSizes,\n error: errorFieldSizes,\n isLoading: isLoadingFieldSizes,\n isFetching: isFetchingFieldSizes,\n } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n const fieldSizes = Object.entries(res.data?.fieldSizes ?? {}).reduce<\n ConfigurationFormProps['fieldSizes']\n >((acc, [attributeName, { default: size }]) => {\n acc[attributeName] = size;\n\n return acc;\n }, {});\n\n return {\n isFetching: res.isFetching,\n isLoading: res.isLoading,\n error: res.error,\n fieldSizes,\n };\n },\n });\n\n React.useEffect(() => {\n if (errorFieldSizes) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(errorFieldSizes),\n });\n }\n }, [errorFieldSizes, formatAPIError, toggleNotification]);\n\n const isLoading =\n isLoadingSchema || isLoadingLayout || isLoadingFieldSizes || isFetchingFieldSizes;\n\n const [updateConfiguration] = useUpdateContentTypeConfigurationMutation();\n const handleSubmit: ConfigurationFormProps['onSubmit'] = async (data) => {\n try {\n trackUsage('willSaveContentTypeLayout');\n\n /**\n * We reconstruct the metadatas object by taking the existing list metadatas\n * and re-merging that by attribute name with the current list metadatas, whilst overwriting\n * the data from the form we've built.\n */\n const meta = Object.entries(list.metadatas).reduce<Metadatas>(\n (acc, [name, { mainField: _mainField, ...listMeta }]) => {\n const existingEditMeta = edit.metadatas[name];\n\n const {\n __temp_key__,\n size: _size,\n name: _name,\n ...editedMetadata\n } = data.layout.flatMap((row) => row.children).find((field) => field.name === name) ?? {};\n\n acc[name] = {\n edit: {\n ...existingEditMeta,\n ...editedMetadata,\n },\n list: listMeta,\n };\n\n return acc;\n },\n {}\n );\n\n const res = await updateConfiguration({\n layouts: {\n edit: data.layout.map((row) =>\n row.children.reduce<Array<{ name: string; size: number }>>((acc, { name, size }) => {\n if (name !== TEMP_FIELD_NAME) {\n return [...acc, { name, size }];\n }\n\n return acc;\n }, [])\n ),\n list: list.layout.map((field) => field.name),\n },\n settings: setIn(data.settings, 'displayName', undefined),\n metadatas: meta,\n uid: model,\n });\n\n if ('data' in res) {\n trackUsage('didEditEditSettings');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (errorFieldSizes || error || !schema) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>{`Configure ${edit.settings.displayName} Edit View`}</Page.Title>\n <ConfigurationForm\n onSubmit={handleSubmit}\n attributes={schema.attributes}\n fieldSizes={fieldSizes}\n layout={edit}\n />\n </>\n );\n};\n\nconst ProtectedEditConfigurationPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditConfigurationPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedEditConfigurationPage, EditConfigurationPage };\n"],"names":["EditConfigurationPage","trackUsage","useTracking","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isLoading","isLoadingSchema","schema","model","useDoc","isLoadingLayout","error","list","edit","useDocLayout","fieldSizes","errorFieldSizes","isLoadingFieldSizes","isFetching","isFetchingFieldSizes","useGetInitialDataQuery","undefined","selectFromResult","res","Object","entries","data","reduce","acc","attributeName","default","size","React","useEffect","type","message","updateConfiguration","useUpdateContentTypeConfigurationMutation","handleSubmit","meta","metadatas","name","mainField","_mainField","listMeta","existingEditMeta","__temp_key__","_size","_name","editedMetadata","layout","flatMap","row","children","find","field","layouts","map","TEMP_FIELD_NAME","settings","setIn","uid","id","defaultMessage","_jsx","Page","Loading","Error","_jsxs","_Fragment","Title","displayName","ConfigurationForm","onSubmit","attributes","ProtectedEditConfigurationPage","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","Protect"],"mappings":"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"}
|
|
@@ -24,7 +24,8 @@ var Header = require('./components/Header.js');
|
|
|
24
24
|
var Panels = require('./components/Panels.js');
|
|
25
25
|
var data = require('./utils/data.js');
|
|
26
26
|
|
|
27
|
-
function
|
|
27
|
+
function _interopNamespace(e) {
|
|
28
|
+
if (e && e.__esModule) return e;
|
|
28
29
|
var n = Object.create(null);
|
|
29
30
|
if (e) {
|
|
30
31
|
Object.keys(e).forEach(function (k) {
|
|
@@ -41,7 +42,7 @@ function _interopNamespaceDefault(e) {
|
|
|
41
42
|
return Object.freeze(n);
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
var React__namespace = /*#__PURE__*/
|
|
45
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
45
46
|
|
|
46
47
|
/* -------------------------------------------------------------------------------------------------
|
|
47
48
|
* EditViewPage
|