@strapi/content-manager 5.48.1 → 5.50.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/layout.js +3 -1
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +5 -3
- package/dist/admin/layout.mjs.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 +238 -108
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +225 -103
- 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/ComponentCategory.js +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +9 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +13 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +8 -4
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +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/draftRelationCounts.js +117 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
- 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 +4 -3
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.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 +9 -5
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +2 -2
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.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 +4 -3
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +3 -2
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +3 -2
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
- package/dist/admin/preview/pages/Preview.js +41 -13
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +39 -12
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/routes.js +3 -2
- package/dist/admin/preview/routes.js.map +1 -1
- package/dist/admin/preview/utils/constants.js +9 -15
- package/dist/admin/preview/utils/constants.js.map +1 -1
- package/dist/admin/preview/utils/constants.mjs +10 -15
- package/dist/admin/preview/utils/constants.mjs.map +1 -1
- package/dist/admin/src/components/InjectionZone.d.ts +1 -2
- package/dist/admin/src/content-manager.d.ts +15 -15
- package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
- package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +8 -9
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
- package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
- package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
- package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
- package/dist/admin/src/modules/app.d.ts +5 -5
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
- package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
- package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
- package/dist/admin/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -0
- package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
- package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +1 -7
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
- package/dist/admin/src/services/documents.d.ts +30 -70
- package/dist/admin/src/services/relations.d.ts +6 -20
- package/dist/admin/src/services/uid.d.ts +5 -5
- package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
- package/dist/admin/src/utils/users.d.ts +1 -1
- package/dist/admin/src/utils/validation.d.ts +1 -1
- 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 +7 -3
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +7 -3
- 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/ja.json.js +262 -87
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +262 -87
- package/dist/admin/translations/ja.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/collection-types.js +2 -2
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +2 -2
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +2 -2
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +2 -2
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/utils/clone.js +5 -1
- package/dist/server/controllers/utils/clone.js.map +1 -1
- package/dist/server/controllers/utils/clone.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +6 -2
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/homepage/services/homepage.js +6 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +6 -1
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/mcp/handlers/collection-handlers.js +15 -18
- package/dist/server/mcp/handlers/collection-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/collection-handlers.mjs +16 -19
- package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -1
- package/dist/server/mcp/handlers/single-type-handlers.js +12 -12
- package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/single-type-handlers.mjs +13 -13
- package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.js +4 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs +4 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
- package/dist/server/mcp/sanitizers/shape-relations.js +108 -0
- package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -0
- package/dist/server/mcp/sanitizers/shape-relations.mjs +103 -0
- package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -0
- package/dist/server/mcp/schemas/data-schema.js +0 -3
- package/dist/server/mcp/schemas/data-schema.js.map +1 -1
- package/dist/server/mcp/schemas/data-schema.mjs +0 -3
- package/dist/server/mcp/schemas/data-schema.mjs.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.js +30 -4
- package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.mjs +30 -4
- package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
- package/dist/server/mcp/utils.js +30 -3
- package/dist/server/mcp/utils.js.map +1 -1
- package/dist/server/mcp/utils.mjs +30 -4
- package/dist/server/mcp/utils.mjs.map +1 -1
- package/dist/server/middlewares/routing.js +5 -1
- package/dist/server/middlewares/routing.js.map +1 -1
- package/dist/server/preview/controllers/preview.js +9 -0
- package/dist/server/preview/controllers/preview.js.map +1 -1
- package/dist/server/preview/controllers/preview.mjs +9 -0
- package/dist/server/preview/controllers/preview.mjs.map +1 -1
- package/dist/server/preview/controllers/previewScript.js +1450 -0
- package/dist/server/preview/routes/preview.js +11 -0
- package/dist/server/preview/routes/preview.js.map +1 -1
- package/dist/server/preview/routes/preview.mjs +11 -0
- package/dist/server/preview/routes/preview.mjs.map +1 -1
- package/dist/server/services/document-manager.js +13 -19
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +13 -19
- package/dist/server/services/document-manager.mjs.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-relations.js +9 -0
- package/dist/server/services/utils/draft-relations.js.map +1 -0
- package/dist/server/services/utils/draft-relations.mjs +7 -0
- package/dist/server/services/utils/draft-relations.mjs.map +1 -0
- package/dist/server/services/utils/draft.js +123 -26
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +118 -25
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +23 -5
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +15 -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/index.d.ts +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/clone.d.ts +1 -1
- package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/index.d.ts +3 -3
- package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/relations.d.ts +2 -2
- package/dist/server/src/history/controllers/history-version.d.ts +1 -7
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/controllers/index.d.ts +2 -1
- package/dist/server/src/history/controllers/index.d.ts.map +1 -1
- package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
- package/dist/server/src/history/services/history.d.ts +0 -2
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +3 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/history/utils.d.ts +1 -18
- package/dist/server/src/history/utils.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/index.d.ts +2 -1
- package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
- package/dist/server/src/homepage/index.d.ts +4 -8
- package/dist/server/src/homepage/index.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts +3 -4
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/index.d.ts +4 -8
- package/dist/server/src/homepage/services/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +82 -86
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/derive-content-type-mcp-tools.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/permissions.d.ts +1 -1
- package/dist/server/src/mcp/permissions.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/blocks-schema.d.ts.map +1 -1
- 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/filters-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/schemas/sort-schema.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/middlewares/routing.d.ts.map +1 -1
- package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/index.d.ts +2 -1
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/preview.d.ts +5 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -1
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +1 -16
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/services/components.d.ts +2 -2
- package/dist/server/src/services/components.d.ts.map +1 -1
- package/dist/server/src/services/configuration.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +5 -5
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts +14 -14
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +6 -6
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/field-sizes.d.ts +2 -2
- package/dist/server/src/services/field-sizes.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +81 -85
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts +12 -31
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/dist/server/src/services/populate-builder.d.ts +7 -5
- package/dist/server/src/services/populate-builder.d.ts.map +1 -1
- package/dist/server/src/services/uid.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/server/src/services/utils/count.d.ts.map +1 -1
- package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
- package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
- package/dist/server/src/services/utils/draft.d.ts +8 -7
- package/dist/server/src/services/utils/draft.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/dist/server/src/services/utils/store.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
- package/dist/server/src/validation/zod.d.ts +1 -1
- package/dist/server/src/validation/zod.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +4 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/single-types.d.ts +4 -1
- package/dist/shared/contracts/single-types.d.ts.map +1 -1
- package/package.json +10 -10
- package/dist/admin/preview/utils/previewScript.js +0 -1068
- package/dist/admin/preview/utils/previewScript.js.map +0 -1
- package/dist/admin/preview/utils/previewScript.mjs +0 -1066
- package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
- package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Relations.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useFocusInputField,\n useRBAC,\n useIsDesktop,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Combobox,\n ComboboxOption,\n Flex,\n IconButton,\n TextButton,\n Typography,\n VisuallyHidden,\n useComposedRefs,\n Link,\n Field,\n FlexComponent,\n BoxComponent,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Cross, Drag, ArrowClockwise, Link as LinkIcon, Plus, WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\nimport { styled } from 'styled-components';\n\nimport { RelationDragPreviewProps } from '../../../../../components/DragPreviews/RelationDragPreview';\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDebounce } from '../../../../../hooks/useDebounce';\nimport { useDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta, useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport {\n DROP_SENSITIVITY,\n UseDragAndDropOptions,\n useDragAndDrop,\n} from '../../../../../hooks/useDragAndDrop';\nimport {\n useGetRelationsQuery,\n useLazySearchRelationsQuery,\n RelationResult,\n} from '../../../../../services/relations';\nimport { type MainField } from '../../../../../utils/attributes';\nimport { getRelationLabel } from '../../../../../utils/relations';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { useComponent } from '../ComponentContext';\nimport { RelationModalRenderer, getCollectionType } from '../Relations/RelationModal';\n\nimport type { FindAvailable } from '../../../../../../../shared/contracts/relations';\nimport type { Schema } from '@strapi/types';\n\n/**\n * Remove a relation, whether it's been already saved or not.\n * It's used both in RelationsList, where the \"remove relation\" button is, and in the input,\n * because we sometimes need to remove a previous relation when selecting a new one.\n */\nfunction useHandleDisconnect(fieldName: string, consumerName: string) {\n const field = useField(fieldName);\n const removeFieldRow = useForm(consumerName, (state) => state.removeFieldRow);\n const addFieldRow = useForm(consumerName, (state) => state.addFieldRow);\n\n const handleDisconnect = React.useCallback<ListItemProps['data']['handleDisconnect']>(\n (relation) => {\n if (field.value && field.value.connect) {\n /**\n * A relation will exist in the `connect` array _if_ it has\n * been added without saving. In this case, we just remove it\n * from the connect array\n */\n const indexOfRelationInConnectArray = field.value.connect.findIndex(\n (rel: NonNullable<RelationsFormValue['connect']>[number]) => rel.id === relation.id\n );\n\n if (indexOfRelationInConnectArray >= 0) {\n removeFieldRow(`${fieldName}.connect`, indexOfRelationInConnectArray);\n return;\n }\n }\n\n addFieldRow(`${fieldName}.disconnect`, {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n },\n });\n },\n [addFieldRow, field.value, fieldName, removeFieldRow]\n );\n\n return handleDisconnect;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsField\n * -----------------------------------------------------------------------------------------------*/\n\nconst RELATIONS_TO_DISPLAY = 5;\nconst ONE_WAY_RELATIONS = ['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'];\nconst EMPTY_RELATION_RESULTS: RelationResult[] = [];\n\ntype RelationPosition =\n | (Pick<RelationResult, 'status' | 'locale'> & {\n before: string;\n end?: never;\n })\n | { end: boolean; before?: never; status?: never; locale?: never };\n\ninterface Relation extends Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> {\n href: string;\n label: string;\n position?: RelationPosition;\n __temp_key__: string;\n apiData?: {\n documentId: RelationResult['documentId'];\n id: RelationResult['id'];\n locale?: RelationResult['locale'];\n position: RelationPosition;\n // Added this property to prevent call useDocument with a not temporary relation (one already saved in the database)\n isTemporary?: boolean;\n };\n}\n\ninterface RelationsFieldProps\n extends Omit<Extract<EditFieldLayout, { type: 'relation' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'> {}\n\nexport interface RelationsFormValue {\n connect?: Relation[];\n disconnect?: Pick<Relation, 'id'>[];\n}\n\n/**\n * TODO: we get a rather ugly flash when we remove a single relation from the list leaving\n * no other relations when we press save. The initial relation re-renders, probably because\n * of the lag in the Form cleaning it's \"disconnect\" array, whilst our data has not been invalidated.\n *\n * Could we invalidate relation data on the document actions? Should we?\n */\n\n/**\n * @internal\n * @description The relations field holds a lot of domain logic for handling relations which is rather complicated\n * At present we do not expose this to plugin developers, however, they are able to overwrite it themselves should\n * they wish to do so.\n */\nconst RelationsField = React.forwardRef<HTMLDivElement, RelationsFieldProps>(\n ({ disabled, label, ...props }, ref) => {\n const { currentDocument, currentDocumentMeta } = useDocumentContext('RelationsField');\n\n const [currentPage, setCurrentPage] = React.useState(1);\n\n // Use the documentId from the actual document, not the params (meta)\n const documentId = currentDocument.document?.documentId;\n\n const { formatMessage } = useIntl();\n\n const isMorph = props.attribute.relation.toLowerCase().includes('morph');\n const isDisabled = isMorph || disabled;\n // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n const targetModel = props.attribute.targetModel;\n\n const componentId = useComponent('RelationsField', (state) => state.id);\n const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n const isSubmitting = useForm('RelationsList', (state) => state.isSubmitting);\n\n React.useEffect(() => {\n setCurrentPage(1);\n }, [isSubmitting]);\n\n const component = componentUID ? currentDocument.components[componentUID] : undefined;\n\n /**\n * We'll always have a documentId in a created entry, so we look for a componentId first.\n * Same with `uid` and `documentModel`.\n * The componentId is empty when adding a new component in a repeatable. Let it be null to skip isRelatedToCurrentDocument\n */\n const model = componentUID || currentDocumentMeta.model;\n const id = componentUID ? componentId?.toString() : documentId;\n\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = props.name.split('.').slice(-1);\n\n const schemaAttributes = component\n ? (component.attributes ?? {})\n : (currentDocument.schema?.attributes ?? {});\n\n /**\n * Confirm the target field is related to the current document.\n * Since relations can exist in a modal on top of the root document,\n * we need to ensure we are fetching relations for the correct document (root document vs related document),\n */\n const isRelatedToCurrentDocument =\n Object.values(schemaAttributes).filter(\n (attribute) =>\n attribute.type === 'relation' &&\n 'target' in attribute &&\n 'target' in props.attribute &&\n attribute.target === props.attribute.target\n ).length > 0;\n\n const { data, isLoading, isFetching } = useGetRelationsQuery(\n {\n model,\n targetField,\n // below we don't run the query if there is no id.\n id,\n params: {\n ...currentDocumentMeta.params,\n pageSize: RELATIONS_TO_DISPLAY,\n page: currentPage,\n },\n },\n {\n refetchOnMountOrArgChange: true,\n skip: !id || !isRelatedToCurrentDocument,\n }\n );\n\n const handleLoadMore = () => {\n setCurrentPage((prev) => prev + 1);\n };\n\n const field = useField(props.name);\n const serverData = data?.results ?? EMPTY_RELATION_RESULTS;\n\n const isFetchingMoreRelations = isLoading || isFetching;\n\n const realServerRelationsCount = data?.pagination ? data.pagination.total : 0;\n\n /**\n * Items that are already connected, but reordered would be in\n * this list, so to get an accurate figure, we remove them.\n */\n const relationsConnected =\n (field.value?.connect ?? []).filter(\n (rel: Relation) => serverData.findIndex((relation) => relation.id === rel.id) === -1\n ).length ?? 0;\n const relationsDisconnected = field.value?.disconnect?.length ?? 0;\n\n const relationsCount = realServerRelationsCount + relationsConnected - relationsDisconnected;\n\n /**\n * This is it, the source of truth for reordering in conjunction with partial loading & updating\n * of relations. Relations on load are given __temp_key__ when fetched, because we don't want to\n * create brand new keys everytime the data updates, just keep adding them onto the newly loaded ones.\n */\n const relations = React.useMemo(() => {\n const ctx = {\n field: field.value,\n href: `../${COLLECTION_TYPES}/${targetModel}`,\n mainField: props.mainField,\n };\n\n /**\n * Tidy up our data.\n */\n const transformations = pipe(\n removeConnected(ctx),\n removeDisconnected(ctx),\n addLabelAndHref(ctx)\n );\n\n const transformedRels = transformations([...serverData]);\n\n /**\n * Connect items (e.g. from fill-from-locale) may lack href/label. Ensure they have them\n * so ListItem's getCollectionType(href) and display work correctly.\n */\n const connectItems = (field.value?.connect ?? []).map((rel: Relation) => {\n const urlLocaleParam = rel.locale ? `?plugins[i18n][locale]=${rel.locale}` : '';\n if (rel.href) return rel;\n return {\n ...rel,\n label: rel.label ?? getRelationLabel(rel, props.mainField),\n href: `../${COLLECTION_TYPES}/${targetModel}/${rel.documentId}${urlLocaleParam}`,\n };\n });\n\n /**\n * THIS IS CRUCIAL. If you don't sort by the __temp_key__ which comes from fractional indexing\n * then the list will be in the wrong order.\n */\n return [...transformedRels, ...connectItems].sort((a, b) => {\n if (a.__temp_key__ < b.__temp_key__) return -1;\n if (a.__temp_key__ > b.__temp_key__) return 1;\n return 0;\n });\n }, [serverData, field.value, targetModel, props.mainField]);\n\n const handleDisconnect = useHandleDisconnect(props.name, 'RelationsField');\n\n const handleConnect = React.useCallback<RelationsInputProps['onChange']>(\n (relation) => {\n const [lastItemInList] = relations.slice(-1);\n const item = {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n isTemporary: true,\n },\n status: relation.status,\n /**\n * If there's a last item, that's the first key we use to generate out next one.\n */\n __temp_key__: generateNKeysBetween(lastItemInList?.__temp_key__ ?? null, null, 1)[0],\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `id` property with the exact same data.\n [props.mainField?.name ?? 'documentId']: relation[props.mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, props.mainField),\n href: `../${COLLECTION_TYPES}/${targetModel}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n\n if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {\n // Remove any existing relation so they can be replaced with the new one\n field.value?.connect?.forEach(handleDisconnect);\n relations.forEach(handleDisconnect);\n\n field.onChange(`${props.name}.connect`, [item]);\n } else {\n field.onChange(`${props.name}.connect`, [...(field.value?.connect ?? []), item]);\n }\n },\n [\n field,\n handleDisconnect,\n props.attribute.relation,\n props.mainField,\n props.name,\n relations,\n targetModel,\n ]\n );\n\n return (\n <Flex\n ref={ref}\n direction=\"column\"\n gap={3}\n justifyContent=\"space-between\"\n alignItems=\"stretch\"\n wrap=\"wrap\"\n >\n <StyledFlex direction=\"column\" alignItems=\"start\" gap={2} width=\"100%\">\n <MemoizedRelationsComboboxInput\n disabled={isDisabled}\n // NOTE: we should not default to using the documentId if the component is being created (componentUID is undefined)\n id={id}\n label={`${label} ${relationsCount > 0 ? `(${relationsCount})` : ''}`}\n model={model}\n onChange={handleConnect}\n isRelatedToCurrentDocument={isRelatedToCurrentDocument}\n {...props}\n />\n {data?.pagination && data.pagination.pageCount > data.pagination.page ? (\n <TextButton\n disabled={isFetchingMoreRelations}\n onClick={handleLoadMore}\n loading={isFetchingMoreRelations}\n startIcon={<ArrowClockwise />}\n // prevent the label from line-wrapping\n shrink={0}\n >\n {formatMessage({\n id: getTranslation('relation.loadMore'),\n defaultMessage: 'Load More',\n })}\n </TextButton>\n ) : null}\n </StyledFlex>\n <MemoizedRelationsList\n data={relations}\n serverData={serverData}\n disabled={isDisabled}\n name={props.name}\n isLoading={isFetchingMoreRelations}\n relationType={props.attribute.relation}\n targetModel={targetModel}\n documentParams={currentDocumentMeta.params}\n mainField={props.mainField}\n />\n </Flex>\n );\n }\n);\n\n/**\n * TODO: this can be removed once we stop shipping Inputs with\n * labels wrapped round in DS@2.\n */\nconst StyledFlex = styled<FlexComponent>(Flex)`\n & > div {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Relation Transformations\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TransformationContext extends Pick<RelationsFieldProps, 'mainField'> {\n field?: RelationsFormValue;\n href: string;\n}\n\n/**\n * If it's in the connected array, it can get out of our data array,\n * we'll be putting it back in later and sorting it anyway.\n */\nconst removeConnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]) => {\n return relations.filter((relation) => {\n const connectedRelations = field?.connect ?? [];\n\n return connectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n };\n\n/**\n * @description Removes relations that are in the `disconnect` array of the field\n */\nconst removeDisconnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]): RelationResult[] =>\n relations.filter((relation) => {\n const disconnectedRelations = field?.disconnect ?? [];\n\n return disconnectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n\n/**\n * @description Adds a label and href to the relation object we use this to render\n * a better UI where we can link to the relation and display a human-readable label.\n */\nconst addLabelAndHref =\n ({ mainField, href }: TransformationContext) =>\n (relations: RelationResult[]): Relation[] =>\n relations.map((relation) => {\n return {\n ...relation,\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.\n [mainField?.name ?? 'documentId']: relation[mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, mainField),\n href: `${href}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n });\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsInput\n * -----------------------------------------------------------------------------------------------*/\ninterface RelationsInputProps extends Omit<RelationsFieldProps, 'type'> {\n id?: string;\n model: string;\n isRelatedToCurrentDocument: boolean;\n onChange: (\n relation: Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> & {\n [key: string]: any;\n }\n ) => void;\n}\n\n/**\n * @description Contains all the logic for the combobox that can search\n * for relations and then add them to the field's connect array.\n */\nconst RelationsInput = ({\n hint,\n id,\n model,\n label,\n labelAction,\n name,\n mainField,\n placeholder,\n required,\n unique: _unique,\n 'aria-label': _ariaLabel,\n onChange,\n isRelatedToCurrentDocument,\n ...props\n}: RelationsInputProps) => {\n const [searchParams, setSearchParams] = React.useState({\n _q: '',\n page: 1,\n });\n const { toggleNotification } = useNotification();\n const { currentDocumentMeta } = useDocumentContext('RelationsInput');\n const { formatMessage } = useIntl();\n\n const field = useField<RelationsFormValue>(name);\n // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n const targetModel = props.attribute.targetModel;\n\n const searchParamsDebounced = useDebounce(searchParams, 300);\n const [searchForTrigger, { data, isLoading }] = useLazySearchRelationsQuery();\n\n /**\n * Because we're using a lazy query, we need to trigger the search\n * when the component mounts and when the search params change.\n * We also need to trigger the search when the field value changes\n * so that we can filter out the relations that are already connected.\n */\n React.useEffect(() => {\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = name.split('.').slice(-1);\n\n // Return early if there is no relation to the document\n if (!isRelatedToCurrentDocument) return;\n\n searchForTrigger({\n model,\n targetField,\n params: {\n ...currentDocumentMeta.params,\n id: id ?? '',\n pageSize: 10,\n idsToInclude: field.value?.disconnect?.map((rel) => rel.id.toString()) ?? [],\n idsToOmit: field.value?.connect?.map((rel) => rel.id.toString()) ?? [],\n ...searchParamsDebounced,\n },\n });\n }, [\n field.value?.connect,\n field.value?.disconnect,\n id,\n model,\n name,\n searchForTrigger,\n searchParamsDebounced,\n isRelatedToCurrentDocument,\n currentDocumentMeta.params,\n ]);\n\n const hasNextPage = data?.pagination ? data.pagination.page < data.pagination.pageCount : false;\n\n const handleChange = React.useCallback(\n (relationId?: string) => {\n if (!relationId) {\n return;\n }\n\n const options = data?.results ?? [];\n const relation = options.find((opt) => opt.id.toString() === relationId);\n\n if (!relation) {\n // This is very unlikely to happen, but it ensures we don't have any data for.\n console.error(\n \"You've tried to add a relation with an id that does not exist in the options you can see, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('relation.error-adding-relation'),\n defaultMessage: 'An error occurred while trying to add the relation.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n /**\n * You need to give this relation a correct _temp_key_ but\n * this component doesn't know about those ones, you can't rely\n * on the connect array because that doesn't hold items that haven't\n * moved. So use a callback to fill in the gaps when connecting.\n *\n */\n onChange(relation);\n },\n [data, formatMessage, onChange, toggleNotification]\n );\n\n const relation = React.useMemo(\n () =>\n ({\n collectionType: COLLECTION_TYPES,\n model: targetModel,\n documentId: '',\n params: currentDocumentMeta.params,\n }) as DocumentMeta,\n [currentDocumentMeta.params, targetModel]\n );\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: relation.model,\n }))\n );\n\n if (error) {\n return (\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <EmptyStateLayout\n icon={<WarningCircle width=\"16rem\" />}\n content={formatMessage({\n id: 'anErrorOccurred',\n defaultMessage: 'Whoops! Something went wrong. Please, try again.',\n })}\n />\n </Flex>\n );\n }\n\n return (\n <Field.Root error={field.error} hint={hint} name={name} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <DocumentRBAC permissions={permissions} model={relation.model}>\n <MemoizedRelationModalWithContext\n relation={relation}\n name={name}\n placeholder={placeholder}\n hasNextPage={hasNextPage}\n isLoadingPermissions={isLoadingPermissions}\n isLoadingSearchRelations={isLoading}\n handleChange={handleChange}\n setSearchParams={setSearchParams}\n data={data}\n mainField={mainField}\n fieldValue={field.value}\n {...props}\n />\n </DocumentRBAC>\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n\nconst MemoizedRelationsComboboxInput = React.memo(RelationsInput);\n\ninterface RelationModalWithContextProps\n extends Omit<RelationsInputProps, 'onChange' | 'label' | 'model' | 'isRelatedToCurrentDocument'> {\n relation: DocumentMeta;\n hasNextPage: boolean;\n isLoadingSearchRelations: boolean;\n isLoadingPermissions: boolean;\n handleChange: (relationId?: string) => void;\n data?: FindAvailable.Response;\n fieldValue?: RelationsFormValue;\n setSearchParams: React.Dispatch<\n React.SetStateAction<{\n _q: string;\n page: number;\n }>\n >;\n}\n\nconst RelationModalWithContext = ({\n relation,\n name,\n placeholder,\n hasNextPage,\n isLoadingSearchRelations,\n isLoadingPermissions,\n handleChange,\n mainField,\n setSearchParams,\n fieldValue,\n data,\n ...props\n}: RelationModalWithContextProps) => {\n const [textValue, setTextValue] = React.useState<string | undefined>('');\n const { formatMessage } = useIntl();\n const canCreate = useDocumentRBAC('RelationModalWrapper', (state) => state.canCreate);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n const handleLoadMore = () => {\n if (!data || !data.pagination) {\n return;\n } else if (data.pagination.page < data.pagination.pageCount) {\n setSearchParams((s) => ({ ...s, page: s.page + 1 }));\n }\n };\n\n const options = data?.results ?? [];\n\n React.useLayoutEffect(() => {\n setTextValue('');\n }, [fieldValue]);\n\n const handleSearch = async (search: string) => {\n setSearchParams((s) => ({ ...s, _q: search, page: 1 }));\n };\n return (\n <RelationModalRenderer>\n {({ dispatch }) => (\n <Combobox\n ref={fieldRef}\n creatable=\"visible\"\n creatableDisabled={!canCreate}\n createMessage={() =>\n formatMessage({\n id: getTranslation('relation.create'),\n defaultMessage: 'Create a relation',\n })\n }\n onCreateOption={() => {\n if (canCreate) {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: {\n document: relation,\n shouldBypassConfirmation: false,\n fieldToConnect: name,\n fieldToConnectUID: componentUID,\n },\n });\n }\n }}\n creatableStartIcon={<Plus fill=\"neutral500\" />}\n name={name}\n autocomplete={{ type: 'list', filter: 'contains' }}\n placeholder={\n placeholder ||\n formatMessage({\n id: getTranslation('relation.add'),\n defaultMessage: 'Add relation',\n })\n }\n hasMoreItems={hasNextPage}\n loading={isLoadingSearchRelations || isLoadingPermissions}\n onOpenChange={() => {\n handleSearch(textValue ?? '');\n }}\n noOptionsMessage={() =>\n formatMessage({\n id: getTranslation('relation.notAvailable'),\n defaultMessage: 'No relations available',\n })\n }\n loadingMessage={formatMessage({\n id: getTranslation('relation.isLoading'),\n defaultMessage: 'Relations are loading',\n })}\n onLoadMore={handleLoadMore}\n textValue={textValue}\n onChange={handleChange}\n onTextValueChange={(text) => {\n setTextValue(text);\n }}\n onInputChange={(event) => {\n handleSearch(event.currentTarget.value);\n }}\n {...props}\n >\n {options?.map((opt) => {\n const textValue = getRelationLabel(opt, mainField);\n\n return (\n <ComboboxOption key={opt.id} value={opt.id.toString()} textValue={textValue}>\n <Flex gap={2} justifyContent=\"space-between\">\n <Flex gap={2}>\n <LinkIcon fill=\"neutral500\" />\n <Typography ellipsis>{textValue}</Typography>\n </Flex>\n {opt.status ? <DocumentStatus status={opt.status} /> : null}\n </Flex>\n </ComboboxOption>\n );\n })}\n </Combobox>\n )}\n </RelationModalRenderer>\n );\n};\n\nconst MemoizedRelationModalWithContext = React.memo(RelationModalWithContext);\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsList\n * -----------------------------------------------------------------------------------------------*/\nconst RELATION_ITEM_HEIGHT = 50;\nconst RELATION_GUTTER = 4;\n\ninterface RelationsListProps extends Pick<RelationsFieldProps, 'disabled' | 'name'> {\n data: Relation[];\n isLoading?: boolean;\n relationType: Schema.Attribute.RelationKind.Any;\n /**\n * The existing relations connected on the server. We need these to diff against.\n */\n serverData: RelationResult[];\n targetModel: string;\n documentParams?: DocumentMeta['params'];\n mainField?: MainField;\n}\n\nconst RelationsList = ({\n data,\n serverData,\n disabled,\n name,\n isLoading,\n relationType,\n targetModel,\n documentParams,\n mainField,\n}: RelationsListProps) => {\n const ariaDescriptionId = React.useId();\n const { formatMessage } = useIntl();\n const listRef = React.useRef<FixedSizeList>(null);\n const outerListRef = React.useRef<HTMLUListElement>(null);\n const [overflow, setOverflow] = React.useState<'top' | 'bottom' | 'top-bottom'>();\n const [liveText, setLiveText] = React.useState('');\n const field = useField(name);\n\n React.useEffect(() => {\n if (data.length <= RELATIONS_TO_DISPLAY) {\n return setOverflow(undefined);\n }\n\n const handleNativeScroll = (e: Event) => {\n const el = e.target as HTMLUListElement;\n const parentScrollContainerHeight = (el.parentNode as HTMLDivElement).scrollHeight;\n const maxScrollBottom = el.scrollHeight - el.scrollTop;\n\n if (el.scrollTop === 0) {\n return setOverflow('bottom');\n }\n\n if (maxScrollBottom === parentScrollContainerHeight) {\n return setOverflow('top');\n }\n\n return setOverflow('top-bottom');\n };\n\n const outerListRefCurrent = outerListRef?.current;\n\n if (!isLoading && data.length > 0 && outerListRefCurrent) {\n outerListRef.current.addEventListener('scroll', handleNativeScroll);\n }\n\n return () => {\n if (outerListRefCurrent) {\n outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n }\n };\n }, [isLoading, data.length]);\n\n const getItemPos = React.useCallback(\n (index: number) => `${index + 1} of ${data.length}`,\n [data.length]\n );\n\n const handleMoveItem = React.useCallback<NonNullable<UseDragAndDropOptions['onMoveItem']>>(\n (newIndex, oldIndex) => {\n const item = data[oldIndex];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(newIndex),\n }\n )\n );\n\n /**\n * Splicing mutates the array, so we need to create a new array\n */\n const newData = [...data];\n const currentRow = data[oldIndex];\n\n const startKey =\n oldIndex > newIndex ? newData[newIndex - 1]?.__temp_key__ : newData[newIndex]?.__temp_key__;\n const endKey =\n oldIndex > newIndex ? newData[newIndex]?.__temp_key__ : newData[newIndex + 1]?.__temp_key__;\n\n /**\n * We're moving the relation between two other relations, so\n * we need to generate a new key that keeps the order\n */\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n newData.splice(oldIndex, 1);\n newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n /**\n * Now we diff against the server to understand what's different so we\n * can keep the connect array nice and tidy. It also needs reversing because\n * we reverse the relations from the server in the first place.\n */\n const connectedRelations = newData\n .reduce<Relation[]>((acc, relation, currentIndex, array) => {\n const relationOnServer = serverData.find((oldRelation) => oldRelation.id === relation.id);\n\n const relationInFront = array[currentIndex + 1];\n\n if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n const position = relationInFront\n ? {\n before: relationInFront.documentId,\n locale: relationInFront.locale,\n status:\n 'publishedAt' in relationInFront && relationInFront.publishedAt\n ? ('published' as Relation['status'])\n : ('draft' as Relation['status']),\n }\n : { end: true };\n\n const relationWithPosition: Relation = {\n ...relation,\n ...{\n apiData: {\n id: relation.id,\n documentId: relation.documentId ?? relation.apiData?.documentId ?? '',\n locale: relation.locale || relation.apiData?.locale,\n isTemporary: relation.apiData?.isTemporary,\n position,\n },\n },\n };\n\n return [...acc, relationWithPosition];\n }\n\n return acc;\n }, [])\n .toReversed();\n\n field.onChange(`${name}.connect`, connectedRelations);\n },\n [data, serverData, field, name, formatMessage, getItemPos]\n );\n\n const handleGrabItem = React.useCallback<NonNullable<UseDragAndDropOptions['onGrabItem']>>(\n (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n },\n [data, formatMessage, getItemPos]\n );\n\n const handleDropItem = React.useCallback<NonNullable<UseDragAndDropOptions['onDropItem']>>(\n (index) => {\n const { href: _href, label, ...item } = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n },\n [data, formatMessage, getItemPos]\n );\n\n const handleCancel = React.useCallback<NonNullable<UseDragAndDropOptions['onCancel']>>(\n (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: item.label ?? item.documentId,\n }\n )\n );\n },\n [data, formatMessage]\n );\n\n const handleDisconnect = useHandleDisconnect(name, 'RelationsList');\n\n /**\n * These relation types will only ever have one item\n * in their list, so you can't reorder a single item!\n */\n const canReorder = !ONE_WAY_RELATIONS.includes(relationType);\n\n const dynamicListHeight =\n data.length > RELATIONS_TO_DISPLAY\n ? Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n RELATION_ITEM_HEIGHT / 2\n : Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER);\n\n const itemData = React.useMemo(\n () => ({\n ariaDescribedBy: ariaDescriptionId,\n canDrag: canReorder,\n disabled,\n documentParams,\n handleCancel,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n handleDisconnect,\n relations: data,\n targetModel,\n mainField,\n }),\n [\n ariaDescriptionId,\n canReorder,\n disabled,\n documentParams,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n data,\n targetModel,\n mainField,\n ]\n );\n\n return (\n <ShadowBox $overflowDirection={overflow}>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n {/* @ts-expect-error – width is expected, but we've not needed to pass it before. */}\n <FixedSizeList\n height={dynamicListHeight}\n ref={listRef}\n outerRef={outerListRef}\n itemCount={data.length}\n itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n itemData={itemData}\n itemKey={(index) => data[index].id}\n innerElementType=\"ol\"\n >\n {ListItem}\n </FixedSizeList>\n </ShadowBox>\n );\n};\n\nconst MemoizedRelationsList = React.memo(RelationsList);\n\nconst ShadowBox = styled<BoxComponent>(Box)<{\n $overflowDirection?: 'top-bottom' | 'top' | 'bottom';\n}>`\n position: relative;\n overflow: hidden;\n flex: 1;\n\n &:before,\n &:after {\n position: absolute;\n width: 100%;\n height: 4px;\n z-index: 1;\n }\n\n &:before {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n top: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'top' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n\n &:after {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n bottom: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'bottom' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ListItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ListItemProps extends Pick<ListChildComponentProps, 'style' | 'index'> {\n data: {\n ariaDescribedBy: string;\n canDrag?: boolean;\n disabled?: boolean;\n handleCancel: UseDragAndDropOptions['onCancel'];\n handleDropItem: UseDragAndDropOptions['onDropItem'];\n handleGrabItem: UseDragAndDropOptions['onGrabItem'];\n handleMoveItem: UseDragAndDropOptions['onMoveItem'];\n handleDisconnect: (relation: Relation) => void;\n name: string;\n relations: Relation[];\n targetModel: string;\n documentParams?: DocumentMeta['params'];\n mainField?: MainField;\n };\n}\n\nconst RelationRow = styled<FlexComponent>(Flex)`\n padding-top: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n padding-bottom: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\nconst ListItem = React.memo(({ data, index, style }: ListItemProps) => {\n const {\n ariaDescribedBy,\n canDrag = false,\n disabled = false,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n relations,\n targetModel,\n documentParams,\n mainField,\n } = data;\n const isDesktop = useIsDesktop();\n\n const { formatMessage } = useIntl();\n\n const {\n href,\n id,\n label: originalLabel,\n status: originalStatus,\n documentId,\n apiData,\n locale,\n } = relations[index];\n\n /**\n * The code above attempts to retrieve the updated value of a relation that has not yet been saved.\n * This is necessary when a relation modal is opened, and the mainField or its status is updated.\n * These changes need to be reflected in the initial relation field.\n */\n const collectionType = getCollectionType(href)!;\n const isTemporary = apiData?.isTemporary ?? false;\n const { document } = useDocument(\n {\n collectionType,\n model: targetModel,\n documentId: documentId ?? apiData?.documentId,\n params: documentParams,\n },\n { skip: !isTemporary }\n );\n const label = isTemporary && document ? getRelationLabel(document, mainField) : originalLabel;\n const status = isTemporary && document ? document?.status : originalStatus;\n\n const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop<number, Omit<RelationDragPreviewProps, 'width'>, HTMLDivElement>(\n canDrag && !disabled,\n {\n type: `${ItemTypes.RELATION}_${name}`,\n index,\n item: {\n displayedValue: label,\n status,\n id: id,\n index,\n },\n onMoveItem: handleMoveItem,\n onDropItem: handleDropItem,\n onGrabItem: handleGrabItem,\n onCancel: handleCancel,\n dropSensitivity: DROP_SENSITIVITY.REGULAR,\n }\n );\n\n const composedRefs = useComposedRefs<HTMLDivElement>(relationRef, dragRef);\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage());\n }, [dragPreviewRef]);\n\n const safeDocumentId = documentId ?? apiData?.documentId;\n const safeLocale = locale ?? apiData?.locale ?? null;\n const documentMeta = React.useMemo(\n () =>\n ({\n documentId: safeDocumentId,\n model: targetModel,\n collectionType: getCollectionType(href)!,\n params: {\n locale: safeLocale,\n },\n }) as DocumentMeta,\n [safeDocumentId, href, safeLocale, targetModel]\n );\n\n return (\n <Box\n style={style}\n tag=\"li\"\n ref={dropRef}\n aria-describedby={ariaDescribedBy}\n cursor={canDrag ? 'all-scroll' : 'default'}\n >\n {isDragging ? (\n <RelationItemPlaceholder />\n ) : (\n <RelationRow\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={canDrag ? 2 : 4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background={disabled ? 'neutral150' : 'neutral0'}\n justifyContent=\"space-between\"\n ref={composedRefs}\n data-handler-id={handlerId}\n >\n <FlexWrapper gap={1}>\n {canDrag && isDesktop ? (\n <IconButton\n tag=\"div\"\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.RelationInput.icon-button-aria-label'),\n defaultMessage: 'Drag',\n })}\n variant=\"ghost\"\n onKeyDown={handleKeyDown}\n disabled={disabled}\n >\n <Drag />\n </IconButton>\n ) : null}\n <Flex width=\"100%\" minWidth={0} gap={4} justifyContent=\"space-between\">\n <Box flex={1} minWidth={0} paddingTop={1} paddingBottom={1}>\n <RelationModalRenderer relation={documentMeta}>{label}</RelationModalRenderer>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <Box paddingLeft={4}>\n <IconButton\n onClick={() => handleDisconnect(relations[index])}\n disabled={disabled}\n label={formatMessage({\n id: getTranslation('relation.disconnect'),\n defaultMessage: 'Remove',\n })}\n variant=\"ghost\"\n size=\"S\"\n >\n <Cross />\n </IconButton>\n </Box>\n </RelationRow>\n )}\n </Box>\n );\n});\n\nconst FlexWrapper = styled<FlexComponent>(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n\n & > div[role='button'] {\n cursor: all-scroll;\n }\n`;\n\nconst DisconnectButton = styled.button`\n svg path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n }\n\n &:hover svg path,\n &:focus svg path {\n fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n }\n`;\n\nconst LinkEllipsis = styled(Link)`\n display: block;\n\n & > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nconst RelationItemPlaceholder = () => (\n <Box\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n background=\"primary100\"\n height={`calc(100% - ${RELATION_GUTTER}px)`}\n />\n);\n\nconst MemoizedRelationsField = React.memo(RelationsField);\n\nexport { MemoizedRelationsField as RelationsInput, FlexWrapper, DisconnectButton, LinkEllipsis };\nexport type { RelationsFieldProps };\n"],"names":["useHandleDisconnect","fieldName","consumerName","field","useField","removeFieldRow","useForm","state","addFieldRow","handleDisconnect","React","useCallback","relation","value","connect","indexOfRelationInConnectArray","findIndex","rel","id","apiData","documentId","locale","RELATIONS_TO_DISPLAY","ONE_WAY_RELATIONS","EMPTY_RELATION_RESULTS","RelationsField","forwardRef","disabled","label","props","ref","currentDocument","currentDocumentMeta","useDocumentContext","currentPage","setCurrentPage","useState","document","formatMessage","useIntl","isMorph","attribute","toLowerCase","includes","isDisabled","targetModel","componentId","useComponent","componentUID","uid","isSubmitting","useEffect","component","components","undefined","model","toString","targetField","name","split","slice","schemaAttributes","attributes","schema","isRelatedToCurrentDocument","Object","values","filter","type","target","length","data","isLoading","isFetching","useGetRelationsQuery","params","pageSize","page","refetchOnMountOrArgChange","skip","handleLoadMore","prev","serverData","results","isFetchingMoreRelations","realServerRelationsCount","pagination","total","relationsConnected","relationsDisconnected","disconnect","relationsCount","relations","useMemo","ctx","href","COLLECTION_TYPES","mainField","transformations","pipe","removeConnected","removeDisconnected","addLabelAndHref","transformedRels","connectItems","map","urlLocaleParam","getRelationLabel","sort","a","b","__temp_key__","handleConnect","lastItemInList","item","isTemporary","status","generateNKeysBetween","forEach","onChange","_jsxs","Flex","direction","gap","justifyContent","alignItems","wrap","StyledFlex","width","_jsx","MemoizedRelationsComboboxInput","pageCount","TextButton","onClick","loading","startIcon","ArrowClockwise","shrink","getTranslation","defaultMessage","MemoizedRelationsList","relationType","documentParams","styled","connectedRelations","disconnectedRelations","RelationsInput","hint","labelAction","placeholder","required","unique","_unique","_ariaLabel","searchParams","setSearchParams","_q","toggleNotification","useNotification","searchParamsDebounced","useDebounce","searchForTrigger","useLazySearchRelationsQuery","idsToInclude","idsToOmit","hasNextPage","handleChange","relationId","options","find","opt","console","error","message","collectionType","permissions","isLoadingPermissions","useRBAC","PERMISSIONS","action","subject","height","EmptyStateLayout","icon","WarningCircle","content","Field","Root","Label","DocumentRBAC","MemoizedRelationModalWithContext","isLoadingSearchRelations","fieldValue","Error","Hint","memo","RelationModalWithContext","textValue","setTextValue","canCreate","useDocumentRBAC","fieldRef","useFocusInputField","s","useLayoutEffect","handleSearch","search","RelationModalRenderer","dispatch","Combobox","creatable","creatableDisabled","createMessage","onCreateOption","payload","shouldBypassConfirmation","fieldToConnect","fieldToConnectUID","creatableStartIcon","Plus","fill","autocomplete","hasMoreItems","onOpenChange","noOptionsMessage","loadingMessage","onLoadMore","onTextValueChange","text","onInputChange","event","currentTarget","ComboboxOption","LinkIcon","Typography","ellipsis","DocumentStatus","RELATION_ITEM_HEIGHT","RELATION_GUTTER","RelationsList","ariaDescriptionId","useId","listRef","useRef","outerListRef","overflow","setOverflow","liveText","setLiveText","handleNativeScroll","e","el","parentScrollContainerHeight","parentNode","scrollHeight","maxScrollBottom","scrollTop","outerListRefCurrent","current","addEventListener","removeEventListener","getItemPos","index","handleMoveItem","newIndex","oldIndex","position","newData","currentRow","startKey","endKey","newKey","splice","reduce","acc","currentIndex","array","relationOnServer","oldRelation","relationInFront","before","publishedAt","end","relationWithPosition","toReversed","handleGrabItem","handleDropItem","_href","handleCancel","canReorder","dynamicListHeight","Math","min","itemData","ariaDescribedBy","canDrag","ShadowBox","$overflowDirection","VisuallyHidden","aria-live","FixedSizeList","outerRef","itemCount","itemSize","itemKey","innerElementType","ListItem","Box","RelationRow","theme","spaces","breakpoints","medium","style","isDesktop","useIsDesktop","originalLabel","originalStatus","getCollectionType","useDocument","handlerId","isDragging","handleKeyDown","relationRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","RELATION","displayedValue","onMoveItem","onDropItem","onGrabItem","onCancel","dropSensitivity","DROP_SENSITIVITY","REGULAR","composedRefs","useComposedRefs","getEmptyImage","safeDocumentId","safeLocale","documentMeta","tag","aria-describedby","cursor","RelationItemPlaceholder","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","data-handler-id","FlexWrapper","IconButton","role","tabIndex","withTooltip","variant","onKeyDown","Drag","minWidth","flex","size","Cross","DisconnectButton","button","colors","neutral600","neutral500","LinkEllipsis","Link","borderStyle","borderWidth","MemoizedRelationsField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Relations.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useFocusInputField,\n useRBAC,\n useIsDesktop,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Combobox,\n ComboboxOption,\n Flex,\n IconButton,\n TextButton,\n Typography,\n VisuallyHidden,\n useComposedRefs,\n Link,\n Field,\n FlexComponent,\n BoxComponent,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Cross, Drag, ArrowClockwise, Link as LinkIcon, Plus, WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\nimport { styled } from 'styled-components';\n\nimport { RelationDragPreviewProps } from '../../../../../components/DragPreviews/RelationDragPreview';\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDebounce } from '../../../../../hooks/useDebounce';\nimport { useDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta, useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport {\n DROP_SENSITIVITY,\n UseDragAndDropOptions,\n useDragAndDrop,\n} from '../../../../../hooks/useDragAndDrop';\nimport {\n useGetRelationsQuery,\n useLazySearchRelationsQuery,\n RelationResult,\n} from '../../../../../services/relations';\nimport { type MainField } from '../../../../../utils/attributes';\nimport { getRelationLabel } from '../../../../../utils/relations';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { useComponent } from '../ComponentContext';\nimport { RelationModalRenderer, getCollectionType } from '../Relations/RelationModal';\n\nimport type { FindAvailable } from '../../../../../../../shared/contracts/relations';\nimport type { Schema } from '@strapi/types';\n\n/**\n * Remove a relation, whether it's been already saved or not.\n * It's used both in RelationsList, where the \"remove relation\" button is, and in the input,\n * because we sometimes need to remove a previous relation when selecting a new one.\n */\nfunction useHandleDisconnect(fieldName: string, consumerName: string) {\n const field = useField(fieldName);\n const removeFieldRow = useForm(consumerName, (state) => state.removeFieldRow);\n const addFieldRow = useForm(consumerName, (state) => state.addFieldRow);\n\n const handleDisconnect = React.useCallback<ListItemProps['data']['handleDisconnect']>(\n (relation) => {\n if (field.value && field.value.connect) {\n /**\n * A relation will exist in the `connect` array _if_ it has\n * been added without saving. In this case, we just remove it\n * from the connect array\n */\n const indexOfRelationInConnectArray = field.value.connect.findIndex(\n (rel: NonNullable<RelationsFormValue['connect']>[number]) => rel.id === relation.id\n );\n\n if (indexOfRelationInConnectArray >= 0) {\n removeFieldRow(`${fieldName}.connect`, indexOfRelationInConnectArray);\n return;\n }\n }\n\n addFieldRow(`${fieldName}.disconnect`, {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n },\n });\n },\n [addFieldRow, field.value, fieldName, removeFieldRow]\n );\n\n return handleDisconnect;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsField\n * -----------------------------------------------------------------------------------------------*/\n\nconst RELATIONS_TO_DISPLAY = 5;\nconst ONE_WAY_RELATIONS = ['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'];\nconst EMPTY_RELATION_RESULTS: RelationResult[] = [];\n\ntype RelationPosition =\n | (Pick<RelationResult, 'status' | 'locale'> & {\n before: string;\n end?: never;\n })\n | { end: boolean; before?: never; status?: never; locale?: never };\n\ninterface Relation extends Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> {\n href: string;\n label: string;\n position?: RelationPosition;\n __temp_key__: string;\n apiData?: {\n documentId: RelationResult['documentId'];\n id: RelationResult['id'];\n locale?: RelationResult['locale'];\n position: RelationPosition;\n // Added this property to prevent call useDocument with a not temporary relation (one already saved in the database)\n isTemporary?: boolean;\n };\n}\n\ninterface RelationsFieldProps\n extends Omit<Extract<EditFieldLayout, { type: 'relation' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'> {}\n\nexport interface RelationsFormValue {\n connect?: Relation[];\n disconnect?: Pick<Relation, 'id'>[];\n}\n\n/**\n * TODO: we get a rather ugly flash when we remove a single relation from the list leaving\n * no other relations when we press save. The initial relation re-renders, probably because\n * of the lag in the Form cleaning it's \"disconnect\" array, whilst our data has not been invalidated.\n *\n * Could we invalidate relation data on the document actions? Should we?\n */\n\n/**\n * @internal\n * @description The relations field holds a lot of domain logic for handling relations which is rather complicated\n * At present we do not expose this to plugin developers, however, they are able to overwrite it themselves should\n * they wish to do so.\n */\nconst RelationsField = React.forwardRef<HTMLDivElement, RelationsFieldProps>(\n ({ disabled, label, ...props }, ref) => {\n const { currentDocument, currentDocumentMeta } = useDocumentContext('RelationsField');\n\n const [currentPage, setCurrentPage] = React.useState(1);\n\n // Use the documentId from the actual document, not the params (meta)\n const documentId = currentDocument.document?.documentId;\n\n const { formatMessage } = useIntl();\n\n const isMorph = props.attribute.relation.toLowerCase().includes('morph');\n const isDisabled = isMorph || disabled;\n // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n const targetModel = props.attribute.targetModel;\n\n const componentId = useComponent('RelationsField', (state) => state.id);\n const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n const isSubmitting = useForm('RelationsList', (state) => state.isSubmitting);\n\n React.useEffect(() => {\n setCurrentPage(1);\n }, [isSubmitting]);\n\n const component = componentUID ? currentDocument.components[componentUID] : undefined;\n\n /**\n * We'll always have a documentId in a created entry, so we look for a componentId first.\n * Same with `uid` and `documentModel`.\n * The componentId is empty when adding a new component in a repeatable. Let it be null to skip isRelatedToCurrentDocument\n */\n const model = componentUID || currentDocumentMeta.model;\n const id = componentUID ? componentId?.toString() : documentId;\n\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = props.name.split('.').slice(-1);\n\n const schemaAttributes = component\n ? (component.attributes ?? {})\n : (currentDocument.schema?.attributes ?? {});\n\n /**\n * Confirm the target field is related to the current document.\n * Since relations can exist in a modal on top of the root document,\n * we need to ensure we are fetching relations for the correct document (root document vs related document),\n */\n const isRelatedToCurrentDocument =\n Object.values(schemaAttributes).filter(\n (attribute) =>\n attribute.type === 'relation' &&\n 'target' in attribute &&\n 'target' in props.attribute &&\n attribute.target === props.attribute.target\n ).length > 0;\n\n const { data, isLoading, isFetching } = useGetRelationsQuery(\n {\n model,\n targetField,\n // below we don't run the query if there is no id.\n id,\n params: {\n ...currentDocumentMeta.params,\n pageSize: RELATIONS_TO_DISPLAY,\n page: currentPage,\n },\n },\n {\n refetchOnMountOrArgChange: true,\n skip: !id || !isRelatedToCurrentDocument,\n }\n );\n\n const handleLoadMore = () => {\n setCurrentPage((prev) => prev + 1);\n };\n\n const field = useField(props.name);\n const serverData = data?.results ?? EMPTY_RELATION_RESULTS;\n\n const isFetchingMoreRelations = isLoading || isFetching;\n\n const realServerRelationsCount = data?.pagination ? data.pagination.total : 0;\n\n /**\n * Items that are already connected, but reordered would be in\n * this list, so to get an accurate figure, we remove them.\n */\n const relationsConnected =\n (field.value?.connect ?? []).filter(\n (rel: Relation) => serverData.findIndex((relation) => relation.id === rel.id) === -1\n ).length ?? 0;\n const relationsDisconnected = field.value?.disconnect?.length ?? 0;\n\n const relationsCount = realServerRelationsCount + relationsConnected - relationsDisconnected;\n\n /**\n * This is it, the source of truth for reordering in conjunction with partial loading & updating\n * of relations. Relations on load are given __temp_key__ when fetched, because we don't want to\n * create brand new keys everytime the data updates, just keep adding them onto the newly loaded ones.\n */\n const relations = React.useMemo(() => {\n const ctx = {\n field: field.value,\n href: `../${COLLECTION_TYPES}/${targetModel}`,\n mainField: props.mainField,\n };\n\n /**\n * Tidy up our data.\n */\n const transformations = pipe(\n removeConnected(ctx),\n removeDisconnected(ctx),\n addLabelAndHref(ctx)\n );\n\n const transformedRels = transformations([...serverData]);\n\n /**\n * Connect items (e.g. from fill-from-locale) may lack href/label. Ensure they have them\n * so ListItem's getCollectionType(href) and display work correctly.\n */\n const connectItems = (field.value?.connect ?? []).map((rel: Relation) => {\n const urlLocaleParam = rel.locale ? `?plugins[i18n][locale]=${rel.locale}` : '';\n if (rel.href) return rel;\n return {\n ...rel,\n label: rel.label ?? getRelationLabel(rel, props.mainField),\n href: `../${COLLECTION_TYPES}/${targetModel}/${rel.documentId}${urlLocaleParam}`,\n };\n });\n\n /**\n * THIS IS CRUCIAL. If you don't sort by the __temp_key__ which comes from fractional indexing\n * then the list will be in the wrong order.\n */\n return [...transformedRels, ...connectItems].sort((a, b) => {\n if (a.__temp_key__ < b.__temp_key__) return -1;\n if (a.__temp_key__ > b.__temp_key__) return 1;\n return 0;\n });\n }, [serverData, field.value, targetModel, props.mainField]);\n\n const handleDisconnect = useHandleDisconnect(props.name, 'RelationsField');\n\n const handleConnect = React.useCallback<RelationsInputProps['onChange']>(\n (relation) => {\n const [lastItemInList] = relations.slice(-1);\n const item = {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n isTemporary: true,\n },\n status: relation.status,\n /**\n * If there's a last item, that's the first key we use to generate out next one.\n */\n __temp_key__: generateNKeysBetween(lastItemInList?.__temp_key__ ?? null, null, 1)[0],\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `id` property with the exact same data.\n [props.mainField?.name ?? 'documentId']: relation[props.mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, props.mainField),\n href: `../${COLLECTION_TYPES}/${targetModel}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n\n if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {\n // Remove any existing relation so they can be replaced with the new one\n field.value?.connect?.forEach(handleDisconnect);\n relations.forEach(handleDisconnect);\n\n field.onChange(`${props.name}.connect`, [item]);\n } else {\n field.onChange(`${props.name}.connect`, [...(field.value?.connect ?? []), item]);\n }\n },\n [\n field,\n handleDisconnect,\n props.attribute.relation,\n props.mainField,\n props.name,\n relations,\n targetModel,\n ]\n );\n\n return (\n <Flex\n ref={ref}\n direction=\"column\"\n gap={3}\n justifyContent=\"space-between\"\n alignItems=\"stretch\"\n wrap=\"wrap\"\n >\n <StyledFlex direction=\"column\" alignItems=\"start\" gap={2} width=\"100%\">\n <MemoizedRelationsComboboxInput\n disabled={isDisabled}\n // NOTE: we should not default to using the documentId if the component is being created (componentUID is undefined)\n id={id}\n label={`${label} ${relationsCount > 0 ? `(${relationsCount})` : ''}`}\n model={model}\n onChange={handleConnect}\n isRelatedToCurrentDocument={isRelatedToCurrentDocument}\n {...props}\n />\n {data?.pagination && data.pagination.pageCount > data.pagination.page ? (\n <TextButton\n disabled={isFetchingMoreRelations}\n onClick={handleLoadMore}\n loading={isFetchingMoreRelations}\n startIcon={<ArrowClockwise />}\n // prevent the label from line-wrapping\n shrink={0}\n >\n {formatMessage({\n id: getTranslation('relation.loadMore'),\n defaultMessage: 'Load More',\n })}\n </TextButton>\n ) : null}\n </StyledFlex>\n <MemoizedRelationsList\n data={relations}\n serverData={serverData}\n disabled={isDisabled}\n name={props.name}\n isLoading={isFetchingMoreRelations}\n relationType={props.attribute.relation}\n targetModel={targetModel}\n documentParams={currentDocumentMeta.params}\n mainField={props.mainField}\n />\n </Flex>\n );\n }\n);\n\n/**\n * TODO: this can be removed once we stop shipping Inputs with\n * labels wrapped round in DS@2.\n */\nconst StyledFlex = styled<FlexComponent>(Flex)`\n & > div {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Relation Transformations\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TransformationContext extends Pick<RelationsFieldProps, 'mainField'> {\n field?: RelationsFormValue;\n href: string;\n}\n\n/**\n * If it's in the connected array, it can get out of our data array,\n * we'll be putting it back in later and sorting it anyway.\n */\nconst removeConnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]) => {\n return relations.filter((relation) => {\n const connectedRelations = field?.connect ?? [];\n\n return connectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n };\n\n/**\n * @description Removes relations that are in the `disconnect` array of the field\n */\nconst removeDisconnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]): RelationResult[] =>\n relations.filter((relation) => {\n const disconnectedRelations = field?.disconnect ?? [];\n\n return disconnectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n\n/**\n * @description Adds a label and href to the relation object we use this to render\n * a better UI where we can link to the relation and display a human-readable label.\n */\nconst addLabelAndHref =\n ({ mainField, href }: TransformationContext) =>\n (relations: RelationResult[]): Relation[] =>\n relations.map((relation) => {\n return {\n ...relation,\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.\n [mainField?.name ?? 'documentId']: relation[mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, mainField),\n href: `${href}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n });\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsInput\n * -----------------------------------------------------------------------------------------------*/\ninterface RelationsInputProps extends Omit<RelationsFieldProps, 'type'> {\n id?: string;\n model: string;\n isRelatedToCurrentDocument: boolean;\n onChange: (\n relation: Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> & {\n [key: string]: any;\n }\n ) => void;\n}\n\n/**\n * @description Contains all the logic for the combobox that can search\n * for relations and then add them to the field's connect array.\n */\nconst RelationsInput = ({\n hint,\n id,\n model,\n label,\n labelAction,\n name,\n mainField,\n placeholder,\n required,\n unique: _unique,\n 'aria-label': _ariaLabel,\n onChange,\n isRelatedToCurrentDocument,\n ...props\n}: RelationsInputProps) => {\n const [searchParams, setSearchParams] = React.useState({\n _q: '',\n page: 1,\n });\n const { toggleNotification } = useNotification();\n const { currentDocumentMeta } = useDocumentContext('RelationsInput');\n const { formatMessage } = useIntl();\n\n const field = useField<RelationsFormValue>(name);\n // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n const targetModel = props.attribute.targetModel;\n\n const searchParamsDebounced = useDebounce(searchParams, 300);\n const [searchForTrigger, { data, isLoading }] = useLazySearchRelationsQuery();\n\n /**\n * Because we're using a lazy query, we need to trigger the search\n * when the component mounts and when the search params change.\n * We also need to trigger the search when the field value changes\n * so that we can filter out the relations that are already connected.\n */\n React.useEffect(() => {\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = name.split('.').slice(-1);\n\n // Return early if there is no relation to the document\n if (!isRelatedToCurrentDocument) return;\n\n searchForTrigger({\n model,\n targetField,\n params: {\n ...currentDocumentMeta.params,\n id: id ?? '',\n pageSize: 10,\n idsToInclude: field.value?.disconnect?.map((rel) => rel.id.toString()) ?? [],\n idsToOmit: field.value?.connect?.map((rel) => rel.id.toString()) ?? [],\n ...searchParamsDebounced,\n },\n });\n }, [\n field.value?.connect,\n field.value?.disconnect,\n id,\n model,\n name,\n searchForTrigger,\n searchParamsDebounced,\n isRelatedToCurrentDocument,\n currentDocumentMeta.params,\n ]);\n\n const hasNextPage = data?.pagination ? data.pagination.page < data.pagination.pageCount : false;\n\n const handleChange = React.useCallback(\n (relationId?: string) => {\n if (!relationId) {\n return;\n }\n\n const options = data?.results ?? [];\n const relation = options.find((opt) => opt.id.toString() === relationId);\n\n if (!relation) {\n // This is very unlikely to happen, but it ensures we don't have any data for.\n console.error(\n \"You've tried to add a relation with an id that does not exist in the options you can see, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('relation.error-adding-relation'),\n defaultMessage: 'An error occurred while trying to add the relation.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n /**\n * You need to give this relation a correct _temp_key_ but\n * this component doesn't know about those ones, you can't rely\n * on the connect array because that doesn't hold items that haven't\n * moved. So use a callback to fill in the gaps when connecting.\n *\n */\n onChange(relation);\n },\n [data, formatMessage, onChange, toggleNotification]\n );\n\n const relation = React.useMemo(\n () =>\n ({\n collectionType: COLLECTION_TYPES,\n model: targetModel,\n documentId: '',\n params: currentDocumentMeta.params,\n }) as DocumentMeta,\n [currentDocumentMeta.params, targetModel]\n );\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: relation.model,\n }))\n );\n\n if (error) {\n return (\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <EmptyStateLayout\n icon={<WarningCircle width=\"16rem\" />}\n content={formatMessage({\n id: 'anErrorOccurred',\n defaultMessage: 'Whoops! Something went wrong. Please, try again.',\n })}\n />\n </Flex>\n );\n }\n\n return (\n <Field.Root error={field.error} hint={hint} name={name} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <DocumentRBAC permissions={permissions} model={relation.model}>\n <MemoizedRelationModalWithContext\n relation={relation}\n name={name}\n placeholder={placeholder}\n hasNextPage={hasNextPage}\n isLoadingPermissions={isLoadingPermissions}\n isLoadingSearchRelations={isLoading}\n handleChange={handleChange}\n setSearchParams={setSearchParams}\n data={data}\n mainField={mainField}\n fieldValue={field.value}\n {...props}\n />\n </DocumentRBAC>\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n\nconst MemoizedRelationsComboboxInput = React.memo(RelationsInput);\n\ninterface RelationModalWithContextProps\n extends Omit<RelationsInputProps, 'onChange' | 'label' | 'model' | 'isRelatedToCurrentDocument'> {\n relation: DocumentMeta;\n hasNextPage: boolean;\n isLoadingSearchRelations: boolean;\n isLoadingPermissions: boolean;\n handleChange: (relationId?: string) => void;\n data?: FindAvailable.Response;\n fieldValue?: RelationsFormValue;\n setSearchParams: React.Dispatch<\n React.SetStateAction<{\n _q: string;\n page: number;\n }>\n >;\n}\n\nconst RelationModalWithContext = ({\n relation,\n name,\n placeholder,\n hasNextPage,\n isLoadingSearchRelations,\n isLoadingPermissions,\n handleChange,\n mainField,\n setSearchParams,\n fieldValue,\n data,\n ...props\n}: RelationModalWithContextProps) => {\n const [textValue, setTextValue] = React.useState<string | undefined>('');\n const { formatMessage } = useIntl();\n const canCreate = useDocumentRBAC('RelationModalWrapper', (state) => state.canCreate);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n const handleLoadMore = () => {\n if (!data || !data.pagination) {\n return;\n } else if (data.pagination.page < data.pagination.pageCount) {\n setSearchParams((s) => ({ ...s, page: s.page + 1 }));\n }\n };\n\n const options = data?.results ?? [];\n\n React.useLayoutEffect(() => {\n setTextValue('');\n }, [fieldValue]);\n\n const handleSearch = async (search: string) => {\n setSearchParams((s) => ({ ...s, _q: search, page: 1 }));\n };\n return (\n <RelationModalRenderer>\n {({ dispatch }) => (\n <Combobox\n ref={fieldRef}\n creatable=\"visible\"\n creatableDisabled={!canCreate}\n createMessage={() =>\n formatMessage({\n id: getTranslation('relation.create'),\n defaultMessage: 'Create a relation',\n })\n }\n onCreateOption={() => {\n if (canCreate) {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: {\n document: relation,\n shouldBypassConfirmation: false,\n fieldToConnect: name,\n fieldToConnectUID: componentUID,\n },\n });\n }\n }}\n creatableStartIcon={<Plus fill=\"neutral500\" />}\n name={name}\n autocomplete={{ type: 'list', filter: 'contains' }}\n placeholder={\n placeholder ||\n formatMessage({\n id: getTranslation('relation.add'),\n defaultMessage: 'Add relation',\n })\n }\n hasMoreItems={hasNextPage}\n loading={isLoadingSearchRelations || isLoadingPermissions}\n onOpenChange={() => {\n handleSearch(textValue ?? '');\n }}\n noOptionsMessage={() =>\n formatMessage({\n id: getTranslation('relation.notAvailable'),\n defaultMessage: 'No relations available',\n })\n }\n loadingMessage={formatMessage({\n id: getTranslation('relation.isLoading'),\n defaultMessage: 'Relations are loading',\n })}\n onLoadMore={handleLoadMore}\n textValue={textValue}\n onChange={handleChange}\n onTextValueChange={(text) => {\n setTextValue(text);\n }}\n onInputChange={(event) => {\n handleSearch(event.currentTarget.value);\n }}\n {...props}\n >\n {options?.map((opt) => {\n const textValue = getRelationLabel(opt, mainField);\n\n return (\n <ComboboxOption key={opt.id} value={opt.id.toString()} textValue={textValue}>\n <Flex gap={2} justifyContent=\"space-between\">\n <Flex gap={2}>\n <LinkIcon fill=\"neutral500\" />\n <Typography ellipsis>{textValue}</Typography>\n </Flex>\n {opt.status ? <DocumentStatus status={opt.status} /> : null}\n </Flex>\n </ComboboxOption>\n );\n })}\n </Combobox>\n )}\n </RelationModalRenderer>\n );\n};\n\nconst MemoizedRelationModalWithContext = React.memo(RelationModalWithContext);\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsList\n * -----------------------------------------------------------------------------------------------*/\nconst RELATION_ITEM_HEIGHT = 50;\nconst RELATION_GUTTER = 4;\n\ninterface RelationsListProps extends Pick<RelationsFieldProps, 'disabled' | 'name'> {\n data: Relation[];\n isLoading?: boolean;\n relationType: Schema.Attribute.RelationKind.Any;\n /**\n * The existing relations connected on the server. We need these to diff against.\n */\n serverData: RelationResult[];\n targetModel: string;\n documentParams?: DocumentMeta['params'];\n mainField?: MainField;\n}\n\nconst RelationsList = ({\n data,\n serverData,\n disabled,\n name,\n isLoading,\n relationType,\n targetModel,\n documentParams,\n mainField,\n}: RelationsListProps) => {\n const ariaDescriptionId = React.useId();\n const { formatMessage } = useIntl();\n const listRef = React.useRef<FixedSizeList>(null);\n const outerListRef = React.useRef<HTMLUListElement>(null);\n const [overflow, setOverflow] = React.useState<'top' | 'bottom' | 'top-bottom'>();\n const [liveText, setLiveText] = React.useState('');\n const field = useField(name);\n\n React.useEffect(() => {\n if (data.length <= RELATIONS_TO_DISPLAY) {\n return setOverflow(undefined);\n }\n\n const handleNativeScroll = (e: Event) => {\n const el = e.target as HTMLUListElement;\n const parentScrollContainerHeight = (el.parentNode as HTMLDivElement).scrollHeight;\n const maxScrollBottom = el.scrollHeight - el.scrollTop;\n\n if (el.scrollTop === 0) {\n return setOverflow('bottom');\n }\n\n if (maxScrollBottom === parentScrollContainerHeight) {\n return setOverflow('top');\n }\n\n return setOverflow('top-bottom');\n };\n\n const outerListRefCurrent = outerListRef?.current;\n\n if (!isLoading && data.length > 0 && outerListRefCurrent) {\n outerListRef.current.addEventListener('scroll', handleNativeScroll);\n }\n\n return () => {\n if (outerListRefCurrent) {\n outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n }\n };\n }, [isLoading, data.length]);\n\n const getItemPos = React.useCallback(\n (index: number) => `${index + 1} of ${data.length}`,\n [data.length]\n );\n\n const handleMoveItem = React.useCallback<NonNullable<UseDragAndDropOptions['onMoveItem']>>(\n (newIndex, oldIndex) => {\n const item = data[oldIndex];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(newIndex),\n }\n )\n );\n\n /**\n * Splicing mutates the array, so we need to create a new array\n */\n const newData = [...data];\n const currentRow = data[oldIndex];\n\n const startKey =\n oldIndex > newIndex ? newData[newIndex - 1]?.__temp_key__ : newData[newIndex]?.__temp_key__;\n const endKey =\n oldIndex > newIndex ? newData[newIndex]?.__temp_key__ : newData[newIndex + 1]?.__temp_key__;\n\n /**\n * We're moving the relation between two other relations, so\n * we need to generate a new key that keeps the order\n */\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n newData.splice(oldIndex, 1);\n newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n /**\n * Now we diff against the server to understand what's different so we\n * can keep the connect array nice and tidy. It also needs reversing because\n * we reverse the relations from the server in the first place.\n */\n const connectedRelations = newData\n .reduce<Relation[]>((acc, relation, currentIndex, array) => {\n const relationOnServer = serverData.find((oldRelation) => oldRelation.id === relation.id);\n\n const relationInFront = array[currentIndex + 1];\n\n if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n const position = relationInFront\n ? {\n before: relationInFront.documentId,\n locale: relationInFront.locale,\n status:\n 'publishedAt' in relationInFront && relationInFront.publishedAt\n ? ('published' as Relation['status'])\n : ('draft' as Relation['status']),\n }\n : { end: true };\n\n const relationWithPosition: Relation = {\n ...relation,\n ...{\n apiData: {\n id: relation.id,\n documentId: relation.documentId ?? relation.apiData?.documentId ?? '',\n locale: relation.locale || relation.apiData?.locale,\n isTemporary: relation.apiData?.isTemporary,\n position,\n },\n },\n };\n\n return [...acc, relationWithPosition];\n }\n\n return acc;\n }, [])\n .toReversed();\n\n field.onChange(`${name}.connect`, connectedRelations);\n },\n [data, serverData, field, name, formatMessage, getItemPos]\n );\n\n const handleGrabItem = React.useCallback<NonNullable<UseDragAndDropOptions['onGrabItem']>>(\n (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n },\n [data, formatMessage, getItemPos]\n );\n\n const handleDropItem = React.useCallback<NonNullable<UseDragAndDropOptions['onDropItem']>>(\n (index) => {\n const { href: _href, label, ...item } = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n },\n [data, formatMessage, getItemPos]\n );\n\n const handleCancel = React.useCallback<NonNullable<UseDragAndDropOptions['onCancel']>>(\n (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: item.label ?? item.documentId,\n }\n )\n );\n },\n [data, formatMessage]\n );\n\n const handleDisconnect = useHandleDisconnect(name, 'RelationsList');\n\n /**\n * These relation types will only ever have one item\n * in their list, so you can't reorder a single item!\n */\n const canReorder = !ONE_WAY_RELATIONS.includes(relationType);\n\n const dynamicListHeight =\n data.length > RELATIONS_TO_DISPLAY\n ? Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n RELATION_ITEM_HEIGHT / 2\n : Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER);\n\n const itemData = React.useMemo(\n () => ({\n ariaDescribedBy: ariaDescriptionId,\n canDrag: canReorder,\n disabled,\n documentParams,\n handleCancel,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n handleDisconnect,\n relations: data,\n targetModel,\n mainField,\n }),\n [\n ariaDescriptionId,\n canReorder,\n disabled,\n documentParams,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n data,\n targetModel,\n mainField,\n ]\n );\n\n return (\n <ShadowBox $overflowDirection={overflow}>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n {/* @ts-expect-error – width is expected, but we've not needed to pass it before. */}\n <FixedSizeList\n height={dynamicListHeight}\n ref={listRef}\n outerRef={outerListRef}\n itemCount={data.length}\n itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n itemData={itemData}\n itemKey={(index) => data[index].id}\n innerElementType=\"ol\"\n >\n {ListItem}\n </FixedSizeList>\n </ShadowBox>\n );\n};\n\nconst MemoizedRelationsList = React.memo(RelationsList);\n\nconst ShadowBox = styled<BoxComponent>(Box)<{\n $overflowDirection?: 'top-bottom' | 'top' | 'bottom';\n}>`\n position: relative;\n overflow: hidden;\n flex: 1;\n\n &:before,\n &:after {\n position: absolute;\n width: 100%;\n height: 4px;\n z-index: 1;\n }\n\n &:before {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n top: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'top' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n\n &:after {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n bottom: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'bottom' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ListItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ListItemProps extends Pick<ListChildComponentProps, 'style' | 'index'> {\n data: {\n ariaDescribedBy: string;\n canDrag?: boolean;\n disabled?: boolean;\n handleCancel: UseDragAndDropOptions['onCancel'];\n handleDropItem: UseDragAndDropOptions['onDropItem'];\n handleGrabItem: UseDragAndDropOptions['onGrabItem'];\n handleMoveItem: UseDragAndDropOptions['onMoveItem'];\n handleDisconnect: (relation: Relation) => void;\n name: string;\n relations: Relation[];\n targetModel: string;\n documentParams?: DocumentMeta['params'];\n mainField?: MainField;\n };\n}\n\nconst RelationRow = styled<FlexComponent>(Flex)`\n padding-top: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n padding-bottom: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\nconst ListItem = React.memo(({ data, index, style }: ListItemProps) => {\n const {\n ariaDescribedBy,\n canDrag = false,\n disabled = false,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n relations,\n targetModel,\n documentParams,\n mainField,\n } = data;\n const isDesktop = useIsDesktop();\n\n const { formatMessage } = useIntl();\n\n const {\n href,\n id,\n label: originalLabel,\n status: originalStatus,\n documentId,\n apiData,\n locale,\n } = relations[index];\n\n /**\n * The code above attempts to retrieve the updated value of a relation that has not yet been saved.\n * This is necessary when a relation modal is opened, and the mainField or its status is updated.\n * These changes need to be reflected in the initial relation field.\n */\n const collectionType = getCollectionType(href)!;\n const isTemporary = apiData?.isTemporary ?? false;\n const { document } = useDocument(\n {\n collectionType,\n model: targetModel,\n documentId: documentId ?? apiData?.documentId,\n params: documentParams,\n },\n { skip: !isTemporary }\n );\n const label = isTemporary && document ? getRelationLabel(document, mainField) : originalLabel;\n const status = isTemporary && document ? document?.status : originalStatus;\n\n const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop<number, Omit<RelationDragPreviewProps, 'width'>, HTMLDivElement>(\n canDrag && !disabled,\n {\n type: `${ItemTypes.RELATION}_${name}`,\n index,\n item: {\n displayedValue: label,\n status,\n id: id,\n index,\n },\n onMoveItem: handleMoveItem,\n onDropItem: handleDropItem,\n onGrabItem: handleGrabItem,\n onCancel: handleCancel,\n dropSensitivity: DROP_SENSITIVITY.REGULAR,\n }\n );\n\n const composedRefs = useComposedRefs<HTMLDivElement>(relationRef, dragRef);\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage());\n }, [dragPreviewRef]);\n\n const safeDocumentId = documentId ?? apiData?.documentId;\n const safeLocale = locale ?? apiData?.locale ?? null;\n const documentMeta = React.useMemo(\n () =>\n ({\n documentId: safeDocumentId,\n model: targetModel,\n collectionType: getCollectionType(href)!,\n params: {\n locale: safeLocale,\n },\n }) as DocumentMeta,\n [safeDocumentId, href, safeLocale, targetModel]\n );\n\n return (\n <Box\n style={style}\n tag=\"li\"\n ref={dropRef}\n aria-describedby={ariaDescribedBy}\n cursor={canDrag ? 'all-scroll' : 'default'}\n >\n {isDragging ? (\n <RelationItemPlaceholder />\n ) : (\n <RelationRow\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={canDrag ? 2 : 4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background={disabled ? 'neutral150' : 'neutral0'}\n justifyContent=\"space-between\"\n ref={composedRefs}\n data-handler-id={handlerId}\n >\n <FlexWrapper gap={1}>\n {canDrag && isDesktop ? (\n <IconButton\n tag=\"div\"\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.RelationInput.icon-button-aria-label'),\n defaultMessage: 'Drag',\n })}\n variant=\"ghost\"\n onKeyDown={handleKeyDown}\n disabled={disabled}\n >\n <Drag />\n </IconButton>\n ) : null}\n <Flex width=\"100%\" minWidth={0} gap={4} justifyContent=\"space-between\">\n <Box flex={1} minWidth={0} paddingTop={1} paddingBottom={1}>\n <RelationModalRenderer relation={documentMeta}>{label}</RelationModalRenderer>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <Box paddingLeft={4}>\n <IconButton\n onClick={() => handleDisconnect(relations[index])}\n disabled={disabled}\n label={formatMessage({\n id: getTranslation('relation.disconnect'),\n defaultMessage: 'Remove',\n })}\n variant=\"ghost\"\n size=\"S\"\n >\n <Cross />\n </IconButton>\n </Box>\n </RelationRow>\n )}\n </Box>\n );\n});\n\nconst FlexWrapper = styled<FlexComponent>(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n\n & > div[role='button'] {\n cursor: all-scroll;\n }\n`;\n\nconst DisconnectButton = styled.button`\n svg path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n }\n\n &:hover svg path,\n &:focus svg path {\n fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n }\n`;\n\nconst LinkEllipsis = styled(Link)`\n display: block;\n\n & > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nconst RelationItemPlaceholder = () => (\n <Box\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n background=\"primary100\"\n height={`calc(100% - ${RELATION_GUTTER}px)`}\n />\n);\n\nconst MemoizedRelationsField = React.memo(RelationsField);\n\nexport { MemoizedRelationsField as RelationsInput, FlexWrapper, DisconnectButton, LinkEllipsis };\nexport type { RelationsFieldProps };\n"],"names":["useHandleDisconnect","fieldName","consumerName","field","useField","removeFieldRow","useForm","state","addFieldRow","handleDisconnect","React","useCallback","relation","value","connect","indexOfRelationInConnectArray","findIndex","rel","id","apiData","documentId","locale","RELATIONS_TO_DISPLAY","ONE_WAY_RELATIONS","EMPTY_RELATION_RESULTS","RelationsField","forwardRef","disabled","label","props","ref","currentDocument","currentDocumentMeta","useDocumentContext","currentPage","setCurrentPage","useState","document","formatMessage","useIntl","isMorph","attribute","toLowerCase","includes","isDisabled","targetModel","componentId","useComponent","componentUID","uid","isSubmitting","useEffect","component","components","undefined","model","toString","targetField","name","split","slice","schemaAttributes","attributes","schema","isRelatedToCurrentDocument","Object","values","filter","type","target","length","data","isLoading","isFetching","useGetRelationsQuery","params","pageSize","page","refetchOnMountOrArgChange","skip","handleLoadMore","prev","serverData","results","isFetchingMoreRelations","realServerRelationsCount","pagination","total","relationsConnected","relationsDisconnected","disconnect","relationsCount","relations","useMemo","ctx","href","COLLECTION_TYPES","mainField","transformations","pipe","removeConnected","removeDisconnected","addLabelAndHref","transformedRels","connectItems","map","urlLocaleParam","getRelationLabel","sort","a","b","__temp_key__","handleConnect","lastItemInList","item","isTemporary","status","generateNKeysBetween","forEach","onChange","_jsxs","Flex","direction","gap","justifyContent","alignItems","wrap","StyledFlex","width","_jsx","MemoizedRelationsComboboxInput","pageCount","TextButton","onClick","loading","startIcon","ArrowClockwise","shrink","getTranslation","defaultMessage","MemoizedRelationsList","relationType","documentParams","styled","connectedRelations","disconnectedRelations","RelationsInput","hint","labelAction","placeholder","required","unique","_unique","_ariaLabel","searchParams","setSearchParams","_q","toggleNotification","useNotification","searchParamsDebounced","useDebounce","searchForTrigger","useLazySearchRelationsQuery","idsToInclude","idsToOmit","hasNextPage","handleChange","relationId","options","find","opt","console","error","message","collectionType","permissions","isLoadingPermissions","useRBAC","PERMISSIONS","action","subject","height","EmptyStateLayout","icon","WarningCircle","content","Field","Root","Label","DocumentRBAC","MemoizedRelationModalWithContext","isLoadingSearchRelations","fieldValue","Error","Hint","memo","RelationModalWithContext","textValue","setTextValue","canCreate","useDocumentRBAC","fieldRef","useFocusInputField","s","useLayoutEffect","handleSearch","search","RelationModalRenderer","dispatch","Combobox","creatable","creatableDisabled","createMessage","onCreateOption","payload","shouldBypassConfirmation","fieldToConnect","fieldToConnectUID","creatableStartIcon","Plus","fill","autocomplete","hasMoreItems","onOpenChange","noOptionsMessage","loadingMessage","onLoadMore","onTextValueChange","text","onInputChange","event","currentTarget","ComboboxOption","LinkIcon","Typography","ellipsis","DocumentStatus","RELATION_ITEM_HEIGHT","RELATION_GUTTER","RelationsList","ariaDescriptionId","useId","listRef","useRef","outerListRef","overflow","setOverflow","liveText","setLiveText","handleNativeScroll","e","el","parentScrollContainerHeight","parentNode","scrollHeight","maxScrollBottom","scrollTop","outerListRefCurrent","current","addEventListener","removeEventListener","getItemPos","index","handleMoveItem","newIndex","oldIndex","position","newData","currentRow","startKey","endKey","newKey","splice","reduce","acc","currentIndex","array","relationOnServer","oldRelation","relationInFront","before","publishedAt","end","relationWithPosition","toReversed","handleGrabItem","handleDropItem","_href","handleCancel","canReorder","dynamicListHeight","Math","min","itemData","ariaDescribedBy","canDrag","ShadowBox","$overflowDirection","VisuallyHidden","aria-live","FixedSizeList","outerRef","itemCount","itemSize","itemKey","innerElementType","ListItem","Box","RelationRow","theme","spaces","breakpoints","medium","style","isDesktop","useIsDesktop","originalLabel","originalStatus","getCollectionType","useDocument","handlerId","isDragging","handleKeyDown","relationRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","RELATION","displayedValue","onMoveItem","onDropItem","onGrabItem","onCancel","dropSensitivity","DROP_SENSITIVITY","REGULAR","composedRefs","useComposedRefs","getEmptyImage","safeDocumentId","safeLocale","documentMeta","tag","aria-describedby","cursor","RelationItemPlaceholder","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","data-handler-id","FlexWrapper","IconButton","role","tabIndex","withTooltip","variant","onKeyDown","Drag","minWidth","flex","size","Cross","DisconnectButton","button","colors","neutral600","neutral500","LinkEllipsis","Link","borderStyle","borderWidth","MemoizedRelationsField"],"mappings":"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"}
|
|
@@ -14,7 +14,8 @@ var router = require('../../../../router.js');
|
|
|
14
14
|
var uid = require('../../../../services/uid.js');
|
|
15
15
|
var api = require('../../../../utils/api.js');
|
|
16
16
|
|
|
17
|
-
function
|
|
17
|
+
function _interopNamespace(e) {
|
|
18
|
+
if (e && e.__esModule) return e;
|
|
18
19
|
var n = Object.create(null);
|
|
19
20
|
if (e) {
|
|
20
21
|
Object.keys(e).forEach(function (k) {
|
|
@@ -31,7 +32,7 @@ function _interopNamespaceDefault(e) {
|
|
|
31
32
|
return Object.freeze(n);
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
var React__namespace = /*#__PURE__*/
|
|
35
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
35
36
|
|
|
36
37
|
/* -------------------------------------------------------------------------------------------------
|
|
37
38
|
* InputUID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UID.js","sources":["../../../../../../admin/src/pages/EditView/components/FormInputs/UID.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n useFocusInputField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Flex,\n FlexComponent,\n TextInput,\n Typography,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { CheckCircle, WarningCircle, Loader, ArrowClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDocumentContext } from '../../../../hooks/useDocumentContext';\nimport { CLONE_PATH } from '../../../../router';\nimport {\n useGenerateUIDMutation,\n useGetAvailabilityQuery,\n useGetDefaultUIDQuery,\n} from '../../../../services/uid';\nimport { buildValidParams } from '../../../../utils/api';\n\nimport type { CheckUIDAvailability } from '../../../../../../shared/contracts/uid';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface UIDInputProps extends Omit<InputProps, 'type'> {\n attribute?: Pick<Schema.Attribute.UIDProperties, 'regex'>;\n type: Schema.Attribute.TypeOf<Schema.Attribute.UID>;\n}\n\nconst UIDInput = React.forwardRef<any, UIDInputProps>(\n ({ hint, label, labelAction, name, required, attribute = {}, ...props }, ref) => {\n const { currentDocumentMeta } = useDocumentContext('UIDInput');\n const allFormValues = useForm('InputUID', (form) => form.values);\n const [availability, setAvailability] = React.useState<CheckUIDAvailability.Response>();\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n const isCloning = useMatch(CLONE_PATH) !== null;\n const field = useField(name);\n const debouncedValue = useDebounce(field.value, 300);\n const hasChanged = debouncedValue !== field.initialValue;\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const { regex } = attribute;\n const validationRegExp = regex ? new RegExp(regex) : UID_REGEX;\n\n const {\n data: defaultGeneratedUID,\n isLoading: isGeneratingDefaultUID,\n error: apiError,\n } = useGetDefaultUIDQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: {\n id: currentDocumentMeta.documentId ?? '',\n ...allFormValues,\n },\n params,\n },\n {\n skip: field.value || !required,\n }\n );\n\n React.useEffect(() => {\n if (apiError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(apiError),\n });\n }\n }, [apiError, formatAPIError, toggleNotification]);\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID && field.value === undefined) {\n field.onChange(name, defaultGeneratedUID);\n }\n }, [defaultGeneratedUID, field, name]);\n\n const [generateUID, { isLoading: isGeneratingUID }] = useGenerateUIDMutation();\n\n const handleRegenerateClick = async () => {\n try {\n const res = await generateUID({\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: { id: currentDocumentMeta.documentId ?? '', ...allFormValues },\n params,\n });\n\n if ('data' in res) {\n field.onChange(name, res.data);\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred.',\n }),\n });\n }\n };\n\n const {\n data: availabilityData,\n isLoading: isCheckingAvailability,\n error: availabilityError,\n } = useGetAvailabilityQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n value: debouncedValue ? debouncedValue.trim() : '',\n params,\n },\n {\n // Don't check availability if the value is empty or wasn't changed\n skip: !Boolean(\n (hasChanged || isCloning) &&\n debouncedValue &&\n validationRegExp.test(debouncedValue.trim())\n ),\n }\n );\n\n React.useEffect(() => {\n if (availabilityError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(availabilityError),\n });\n }\n }, [availabilityError, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer: number;\n\n if (availabilityData?.isAvailable) {\n timer = window.setTimeout(() => {\n setAvailability(undefined);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n const fieldRef = useFocusInputField(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n const shouldShowAvailability =\n (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;\n\n return (\n <Field.Root hint={hint} name={name} error={field.error} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TextInput\n ref={composedRefs}\n disabled={props.disabled}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {shouldShowAvailability && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n $available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <WarningCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!props.disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n onClick={handleRegenerateClick}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <ArrowClockwise />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n onChange={field.onChange}\n value={field.value ?? ''}\n {...props}\n type=\"text\"\n />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(Field.Action)`\n width: 1.6rem;\n\n svg {\n height: 1.6rem;\n width: 1.6rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled<FlexComponent>(Flex)<{ $available?: boolean }>`\n svg {\n height: 1.2rem;\n width: 1.2rem;\n\n path {\n fill: ${({ theme, $available }) =>\n $available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled<FlexComponent>(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n\nconst MemoizedUIDInput = React.memo(UIDInput);\n\nexport { MemoizedUIDInput as UIDInput };\nexport type { UIDInputProps };\n"],"names":["UID_REGEX","UIDInput","React","forwardRef","hint","label","labelAction","name","required","attribute","props","ref","currentDocumentMeta","useDocumentContext","allFormValues","useForm","form","values","availability","setAvailability","useState","showRegenerate","setShowRegenerate","isCloning","useMatch","CLONE_PATH","field","useField","debouncedValue","useDebounce","value","hasChanged","initialValue","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","query","useQueryParams","params","useMemo","buildValidParams","regex","validationRegExp","RegExp","data","defaultGeneratedUID","isLoading","isGeneratingDefaultUID","error","apiError","useGetDefaultUIDQuery","contentTypeUID","model","id","documentId","skip","useEffect","type","message","undefined","onChange","generateUID","isGeneratingUID","useGenerateUIDMutation","handleRegenerateClick","res","err","defaultMessage","availabilityData","isCheckingAvailability","availabilityError","useGetAvailabilityQuery","trim","Boolean","test","timer","isAvailable","window","setTimeout","clearTimeout","fieldRef","useFocusInputField","composedRefs","useComposedRefs","shouldShowAvailability","_jsxs","Field","Root","_jsx","Label","action","TextInput","disabled","endAction","Flex","position","gap","TextValidation","alignItems","justifyContent","$available","data-not-here-outer","pointerEvents","right","width","CheckCircle","WarningCircle","Typography","textColor","variant","_Fragment","FieldActionWrapper","onClick","onMouseEnter","onMouseLeave","LoadingWrapper","data-testid","Loader","ArrowClockwise","Error","Hint","styled","Action","theme","colors","neutral400","primary600","success600","danger600","rotation","keyframes","MemoizedUIDInput","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UID.js","sources":["../../../../../../admin/src/pages/EditView/components/FormInputs/UID.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n useFocusInputField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Flex,\n FlexComponent,\n TextInput,\n Typography,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { CheckCircle, WarningCircle, Loader, ArrowClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDocumentContext } from '../../../../hooks/useDocumentContext';\nimport { CLONE_PATH } from '../../../../router';\nimport {\n useGenerateUIDMutation,\n useGetAvailabilityQuery,\n useGetDefaultUIDQuery,\n} from '../../../../services/uid';\nimport { buildValidParams } from '../../../../utils/api';\n\nimport type { CheckUIDAvailability } from '../../../../../../shared/contracts/uid';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface UIDInputProps extends Omit<InputProps, 'type'> {\n attribute?: Pick<Schema.Attribute.UIDProperties, 'regex'>;\n type: Schema.Attribute.TypeOf<Schema.Attribute.UID>;\n}\n\nconst UIDInput = React.forwardRef<any, UIDInputProps>(\n ({ hint, label, labelAction, name, required, attribute = {}, ...props }, ref) => {\n const { currentDocumentMeta } = useDocumentContext('UIDInput');\n const allFormValues = useForm('InputUID', (form) => form.values);\n const [availability, setAvailability] = React.useState<CheckUIDAvailability.Response>();\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n const isCloning = useMatch(CLONE_PATH) !== null;\n const field = useField(name);\n const debouncedValue = useDebounce(field.value, 300);\n const hasChanged = debouncedValue !== field.initialValue;\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const { regex } = attribute;\n const validationRegExp = regex ? new RegExp(regex) : UID_REGEX;\n\n const {\n data: defaultGeneratedUID,\n isLoading: isGeneratingDefaultUID,\n error: apiError,\n } = useGetDefaultUIDQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: {\n id: currentDocumentMeta.documentId ?? '',\n ...allFormValues,\n },\n params,\n },\n {\n skip: field.value || !required,\n }\n );\n\n React.useEffect(() => {\n if (apiError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(apiError),\n });\n }\n }, [apiError, formatAPIError, toggleNotification]);\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID && field.value === undefined) {\n field.onChange(name, defaultGeneratedUID);\n }\n }, [defaultGeneratedUID, field, name]);\n\n const [generateUID, { isLoading: isGeneratingUID }] = useGenerateUIDMutation();\n\n const handleRegenerateClick = async () => {\n try {\n const res = await generateUID({\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: { id: currentDocumentMeta.documentId ?? '', ...allFormValues },\n params,\n });\n\n if ('data' in res) {\n field.onChange(name, res.data);\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred.',\n }),\n });\n }\n };\n\n const {\n data: availabilityData,\n isLoading: isCheckingAvailability,\n error: availabilityError,\n } = useGetAvailabilityQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n value: debouncedValue ? debouncedValue.trim() : '',\n params,\n },\n {\n // Don't check availability if the value is empty or wasn't changed\n skip: !Boolean(\n (hasChanged || isCloning) &&\n debouncedValue &&\n validationRegExp.test(debouncedValue.trim())\n ),\n }\n );\n\n React.useEffect(() => {\n if (availabilityError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(availabilityError),\n });\n }\n }, [availabilityError, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer: number;\n\n if (availabilityData?.isAvailable) {\n timer = window.setTimeout(() => {\n setAvailability(undefined);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n const fieldRef = useFocusInputField(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n const shouldShowAvailability =\n (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;\n\n return (\n <Field.Root hint={hint} name={name} error={field.error} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TextInput\n ref={composedRefs}\n disabled={props.disabled}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {shouldShowAvailability && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n $available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <WarningCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!props.disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n onClick={handleRegenerateClick}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <ArrowClockwise />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n onChange={field.onChange}\n value={field.value ?? ''}\n {...props}\n type=\"text\"\n />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(Field.Action)`\n width: 1.6rem;\n\n svg {\n height: 1.6rem;\n width: 1.6rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled<FlexComponent>(Flex)<{ $available?: boolean }>`\n svg {\n height: 1.2rem;\n width: 1.2rem;\n\n path {\n fill: ${({ theme, $available }) =>\n $available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled<FlexComponent>(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n\nconst MemoizedUIDInput = React.memo(UIDInput);\n\nexport { MemoizedUIDInput as UIDInput };\nexport type { UIDInputProps };\n"],"names":["UID_REGEX","UIDInput","React","forwardRef","hint","label","labelAction","name","required","attribute","props","ref","currentDocumentMeta","useDocumentContext","allFormValues","useForm","form","values","availability","setAvailability","useState","showRegenerate","setShowRegenerate","isCloning","useMatch","CLONE_PATH","field","useField","debouncedValue","useDebounce","value","hasChanged","initialValue","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","query","useQueryParams","params","useMemo","buildValidParams","regex","validationRegExp","RegExp","data","defaultGeneratedUID","isLoading","isGeneratingDefaultUID","error","apiError","useGetDefaultUIDQuery","contentTypeUID","model","id","documentId","skip","useEffect","type","message","undefined","onChange","generateUID","isGeneratingUID","useGenerateUIDMutation","handleRegenerateClick","res","err","defaultMessage","availabilityData","isCheckingAvailability","availabilityError","useGetAvailabilityQuery","trim","Boolean","test","timer","isAvailable","window","setTimeout","clearTimeout","fieldRef","useFocusInputField","composedRefs","useComposedRefs","shouldShowAvailability","_jsxs","Field","Root","_jsx","Label","action","TextInput","disabled","endAction","Flex","position","gap","TextValidation","alignItems","justifyContent","$available","data-not-here-outer","pointerEvents","right","width","CheckCircle","WarningCircle","Typography","textColor","variant","_Fragment","FieldActionWrapper","onClick","onMouseEnter","onMouseLeave","LoadingWrapper","data-testid","Loader","ArrowClockwise","Error","Hint","styled","Action","theme","colors","neutral400","primary600","success600","danger600","rotation","keyframes","MemoizedUIDInput","memo"],"mappings":"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"}
|
|
@@ -8,7 +8,10 @@ var PreviewWysiwyg = require('./PreviewWysiwyg.js');
|
|
|
8
8
|
var continueList = require('./utils/continueList.js');
|
|
9
9
|
require('codemirror5/addon/display/placeholder');
|
|
10
10
|
|
|
11
|
-
function
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
function _interopNamespace(e) {
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
12
15
|
var n = Object.create(null);
|
|
13
16
|
if (e) {
|
|
14
17
|
Object.keys(e).forEach(function (k) {
|
|
@@ -25,7 +28,8 @@ function _interopNamespaceDefault(e) {
|
|
|
25
28
|
return Object.freeze(n);
|
|
26
29
|
}
|
|
27
30
|
|
|
28
|
-
var React__namespace = /*#__PURE__*/
|
|
31
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
32
|
+
var CodeMirror__default = /*#__PURE__*/_interopDefault(CodeMirror);
|
|
29
33
|
|
|
30
34
|
const Editor = /*#__PURE__*/ React__namespace.forwardRef(({ disabled, editorRef, error, isPreviewMode, isExpandMode, name, onChange, placeholder, textareaRef, value }, forwardedRef)=>{
|
|
31
35
|
const onChangeRef = React__namespace.useRef(onChange);
|
|
@@ -40,7 +44,7 @@ const Editor = /*#__PURE__*/ React__namespace.forwardRef(({ disabled, editorRef,
|
|
|
40
44
|
// e.g. in case of re-ordering wysiwyg components in a DynamicZone
|
|
41
45
|
editorRef.current.toTextArea();
|
|
42
46
|
}
|
|
43
|
-
editorRef.current =
|
|
47
|
+
editorRef.current = CodeMirror__default.default.fromTextArea(textareaRef.current, {
|
|
44
48
|
lineWrapping: true,
|
|
45
49
|
extraKeys: {
|
|
46
50
|
Enter: 'newlineAndIndentContinueMarkdownList',
|
|
@@ -54,7 +58,7 @@ const Editor = /*#__PURE__*/ React__namespace.forwardRef(({ disabled, editorRef,
|
|
|
54
58
|
inputStyle: 'contenteditable'
|
|
55
59
|
});
|
|
56
60
|
// @ts-expect-error – doesn't think command exists?
|
|
57
|
-
|
|
61
|
+
CodeMirror__default.default.commands.newlineAndIndentContinueMarkdownList = continueList.newlineAndIndentContinueMarkdownList;
|
|
58
62
|
editorRef.current.on('change', (cm, change)=>{
|
|
59
63
|
// setValue (prop sync) must not notify the form — parent already has the value.
|
|
60
64
|
if (change.origin === 'setValue') {
|