@strapi/content-manager 0.0.0-next.318e33b8c2c2d8af588acb73383750664a9336e3 → 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 +90 -48
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +92 -50
- 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 +22 -6
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +22 -6
- 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 +7 -3
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +8 -4
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +11 -3
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +11 -3
- 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 +25 -20
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +25 -20
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +1 -1
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +1 -1
- 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 +0 -2
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +0 -2
- 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 +130 -14
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/components/InputPopover.mjs +112 -15
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
- 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 +18 -8
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +18 -8
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +12 -10
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +14 -12
- 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 +34 -0
- package/dist/admin/preview/utils/constants.js.map +1 -1
- package/dist/admin/preview/utils/constants.mjs +34 -1
- package/dist/admin/preview/utils/constants.mjs.map +1 -1
- 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/previewScript.js +134 -50
- package/dist/admin/preview/utils/previewScript.js.map +1 -1
- package/dist/admin/preview/utils/previewScript.mjs +134 -50
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
- 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 -3
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +19 -3
- 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/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/ListView/components/TableCells/Relations.d.ts +0 -3
- package/dist/admin/src/preview/components/InputPopover.d.ts +1 -1
- package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +2 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +6 -2
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +35 -0
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
- package/dist/admin/src/preview/utils/previewScript.d.ts +1 -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 +5 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +5 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +1 -1
- package/dist/admin/translations/fr.json.mjs +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 +2 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +2 -1
- 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":"VersionHeader.js","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VersionHeader.js","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button fullWidth variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","fullWidth","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionHeader.mjs","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VersionHeader.mjs","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button fullWidth variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","fullWidth","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionInputRenderer.js","sources":["../../../../admin/src/history/components/VersionInputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n Form,\n} from '@strapi/admin/strapi-admin';\nimport { Alert, Box, Field, Flex, Link, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { HistoryVersionDataResponse } from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport { useDocLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { BlocksInput } from '../../pages/EditView/components/FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from '../../pages/EditView/components/FormInputs/Component/Input';\nimport {\n DynamicZone,\n useDynamicZone,\n} from '../../pages/EditView/components/FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from '../../pages/EditView/components/FormInputs/NotAllowed';\nimport { UIDInput } from '../../pages/EditView/components/FormInputs/UID';\nimport { Wysiwyg } from '../../pages/EditView/components/FormInputs/Wysiwyg/Field';\nimport { useFieldHint } from '../../pages/EditView/components/InputRenderer';\nimport { getRelationLabel } from '../../utils/relations';\nimport { useHistoryContext } from '../pages/History';\n\nimport { getRemaingFieldsLayout } from './VersionContent';\n\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { RelationsFieldProps } from '../../pages/EditView/components/FormInputs/Relations/Relations';\nimport type { RelationResult } from '../../services/relations';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\nconst StyledAlert = styled(Alert).attrs({ closeLabel: 'Close', onClose: () => {}, shadow: 'none' })`\n button {\n display: none;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * CustomRelationInput\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 CustomRelationInput = (props: RelationsFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<\n { results: RelationResult[]; meta: { missingCount: number } } | RelationResult[]\n >(props.name);\n\n /**\n * Ideally the server would return the correct shape, however, for admin user relations\n * it sanitizes everything out when it finds an object for the relation value.\n */\n let formattedFieldValue;\n if (field) {\n formattedFieldValue = Array.isArray(field.value)\n ? { results: field.value, meta: { missingCount: 0 } }\n : field.value;\n }\n\n if (\n !formattedFieldValue ||\n (formattedFieldValue.results.length === 0 && formattedFieldValue.meta.missingCount === 0)\n ) {\n return (\n <>\n <Field.Label action={props.labelAction}>{props.label}</Field.Label>\n <Box marginTop={1}>\n {/* @ts-expect-error – we dont need closeLabel */}\n <StyledAlert variant=\"default\">\n {formatMessage({\n id: 'content-manager.history.content.no-relations',\n defaultMessage: 'No relations.',\n })}\n </StyledAlert>\n </Box>\n </>\n );\n }\n\n const { results, meta } = formattedFieldValue;\n\n return (\n <Box>\n <Field.Label>{props.label}</Field.Label>\n {results.length > 0 && (\n <Flex direction=\"column\" gap={2} marginTop={1} alignItems=\"stretch\">\n {results.map((relationData) => {\n // @ts-expect-error - targetModel does exist on the attribute. But it's not typed.\n const { targetModel } = props.attribute;\n const href = `../${COLLECTION_TYPES}/${targetModel}/${relationData.documentId}`;\n const label = getRelationLabel(relationData, props.mainField);\n const isAdminUserRelation = targetModel === 'admin::user';\n\n return (\n <Flex\n key={relationData.documentId ?? relationData.id}\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background=\"neutral150\"\n justifyContent=\"space-between\"\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip label={label}>\n {isAdminUserRelation ? (\n <Typography>{label}</Typography>\n ) : (\n <LinkEllipsis tag={NavLink} to={href}>\n {label}\n </LinkEllipsis>\n )}\n </Tooltip>\n </Box>\n <DocumentStatus status={relationData.status as string} />\n </Flex>\n );\n })}\n </Flex>\n )}\n {meta.missingCount > 0 && (\n /* @ts-expect-error – we dont need closeLabel */\n <StyledAlert\n marginTop={1}\n variant=\"warning\"\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.title',\n defaultMessage:\n '{number, plural, =1 {Missing relation} other {{number} missing relations}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CustomMediaInput\n * -----------------------------------------------------------------------------------------------*/\n\n// Create an object with value at key path (i.e. 'a.b.c')\nconst createInitialValuesForPath = (keyPath: string, value: any) => {\n const keys = keyPath.split('.');\n // The root level object\n const root: Record<string, any> = {};\n\n // Make the first node the root\n let node = root;\n keys.forEach((key, index) => {\n // Skip prototype pollution keys\n if (key === '__proto__' || key === 'constructor') return;\n // If it's the last key, set the node value\n if (index === keys.length - 1) {\n node[key] = value;\n } else {\n // Ensure the key exists and is an object\n node[key] = node[key] || {};\n }\n\n // Traverse down the tree\n node = node[key];\n });\n\n return root;\n};\n\nconst CustomMediaInput = (props: VersionInputRendererProps) => {\n const { value } = useField(props.name);\n const results = value?.results ?? [];\n const meta = value?.meta ?? { missingCount: 0 };\n\n const { formatMessage } = useIntl();\n\n const fields = useStrapiApp('CustomMediaInput', (state) => state.fields);\n const MediaLibrary = fields.media as React.ComponentType<\n VersionInputRendererProps & { multiple: boolean }\n >;\n\n return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\">\n <Form\n method=\"PUT\"\n disabled={true}\n initialValues={createInitialValuesForPath(props.name, results)}\n >\n <MediaLibrary {...props} disabled={true} multiple={results.length > 1} />\n </Form>\n {meta.missingCount > 0 && (\n <StyledAlert\n variant=\"warning\"\n closeLabel=\"Close\"\n onClose={() => {}}\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.title',\n defaultMessage:\n '{number, plural, =1 {Missing asset} other {{number} missing assets}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted in the Media Library and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Flex>\n );\n};\n\ntype VersionInputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n /**\n * In the context of content history, deleted fields need to ignore RBAC\n * @default false\n */\n shouldIgnoreRBAC?: boolean;\n};\n\n/**\n * Checks if the i18n plugin added a label action to the field and modifies it\n * to adapt the wording for the history page.\n */\nconst getLabelAction = (labelAction: VersionInputRendererProps['labelAction']) => {\n if (!React.isValidElement(labelAction)) {\n return labelAction;\n }\n\n // TODO: find a better way to do this rather than access internals\n const labelActionTitleId = labelAction.props.title.id;\n\n if (labelActionTitleId === 'i18n.Field.localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.localized',\n defaultMessage:\n 'This value is specific to this locale. If you restore this version, the content will not be replaced for other locales.',\n },\n });\n }\n\n if (labelActionTitleId === 'i18n.Field.not-localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.not-localized',\n defaultMessage:\n 'This value is common to all locales. If you restore this version and save the changes, the content will be replaced for all locales.',\n },\n });\n }\n\n // Label action is unrelated to i18n, don't touch it.\n return labelAction;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed specifically\n * to be used on the History page in the content-manager. It understands how to render specific\n * inputs within the context of a history version (i.e. relations, media, ignored RBAC, etc...)\n */\nconst VersionInputRenderer = ({\n visible,\n hint: providedHint,\n shouldIgnoreRBAC = false,\n labelAction,\n ...props\n}: VersionInputRendererProps) => {\n const customLabelAction = getLabelAction(labelAction);\n\n const { formatMessage } = useIntl();\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const fieldSizes = useTypedSelector((state) => state['content-manager'].app.fieldSizes);\n\n const { id, components } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n const editableFields = id ? canUpdateFields : canCreateFields;\n const readableFields = id ? canReadFields : canCreateFields;\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components: componentsLayout },\n } = useDocLayout();\n\n if (!visible) {\n return null;\n }\n\n /**\n * Don't render the field if the user can't read it.\n */\n if (!shouldIgnoreRBAC && !canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Attributes found on the current content-type schema cannot be restored. We handle\n * this by displaying a warning alert to the user instead of the input for that field type.\n */\n const addedAttributes = version.meta.unknownAttributes.added;\n if (Object.keys(addedAttributes).includes(props.name)) {\n return (\n <Flex direction=\"column\" alignItems=\"flex-start\" gap={1}>\n <Field.Label>{props.label}</Field.Label>\n <StyledAlert\n width=\"100%\"\n closeLabel=\"Close\"\n onClose={() => {}}\n variant=\"warning\"\n title={formatMessage({\n id: 'content-manager.history.content.new-field.title',\n defaultMessage: 'New field',\n })}\n >\n {formatMessage({\n id: 'content-manager.history.content.new-field.message',\n defaultMessage:\n \"This field didn't exist when this version was saved. If you restore this version, it will be empty.\",\n })}\n </StyledAlert>\n </Flex>\n );\n }\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * Since media fields use a custom input via the upload plugin provided by the useLibrary hook,\n * we need to handle the them before other custom inputs coming from the useLibrary hook.\n */\n if (props.type === 'media') {\n return (\n <CustomMediaInput {...props} labelAction={customLabelAction} disabled={fieldIsDisabled} />\n );\n }\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n const { layout } = componentsLayout[props.attribute.component];\n // Components can only have one panel, so only save the first layout item\n const [remainingFieldsLayout] = getRemaingFieldsLayout({\n layout: [layout],\n metadatas: configuration.components[props.attribute.component].metadatas,\n fieldSizes,\n schemaAttributes: components[props.attribute.component].attributes,\n });\n\n return (\n <ComponentInput\n {...props}\n layout={[...layout, ...(remainingFieldsLayout || [])]}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </DynamicZone>\n );\n case 'relation':\n return (\n <CustomRelationInput\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nexport type { VersionInputRendererProps };\nexport { VersionInputRenderer };\n"],"names":["StyledAlert","styled","Alert","attrs","closeLabel","onClose","shadow","LinkEllipsis","Link","CustomRelationInput","props","formatMessage","useIntl","field","useField","name","formattedFieldValue","Array","isArray","value","results","meta","missingCount","length","_jsxs","_Fragment","_jsx","Field","Label","action","labelAction","label","Box","marginTop","variant","id","defaultMessage","Flex","direction","gap","alignItems","map","relationData","targetModel","attribute","href","COLLECTION_TYPES","documentId","getRelationLabel","mainField","isAdminUserRelation","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","justifyContent","minWidth","Tooltip","Typography","tag","NavLink","to","DocumentStatus","status","title","number","createInitialValuesForPath","keyPath","keys","split","root","node","forEach","key","index","CustomMediaInput","fields","useStrapiApp","state","MediaLibrary","media","Form","method","disabled","initialValues","multiple","getLabelAction","React","isValidElement","labelActionTitleId","cloneElement","VersionInputRenderer","visible","hint","providedHint","shouldIgnoreRBAC","customLabelAction","version","useHistoryContext","selectedVersion","configuration","fieldSizes","useTypedSelector","app","components","useDoc","isFormDisabled","useForm","isInDynamicZone","useDynamicZone","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","editableFields","readableFields","canUserReadField","type","canUserEditField","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","edit","componentsLayout","useDocLayout","NotAllowedInput","fieldIsDisabled","addedAttributes","unknownAttributes","added","Object","includes","width","CustomInput","FormInputRenderer","addedInputTypes","BlocksInput","layout","component","remainingFieldsLayout","getRemaingFieldsLayout","metadatas","schemaAttributes","attributes","ComponentInput","inputProps","DynamicZone","Wysiwyg","UIDInput","options","enum","unique","_unique","_mainField","restProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VersionInputRenderer.js","sources":["../../../../admin/src/history/components/VersionInputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n Form,\n} from '@strapi/admin/strapi-admin';\nimport { Alert, Box, Field, Flex, Link, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { HistoryVersionDataResponse } from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport { useDocLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { BlocksInput } from '../../pages/EditView/components/FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from '../../pages/EditView/components/FormInputs/Component/Input';\nimport {\n DynamicZone,\n useDynamicZone,\n} from '../../pages/EditView/components/FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from '../../pages/EditView/components/FormInputs/NotAllowed';\nimport { UIDInput } from '../../pages/EditView/components/FormInputs/UID';\nimport { Wysiwyg } from '../../pages/EditView/components/FormInputs/Wysiwyg/Field';\nimport { useFieldHint } from '../../pages/EditView/components/InputRenderer';\nimport { getRelationLabel } from '../../utils/relations';\nimport { useHistoryContext } from '../pages/History';\n\nimport { getRemaingFieldsLayout } from './VersionContent';\n\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { RelationsFieldProps } from '../../pages/EditView/components/FormInputs/Relations/Relations';\nimport type { RelationResult } from '../../services/relations';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\nconst StyledAlert = styled(Alert).attrs({ closeLabel: 'Close', onClose: () => {}, shadow: 'none' })`\n button {\n display: none;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * CustomRelationInput\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 CustomRelationInput = (props: RelationsFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<\n { results: RelationResult[]; meta: { missingCount: number } } | RelationResult[]\n >(props.name);\n\n /**\n * Ideally the server would return the correct shape, however, for admin user relations\n * it sanitizes everything out when it finds an object for the relation value.\n */\n let formattedFieldValue;\n if (field) {\n formattedFieldValue = Array.isArray(field.value)\n ? { results: field.value, meta: { missingCount: 0 } }\n : field.value;\n }\n\n if (\n !formattedFieldValue ||\n (formattedFieldValue.results.length === 0 && formattedFieldValue.meta.missingCount === 0)\n ) {\n return (\n <>\n <Field.Label action={props.labelAction}>{props.label}</Field.Label>\n <Box marginTop={1}>\n {/* @ts-expect-error – we dont need closeLabel */}\n <StyledAlert variant=\"default\">\n {formatMessage({\n id: 'content-manager.history.content.no-relations',\n defaultMessage: 'No relations.',\n })}\n </StyledAlert>\n </Box>\n </>\n );\n }\n\n const { results, meta } = formattedFieldValue;\n\n return (\n <Box>\n <Field.Label>{props.label}</Field.Label>\n {results.length > 0 && (\n <Flex direction=\"column\" gap={2} marginTop={1} alignItems=\"stretch\">\n {results.map((relationData) => {\n // @ts-expect-error - targetModel does exist on the attribute. But it's not typed.\n const { targetModel } = props.attribute;\n const href = `../${COLLECTION_TYPES}/${targetModel}/${relationData.documentId}`;\n const label = getRelationLabel(relationData, props.mainField);\n const isAdminUserRelation = targetModel === 'admin::user';\n\n return (\n <Flex\n key={relationData.documentId ?? relationData.id}\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background=\"neutral150\"\n justifyContent=\"space-between\"\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip label={label}>\n {isAdminUserRelation ? (\n <Typography>{label}</Typography>\n ) : (\n <LinkEllipsis tag={NavLink} to={href}>\n {label}\n </LinkEllipsis>\n )}\n </Tooltip>\n </Box>\n <DocumentStatus status={relationData.status as string} />\n </Flex>\n );\n })}\n </Flex>\n )}\n {meta.missingCount > 0 && (\n /* @ts-expect-error – we dont need closeLabel */\n <StyledAlert\n marginTop={1}\n variant=\"warning\"\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.title',\n defaultMessage:\n '{number, plural, =1 {Missing relation} other {{number} missing relations}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CustomMediaInput\n * -----------------------------------------------------------------------------------------------*/\n\n// Create an object with value at key path (i.e. 'a.b.c')\nconst createInitialValuesForPath = (keyPath: string, value: any) => {\n const keys = keyPath.split('.');\n // The root level object\n const root: Record<string, any> = {};\n\n // Make the first node the root\n let node = root;\n keys.forEach((key, index) => {\n // Skip prototype pollution keys\n if (key === '__proto__' || key === 'constructor') return;\n // If it's the last key, set the node value\n if (index === keys.length - 1) {\n node[key] = value;\n } else {\n // Ensure the key exists and is an object\n node[key] = node[key] || {};\n }\n\n // Traverse down the tree\n node = node[key];\n });\n\n return root;\n};\n\nconst CustomMediaInput = (props: VersionInputRendererProps) => {\n const { value } = useField(props.name);\n const results = value?.results ?? [];\n const meta = value?.meta ?? { missingCount: 0 };\n\n const { formatMessage } = useIntl();\n\n const fields = useStrapiApp('CustomMediaInput', (state) => state.fields);\n const MediaLibrary = fields.media as React.ComponentType<\n VersionInputRendererProps & { multiple: boolean }\n >;\n\n return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\">\n <Form\n method=\"PUT\"\n disabled={true}\n initialValues={createInitialValuesForPath(props.name, results)}\n >\n <MediaLibrary {...props} disabled={true} multiple={results.length > 1} />\n </Form>\n {meta.missingCount > 0 && (\n <StyledAlert\n variant=\"warning\"\n closeLabel=\"Close\"\n onClose={() => {}}\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.title',\n defaultMessage:\n '{number, plural, =1 {Missing asset} other {{number} missing assets}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted in the Media Library and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Flex>\n );\n};\n\ntype VersionInputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n /**\n * In the context of content history, deleted fields need to ignore RBAC\n * @default false\n */\n shouldIgnoreRBAC?: boolean;\n};\n\n/**\n * Checks if the i18n plugin added a label action to the field and modifies it\n * to adapt the wording for the history page.\n */\nconst getLabelAction = (labelAction: VersionInputRendererProps['labelAction']) => {\n if (!React.isValidElement(labelAction)) {\n return labelAction;\n }\n\n // TODO: find a better way to do this rather than access internals\n const labelActionTitleId = labelAction.props.title.id;\n\n if (labelActionTitleId === 'i18n.Field.localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.localized',\n defaultMessage:\n 'This value is specific to this locale. If you restore this version, the content will not be replaced for other locales.',\n },\n });\n }\n\n if (labelActionTitleId === 'i18n.Field.not-localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.not-localized',\n defaultMessage:\n 'This value is common to all locales. If you restore this version and save the changes, the content will be replaced for all locales.',\n },\n });\n }\n\n // Label action is unrelated to i18n, don't touch it.\n return labelAction;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed specifically\n * to be used on the History page in the content-manager. It understands how to render specific\n * inputs within the context of a history version (i.e. relations, media, ignored RBAC, etc...)\n */\nconst VersionInputRenderer = ({\n visible,\n hint: providedHint,\n shouldIgnoreRBAC = false,\n labelAction,\n ...props\n}: VersionInputRendererProps) => {\n const customLabelAction = getLabelAction(labelAction);\n\n const { formatMessage } = useIntl();\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const fieldSizes = useTypedSelector((state) => state['content-manager'].app.fieldSizes);\n\n const { id, components } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n const editableFields = id ? canUpdateFields : canCreateFields;\n const readableFields = id ? canReadFields : canCreateFields;\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components: componentsLayout },\n } = useDocLayout();\n\n if (!visible) {\n return null;\n }\n\n /**\n * Don't render the field if the user can't read it.\n */\n if (!shouldIgnoreRBAC && !canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Attributes found on the current content-type schema cannot be restored. We handle\n * this by displaying a warning alert to the user instead of the input for that field type.\n */\n const addedAttributes = version.meta.unknownAttributes.added;\n if (Object.keys(addedAttributes).includes(props.name)) {\n return (\n <Flex direction=\"column\" alignItems=\"flex-start\" gap={1}>\n <Field.Label>{props.label}</Field.Label>\n <StyledAlert\n width=\"100%\"\n closeLabel=\"Close\"\n onClose={() => {}}\n variant=\"warning\"\n title={formatMessage({\n id: 'content-manager.history.content.new-field.title',\n defaultMessage: 'New field',\n })}\n >\n {formatMessage({\n id: 'content-manager.history.content.new-field.message',\n defaultMessage:\n \"This field didn't exist when this version was saved. If you restore this version, it will be empty.\",\n })}\n </StyledAlert>\n </Flex>\n );\n }\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * Since media fields use a custom input via the upload plugin provided by the useLibrary hook,\n * we need to handle the them before other custom inputs coming from the useLibrary hook.\n */\n if (props.type === 'media') {\n return (\n <CustomMediaInput {...props} labelAction={customLabelAction} disabled={fieldIsDisabled} />\n );\n }\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n const { layout } = componentsLayout[props.attribute.component];\n // Components can only have one panel, so only save the first layout item\n const [remainingFieldsLayout] = getRemaingFieldsLayout({\n layout: [layout],\n metadatas: configuration.components[props.attribute.component].metadatas,\n fieldSizes,\n schemaAttributes: components[props.attribute.component].attributes,\n });\n\n return (\n <ComponentInput\n {...props}\n layout={[...layout, ...(remainingFieldsLayout || [])]}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </DynamicZone>\n );\n case 'relation':\n return (\n <CustomRelationInput\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nexport type { VersionInputRendererProps };\nexport { VersionInputRenderer };\n"],"names":["StyledAlert","styled","Alert","attrs","closeLabel","onClose","shadow","LinkEllipsis","Link","CustomRelationInput","props","formatMessage","useIntl","field","useField","name","formattedFieldValue","Array","isArray","value","results","meta","missingCount","length","_jsxs","_Fragment","_jsx","Field","Label","action","labelAction","label","Box","marginTop","variant","id","defaultMessage","Flex","direction","gap","alignItems","map","relationData","targetModel","attribute","href","COLLECTION_TYPES","documentId","getRelationLabel","mainField","isAdminUserRelation","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","justifyContent","minWidth","Tooltip","Typography","tag","NavLink","to","DocumentStatus","status","title","number","createInitialValuesForPath","keyPath","keys","split","root","node","forEach","key","index","CustomMediaInput","fields","useStrapiApp","state","MediaLibrary","media","Form","method","disabled","initialValues","multiple","getLabelAction","React","isValidElement","labelActionTitleId","cloneElement","VersionInputRenderer","visible","hint","providedHint","shouldIgnoreRBAC","customLabelAction","version","useHistoryContext","selectedVersion","configuration","fieldSizes","useTypedSelector","app","components","useDoc","isFormDisabled","useForm","isInDynamicZone","useDynamicZone","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","editableFields","readableFields","canUserReadField","type","canUserEditField","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","edit","componentsLayout","useDocLayout","NotAllowedInput","fieldIsDisabled","addedAttributes","unknownAttributes","added","Object","includes","width","CustomInput","FormInputRenderer","addedInputTypes","BlocksInput","layout","component","remainingFieldsLayout","getRemaingFieldsLayout","metadatas","schemaAttributes","attributes","ComponentInput","inputProps","DynamicZone","Wysiwyg","UIDInput","options","enum","unique","_unique","_mainField","restProps"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionInputRenderer.mjs","sources":["../../../../admin/src/history/components/VersionInputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n Form,\n} from '@strapi/admin/strapi-admin';\nimport { Alert, Box, Field, Flex, Link, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { HistoryVersionDataResponse } from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport { useDocLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { BlocksInput } from '../../pages/EditView/components/FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from '../../pages/EditView/components/FormInputs/Component/Input';\nimport {\n DynamicZone,\n useDynamicZone,\n} from '../../pages/EditView/components/FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from '../../pages/EditView/components/FormInputs/NotAllowed';\nimport { UIDInput } from '../../pages/EditView/components/FormInputs/UID';\nimport { Wysiwyg } from '../../pages/EditView/components/FormInputs/Wysiwyg/Field';\nimport { useFieldHint } from '../../pages/EditView/components/InputRenderer';\nimport { getRelationLabel } from '../../utils/relations';\nimport { useHistoryContext } from '../pages/History';\n\nimport { getRemaingFieldsLayout } from './VersionContent';\n\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { RelationsFieldProps } from '../../pages/EditView/components/FormInputs/Relations/Relations';\nimport type { RelationResult } from '../../services/relations';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\nconst StyledAlert = styled(Alert).attrs({ closeLabel: 'Close', onClose: () => {}, shadow: 'none' })`\n button {\n display: none;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * CustomRelationInput\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 CustomRelationInput = (props: RelationsFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<\n { results: RelationResult[]; meta: { missingCount: number } } | RelationResult[]\n >(props.name);\n\n /**\n * Ideally the server would return the correct shape, however, for admin user relations\n * it sanitizes everything out when it finds an object for the relation value.\n */\n let formattedFieldValue;\n if (field) {\n formattedFieldValue = Array.isArray(field.value)\n ? { results: field.value, meta: { missingCount: 0 } }\n : field.value;\n }\n\n if (\n !formattedFieldValue ||\n (formattedFieldValue.results.length === 0 && formattedFieldValue.meta.missingCount === 0)\n ) {\n return (\n <>\n <Field.Label action={props.labelAction}>{props.label}</Field.Label>\n <Box marginTop={1}>\n {/* @ts-expect-error – we dont need closeLabel */}\n <StyledAlert variant=\"default\">\n {formatMessage({\n id: 'content-manager.history.content.no-relations',\n defaultMessage: 'No relations.',\n })}\n </StyledAlert>\n </Box>\n </>\n );\n }\n\n const { results, meta } = formattedFieldValue;\n\n return (\n <Box>\n <Field.Label>{props.label}</Field.Label>\n {results.length > 0 && (\n <Flex direction=\"column\" gap={2} marginTop={1} alignItems=\"stretch\">\n {results.map((relationData) => {\n // @ts-expect-error - targetModel does exist on the attribute. But it's not typed.\n const { targetModel } = props.attribute;\n const href = `../${COLLECTION_TYPES}/${targetModel}/${relationData.documentId}`;\n const label = getRelationLabel(relationData, props.mainField);\n const isAdminUserRelation = targetModel === 'admin::user';\n\n return (\n <Flex\n key={relationData.documentId ?? relationData.id}\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background=\"neutral150\"\n justifyContent=\"space-between\"\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip label={label}>\n {isAdminUserRelation ? (\n <Typography>{label}</Typography>\n ) : (\n <LinkEllipsis tag={NavLink} to={href}>\n {label}\n </LinkEllipsis>\n )}\n </Tooltip>\n </Box>\n <DocumentStatus status={relationData.status as string} />\n </Flex>\n );\n })}\n </Flex>\n )}\n {meta.missingCount > 0 && (\n /* @ts-expect-error – we dont need closeLabel */\n <StyledAlert\n marginTop={1}\n variant=\"warning\"\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.title',\n defaultMessage:\n '{number, plural, =1 {Missing relation} other {{number} missing relations}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CustomMediaInput\n * -----------------------------------------------------------------------------------------------*/\n\n// Create an object with value at key path (i.e. 'a.b.c')\nconst createInitialValuesForPath = (keyPath: string, value: any) => {\n const keys = keyPath.split('.');\n // The root level object\n const root: Record<string, any> = {};\n\n // Make the first node the root\n let node = root;\n keys.forEach((key, index) => {\n // Skip prototype pollution keys\n if (key === '__proto__' || key === 'constructor') return;\n // If it's the last key, set the node value\n if (index === keys.length - 1) {\n node[key] = value;\n } else {\n // Ensure the key exists and is an object\n node[key] = node[key] || {};\n }\n\n // Traverse down the tree\n node = node[key];\n });\n\n return root;\n};\n\nconst CustomMediaInput = (props: VersionInputRendererProps) => {\n const { value } = useField(props.name);\n const results = value?.results ?? [];\n const meta = value?.meta ?? { missingCount: 0 };\n\n const { formatMessage } = useIntl();\n\n const fields = useStrapiApp('CustomMediaInput', (state) => state.fields);\n const MediaLibrary = fields.media as React.ComponentType<\n VersionInputRendererProps & { multiple: boolean }\n >;\n\n return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\">\n <Form\n method=\"PUT\"\n disabled={true}\n initialValues={createInitialValuesForPath(props.name, results)}\n >\n <MediaLibrary {...props} disabled={true} multiple={results.length > 1} />\n </Form>\n {meta.missingCount > 0 && (\n <StyledAlert\n variant=\"warning\"\n closeLabel=\"Close\"\n onClose={() => {}}\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.title',\n defaultMessage:\n '{number, plural, =1 {Missing asset} other {{number} missing assets}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted in the Media Library and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Flex>\n );\n};\n\ntype VersionInputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n /**\n * In the context of content history, deleted fields need to ignore RBAC\n * @default false\n */\n shouldIgnoreRBAC?: boolean;\n};\n\n/**\n * Checks if the i18n plugin added a label action to the field and modifies it\n * to adapt the wording for the history page.\n */\nconst getLabelAction = (labelAction: VersionInputRendererProps['labelAction']) => {\n if (!React.isValidElement(labelAction)) {\n return labelAction;\n }\n\n // TODO: find a better way to do this rather than access internals\n const labelActionTitleId = labelAction.props.title.id;\n\n if (labelActionTitleId === 'i18n.Field.localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.localized',\n defaultMessage:\n 'This value is specific to this locale. If you restore this version, the content will not be replaced for other locales.',\n },\n });\n }\n\n if (labelActionTitleId === 'i18n.Field.not-localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.not-localized',\n defaultMessage:\n 'This value is common to all locales. If you restore this version and save the changes, the content will be replaced for all locales.',\n },\n });\n }\n\n // Label action is unrelated to i18n, don't touch it.\n return labelAction;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed specifically\n * to be used on the History page in the content-manager. It understands how to render specific\n * inputs within the context of a history version (i.e. relations, media, ignored RBAC, etc...)\n */\nconst VersionInputRenderer = ({\n visible,\n hint: providedHint,\n shouldIgnoreRBAC = false,\n labelAction,\n ...props\n}: VersionInputRendererProps) => {\n const customLabelAction = getLabelAction(labelAction);\n\n const { formatMessage } = useIntl();\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const fieldSizes = useTypedSelector((state) => state['content-manager'].app.fieldSizes);\n\n const { id, components } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n const editableFields = id ? canUpdateFields : canCreateFields;\n const readableFields = id ? canReadFields : canCreateFields;\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components: componentsLayout },\n } = useDocLayout();\n\n if (!visible) {\n return null;\n }\n\n /**\n * Don't render the field if the user can't read it.\n */\n if (!shouldIgnoreRBAC && !canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Attributes found on the current content-type schema cannot be restored. We handle\n * this by displaying a warning alert to the user instead of the input for that field type.\n */\n const addedAttributes = version.meta.unknownAttributes.added;\n if (Object.keys(addedAttributes).includes(props.name)) {\n return (\n <Flex direction=\"column\" alignItems=\"flex-start\" gap={1}>\n <Field.Label>{props.label}</Field.Label>\n <StyledAlert\n width=\"100%\"\n closeLabel=\"Close\"\n onClose={() => {}}\n variant=\"warning\"\n title={formatMessage({\n id: 'content-manager.history.content.new-field.title',\n defaultMessage: 'New field',\n })}\n >\n {formatMessage({\n id: 'content-manager.history.content.new-field.message',\n defaultMessage:\n \"This field didn't exist when this version was saved. If you restore this version, it will be empty.\",\n })}\n </StyledAlert>\n </Flex>\n );\n }\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * Since media fields use a custom input via the upload plugin provided by the useLibrary hook,\n * we need to handle the them before other custom inputs coming from the useLibrary hook.\n */\n if (props.type === 'media') {\n return (\n <CustomMediaInput {...props} labelAction={customLabelAction} disabled={fieldIsDisabled} />\n );\n }\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n const { layout } = componentsLayout[props.attribute.component];\n // Components can only have one panel, so only save the first layout item\n const [remainingFieldsLayout] = getRemaingFieldsLayout({\n layout: [layout],\n metadatas: configuration.components[props.attribute.component].metadatas,\n fieldSizes,\n schemaAttributes: components[props.attribute.component].attributes,\n });\n\n return (\n <ComponentInput\n {...props}\n layout={[...layout, ...(remainingFieldsLayout || [])]}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </DynamicZone>\n );\n case 'relation':\n return (\n <CustomRelationInput\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nexport type { VersionInputRendererProps };\nexport { VersionInputRenderer };\n"],"names":["StyledAlert","styled","Alert","attrs","closeLabel","onClose","shadow","LinkEllipsis","Link","CustomRelationInput","props","formatMessage","useIntl","field","useField","name","formattedFieldValue","Array","isArray","value","results","meta","missingCount","length","_jsxs","_Fragment","_jsx","Field","Label","action","labelAction","label","Box","marginTop","variant","id","defaultMessage","Flex","direction","gap","alignItems","map","relationData","targetModel","attribute","href","COLLECTION_TYPES","documentId","getRelationLabel","mainField","isAdminUserRelation","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","justifyContent","minWidth","Tooltip","Typography","tag","NavLink","to","DocumentStatus","status","title","number","createInitialValuesForPath","keyPath","keys","split","root","node","forEach","key","index","CustomMediaInput","fields","useStrapiApp","state","MediaLibrary","media","Form","method","disabled","initialValues","multiple","getLabelAction","React","isValidElement","labelActionTitleId","cloneElement","VersionInputRenderer","visible","hint","providedHint","shouldIgnoreRBAC","customLabelAction","version","useHistoryContext","selectedVersion","configuration","fieldSizes","useTypedSelector","app","components","useDoc","isFormDisabled","useForm","isInDynamicZone","useDynamicZone","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","editableFields","readableFields","canUserReadField","type","canUserEditField","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","edit","componentsLayout","useDocLayout","NotAllowedInput","fieldIsDisabled","addedAttributes","unknownAttributes","added","Object","includes","width","CustomInput","FormInputRenderer","addedInputTypes","BlocksInput","layout","component","remainingFieldsLayout","getRemaingFieldsLayout","metadatas","schemaAttributes","attributes","ComponentInput","inputProps","DynamicZone","Wysiwyg","UIDInput","options","enum","unique","_unique","_mainField","restProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAMA,WAAcC,GAAAA,MAAAA,CAAOC,KAAOC,CAAAA,CAAAA,KAAK,CAAC;IAAEC,UAAY,EAAA,OAAA;AAASC,IAAAA,OAAAA,EAAS,IAAO,EAAA;IAAGC,MAAQ,EAAA;AAAO,CAAA,CAAE;;;;AAInG,CAAC;AAED;;AAEkG,qGAElG,MAAMC,YAAAA,GAAeN,MAAOO,CAAAA,IAAAA,CAAK;;;;;;;;;AASjC,CAAC;AAED,MAAMC,sBAAsB,CAACC,KAAAA,GAAAA;IAC3B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAMC,KAAAA,GAAQC,QAEZJ,CAAAA,KAAAA,CAAMK,IAAI,CAAA;AAEZ;;;AAGC,MACD,IAAIC,mBAAAA;AACJ,IAAA,IAAIH,KAAO,EAAA;AACTG,QAAAA,mBAAAA,GAAsBC,KAAMC,CAAAA,OAAO,CAACL,KAAAA,CAAMM,KAAK,CAC3C,GAAA;AAAEC,YAAAA,OAAAA,EAASP,MAAMM,KAAK;YAAEE,IAAM,EAAA;gBAAEC,YAAc,EAAA;AAAE;AAAE,SAAA,GAClDT,MAAMM,KAAK;AACjB;AAEA,IAAA,IACE,CAACH,mBAAAA,IACAA,mBAAoBI,CAAAA,OAAO,CAACG,MAAM,KAAK,CAAA,IAAKP,mBAAoBK,CAAAA,IAAI,CAACC,YAAY,KAAK,CACvF,EAAA;QACA,qBACEE,IAAA,CAAAC,QAAA,EAAA;;AACE,8BAAAC,GAAA,CAACC,MAAMC,KAAK,EAAA;AAACC,oBAAAA,MAAAA,EAAQnB,MAAMoB,WAAW;AAAGpB,oBAAAA,QAAAA,EAAAA,KAAAA,CAAMqB;;8BAC/CL,GAACM,CAAAA,GAAAA,EAAAA;oBAAIC,SAAW,EAAA,CAAA;AAEd,oBAAA,QAAA,gBAAAP,GAAC1B,CAAAA,WAAAA,EAAAA;wBAAYkC,OAAQ,EAAA,SAAA;kCAClBvB,aAAc,CAAA;4BACbwB,EAAI,EAAA,8CAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA;;;;;AAKV;AAEA,IAAA,MAAM,EAAEhB,OAAO,EAAEC,IAAI,EAAE,GAAGL,mBAAAA;AAE1B,IAAA,qBACEQ,IAACQ,CAAAA,GAAAA,EAAAA;;AACC,0BAAAN,GAAA,CAACC,MAAMC,KAAK,EAAA;AAAElB,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMqB;;YACnBX,OAAQG,CAAAA,MAAM,GAAG,CAAA,kBAChBG,GAACW,CAAAA,IAAAA,EAAAA;gBAAKC,SAAU,EAAA,QAAA;gBAASC,GAAK,EAAA,CAAA;gBAAGN,SAAW,EAAA,CAAA;gBAAGO,UAAW,EAAA,SAAA;0BACvDpB,OAAQqB,CAAAA,GAAG,CAAC,CAACC,YAAAA,GAAAA;;AAEZ,oBAAA,MAAM,EAAEC,WAAW,EAAE,GAAGjC,MAAMkC,SAAS;AACvC,oBAAA,MAAMC,IAAO,GAAA,CAAC,GAAG,EAAEC,gBAAiB,CAAA,CAAC,EAAEH,WAAAA,CAAY,CAAC,EAAED,YAAaK,CAAAA,UAAU,CAAC,CAAC;AAC/E,oBAAA,MAAMhB,KAAQiB,GAAAA,gBAAAA,CAAiBN,YAAchC,EAAAA,KAAAA,CAAMuC,SAAS,CAAA;AAC5D,oBAAA,MAAMC,sBAAsBP,WAAgB,KAAA,aAAA;AAE5C,oBAAA,qBACEnB,IAACa,CAAAA,IAAAA,EAAAA;wBAECc,UAAY,EAAA,CAAA;wBACZC,aAAe,EAAA,CAAA;wBACfC,WAAa,EAAA,CAAA;wBACbC,YAAc,EAAA,CAAA;wBACdC,SAAS,EAAA,IAAA;wBACTC,WAAY,EAAA,YAAA;wBACZC,UAAW,EAAA,YAAA;wBACXC,cAAe,EAAA,eAAA;;0CAEfhC,GAACM,CAAAA,GAAAA,EAAAA;gCAAI2B,QAAU,EAAA,CAAA;gCAAGR,UAAY,EAAA,CAAA;gCAAGC,aAAe,EAAA,CAAA;gCAAGE,YAAc,EAAA,CAAA;AAC/D,gCAAA,QAAA,gBAAA5B,GAACkC,CAAAA,OAAAA,EAAAA;oCAAQ7B,KAAOA,EAAAA,KAAAA;AACbmB,oCAAAA,QAAAA,EAAAA,mBAAAA,iBACCxB,GAACmC,CAAAA,UAAAA,EAAAA;AAAY9B,wCAAAA,QAAAA,EAAAA;uDAEbL,GAACnB,CAAAA,YAAAA,EAAAA;wCAAauD,GAAKC,EAAAA,OAAAA;wCAASC,EAAInB,EAAAA,IAAAA;AAC7Bd,wCAAAA,QAAAA,EAAAA;;;;0CAKTL,GAACuC,CAAAA,cAAAA,EAAAA;AAAeC,gCAAAA,MAAAA,EAAQxB,aAAawB;;;uBArBhCxB,YAAaK,CAAAA,UAAU,IAAIL,YAAAA,CAAaP,EAAE,CAAA;AAwBrD,iBAAA;;AAGHd,YAAAA,IAAAA,CAAKC,YAAY,GAAG,CACnB,mEACAI,GAAC1B,CAAAA,WAAAA,EAAAA;gBACCiC,SAAW,EAAA,CAAA;gBACXC,OAAQ,EAAA,SAAA;AACRiC,gBAAAA,KAAAA,EAAOxD,aACL,CAAA;oBACEwB,EAAI,EAAA,yDAAA;oBACJC,cACE,EAAA;iBAEJ,EAAA;AAAEgC,oBAAAA,MAAAA,EAAQ/C,KAAKC;AAAa,iBAAA,CAAA;0BAG7BX,aACC,CAAA;oBACEwB,EAAI,EAAA,2DAAA;oBACJC,cACE,EAAA;iBAEJ,EAAA;AAAEgC,oBAAAA,MAAAA,EAAQ/C,KAAKC;AAAa,iBAAA;;;;AAMxC,CAAA;AAEA;;AAEkG;AAGlG,MAAM+C,0BAAAA,GAA6B,CAACC,OAAiBnD,EAAAA,KAAAA,GAAAA;IACnD,MAAMoD,IAAAA,GAAOD,OAAQE,CAAAA,KAAK,CAAC,GAAA,CAAA;;AAE3B,IAAA,MAAMC,OAA4B,EAAC;;AAGnC,IAAA,IAAIC,IAAOD,GAAAA,IAAAA;IACXF,IAAKI,CAAAA,OAAO,CAAC,CAACC,GAAKC,EAAAA,KAAAA,GAAAA;;QAEjB,IAAID,GAAAA,KAAQ,WAAeA,IAAAA,GAAAA,KAAQ,aAAe,EAAA;;AAElD,QAAA,IAAIC,KAAUN,KAAAA,IAAAA,CAAKhD,MAAM,GAAG,CAAG,EAAA;YAC7BmD,IAAI,CAACE,IAAI,GAAGzD,KAAAA;SACP,MAAA;;AAELuD,YAAAA,IAAI,CAACE,GAAI,CAAA,GAAGF,IAAI,CAACE,GAAAA,CAAI,IAAI,EAAC;AAC5B;;QAGAF,IAAOA,GAAAA,IAAI,CAACE,GAAI,CAAA;AAClB,KAAA,CAAA;IAEA,OAAOH,IAAAA;AACT,CAAA;AAEA,MAAMK,mBAAmB,CAACpE,KAAAA,GAAAA;AACxB,IAAA,MAAM,EAAES,KAAK,EAAE,GAAGL,QAAAA,CAASJ,MAAMK,IAAI,CAAA;IACrC,MAAMK,OAAAA,GAAUD,KAAOC,EAAAA,OAAAA,IAAW,EAAE;IACpC,MAAMC,IAAAA,GAAOF,OAAOE,IAAQ,IAAA;QAAEC,YAAc,EAAA;AAAE,KAAA;IAE9C,MAAM,EAAEX,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,MAAMmE,SAASC,YAAa,CAAA,kBAAA,EAAoB,CAACC,KAAAA,GAAUA,MAAMF,MAAM,CAAA;IACvE,MAAMG,YAAAA,GAAeH,OAAOI,KAAK;AAIjC,IAAA,qBACE3D,IAACa,CAAAA,IAAAA,EAAAA;QAAKC,SAAU,EAAA,QAAA;QAASC,GAAK,EAAA,CAAA;QAAGC,UAAW,EAAA,SAAA;;0BAC1Cd,GAAC0D,CAAAA,IAAAA,EAAAA;gBACCC,MAAO,EAAA,KAAA;gBACPC,QAAU,EAAA,IAAA;gBACVC,aAAelB,EAAAA,0BAAAA,CAA2B3D,KAAMK,CAAAA,IAAI,EAAEK,OAAAA,CAAAA;AAEtD,gBAAA,QAAA,gBAAAM,GAACwD,CAAAA,YAAAA,EAAAA;AAAc,oBAAA,GAAGxE,KAAK;oBAAE4E,QAAU,EAAA,IAAA;oBAAME,QAAUpE,EAAAA,OAAAA,CAAQG,MAAM,GAAG;;;YAErEF,IAAKC,CAAAA,YAAY,GAAG,CAAA,kBACnBI,GAAC1B,CAAAA,WAAAA,EAAAA;gBACCkC,OAAQ,EAAA,SAAA;gBACR9B,UAAW,EAAA,OAAA;AACXC,gBAAAA,OAAAA,EAAS,IAAO,EAAA;AAChB8D,gBAAAA,KAAAA,EAAOxD,aACL,CAAA;oBACEwB,EAAI,EAAA,sDAAA;oBACJC,cACE,EAAA;iBAEJ,EAAA;AAAEgC,oBAAAA,MAAAA,EAAQ/C,KAAKC;AAAa,iBAAA,CAAA;0BAG7BX,aACC,CAAA;oBACEwB,EAAI,EAAA,wDAAA;oBACJC,cACE,EAAA;iBAEJ,EAAA;AAAEgC,oBAAAA,MAAAA,EAAQ/C,KAAKC;AAAa,iBAAA;;;;AAMxC,CAAA;AAUA;;;IAIA,MAAMmE,iBAAiB,CAAC3D,WAAAA,GAAAA;AACtB,IAAA,IAAI,eAAC4D,KAAAA,CAAMC,cAAc,CAAC7D,WAAc,CAAA,EAAA;QACtC,OAAOA,WAAAA;AACT;;AAGA,IAAA,MAAM8D,qBAAqB9D,WAAYpB,CAAAA,KAAK,CAACyD,KAAK,CAAChC,EAAE;AAErD,IAAA,IAAIyD,uBAAuB,sBAAwB,EAAA;QACjD,qBAAOF,KAAAA,CAAMG,YAAY,CAAC/D,WAAa,EAAA;AACrC,YAAA,GAAGA,YAAYpB,KAAK;YACpByD,KAAO,EAAA;gBACLhC,EAAI,EAAA,2BAAA;gBACJC,cACE,EAAA;AACJ;AACF,SAAA,CAAA;AACF;AAEA,IAAA,IAAIwD,uBAAuB,0BAA4B,EAAA;QACrD,qBAAOF,KAAAA,CAAMG,YAAY,CAAC/D,WAAa,EAAA;AACrC,YAAA,GAAGA,YAAYpB,KAAK;YACpByD,KAAO,EAAA;gBACLhC,EAAI,EAAA,+BAAA;gBACJC,cACE,EAAA;AACJ;AACF,SAAA,CAAA;AACF;;IAGA,OAAON,WAAAA;AACT,CAAA;AAEA;;;;;;AAMC,IACKgE,MAAAA,oBAAAA,GAAuB,CAAC,EAC5BC,OAAO,EACPC,IAAAA,EAAMC,YAAY,EAClBC,mBAAmB,KAAK,EACxBpE,WAAW,EACX,GAAGpB,KACuB,EAAA,GAAA;AAC1B,IAAA,MAAMyF,oBAAoBV,cAAe3D,CAAAA,WAAAA,CAAAA;IAEzC,MAAM,EAAEnB,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMwF,UAAUC,iBAAkB,CAAA,gBAAA,EAAkB,CAACpB,KAAAA,GAAUA,MAAMqB,eAAe,CAAA;AACpF,IAAA,MAAMC,gBAAgBF,iBAAkB,CAAA,gBAAA,EAAkB,CAACpB,KAAAA,GAAUA,MAAMsB,aAAa,CAAA;IACxF,MAAMC,UAAAA,GAAaC,gBAAiB,CAAA,CAACxB,KAAUA,GAAAA,KAAK,CAAC,iBAAkB,CAAA,CAACyB,GAAG,CAACF,UAAU,CAAA;AAEtF,IAAA,MAAM,EAAErE,EAAE,EAAEwE,UAAU,EAAE,GAAGC,MAAAA,EAAAA;AAC3B,IAAA,MAAMC,iBAAiBC,OAAQ,CAAA,eAAA,EAAiB,CAAC7B,KAAAA,GAAUA,MAAMK,QAAQ,CAAA;AAEzE,IAAA,MAAMyB,kBAAkBC,cAAe,CAAA,iBAAA,EAAmB,CAAC/B,KAAAA,GAAUA,MAAM8B,eAAe,CAAA;AAE1F,IAAA,MAAME,kBAAkBC,eAAgB,CAAA,eAAA,EAAiB,CAACC,IAAAA,GAASA,KAAKF,eAAe,CAAA;AACvF,IAAA,MAAMG,gBAAgBF,eAAgB,CAAA,eAAA,EAAiB,CAACC,IAAAA,GAASA,KAAKC,aAAa,CAAA;AACnF,IAAA,MAAMC,kBAAkBH,eAAgB,CAAA,eAAA,EAAiB,CAACC,IAAAA,GAASA,KAAKE,eAAe,CAAA;AACvF,IAAA,MAAMC,gBAAgBJ,eAAgB,CAAA,eAAA,EAAiB,CAACC,IAAAA,GAASA,KAAKG,aAAa,CAAA;IAEnF,MAAMC,cAAAA,GAAiBpF,KAAKkF,eAAkBJ,GAAAA,eAAAA;IAC9C,MAAMO,cAAAA,GAAiBrF,KAAKiF,aAAgBH,GAAAA,eAAAA;AAC5C;;;MAIA,MAAMQ,mBAAmBH,aAAc5G,CAAAA,KAAAA,CAAMK,IAAI,EAAEyG,cAAAA,EAAgB9G,MAAMgH,IAAI,CAAA;AAC7E,IAAA,MAAMC,mBAAmBL,aAAc5G,CAAAA,KAAAA,CAAMK,IAAI,EAAEwG,cAAAA,EAAgB7G,MAAMgH,IAAI,CAAA;AAE7E,IAAA,MAAM3C,SAASC,YAAa,CAAA,eAAA,EAAiB,CAAC0B,GAAAA,GAAQA,IAAI3B,MAAM,CAAA;IAChE,MAAM,EAAE6C,kBAAkB,EAAE,GAAGC,kBAC7BC,+BAAgCpH,CAAAA,KAAAA,CAAMkC,SAAS,CAAI,GAAA;QAAClC,KAAMkC,CAAAA,SAAS,CAACmF;KAAY,GAAGC,SAAAA,CAAAA;AAGrF,IAAA,MAAMhC,IAAOiC,GAAAA,YAAAA,CAAahC,YAAcvF,EAAAA,KAAAA,CAAMkC,SAAS,CAAA;AACvD,IAAA,MAAM,EACJsF,IAAM,EAAA,EAAEvB,YAAYwB,gBAAgB,EAAE,EACvC,GAAGC,YAAAA,EAAAA;AAEJ,IAAA,IAAI,CAACrC,OAAS,EAAA;QACZ,OAAO,IAAA;AACT;AAEA;;AAEC,MACD,IAAI,CAACG,gBAAAA,IAAoB,CAACuB,gBAAAA,IAAoB,CAACV,eAAiB,EAAA;AAC9D,QAAA,qBAAOrF,GAAC2G,CAAAA,eAAAA,EAAAA;YAAgBrC,IAAMA,EAAAA,IAAAA;AAAO,YAAA,GAAGtF;;AAC1C;IAEA,MAAM4H,eAAAA,GACJ,CAAEX,gBAAAA,IAAoB,CAACZ,eAAoBrG,IAAAA,KAAAA,CAAM4E,QAAQ,IAAIuB,cAAAA;AAE/D;;;AAGC,MACD,MAAM0B,eAAkBnC,GAAAA,OAAAA,CAAQ/E,IAAI,CAACmH,iBAAiB,CAACC,KAAK;IAC5D,IAAIC,MAAAA,CAAOnE,IAAI,CAACgE,eAAAA,CAAAA,CAAiBI,QAAQ,CAACjI,KAAAA,CAAMK,IAAI,CAAG,EAAA;AACrD,QAAA,qBACES,IAACa,CAAAA,IAAAA,EAAAA;YAAKC,SAAU,EAAA,QAAA;YAASE,UAAW,EAAA,YAAA;YAAaD,GAAK,EAAA,CAAA;;AACpD,8BAAAb,GAAA,CAACC,MAAMC,KAAK,EAAA;AAAElB,oBAAAA,QAAAA,EAAAA,KAAAA,CAAMqB;;8BACpBL,GAAC1B,CAAAA,WAAAA,EAAAA;oBACC4I,KAAM,EAAA,MAAA;oBACNxI,UAAW,EAAA,OAAA;AACXC,oBAAAA,OAAAA,EAAS,IAAO,EAAA;oBAChB6B,OAAQ,EAAA,SAAA;AACRiC,oBAAAA,KAAAA,EAAOxD,aAAc,CAAA;wBACnBwB,EAAI,EAAA,iDAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;8BAECzB,aAAc,CAAA;wBACbwB,EAAI,EAAA,mDAAA;wBACJC,cACE,EAAA;AACJ,qBAAA;;;;AAIR;AAEA;;;AAGC,MACD,IAAI0F,+BAAAA,CAAgCpH,KAAMkC,CAAAA,SAAS,CAAG,EAAA;AACpD,QAAA,MAAMiG,cAAcjB,kBAAkB,CAAClH,MAAMkC,SAAS,CAACmF,WAAW,CAAC;AAEnE,QAAA,IAAIc,WAAa,EAAA;AACf,YAAA,qBACEnH,GAACmH,CAAAA,WAAAA,EAAAA;AACE,gBAAA,GAAGnI,KAAK;;gBAETsF,IAAMA,EAAAA,IAAAA;gBACNlE,WAAaqE,EAAAA,iBAAAA;gBACbb,QAAUgD,EAAAA;;AAGhB;AAEA,QAAA,qBACE5G,GAACoH,CAAAA,aAAAA,EAAAA;AACE,YAAA,GAAGpI,KAAK;YACTsF,IAAMA,EAAAA,IAAAA;YACNlE,WAAaqE,EAAAA,iBAAAA;;YAEbuB,IAAMhH,EAAAA,KAAAA,CAAMkC,SAAS,CAACmF,WAAW;YACjCzC,QAAUgD,EAAAA;;AAGhB;AAEA;;;AAGC,MACD,IAAI5H,KAAAA,CAAMgH,IAAI,KAAK,OAAS,EAAA;AAC1B,QAAA,qBACEhG,GAACoD,CAAAA,gBAAAA,EAAAA;AAAkB,YAAA,GAAGpE,KAAK;YAAEoB,WAAaqE,EAAAA,iBAAAA;YAAmBb,QAAUgD,EAAAA;;AAE3E;AACA;;AAEC,MACD,MAAMS,eAAAA,GAAkBL,MAAOnE,CAAAA,IAAI,CAACQ,MAAAA,CAAAA;IACpC,IAAI,CAAC+C,+BAAgCpH,CAAAA,KAAAA,CAAMkC,SAAS,CAAA,IAAKmG,gBAAgBJ,QAAQ,CAACjI,KAAMgH,CAAAA,IAAI,CAAG,EAAA;AAC7F,QAAA,MAAMmB,WAAc9D,GAAAA,MAAM,CAACrE,KAAAA,CAAMgH,IAAI,CAAC;AACtC,QAAA,qBACEhG,GAACmH,CAAAA,WAAAA,EAAAA;AACE,YAAA,GAAGnI,KAAK;;YAETsF,IAAMA,EAAAA,IAAAA;YACNlE,WAAaqE,EAAAA,iBAAAA;YACbb,QAAUgD,EAAAA;;AAGhB;AAEA;;;MAIA,OAAQ5H,MAAMgH,IAAI;QAChB,KAAK,QAAA;AACH,YAAA,qBAAOhG,GAACsH,CAAAA,mBAAAA,EAAAA;AAAa,gBAAA,GAAGtI,KAAK;gBAAEsF,IAAMA,EAAAA,IAAAA;AAAM0B,gBAAAA,IAAAA,EAAMhH,MAAMgH,IAAI;gBAAEpC,QAAUgD,EAAAA;;QACzE,KAAK,WAAA;YACH,MAAM,EAAEW,MAAM,EAAE,GAAGd,gBAAgB,CAACzH,KAAMkC,CAAAA,SAAS,CAACsG,SAAS,CAAC;;YAE9D,MAAM,CAACC,qBAAsB,CAAA,GAAGC,sBAAuB,CAAA;gBACrDH,MAAQ,EAAA;AAACA,oBAAAA;AAAO,iBAAA;gBAChBI,SAAW9C,EAAAA,aAAAA,CAAcI,UAAU,CAACjG,KAAAA,CAAMkC,SAAS,CAACsG,SAAS,CAAC,CAACG,SAAS;AACxE7C,gBAAAA,UAAAA;gBACA8C,gBAAkB3C,EAAAA,UAAU,CAACjG,KAAMkC,CAAAA,SAAS,CAACsG,SAAS,CAAC,CAACK;AAC1D,aAAA,CAAA;AAEA,YAAA,qBACE7H,GAAC8H,CAAAA,sBAAAA,EAAAA;AACE,gBAAA,GAAG9I,KAAK;gBACTuI,MAAQ,EAAA;AAAIA,oBAAAA,GAAAA,MAAAA;AAAYE,oBAAAA,GAAAA,qBAAAA,IAAyB;AAAI,iBAAA;gBACrDnD,IAAMA,EAAAA,IAAAA;gBACNlE,WAAaqE,EAAAA,iBAAAA;gBACbb,QAAUgD,EAAAA,eAAAA;AAET,gBAAA,QAAA,EAAA,CAACmB,2BAAe/H,GAACoE,CAAAA,oBAAAA,EAAAA;AAAsB,wBAAA,GAAG2D,UAAU;wBAAEvD,gBAAkB,EAAA;;;QAG/E,KAAK,aAAA;AACH,YAAA,qBACExE,GAACgI,CAAAA,WAAAA,EAAAA;AACE,gBAAA,GAAGhJ,KAAK;gBACTsF,IAAMA,EAAAA,IAAAA;gBACNlE,WAAaqE,EAAAA,iBAAAA;gBACbb,QAAUgD,EAAAA,eAAAA;AAET,gBAAA,QAAA,EAAA,CAACmB,2BAAe/H,GAACoE,CAAAA,oBAAAA,EAAAA;AAAsB,wBAAA,GAAG2D,UAAU;wBAAEvD,gBAAkB,EAAA;;;QAG/E,KAAK,UAAA;AACH,YAAA,qBACExE,GAACjB,CAAAA,mBAAAA,EAAAA;AACE,gBAAA,GAAGC,KAAK;gBACTsF,IAAMA,EAAAA,IAAAA;gBACNlE,WAAaqE,EAAAA,iBAAAA;gBACbb,QAAUgD,EAAAA;;QAGhB,KAAK,UAAA;AACH,YAAA,qBACE5G,GAACiI,CAAAA,eAAAA,EAAAA;AACE,gBAAA,GAAGjJ,KAAK;gBACTsF,IAAMA,EAAAA,IAAAA;AACN0B,gBAAAA,IAAAA,EAAMhH,MAAMgH,IAAI;gBAChB5F,WAAaqE,EAAAA,iBAAAA;gBACbb,QAAUgD,EAAAA;;QAGhB,KAAK,KAAA;AACH,YAAA,qBACE5G,GAACkI,CAAAA,gBAAAA,EAAAA;AACE,gBAAA,GAAGlJ,KAAK;gBACTsF,IAAMA,EAAAA,IAAAA;AACN0B,gBAAAA,IAAAA,EAAMhH,MAAMgH,IAAI;gBAChB5F,WAAaqE,EAAAA,iBAAAA;gBACbb,QAAUgD,EAAAA;;AAGhB;;AAEC,QACD,KAAK,aAAA;AACH,YAAA,qBACE5G,GAACoH,CAAAA,aAAAA,EAAAA;AACE,gBAAA,GAAGpI,KAAK;gBACTsF,IAAMA,EAAAA,IAAAA;gBACNlE,WAAaqE,EAAAA,iBAAAA;gBACb0D,OAASnJ,EAAAA,KAAAA,CAAMkC,SAAS,CAACkH,IAAI,CAACrH,GAAG,CAAC,CAACtB,KAAAA,IAAW;AAAEA,wBAAAA;qBAAM,CAAA,CAAA;;AAEtDuG,gBAAAA,IAAAA,EAAMhH,KAAMqH,CAAAA,WAAW,GAAG,cAAA,GAAiBrH,MAAMgH,IAAI;gBACrDpC,QAAUgD,EAAAA;;AAGhB,QAAA;;YAEE,MAAM,EAAEyB,QAAQC,OAAO,EAAE/G,WAAWgH,UAAU,EAAE,GAAGC,SAAAA,EAAW,GAAGxJ,KAAAA;AACjE,YAAA,qBACEgB,GAACoH,CAAAA,aAAAA,EAAAA;AACE,gBAAA,GAAGoB,SAAS;gBACblE,IAAMA,EAAAA,IAAAA;gBACNlE,WAAaqE,EAAAA,iBAAAA;;AAEbuB,gBAAAA,IAAAA,EAAMhH,KAAMqH,CAAAA,WAAW,GAAG,cAAA,GAAiBrH,MAAMgH,IAAI;gBACrDpC,QAAUgD,EAAAA;;AAGlB;AACF;AAEA,MAAMR,+BAAAA,GAAkC,CACtClF,SAEA,GAAA,aAAA,IAAiBA,aAAa,OAAOA,SAAAA,CAAUmF,WAAW,KAAK,QAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"VersionInputRenderer.mjs","sources":["../../../../admin/src/history/components/VersionInputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n Form,\n} from '@strapi/admin/strapi-admin';\nimport { Alert, Box, Field, Flex, Link, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { HistoryVersionDataResponse } from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport { useDocLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { BlocksInput } from '../../pages/EditView/components/FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from '../../pages/EditView/components/FormInputs/Component/Input';\nimport {\n DynamicZone,\n useDynamicZone,\n} from '../../pages/EditView/components/FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from '../../pages/EditView/components/FormInputs/NotAllowed';\nimport { UIDInput } from '../../pages/EditView/components/FormInputs/UID';\nimport { Wysiwyg } from '../../pages/EditView/components/FormInputs/Wysiwyg/Field';\nimport { useFieldHint } from '../../pages/EditView/components/InputRenderer';\nimport { getRelationLabel } from '../../utils/relations';\nimport { useHistoryContext } from '../pages/History';\n\nimport { getRemaingFieldsLayout } from './VersionContent';\n\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { RelationsFieldProps } from '../../pages/EditView/components/FormInputs/Relations/Relations';\nimport type { RelationResult } from '../../services/relations';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\nconst StyledAlert = styled(Alert).attrs({ closeLabel: 'Close', onClose: () => {}, shadow: 'none' })`\n button {\n display: none;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * CustomRelationInput\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 CustomRelationInput = (props: RelationsFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<\n { results: RelationResult[]; meta: { missingCount: number } } | RelationResult[]\n >(props.name);\n\n /**\n * Ideally the server would return the correct shape, however, for admin user relations\n * it sanitizes everything out when it finds an object for the relation value.\n */\n let formattedFieldValue;\n if (field) {\n formattedFieldValue = Array.isArray(field.value)\n ? { results: field.value, meta: { missingCount: 0 } }\n : field.value;\n }\n\n if (\n !formattedFieldValue ||\n (formattedFieldValue.results.length === 0 && formattedFieldValue.meta.missingCount === 0)\n ) {\n return (\n <>\n <Field.Label action={props.labelAction}>{props.label}</Field.Label>\n <Box marginTop={1}>\n {/* @ts-expect-error – we dont need closeLabel */}\n <StyledAlert variant=\"default\">\n {formatMessage({\n id: 'content-manager.history.content.no-relations',\n defaultMessage: 'No relations.',\n })}\n </StyledAlert>\n </Box>\n </>\n );\n }\n\n const { results, meta } = formattedFieldValue;\n\n return (\n <Box>\n <Field.Label>{props.label}</Field.Label>\n {results.length > 0 && (\n <Flex direction=\"column\" gap={2} marginTop={1} alignItems=\"stretch\">\n {results.map((relationData) => {\n // @ts-expect-error - targetModel does exist on the attribute. But it's not typed.\n const { targetModel } = props.attribute;\n const href = `../${COLLECTION_TYPES}/${targetModel}/${relationData.documentId}`;\n const label = getRelationLabel(relationData, props.mainField);\n const isAdminUserRelation = targetModel === 'admin::user';\n\n return (\n <Flex\n key={relationData.documentId ?? relationData.id}\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background=\"neutral150\"\n justifyContent=\"space-between\"\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip label={label}>\n {isAdminUserRelation ? (\n <Typography>{label}</Typography>\n ) : (\n <LinkEllipsis tag={NavLink} to={href}>\n {label}\n </LinkEllipsis>\n )}\n </Tooltip>\n </Box>\n <DocumentStatus status={relationData.status as string} />\n </Flex>\n );\n })}\n </Flex>\n )}\n {meta.missingCount > 0 && (\n /* @ts-expect-error – we dont need closeLabel */\n <StyledAlert\n marginTop={1}\n variant=\"warning\"\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.title',\n defaultMessage:\n '{number, plural, =1 {Missing relation} other {{number} missing relations}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CustomMediaInput\n * -----------------------------------------------------------------------------------------------*/\n\n// Create an object with value at key path (i.e. 'a.b.c')\nconst createInitialValuesForPath = (keyPath: string, value: any) => {\n const keys = keyPath.split('.');\n // The root level object\n const root: Record<string, any> = {};\n\n // Make the first node the root\n let node = root;\n keys.forEach((key, index) => {\n // Skip prototype pollution keys\n if (key === '__proto__' || key === 'constructor') return;\n // If it's the last key, set the node value\n if (index === keys.length - 1) {\n node[key] = value;\n } else {\n // Ensure the key exists and is an object\n node[key] = node[key] || {};\n }\n\n // Traverse down the tree\n node = node[key];\n });\n\n return root;\n};\n\nconst CustomMediaInput = (props: VersionInputRendererProps) => {\n const { value } = useField(props.name);\n const results = value?.results ?? [];\n const meta = value?.meta ?? { missingCount: 0 };\n\n const { formatMessage } = useIntl();\n\n const fields = useStrapiApp('CustomMediaInput', (state) => state.fields);\n const MediaLibrary = fields.media as React.ComponentType<\n VersionInputRendererProps & { multiple: boolean }\n >;\n\n return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\">\n <Form\n method=\"PUT\"\n disabled={true}\n initialValues={createInitialValuesForPath(props.name, results)}\n >\n <MediaLibrary {...props} disabled={true} multiple={results.length > 1} />\n </Form>\n {meta.missingCount > 0 && (\n <StyledAlert\n variant=\"warning\"\n closeLabel=\"Close\"\n onClose={() => {}}\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.title',\n defaultMessage:\n '{number, plural, =1 {Missing asset} other {{number} missing assets}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted in the Media Library and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Flex>\n );\n};\n\ntype VersionInputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n /**\n * In the context of content history, deleted fields need to ignore RBAC\n * @default false\n */\n shouldIgnoreRBAC?: boolean;\n};\n\n/**\n * Checks if the i18n plugin added a label action to the field and modifies it\n * to adapt the wording for the history page.\n */\nconst getLabelAction = (labelAction: VersionInputRendererProps['labelAction']) => {\n if (!React.isValidElement(labelAction)) {\n return labelAction;\n }\n\n // TODO: find a better way to do this rather than access internals\n const labelActionTitleId = labelAction.props.title.id;\n\n if (labelActionTitleId === 'i18n.Field.localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.localized',\n defaultMessage:\n 'This value is specific to this locale. If you restore this version, the content will not be replaced for other locales.',\n },\n });\n }\n\n if (labelActionTitleId === 'i18n.Field.not-localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.not-localized',\n defaultMessage:\n 'This value is common to all locales. If you restore this version and save the changes, the content will be replaced for all locales.',\n },\n });\n }\n\n // Label action is unrelated to i18n, don't touch it.\n return labelAction;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed specifically\n * to be used on the History page in the content-manager. It understands how to render specific\n * inputs within the context of a history version (i.e. relations, media, ignored RBAC, etc...)\n */\nconst VersionInputRenderer = ({\n visible,\n hint: providedHint,\n shouldIgnoreRBAC = false,\n labelAction,\n ...props\n}: VersionInputRendererProps) => {\n const customLabelAction = getLabelAction(labelAction);\n\n const { formatMessage } = useIntl();\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const fieldSizes = useTypedSelector((state) => state['content-manager'].app.fieldSizes);\n\n const { id, components } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n const editableFields = id ? canUpdateFields : canCreateFields;\n const readableFields = id ? canReadFields : canCreateFields;\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components: componentsLayout },\n } = useDocLayout();\n\n if (!visible) {\n return null;\n }\n\n /**\n * Don't render the field if the user can't read it.\n */\n if (!shouldIgnoreRBAC && !canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Attributes found on the current content-type schema cannot be restored. We handle\n * this by displaying a warning alert to the user instead of the input for that field type.\n */\n const addedAttributes = version.meta.unknownAttributes.added;\n if (Object.keys(addedAttributes).includes(props.name)) {\n return (\n <Flex direction=\"column\" alignItems=\"flex-start\" gap={1}>\n <Field.Label>{props.label}</Field.Label>\n <StyledAlert\n width=\"100%\"\n closeLabel=\"Close\"\n onClose={() => {}}\n variant=\"warning\"\n title={formatMessage({\n id: 'content-manager.history.content.new-field.title',\n defaultMessage: 'New field',\n })}\n >\n {formatMessage({\n id: 'content-manager.history.content.new-field.message',\n defaultMessage:\n \"This field didn't exist when this version was saved. If you restore this version, it will be empty.\",\n })}\n </StyledAlert>\n </Flex>\n );\n }\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * Since media fields use a custom input via the upload plugin provided by the useLibrary hook,\n * we need to handle the them before other custom inputs coming from the useLibrary hook.\n */\n if (props.type === 'media') {\n return (\n <CustomMediaInput {...props} labelAction={customLabelAction} disabled={fieldIsDisabled} />\n );\n }\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n const { layout } = componentsLayout[props.attribute.component];\n // Components can only have one panel, so only save the first layout item\n const [remainingFieldsLayout] = getRemaingFieldsLayout({\n layout: [layout],\n metadatas: configuration.components[props.attribute.component].metadatas,\n fieldSizes,\n schemaAttributes: components[props.attribute.component].attributes,\n });\n\n return (\n <ComponentInput\n {...props}\n layout={[...layout, ...(remainingFieldsLayout || [])]}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </DynamicZone>\n );\n case 'relation':\n return (\n <CustomRelationInput\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nexport type { VersionInputRendererProps };\nexport { VersionInputRenderer };\n"],"names":["StyledAlert","styled","Alert","attrs","closeLabel","onClose","shadow","LinkEllipsis","Link","CustomRelationInput","props","formatMessage","useIntl","field","useField","name","formattedFieldValue","Array","isArray","value","results","meta","missingCount","length","_jsxs","_Fragment","_jsx","Field","Label","action","labelAction","label","Box","marginTop","variant","id","defaultMessage","Flex","direction","gap","alignItems","map","relationData","targetModel","attribute","href","COLLECTION_TYPES","documentId","getRelationLabel","mainField","isAdminUserRelation","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","justifyContent","minWidth","Tooltip","Typography","tag","NavLink","to","DocumentStatus","status","title","number","createInitialValuesForPath","keyPath","keys","split","root","node","forEach","key","index","CustomMediaInput","fields","useStrapiApp","state","MediaLibrary","media","Form","method","disabled","initialValues","multiple","getLabelAction","React","isValidElement","labelActionTitleId","cloneElement","VersionInputRenderer","visible","hint","providedHint","shouldIgnoreRBAC","customLabelAction","version","useHistoryContext","selectedVersion","configuration","fieldSizes","useTypedSelector","app","components","useDoc","isFormDisabled","useForm","isInDynamicZone","useDynamicZone","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","editableFields","readableFields","canUserReadField","type","canUserEditField","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","edit","componentsLayout","useDocLayout","NotAllowedInput","fieldIsDisabled","addedAttributes","unknownAttributes","added","Object","includes","width","CustomInput","FormInputRenderer","addedInputTypes","BlocksInput","layout","component","remainingFieldsLayout","getRemaingFieldsLayout","metadatas","schemaAttributes","attributes","ComponentInput","inputProps","DynamicZone","Wysiwyg","UIDInput","options","enum","unique","_unique","_mainField","restProps"],"mappings":"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"}
|
|
@@ -120,7 +120,7 @@ const PaginationButton = ({ page, children })=>{
|
|
|
120
120
|
direction: "column",
|
|
121
121
|
alignItems: "stretch",
|
|
122
122
|
width: "320px",
|
|
123
|
-
height: "
|
|
123
|
+
height: "100dvh",
|
|
124
124
|
background: "neutral0",
|
|
125
125
|
borderColor: "neutral200",
|
|
126
126
|
borderWidth: "0 0 0 1px",
|