@strapi/content-manager 0.0.0-next.3116274aabb83ba9f858814329ead55ccaea244d → 0.0.0-next.32e19446d7ac2d8eaffa53da59f933ca5716d727
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/ComponentIcon.js +3 -0
- package/dist/admin/components/ComponentIcon.js.map +1 -1
- package/dist/admin/components/ComponentIcon.mjs +3 -0
- package/dist/admin/components/ComponentIcon.mjs.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/EditFieldForm.mjs +3 -2
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.js +4 -1
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +5 -2
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.mjs +3 -3
- package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +91 -51
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +93 -53
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/RelativeTime.js.map +1 -1
- package/dist/admin/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +34 -10
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +34 -10
- package/dist/admin/components/Widgets.mjs.map +1 -1
- package/dist/admin/content-manager.js.map +1 -1
- package/dist/admin/content-manager.mjs.map +1 -1
- package/dist/admin/history/components/HistoryAction.js.map +1 -1
- package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +1 -0
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +1 -0
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/history/components/VersionsList.js +1 -1
- package/dist/admin/history/components/VersionsList.js.map +1 -1
- package/dist/admin/history/components/VersionsList.mjs +1 -1
- package/dist/admin/history/components/VersionsList.mjs.map +1 -1
- package/dist/admin/history/pages/History.js +7 -7
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +7 -7
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/history/services/historyVersion.js.map +1 -1
- package/dist/admin/history/services/historyVersion.mjs.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +24 -5
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +24 -5
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/layout.js +27 -6
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +28 -7
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +19 -22
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +20 -23
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.js +18 -0
- package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js +27 -4
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +28 -5
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +66 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +66 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +4 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +13 -8
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +14 -8
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +92 -27
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +94 -29
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +39 -24
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +39 -24
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +34 -9
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +34 -9
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +8 -10
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +8 -10
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js +6 -16
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +6 -16
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +18 -31
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +19 -32
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +4 -1
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +189 -0
- package/dist/admin/preview/components/InputPopover.js.map +1 -0
- package/dist/admin/preview/components/InputPopover.mjs +167 -0
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
- package/dist/admin/preview/components/PreviewHeader.js +0 -1
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +0 -1
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
- package/dist/admin/preview/pages/Preview.js +144 -106
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +145 -107
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/services/preview.js.map +1 -1
- package/dist/admin/preview/services/preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +56 -0
- package/dist/admin/preview/utils/constants.js.map +1 -0
- package/dist/admin/preview/utils/constants.mjs +52 -0
- package/dist/admin/preview/utils/constants.mjs.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.js +107 -0
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.js +22 -0
- package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
- package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
- package/dist/admin/preview/utils/previewScript.js +534 -0
- package/dist/admin/preview/utils/previewScript.js.map +1 -0
- package/dist/admin/preview/utils/previewScript.mjs +532 -0
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
- package/dist/admin/router.js.map +1 -1
- package/dist/admin/router.mjs.map +1 -1
- package/dist/admin/services/api.js +2 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +2 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +19 -4
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +19 -4
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/services/homepage.js.map +1 -1
- package/dist/admin/services/homepage.mjs.map +1 -1
- package/dist/admin/services/relations.js.map +1 -1
- package/dist/admin/services/relations.mjs.map +1 -1
- package/dist/admin/src/components/LeftMenu.d.ts +3 -1
- package/dist/admin/src/components/Widgets.d.ts +6 -2
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +0 -3
- package/dist/admin/src/pages/EditView/components/Header.d.ts +15 -0
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/TableCells/Relations.d.ts +0 -3
- package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
- package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +55 -0
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
- package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +16 -16
- package/dist/admin/src/services/homepage.d.ts +1 -1
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/translations/en.json.js +6 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +6 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +1 -0
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +1 -0
- 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/utils/translations.js.map +1 -1
- package/dist/admin/utils/translations.mjs.map +1 -1
- package/dist/admin/utils/urls.js.map +1 -1
- package/dist/admin/utils/urls.mjs.map +1 -1
- package/dist/admin/utils/users.js.map +1 -1
- package/dist/admin/utils/users.mjs.map +1 -1
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +2 -1
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +2 -1
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +6 -4
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +6 -4
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +3 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +3 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/validation/dimensions.js.map +1 -1
- package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs.map +1 -1
- package/dist/server/controllers/validation/model-configuration.js +2 -2
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +2 -2
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/history/utils.js.map +1 -1
- package/dist/server/history/utils.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +4 -3
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +4 -3
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/middlewares/routing.js.map +1 -1
- package/dist/server/middlewares/routing.mjs.map +1 -1
- package/dist/server/preview/services/preview-config.js +8 -33
- package/dist/server/preview/services/preview-config.js.map +1 -1
- package/dist/server/preview/services/preview-config.mjs +9 -34
- package/dist/server/preview/services/preview-config.mjs.map +1 -1
- package/dist/server/preview/services/preview.js.map +1 -1
- package/dist/server/preview/services/preview.mjs.map +1 -1
- package/dist/server/preview/utils.js.map +1 -1
- package/dist/server/preview/utils.mjs.map +1 -1
- package/dist/server/services/configuration.js.map +1 -1
- package/dist/server/services/configuration.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +23 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +23 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/field-sizes.js.map +1 -1
- package/dist/server/services/field-sizes.mjs.map +1 -1
- package/dist/server/services/uid.js.map +1 -1
- package/dist/server/services/uid.mjs.map +1 -1
- package/dist/server/services/utils/store.js.map +1 -1
- package/dist/server/services/utils/store.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Relations.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\
|
|
1
|
+
{"version":3,"file":"Relations.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n params: { locale },\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const contentCount = Array.isArray(content) ? content.length : content.count;\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('DynamicTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Typography style={{ cursor: 'pointer' }} textColor=\"neutral800\" fontWeight=\"regular\">\n {contentCount > 0\n ? formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number} {number, plural, =0 {items} one {item} other {items}}',\n },\n { number: contentCount }\n )\n : '-'}\n </Typography>\n </Menu.Trigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId}>\n <Typography maxWidth=\"50rem\" ellipsis>\n {getRelationLabel(entry, mainField)}\n </Typography>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n"],"names":["RelationSingle","mainField","content","_jsx","Typography","maxWidth","textColor","ellipsis","getRelationLabel","RelationMultiple","rowId","name","model","useDoc","formatMessage","useIntl","notifyStatus","useNotifyAT","isOpen","setIsOpen","React","useState","query","useQueryParams","locale","plugins","i18n","targetField","split","data","isLoading","useGetRelationsQuery","id","params","skip","refetchOnMountOrArgChange","contentCount","Array","isArray","length","count","useEffect","getTranslation","defaultMessage","_jsxs","Menu","Root","onOpenChange","Trigger","onClick","e","stopPropagation","style","cursor","fontWeight","number","Content","Item","disabled","Loader","small","results","_Fragment","map","entry","documentId","pagination","total","aria-disabled","aria-label"],"mappings":";;;;;;;;;;AAmBA,MAAMA,iBAAiB,CAAC,EAAEC,SAAS,EAAEC,OAAO,EAAuB,GAAA;AACjE,IAAA,qBACEC,GAACC,CAAAA,UAAAA,EAAAA;QAAWC,QAAS,EAAA,OAAA;QAAQC,SAAU,EAAA,YAAA;QAAaC,QAAQ,EAAA,IAAA;AACzDC,QAAAA,QAAAA,EAAAA,gBAAAA,CAAiBN,OAASD,EAAAA,SAAAA;;AAGjC;AASMQ,MAAAA,gBAAAA,GAAmB,CAAC,EAAER,SAAS,EAAEC,OAAO,EAAEQ,KAAK,EAAEC,IAAI,EAAyB,GAAA;IAClF,MAAM,EAAEC,KAAK,EAAE,GAAGC,MAAAA,EAAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,YAAY,EAAE,GAAGC,WAAAA,EAAAA;AACzB,IAAA,MAAM,CAACC,MAAQC,EAAAA,SAAAA,CAAU,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAC3C,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,MAASF,GAAAA,KAAAA,CAAMG,OAAO,EAAEC,IAAMF,EAAAA,MAAAA;AAEpC,IAAA,MAAM,CAACG,WAAAA,CAAY,GAAGhB,IAAAA,CAAKiB,KAAK,CAAC,GAAA,CAAA;AAEjC,IAAA,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAE,GAAGC,oBAC1B,CAAA;AACEnB,QAAAA,KAAAA;QACAoB,EAAItB,EAAAA,KAAAA;AACJiB,QAAAA,WAAAA;QACAM,MAAQ,EAAA;AAAET,YAAAA;AAAO;KAEnB,EAAA;AACEU,QAAAA,IAAAA,EAAM,CAAChB,MAAAA;QACPiB,yBAA2B,EAAA;AAC7B,KAAA,CAAA;IAGF,MAAMC,YAAAA,GAAeC,MAAMC,OAAO,CAACpC,WAAWA,OAAQqC,CAAAA,MAAM,GAAGrC,OAAAA,CAAQsC,KAAK;AAE5EpB,IAAAA,KAAAA,CAAMqB,SAAS,CAAC,IAAA;AACd,QAAA,IAAIZ,IAAM,EAAA;AACRb,YAAAA,YAAAA,CACEF,aAAc,CAAA;AACZkB,gBAAAA,EAAAA,EAAIU,cAAe,CAAA,8BAAA,CAAA;gBACnBC,cAAgB,EAAA;AAClB,aAAA,CAAA,CAAA;AAEJ;KACC,EAAA;AAACd,QAAAA,IAAAA;AAAMf,QAAAA,aAAAA;AAAeE,QAAAA;AAAa,KAAA,CAAA;IAEtC,qBACE4B,IAAA,CAACC,KAAKC,IAAI,EAAA;QAACC,YAAc,EAAA,CAAC7B,SAAWC,SAAUD,CAAAA,MAAAA,CAAAA;;AAC7C,0BAAAf,GAAA,CAAC0C,KAAKG,OAAO,EAAA;gBAACC,OAAS,EAAA,CAACC,CAAMA,GAAAA,CAAAA,CAAEC,eAAe,EAAA;AAC7C,gBAAA,QAAA,gBAAAhD,GAACC,CAAAA,UAAAA,EAAAA;oBAAWgD,KAAO,EAAA;wBAAEC,MAAQ,EAAA;AAAU,qBAAA;oBAAG/C,SAAU,EAAA,YAAA;oBAAagD,UAAW,EAAA,SAAA;AACzElB,oBAAAA,QAAAA,EAAAA,YAAAA,GAAe,IACZtB,aACE,CAAA;wBACEkB,EAAI,EAAA,uCAAA;wBACJW,cAAgB,EAAA;qBAElB,EAAA;wBAAEY,MAAQnB,EAAAA;qBAEZ,CAAA,GAAA;;;AAGR,0BAAAQ,IAAA,CAACC,KAAKW,OAAO,EAAA;;oBACV1B,SACC,kBAAA3B,GAAA,CAAC0C,KAAKY,IAAI,EAAA;wBAACC,QAAQ,EAAA,IAAA;AACjB,wBAAA,QAAA,gBAAAvD,GAACwD,CAAAA,MAAAA,EAAAA;4BAAOC,KAAK,EAAA,IAAA;sCACV9C,aAAc,CAAA;AACbkB,gCAAAA,EAAAA,EAAIU,cAAe,CAAA,gCAAA,CAAA;gCACnBC,cAAgB,EAAA;AAClB,6BAAA;;;AAILd,oBAAAA,IAAAA,EAAMgC,OACL,kBAAAjB,IAAA,CAAAkB,QAAA,EAAA;;4BACGjC,IAAKgC,CAAAA,OAAO,CAACE,GAAG,CAAC,CAACC,KACjB,iBAAA7D,GAAA,CAAC0C,KAAKY,IAAI,EAAA;AACR,oCAAA,QAAA,gBAAAtD,GAACC,CAAAA,UAAAA,EAAAA;wCAAWC,QAAS,EAAA,OAAA;wCAAQE,QAAQ,EAAA,IAAA;AAClCC,wCAAAA,QAAAA,EAAAA,gBAAAA,CAAiBwD,KAAO/D,EAAAA,SAAAA;;AAFb+D,iCAAAA,EAAAA,KAAAA,CAAMC,UAAU,CAAA,CAAA;AAOjCpC,4BAAAA,IAAAA,EAAMqC,cAAcrC,IAAMqC,EAAAA,UAAAA,CAAWC,QAAQ,EAC5C,kBAAAhE,GAAA,CAAC0C,KAAKY,IAAI,EAAA;gCACRW,eAAa,EAAA,IAAA;AACbC,gCAAAA,YAAAA,EAAYvD,aAAc,CAAA;AACxBkB,oCAAAA,EAAAA,EAAIU,cAAe,CAAA,6BAAA,CAAA;oCACnBC,cAAgB,EAAA;AAClB,iCAAA,CAAA;AAEA,gCAAA,QAAA,gBAAAxC,GAACC,CAAAA,UAAAA,EAAAA;AAAW,oCAAA,QAAA,EAAA;;;;;;;;;AAQ5B;;;;"}
|
|
@@ -97,13 +97,15 @@ const FieldPicker = ({ headers = [], resetHeaders, setHeaders })=>{
|
|
|
97
97
|
tag: "fieldset",
|
|
98
98
|
direction: "column",
|
|
99
99
|
alignItems: "stretch",
|
|
100
|
-
gap:
|
|
100
|
+
gap: 1,
|
|
101
101
|
borderWidth: 0,
|
|
102
102
|
maxHeight: '240px',
|
|
103
|
-
|
|
103
|
+
padding: 1,
|
|
104
|
+
overflow: 'auto',
|
|
104
105
|
children: [
|
|
105
106
|
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
106
107
|
justifyContent: "space-between",
|
|
108
|
+
gap: 2,
|
|
107
109
|
children: [
|
|
108
110
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
109
111
|
tag: "legend",
|
|
@@ -134,6 +136,7 @@ const FieldPicker = ({ headers = [], resetHeaders, setHeaders })=>{
|
|
|
134
136
|
background: isActive ? 'primary100' : 'transparent',
|
|
135
137
|
hasRadius: true,
|
|
136
138
|
padding: 2,
|
|
139
|
+
marginBottom: 1,
|
|
137
140
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
|
|
138
141
|
onCheckedChange: ()=>handleChange(header.name),
|
|
139
142
|
checked: isActive,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewSettingsMenu.js","sources":["../../../../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = [], resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex\n tag=\"fieldset\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={3}\n borderWidth={0}\n maxHeight={'240px'}\n overflow={'scroll'}\n >\n <Flex justifyContent=\"space-between\">\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n"],"names":["ViewSettingsMenu","props","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","query","useQueryParams","formatMessage","useIntl","allowedActions","canConfigureView","useRBAC","_jsxs","Popover","Root","_jsx","Trigger","IconButton","label","id","defaultMessage","Cog","Content","side","align","sideOffset","Flex","alignItems","direction","padding","gap","LinkButton","size","startIcon","ListPlus","variant","tag","NavLink","to","pathname","search","plugins","stringify","encode","FieldPicker","headers","resetHeaders","setHeaders","trackUsage","useTracking","locale","schema","model","useDoc","list","useDocumentLayout","formatter","useCollator","sensitivity","attributes","columns","Object","keys","filter","name","checkIfAttributeIsDisplayable","map","metadatas","sort","a","b","compare","handleChange","newHeaders","includes","header","handleReset","borderWidth","maxHeight","overflow","justifyContent","Typography","fontWeight","TextButton","onClick","isActive","wrap","background","hasRadius","Checkbox","onCheckedChange","checked","fontSize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ViewSettingsMenu.js","sources":["../../../../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = [], resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex\n tag=\"fieldset\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={1}\n borderWidth={0}\n maxHeight={'240px'}\n padding={1}\n overflow={'auto'}\n >\n <Flex justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n marginBottom={1}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n"],"names":["ViewSettingsMenu","props","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","query","useQueryParams","formatMessage","useIntl","allowedActions","canConfigureView","useRBAC","_jsxs","Popover","Root","_jsx","Trigger","IconButton","label","id","defaultMessage","Cog","Content","side","align","sideOffset","Flex","alignItems","direction","padding","gap","LinkButton","size","startIcon","ListPlus","variant","tag","NavLink","to","pathname","search","plugins","stringify","encode","FieldPicker","headers","resetHeaders","setHeaders","trackUsage","useTracking","locale","schema","model","useDoc","list","useDocumentLayout","formatter","useCollator","sensitivity","attributes","columns","Object","keys","filter","name","checkIfAttributeIsDisplayable","map","metadatas","sort","a","b","compare","handleChange","newHeaders","includes","header","handleReset","borderWidth","maxHeight","overflow","justifyContent","Typography","fontWeight","TextButton","onClick","isActive","wrap","background","hasRadius","marginBottom","Checkbox","onCheckedChange","checked","fontSize"],"mappings":"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"}
|
|
@@ -95,13 +95,15 @@ const FieldPicker = ({ headers = [], resetHeaders, setHeaders })=>{
|
|
|
95
95
|
tag: "fieldset",
|
|
96
96
|
direction: "column",
|
|
97
97
|
alignItems: "stretch",
|
|
98
|
-
gap:
|
|
98
|
+
gap: 1,
|
|
99
99
|
borderWidth: 0,
|
|
100
100
|
maxHeight: '240px',
|
|
101
|
-
|
|
101
|
+
padding: 1,
|
|
102
|
+
overflow: 'auto',
|
|
102
103
|
children: [
|
|
103
104
|
/*#__PURE__*/ jsxs(Flex, {
|
|
104
105
|
justifyContent: "space-between",
|
|
106
|
+
gap: 2,
|
|
105
107
|
children: [
|
|
106
108
|
/*#__PURE__*/ jsx(Typography, {
|
|
107
109
|
tag: "legend",
|
|
@@ -132,6 +134,7 @@ const FieldPicker = ({ headers = [], resetHeaders, setHeaders })=>{
|
|
|
132
134
|
background: isActive ? 'primary100' : 'transparent',
|
|
133
135
|
hasRadius: true,
|
|
134
136
|
padding: 2,
|
|
137
|
+
marginBottom: 1,
|
|
135
138
|
children: /*#__PURE__*/ jsx(Checkbox, {
|
|
136
139
|
onCheckedChange: ()=>handleChange(header.name),
|
|
137
140
|
checked: isActive,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewSettingsMenu.mjs","sources":["../../../../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = [], resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex\n tag=\"fieldset\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={3}\n borderWidth={0}\n maxHeight={'240px'}\n overflow={'scroll'}\n >\n <Flex justifyContent=\"space-between\">\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n"],"names":["ViewSettingsMenu","props","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","query","useQueryParams","formatMessage","useIntl","allowedActions","canConfigureView","useRBAC","_jsxs","Popover","Root","_jsx","Trigger","IconButton","label","id","defaultMessage","Cog","Content","side","align","sideOffset","Flex","alignItems","direction","padding","gap","LinkButton","size","startIcon","ListPlus","variant","tag","NavLink","to","pathname","search","plugins","stringify","encode","FieldPicker","headers","resetHeaders","setHeaders","trackUsage","useTracking","locale","schema","model","useDoc","list","useDocumentLayout","formatter","useCollator","sensitivity","attributes","columns","Object","keys","filter","name","checkIfAttributeIsDisplayable","map","metadatas","sort","a","b","compare","handleChange","newHeaders","includes","header","handleReset","borderWidth","maxHeight","overflow","justifyContent","Typography","fontWeight","TextButton","onClick","isActive","wrap","background","hasRadius","Checkbox","onCheckedChange","checked","fontSize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ViewSettingsMenu.mjs","sources":["../../../../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = [], resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex\n tag=\"fieldset\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={1}\n borderWidth={0}\n maxHeight={'240px'}\n padding={1}\n overflow={'auto'}\n >\n <Flex justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n marginBottom={1}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n"],"names":["ViewSettingsMenu","props","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","query","useQueryParams","formatMessage","useIntl","allowedActions","canConfigureView","useRBAC","_jsxs","Popover","Root","_jsx","Trigger","IconButton","label","id","defaultMessage","Cog","Content","side","align","sideOffset","Flex","alignItems","direction","padding","gap","LinkButton","size","startIcon","ListPlus","variant","tag","NavLink","to","pathname","search","plugins","stringify","encode","FieldPicker","headers","resetHeaders","setHeaders","trackUsage","useTracking","locale","schema","model","useDoc","list","useDocumentLayout","formatter","useCollator","sensitivity","attributes","columns","Object","keys","filter","name","checkIfAttributeIsDisplayable","map","metadatas","sort","a","b","compare","handleChange","newHeaders","includes","header","handleReset","borderWidth","maxHeight","overflow","justifyContent","Typography","fontWeight","TextButton","onClick","isActive","wrap","background","hasRadius","marginBottom","Checkbox","onCheckedChange","checked","fontSize"],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var reactIntl = require('react-intl');
|
|
8
|
+
var InputRenderer = require('../../pages/EditView/components/InputRenderer.js');
|
|
9
|
+
var Preview = require('../pages/Preview.js');
|
|
10
|
+
var constants = require('../utils/constants.js');
|
|
11
|
+
var fieldUtils = require('../utils/fieldUtils.js');
|
|
12
|
+
|
|
13
|
+
function _interopNamespaceDefault(e) {
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
31
|
+
|
|
32
|
+
const [InputPopoverProvider, useInputPopoverContext] = strapiAdmin.createContext('InputPopover');
|
|
33
|
+
function useHasInputPopoverParent() {
|
|
34
|
+
const context = useInputPopoverContext('useHasInputPopoverParent', ()=>true, false);
|
|
35
|
+
// useContext will return undefined if the called is not wrapped in the provider
|
|
36
|
+
return context !== undefined;
|
|
37
|
+
}
|
|
38
|
+
/* -------------------------------------------------------------------------------------------------
|
|
39
|
+
* InputPopover
|
|
40
|
+
* -----------------------------------------------------------------------------------------------*/ const InputPopover = ({ documentResponse })=>{
|
|
41
|
+
const iframeRef = Preview.usePreviewContext('InputPopover', (state)=>state.iframeRef);
|
|
42
|
+
const popoverField = Preview.usePreviewContext('InputPopover', (state)=>state.popoverField);
|
|
43
|
+
const setPopoverField = Preview.usePreviewContext('InputPopover', (state)=>state.setPopoverField);
|
|
44
|
+
const document = Preview.usePreviewContext('InputPopover', (state)=>state.document);
|
|
45
|
+
const schema = Preview.usePreviewContext('InputPopover', (state)=>state.schema);
|
|
46
|
+
const components = Preview.usePreviewContext('InputPopover', (state)=>state.components);
|
|
47
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
48
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
49
|
+
React__namespace.useEffect(()=>{
|
|
50
|
+
/**
|
|
51
|
+
* We receive window events sent from the user's preview via the injected script.
|
|
52
|
+
* We listen to the ones here that target a specific field.
|
|
53
|
+
*/ const handleMessage = (event)=>{
|
|
54
|
+
// Only listen to events from the preview iframe
|
|
55
|
+
if (iframeRef.current) {
|
|
56
|
+
const previewOrigin = new URL(iframeRef.current?.src).origin;
|
|
57
|
+
if (event.origin !== previewOrigin) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (event.data?.type === constants.INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {
|
|
62
|
+
const fieldMetaData = fieldUtils.parseFieldMetaData(event.data.payload.path);
|
|
63
|
+
if (!fieldMetaData) {
|
|
64
|
+
const { type, message } = constants.PREVIEW_ERROR_MESSAGES.INCOMPLETE_STRAPI_SOURCE;
|
|
65
|
+
toggleNotification({
|
|
66
|
+
type,
|
|
67
|
+
message: formatMessage(message)
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Ignore (for now) content that comes from separate API requests than the one for the
|
|
73
|
+
* current document. This doesn't do anything about fields that may come from relations to
|
|
74
|
+
* the current document however.
|
|
75
|
+
*/ if (fieldMetaData.documentId !== document.documentId) {
|
|
76
|
+
const { type, message } = constants.PREVIEW_ERROR_MESSAGES.DIFFERENT_DOCUMENT;
|
|
77
|
+
toggleNotification({
|
|
78
|
+
type,
|
|
79
|
+
message: formatMessage(message)
|
|
80
|
+
});
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const attribute = fieldUtils.getAttributeSchemaFromPath({
|
|
85
|
+
path: fieldMetaData.path,
|
|
86
|
+
components,
|
|
87
|
+
schema,
|
|
88
|
+
document
|
|
89
|
+
});
|
|
90
|
+
// We're able to handle the field, set it in context so the popover can pick it up
|
|
91
|
+
setPopoverField({
|
|
92
|
+
...fieldMetaData,
|
|
93
|
+
position: event.data.payload.position,
|
|
94
|
+
attribute
|
|
95
|
+
});
|
|
96
|
+
} catch (error) {
|
|
97
|
+
if (error instanceof fieldUtils.PreviewFieldError) {
|
|
98
|
+
const { type, message } = constants.PREVIEW_ERROR_MESSAGES[error.messageKey];
|
|
99
|
+
toggleNotification({
|
|
100
|
+
type,
|
|
101
|
+
message: formatMessage(message)
|
|
102
|
+
});
|
|
103
|
+
} else if (error instanceof Error) {
|
|
104
|
+
toggleNotification({
|
|
105
|
+
type: 'danger',
|
|
106
|
+
message: error.message
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (event.data?.type === constants.INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT) {
|
|
112
|
+
toggleNotification({
|
|
113
|
+
type: 'info',
|
|
114
|
+
message: formatMessage({
|
|
115
|
+
id: 'content-manager.preview.info.single-click-hint',
|
|
116
|
+
defaultMessage: 'Double click to edit'
|
|
117
|
+
})
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
window.addEventListener('message', handleMessage);
|
|
122
|
+
return ()=>{
|
|
123
|
+
window.removeEventListener('message', handleMessage);
|
|
124
|
+
};
|
|
125
|
+
}, [
|
|
126
|
+
components,
|
|
127
|
+
document,
|
|
128
|
+
iframeRef,
|
|
129
|
+
schema,
|
|
130
|
+
setPopoverField,
|
|
131
|
+
toggleNotification,
|
|
132
|
+
formatMessage
|
|
133
|
+
]);
|
|
134
|
+
if (!popoverField || !iframeRef.current) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
const iframeRect = iframeRef.current.getBoundingClientRect();
|
|
138
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
139
|
+
children: [
|
|
140
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
141
|
+
position: 'fixed',
|
|
142
|
+
top: iframeRect.top + 'px',
|
|
143
|
+
left: iframeRect.left + 'px',
|
|
144
|
+
width: iframeRect.width + 'px',
|
|
145
|
+
height: iframeRect.height + 'px',
|
|
146
|
+
zIndex: 4,
|
|
147
|
+
onClick: ()=>iframeRef.current?.focus()
|
|
148
|
+
}),
|
|
149
|
+
/*#__PURE__*/ jsxRuntime.jsx(InputPopoverProvider, {
|
|
150
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Popover.Root, {
|
|
151
|
+
open: true,
|
|
152
|
+
onOpenChange: (open)=>!open && setPopoverField(null),
|
|
153
|
+
children: [
|
|
154
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Trigger, {
|
|
155
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
156
|
+
position: "fixed",
|
|
157
|
+
width: popoverField.position.width + 'px',
|
|
158
|
+
height: popoverField.position.height + 'px',
|
|
159
|
+
top: 0,
|
|
160
|
+
left: 0,
|
|
161
|
+
transform: `translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`
|
|
162
|
+
})
|
|
163
|
+
}),
|
|
164
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
|
|
165
|
+
sideOffset: 4,
|
|
166
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
167
|
+
padding: 4,
|
|
168
|
+
width: "400px",
|
|
169
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(InputRenderer.InputRenderer, {
|
|
170
|
+
document: documentResponse,
|
|
171
|
+
attribute: popoverField.attribute,
|
|
172
|
+
// TODO: retrieve the proper label from the layout
|
|
173
|
+
label: popoverField.path,
|
|
174
|
+
name: popoverField.path,
|
|
175
|
+
type: popoverField.attribute.type,
|
|
176
|
+
visible: true
|
|
177
|
+
})
|
|
178
|
+
})
|
|
179
|
+
})
|
|
180
|
+
]
|
|
181
|
+
})
|
|
182
|
+
})
|
|
183
|
+
]
|
|
184
|
+
});
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
exports.InputPopover = InputPopover;
|
|
188
|
+
exports.useHasInputPopoverParent = useHasInputPopoverParent;
|
|
189
|
+
//# sourceMappingURL=InputPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputPopover.js","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, useNotification } from '@strapi/admin/strapi-admin';\nimport { Box, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES } from '../utils/constants';\nimport {\n parseFieldMetaData,\n getAttributeSchemaFromPath,\n PreviewFieldError,\n} from '../utils/fieldUtils';\n\n/* -------------------------------------------------------------------------------------------------\n * Context utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * No need for actual data in the context. It's just to let children check if they're rendered\n * inside of a preview InputPopover without relying on prop drilling.\n */\ninterface InputPopoverContextValue {}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n\n // useContext will return undefined if the called is not wrapped in the provider\n return context !== undefined;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * InputPopover\n * -----------------------------------------------------------------------------------------------*/\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('InputPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('InputPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext('InputPopover', (state) => state.setPopoverField);\n const document = usePreviewContext('InputPopover', (state) => state.document);\n const schema = usePreviewContext('InputPopover', (state) => state.schema);\n const components = usePreviewContext('InputPopover', (state) => state.components);\n\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n /**\n * We receive window events sent from the user's preview via the injected script.\n * We listen to the ones here that target a specific field.\n */\n const handleMessage = (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframeRef.current) {\n const previewOrigin = new URL(iframeRef.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {\n const fieldMetaData = parseFieldMetaData(event.data.payload.path);\n\n if (!fieldMetaData) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.INCOMPLETE_STRAPI_SOURCE;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n /**\n * Ignore (for now) content that comes from separate API requests than the one for the\n * current document. This doesn't do anything about fields that may come from relations to\n * the current document however.\n */\n if (fieldMetaData.documentId !== document.documentId) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.DIFFERENT_DOCUMENT;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n try {\n const attribute = getAttributeSchemaFromPath({\n path: fieldMetaData.path,\n components,\n schema,\n document,\n });\n\n // We're able to handle the field, set it in context so the popover can pick it up\n setPopoverField({ ...fieldMetaData, position: event.data.payload.position, attribute });\n } catch (error) {\n if (error instanceof PreviewFieldError) {\n const { type, message } = PREVIEW_ERROR_MESSAGES[error.messageKey];\n toggleNotification({ type, message: formatMessage(message) });\n } else if (error instanceof Error) {\n toggleNotification({ type: 'danger', message: error.message });\n }\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'content-manager.preview.info.single-click-hint',\n defaultMessage: 'Double click to edit',\n }),\n });\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [components, document, iframeRef, schema, setPopoverField, toggleNotification, formatMessage]);\n if (!popoverField || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n {/**\n * Overlay an empty div on top of the iframe while the popover is open so it can\n * intercept clicks. Without it, we wouldn't be able to close the popover by clicking outside,\n * because the click would be detected by the iframe window, not by the admin.\n **/}\n <Box\n position={'fixed'}\n top={iframeRect.top + 'px'}\n left={iframeRect.left + 'px'}\n width={iframeRect.width + 'px'}\n height={iframeRect.height + 'px'}\n zIndex={4}\n onClick={() => iframeRef.current?.focus()}\n />\n <InputPopoverProvider>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Box padding={4} width=\"400px\">\n {/* @ts-expect-error the types of `attribute` clash for some reason */}\n <InputRenderer\n document={documentResponse}\n attribute={popoverField.attribute}\n // TODO: retrieve the proper label from the layout\n label={popoverField.path}\n name={popoverField.path}\n type={popoverField.attribute.type}\n visible={true}\n />\n </Box>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nexport { InputPopover, useHasInputPopoverParent };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","useHasInputPopoverParent","context","undefined","InputPopover","documentResponse","iframeRef","usePreviewContext","state","popoverField","setPopoverField","document","schema","components","toggleNotification","useNotification","formatMessage","useIntl","React","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS_INTENT","fieldMetaData","parseFieldMetaData","payload","path","message","PREVIEW_ERROR_MESSAGES","INCOMPLETE_STRAPI_SOURCE","documentId","DIFFERENT_DOCUMENT","attribute","getAttributeSchemaFromPath","position","error","PreviewFieldError","messageKey","Error","STRAPI_FIELD_SINGLE_CLICK_HINT","id","defaultMessage","window","addEventListener","removeEventListener","iframeRect","getBoundingClientRect","_jsxs","_Fragment","_jsx","Box","top","left","width","height","zIndex","onClick","focus","Popover","Root","open","onOpenChange","Trigger","transform","Content","sideOffset","padding","InputRenderer","label","name","visible"],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { createContext, useNotification } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { Box, Popover } from '@strapi/design-system';
|
|
5
|
+
import { useIntl } from 'react-intl';
|
|
6
|
+
import { InputRenderer as MemoizedInputRenderer } from '../../pages/EditView/components/InputRenderer.mjs';
|
|
7
|
+
import { usePreviewContext } from '../pages/Preview.mjs';
|
|
8
|
+
import { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES } from '../utils/constants.mjs';
|
|
9
|
+
import { parseFieldMetaData, getAttributeSchemaFromPath, PreviewFieldError } from '../utils/fieldUtils.mjs';
|
|
10
|
+
|
|
11
|
+
const [InputPopoverProvider, useInputPopoverContext] = createContext('InputPopover');
|
|
12
|
+
function useHasInputPopoverParent() {
|
|
13
|
+
const context = useInputPopoverContext('useHasInputPopoverParent', ()=>true, false);
|
|
14
|
+
// useContext will return undefined if the called is not wrapped in the provider
|
|
15
|
+
return context !== undefined;
|
|
16
|
+
}
|
|
17
|
+
/* -------------------------------------------------------------------------------------------------
|
|
18
|
+
* InputPopover
|
|
19
|
+
* -----------------------------------------------------------------------------------------------*/ const InputPopover = ({ documentResponse })=>{
|
|
20
|
+
const iframeRef = usePreviewContext('InputPopover', (state)=>state.iframeRef);
|
|
21
|
+
const popoverField = usePreviewContext('InputPopover', (state)=>state.popoverField);
|
|
22
|
+
const setPopoverField = usePreviewContext('InputPopover', (state)=>state.setPopoverField);
|
|
23
|
+
const document = usePreviewContext('InputPopover', (state)=>state.document);
|
|
24
|
+
const schema = usePreviewContext('InputPopover', (state)=>state.schema);
|
|
25
|
+
const components = usePreviewContext('InputPopover', (state)=>state.components);
|
|
26
|
+
const { toggleNotification } = useNotification();
|
|
27
|
+
const { formatMessage } = useIntl();
|
|
28
|
+
React.useEffect(()=>{
|
|
29
|
+
/**
|
|
30
|
+
* We receive window events sent from the user's preview via the injected script.
|
|
31
|
+
* We listen to the ones here that target a specific field.
|
|
32
|
+
*/ const handleMessage = (event)=>{
|
|
33
|
+
// Only listen to events from the preview iframe
|
|
34
|
+
if (iframeRef.current) {
|
|
35
|
+
const previewOrigin = new URL(iframeRef.current?.src).origin;
|
|
36
|
+
if (event.origin !== previewOrigin) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {
|
|
41
|
+
const fieldMetaData = parseFieldMetaData(event.data.payload.path);
|
|
42
|
+
if (!fieldMetaData) {
|
|
43
|
+
const { type, message } = PREVIEW_ERROR_MESSAGES.INCOMPLETE_STRAPI_SOURCE;
|
|
44
|
+
toggleNotification({
|
|
45
|
+
type,
|
|
46
|
+
message: formatMessage(message)
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Ignore (for now) content that comes from separate API requests than the one for the
|
|
52
|
+
* current document. This doesn't do anything about fields that may come from relations to
|
|
53
|
+
* the current document however.
|
|
54
|
+
*/ if (fieldMetaData.documentId !== document.documentId) {
|
|
55
|
+
const { type, message } = PREVIEW_ERROR_MESSAGES.DIFFERENT_DOCUMENT;
|
|
56
|
+
toggleNotification({
|
|
57
|
+
type,
|
|
58
|
+
message: formatMessage(message)
|
|
59
|
+
});
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const attribute = getAttributeSchemaFromPath({
|
|
64
|
+
path: fieldMetaData.path,
|
|
65
|
+
components,
|
|
66
|
+
schema,
|
|
67
|
+
document
|
|
68
|
+
});
|
|
69
|
+
// We're able to handle the field, set it in context so the popover can pick it up
|
|
70
|
+
setPopoverField({
|
|
71
|
+
...fieldMetaData,
|
|
72
|
+
position: event.data.payload.position,
|
|
73
|
+
attribute
|
|
74
|
+
});
|
|
75
|
+
} catch (error) {
|
|
76
|
+
if (error instanceof PreviewFieldError) {
|
|
77
|
+
const { type, message } = PREVIEW_ERROR_MESSAGES[error.messageKey];
|
|
78
|
+
toggleNotification({
|
|
79
|
+
type,
|
|
80
|
+
message: formatMessage(message)
|
|
81
|
+
});
|
|
82
|
+
} else if (error instanceof Error) {
|
|
83
|
+
toggleNotification({
|
|
84
|
+
type: 'danger',
|
|
85
|
+
message: error.message
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT) {
|
|
91
|
+
toggleNotification({
|
|
92
|
+
type: 'info',
|
|
93
|
+
message: formatMessage({
|
|
94
|
+
id: 'content-manager.preview.info.single-click-hint',
|
|
95
|
+
defaultMessage: 'Double click to edit'
|
|
96
|
+
})
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
window.addEventListener('message', handleMessage);
|
|
101
|
+
return ()=>{
|
|
102
|
+
window.removeEventListener('message', handleMessage);
|
|
103
|
+
};
|
|
104
|
+
}, [
|
|
105
|
+
components,
|
|
106
|
+
document,
|
|
107
|
+
iframeRef,
|
|
108
|
+
schema,
|
|
109
|
+
setPopoverField,
|
|
110
|
+
toggleNotification,
|
|
111
|
+
formatMessage
|
|
112
|
+
]);
|
|
113
|
+
if (!popoverField || !iframeRef.current) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const iframeRect = iframeRef.current.getBoundingClientRect();
|
|
117
|
+
return /*#__PURE__*/ jsxs(Fragment, {
|
|
118
|
+
children: [
|
|
119
|
+
/*#__PURE__*/ jsx(Box, {
|
|
120
|
+
position: 'fixed',
|
|
121
|
+
top: iframeRect.top + 'px',
|
|
122
|
+
left: iframeRect.left + 'px',
|
|
123
|
+
width: iframeRect.width + 'px',
|
|
124
|
+
height: iframeRect.height + 'px',
|
|
125
|
+
zIndex: 4,
|
|
126
|
+
onClick: ()=>iframeRef.current?.focus()
|
|
127
|
+
}),
|
|
128
|
+
/*#__PURE__*/ jsx(InputPopoverProvider, {
|
|
129
|
+
children: /*#__PURE__*/ jsxs(Popover.Root, {
|
|
130
|
+
open: true,
|
|
131
|
+
onOpenChange: (open)=>!open && setPopoverField(null),
|
|
132
|
+
children: [
|
|
133
|
+
/*#__PURE__*/ jsx(Popover.Trigger, {
|
|
134
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
135
|
+
position: "fixed",
|
|
136
|
+
width: popoverField.position.width + 'px',
|
|
137
|
+
height: popoverField.position.height + 'px',
|
|
138
|
+
top: 0,
|
|
139
|
+
left: 0,
|
|
140
|
+
transform: `translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`
|
|
141
|
+
})
|
|
142
|
+
}),
|
|
143
|
+
/*#__PURE__*/ jsx(Popover.Content, {
|
|
144
|
+
sideOffset: 4,
|
|
145
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
146
|
+
padding: 4,
|
|
147
|
+
width: "400px",
|
|
148
|
+
children: /*#__PURE__*/ jsx(MemoizedInputRenderer, {
|
|
149
|
+
document: documentResponse,
|
|
150
|
+
attribute: popoverField.attribute,
|
|
151
|
+
// TODO: retrieve the proper label from the layout
|
|
152
|
+
label: popoverField.path,
|
|
153
|
+
name: popoverField.path,
|
|
154
|
+
type: popoverField.attribute.type,
|
|
155
|
+
visible: true
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
})
|
|
159
|
+
]
|
|
160
|
+
})
|
|
161
|
+
})
|
|
162
|
+
]
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export { InputPopover, useHasInputPopoverParent };
|
|
167
|
+
//# sourceMappingURL=InputPopover.mjs.map
|