@strapi/content-manager 0.0.0-experimental.063fe6b9a49d4596ee1ddd671448d312727d87a4 → 0.0.0-experimental.068169c1acb096333ffd6d7f0ecb2e5942027466
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 +304 -205
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +309 -211
- 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 +94 -50
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +97 -53
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/RelativeTime.js.map +1 -1
- package/dist/admin/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +287 -11
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +270 -14
- 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/VersionContent.js +24 -3
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionContent.mjs +25 -4
- package/dist/admin/history/components/VersionContent.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +7 -0
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +8 -1
- 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 +31 -11
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +32 -12
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/index.js +47 -8
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +47 -9
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/layout.js +28 -33
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +29 -15
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +98 -77
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +100 -79
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.js +18 -0
- package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js +109 -73
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +111 -75
- 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 +12 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
- 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 +12 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +15 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +16 -4
- 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 +22 -8
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +24 -10
- 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 +2 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +2 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +160 -107
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +163 -110
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +6 -3
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +6 -3
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +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 +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/WysiwygNav.js +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.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 +59 -34
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +60 -34
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +92 -27
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +94 -29
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +39 -24
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +39 -24
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +211 -0
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +211 -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 +225 -132
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +227 -134
- 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 +20 -32
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +21 -33
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +13 -3
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +13 -3
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +8 -2
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +8 -2
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js +13 -3
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +189 -0
- package/dist/admin/preview/components/InputPopover.js.map +1 -0
- package/dist/admin/preview/components/InputPopover.mjs +167 -0
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
- package/dist/admin/preview/components/PreviewHeader.js +0 -1
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +0 -1
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
- package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
- package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
- package/dist/admin/preview/pages/Preview.js +178 -74
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +180 -76
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/services/preview.js.map +1 -1
- package/dist/admin/preview/services/preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +56 -0
- package/dist/admin/preview/utils/constants.js.map +1 -0
- package/dist/admin/preview/utils/constants.mjs +52 -0
- package/dist/admin/preview/utils/constants.mjs.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.js +107 -0
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.js +22 -0
- package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
- package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
- package/dist/admin/preview/utils/previewScript.js +534 -0
- package/dist/admin/preview/utils/previewScript.js.map +1 -0
- package/dist/admin/preview/utils/previewScript.mjs +532 -0
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
- package/dist/admin/router.js.map +1 -1
- package/dist/admin/router.mjs.map +1 -1
- package/dist/admin/services/api.js +5 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +5 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +59 -17
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +59 -17
- 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/ConfigurationForm/Fields.d.ts +6 -4
- package/dist/admin/src/components/LeftMenu.d.ts +3 -1
- package/dist/admin/src/components/Widgets.d.ts +8 -3
- package/dist/admin/src/exports.d.ts +1 -0
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -11
- package/dist/admin/src/pages/EditView/components/Header.d.ts +15 -0
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
- package/dist/admin/src/pages/ListView/components/TableCells/Relations.d.ts +0 -3
- package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
- package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +55 -0
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
- package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +23 -17
- 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/src/utils/api.d.ts +1 -1
- package/dist/admin/src/utils/validation.d.ts +1 -0
- package/dist/admin/translations/en.json.js +13 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +13 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +6 -2
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +6 -2
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +12 -3
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +12 -3
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/utils/api.js +1 -1
- package/dist/admin/utils/api.js.map +1 -1
- package/dist/admin/utils/api.mjs +1 -1
- package/dist/admin/utils/api.mjs.map +1 -1
- package/dist/admin/utils/translations.js.map +1 -1
- package/dist/admin/utils/translations.mjs.map +1 -1
- package/dist/admin/utils/urls.js.map +1 -1
- package/dist/admin/utils/urls.mjs.map +1 -1
- package/dist/admin/utils/users.js.map +1 -1
- package/dist/admin/utils/users.mjs.map +1 -1
- package/dist/admin/utils/validation.js +19 -7
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +19 -7
- 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/content-types.js +11 -1
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +11 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +8 -6
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +8 -6
- 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 +14 -2
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs +14 -2
- 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/services/lifecycles.js +23 -19
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +23 -19
- package/dist/server/history/services/lifecycles.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/controllers/homepage.js +5 -0
- package/dist/server/homepage/controllers/homepage.js.map +1 -1
- package/dist/server/homepage/controllers/homepage.mjs +5 -0
- package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
- package/dist/server/homepage/routes/homepage.js +11 -0
- package/dist/server/homepage/routes/homepage.js.map +1 -1
- package/dist/server/homepage/routes/homepage.mjs +11 -0
- package/dist/server/homepage/routes/homepage.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +87 -46
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +87 -46
- 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 +11 -32
- package/dist/server/preview/services/preview-config.js.map +1 -1
- package/dist/server/preview/services/preview-config.mjs +12 -33
- package/dist/server/preview/services/preview-config.mjs.map +1 -1
- package/dist/server/preview/services/preview.js +4 -0
- package/dist/server/preview/services/preview.js.map +1 -1
- package/dist/server/preview/services/preview.mjs +4 -0
- 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/data-mapper.js +4 -1
- package/dist/server/services/data-mapper.js.map +1 -1
- package/dist/server/services/data-mapper.mjs +4 -1
- package/dist/server/services/data-mapper.mjs.map +1 -1
- package/dist/server/services/document-manager.js +8 -1
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +8 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +26 -2
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +26 -2
- 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/configuration/attributes.js +1 -1
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
- package/dist/server/services/utils/configuration/layouts.js +1 -1
- package/dist/server/services/utils/configuration/layouts.js.map +1 -1
- package/dist/server/services/utils/configuration/layouts.mjs +1 -1
- package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.js +8 -0
- package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
- package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +11 -0
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +11 -0
- package/dist/server/services/utils/populate.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/content-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/controllers/validation/index.d.ts +6 -1
- package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/index.d.ts +7 -0
- package/dist/server/src/homepage/index.d.ts.map +1 -1
- package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts +4 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/index.d.ts +7 -0
- package/dist/server/src/homepage/services/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +8 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +1 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +1 -0
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +8 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +0 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +13 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/package.json +12 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-metadata.mjs","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick, uniq } from 'lodash/fp';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\nimport { getPopulateForValidation } from './utils/populate';\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\nconst AVAILABLE_STATUS_FIELDS = [\n 'id',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'documentId',\n];\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy('locale', allVersions);\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n return (\n mappingResult\n // Filter just in case there is a document with no drafts\n .filter(Boolean) as unknown as DocumentMetadata['availableLocales']\n );\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash fp\n return pick(AVAILABLE_STATUS_FIELDS, availableStatus);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length) {\n where.locale = { $in: locales };\n }\n\n return strapi.query(uid).findMany({\n where,\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n const { populate = {}, fields = [] } = getPopulateForValidation(uid);\n\n const params = {\n populate: {\n ...populate,\n // NOTE: creator fields are selected in this way to avoid exposing sensitive data\n createdBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n updatedBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n },\n fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const meta = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations) {\n const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);\n\n document.localizations = document.localizations.map((d) => {\n const status = otherStatus.find((s) => s.documentId === d.documentId);\n return {\n ...d,\n status: this.getStatus(d, status ? [status] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","contentTypes","hasDraftAndPublish","draftVersion","find","v","publishedAt","otherVersions","filter","id","status","getStatus","Boolean","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$null","query","findMany","select","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","populate","fields","getPopulateForValidation","params","createdBy","updatedBy","uniq","filters","dbParams","get","transform","versions","db","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","otherStatus","s","undefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-metadata.mjs","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick, uniq } from 'lodash/fp';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\nimport { getPopulateForValidation } from './utils/populate';\n\nconst { getScalarAttributes } = contentTypes;\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\nconst AVAILABLE_STATUS_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'documentId',\n];\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy('locale', allVersions);\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n return (\n mappingResult\n // Filter just in case there is a document with no drafts\n .filter(Boolean) as unknown as DocumentMetadata['availableLocales']\n );\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash fp\n return pick(AVAILABLE_STATUS_FIELDS, availableStatus);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length) {\n where.locale = { $in: locales };\n }\n\n return strapi.query(uid).findMany({\n where,\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n const { populate = {}, fields = [] } = getPopulateForValidation(uid);\n\n // Include non-translatable scalar fields in availableLocales for i18n prefilling\n let nonLocalizedFields: string[] = [];\n try {\n const i18nPlugin = strapi.plugin('i18n');\n if (i18nPlugin) {\n const i18nService = i18nPlugin.service('content-types');\n if (i18nService?.getNonLocalizedAttributes) {\n const model = strapi.getModel(uid);\n if (model?.attributes) {\n const allNonLocalized = i18nService.getNonLocalizedAttributes(model);\n // Get only scalar attributes (components, relations, etc. can't be in fields array)\n const scalarAttrs = getScalarAttributes(model);\n // Only include scalar, non-localized fields that actually exist in the model\n nonLocalizedFields = allNonLocalized.filter(\n (field: string) => field in model.attributes && scalarAttrs.includes(field)\n );\n }\n }\n }\n } catch (error) {\n // i18n plugin might not be enabled or might error, ignore silently\n }\n\n const params = {\n populate: {\n ...populate,\n // NOTE: creator fields are selected in this way to avoid exposing sensitive data\n createdBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n updatedBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n },\n fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields, ...nonLocalizedFields]),\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const meta = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations) {\n const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);\n\n document.localizations = document.localizations.map((d) => {\n const status = otherStatus.find(\n (s) => s.documentId === d.documentId && s.locale === d.locale\n );\n return {\n ...d,\n status: this.getStatus(d, status ? [status] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["getScalarAttributes","contentTypes","AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","hasDraftAndPublish","draftVersion","find","v","publishedAt","otherVersions","filter","id","status","getStatus","Boolean","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$null","query","findMany","select","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","populate","fields","getPopulateForValidation","nonLocalizedFields","i18nPlugin","plugin","i18nService","service","getNonLocalizedAttributes","attributes","allNonLocalized","scalarAttrs","field","includes","error","params","createdBy","updatedBy","uniq","filters","dbParams","get","transform","versions","db","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","otherStatus","s","undefined"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-sizes.js","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":";;;;AAGA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,kBAAAA;AAI7B,MAAMC,aAA2B,GAAA;IAC/BC,OAAS,EAAA,EAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAMC,SAAuB,GAAA;IAC3BF,OAAS,EAAA,CAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAME,WAAyB,GAAA;IAC7BH,OAAS,EAAA,CAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAMG,UAAwC,GAAA;;IAE5CC,WAAaN,EAAAA,aAAAA;IACbO,SAAWP,EAAAA,aAAAA;IACXQ,IAAMR,EAAAA,aAAAA;IACNS,QAAUT,EAAAA,aAAAA;IACVU,MAAQV,EAAAA,aAAAA;;IAERW,QAAUR,EAAAA,SAAAA;IACVS,OAAST,EAAAA,SAAAA;IACTU,IAAMV,EAAAA,SAAAA;IACNW,IAAMX,EAAAA,SAAAA;IACNY,UAAYZ,EAAAA,SAAAA;IACZa,OAASb,EAAAA,SAAAA;IACTc,KAAOd,EAAAA,SAAAA;IACPe,OAASf,EAAAA,SAAAA;IACTgB,MAAQhB,EAAAA,SAAAA;;IAERiB,QAAUhB,EAAAA,WAAAA;IACViB,KAAOjB,EAAAA,WAAAA;IACPkB,WAAalB,EAAAA,WAAAA;IACbmB,KAAOnB,EAAAA,WAAAA;IACPoB,QAAUpB,EAAAA,WAAAA;IACVqB,QAAUrB,EAAAA,WAAAA;IACVsB,MAAQtB,EAAAA,WAAAA;IACRuB,IAAMvB,EAAAA,WAAAA;IACNwB,SAAWxB,EAAAA,WAAAA;IACXyB,GAAKzB,EAAAA;AACP,CAAA;AAEA,MAAM0B,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,iBAAoB,GAAA;AACxBC,QAAAA,gBAAAA,CAAAA,GAAAA;YACE,OAAO5B,UAAAA;AACT,SAAA;AAEA6B,QAAAA,YAAAA,CAAAA,CAAaC,IAAY,EAAA;AACvB,YAAA,OAAO,CAAC,CAAC9B,UAAU,CAAC8B,IAAK,CAAA;AAC3B,SAAA;AAEAC,QAAAA,YAAAA,CAAAA,CAAaD,IAAa,EAAA;AACxB,YAAA,IAAI,CAACA,IAAM,EAAA;AACT,gBAAA,MAAM,IAAIrC,gBAAiB,CAAA,sBAAA,CAAA;AAC7B;YAEA,MAAMuC,SAAAA,GAAYhC,UAAU,CAAC8B,IAAK,CAAA;AAClC,YAAA,IAAI,CAACE,SAAW,EAAA;AACd,gBAAA,MAAM,IAAIvC,
|
|
1
|
+
{"version":3,"file":"field-sizes.js","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-sizes.mjs","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":";;AAGA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,MAAAA;AAI7B,MAAMC,aAA2B,GAAA;IAC/BC,OAAS,EAAA,EAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAMC,SAAuB,GAAA;IAC3BF,OAAS,EAAA,CAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAME,WAAyB,GAAA;IAC7BH,OAAS,EAAA,CAAA;IACTC,WAAa,EAAA;AACf,CAAA;AAEA,MAAMG,UAAwC,GAAA;;IAE5CC,WAAaN,EAAAA,aAAAA;IACbO,SAAWP,EAAAA,aAAAA;IACXQ,IAAMR,EAAAA,aAAAA;IACNS,QAAUT,EAAAA,aAAAA;IACVU,MAAQV,EAAAA,aAAAA;;IAERW,QAAUR,EAAAA,SAAAA;IACVS,OAAST,EAAAA,SAAAA;IACTU,IAAMV,EAAAA,SAAAA;IACNW,IAAMX,EAAAA,SAAAA;IACNY,UAAYZ,EAAAA,SAAAA;IACZa,OAASb,EAAAA,SAAAA;IACTc,KAAOd,EAAAA,SAAAA;IACPe,OAASf,EAAAA,SAAAA;IACTgB,MAAQhB,EAAAA,SAAAA;;IAERiB,QAAUhB,EAAAA,WAAAA;IACViB,KAAOjB,EAAAA,WAAAA;IACPkB,WAAalB,EAAAA,WAAAA;IACbmB,KAAOnB,EAAAA,WAAAA;IACPoB,QAAUpB,EAAAA,WAAAA;IACVqB,QAAUrB,EAAAA,WAAAA;IACVsB,MAAQtB,EAAAA,WAAAA;IACRuB,IAAMvB,EAAAA,WAAAA;IACNwB,SAAWxB,EAAAA,WAAAA;IACXyB,GAAKzB,EAAAA;AACP,CAAA;AAEA,MAAM0B,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,iBAAoB,GAAA;AACxBC,QAAAA,gBAAAA,CAAAA,GAAAA;YACE,OAAO5B,UAAAA;AACT,SAAA;AAEA6B,QAAAA,YAAAA,CAAAA,CAAaC,IAAY,EAAA;AACvB,YAAA,OAAO,CAAC,CAAC9B,UAAU,CAAC8B,IAAK,CAAA;AAC3B,SAAA;AAEAC,QAAAA,YAAAA,CAAAA,CAAaD,IAAa,EAAA;AACxB,YAAA,IAAI,CAACA,IAAM,EAAA;AACT,gBAAA,MAAM,IAAIrC,gBAAiB,CAAA,sBAAA,CAAA;AAC7B;YAEA,MAAMuC,SAAAA,GAAYhC,UAAU,CAAC8B,IAAK,CAAA;AAClC,YAAA,IAAI,CAACE,SAAW,EAAA;AACd,gBAAA,MAAM,IAAIvC,
|
|
1
|
+
{"version":3,"file":"field-sizes.mjs","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uid.js","sources":["../../../server/src/services/uid.ts"],"sourcesContent":["import _ from 'lodash';\nimport slugify from '@sindresorhus/slugify';\n\nimport type { Core, Schema, UID } from '@strapi/types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async generateUIDField({\n contentTypeUID,\n field,\n data,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n data: Record<string, any>;\n locale?: string;\n }) {\n const contentType = strapi.contentTypes[contentTypeUID];\n const { attributes } = contentType;\n\n const {\n targetField,\n default: defaultValue,\n options,\n } = attributes[field] as Schema.Attribute.UID;\n\n // @ts-expect-error targetField can be undefined\n const targetValue = _.get(data, targetField);\n\n if (!_.isEmpty(targetValue)) {\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(targetValue, options),\n locale,\n });\n }\n\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(\n _.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName,\n options\n ),\n locale,\n });\n },\n\n async findUniqueUID({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const foundDocuments = await strapi.documents(contentTypeUID).findMany({\n filters: {\n [field]: { $startsWith: value },\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (!foundDocuments || foundDocuments.length === 0) {\n // If there are no documents found we can return the value as is\n return value;\n }\n\n let possibleCollisions: string[];\n if (!Array.isArray(foundDocuments)) {\n possibleCollisions = [foundDocuments[field]];\n } else {\n possibleCollisions = foundDocuments.map((doc: any) => doc[field]);\n }\n\n // If there are no documents sharing the proposed UID, we can return the value as is\n if (!possibleCollisions.includes(value)) {\n return value;\n }\n\n let i = 1;\n let tmpUId = `${value}-${i}`;\n while (possibleCollisions.includes(tmpUId)) {\n // While there are documents sharing the proposed UID, we need to find a new one\n // by incrementing the suffix until we find a unique one\n i += 1;\n tmpUId = `${value}-${i}`;\n }\n\n return tmpUId;\n },\n\n async checkUIDAvailability({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const documentCount = await strapi.documents(contentTypeUID).count({\n filters: {\n [field]: value,\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (documentCount && documentCount > 0) {\n // If there are documents sharing the proposed UID, we can return false\n return false;\n }\n\n return true;\n },\n});\n"],"names":["strapi","generateUIDField","contentTypeUID","field","data","locale","contentType","contentTypes","attributes","targetField","default","defaultValue","options","targetValue","_","get","isEmpty","findUniqueUID","value","slugify","isFunction","modelName","foundDocuments","documents","findMany","filters","$startsWith","status","length","possibleCollisions","Array","isArray","map","doc","includes","i","tmpUId","checkUIDAvailability","documentCount","count"],"mappings":";;;;;AAKA,UAAe,CAAA,CAAC,EAAEA,MAAM,EAA2B,IAAM;QACvD,MAAMC,gBAAAA,CAAAA,CAAiB,EACrBC,cAAc,EACdC,KAAK,EACLC,IAAI,EACJC,MAAM,EAMP,EAAA;AACC,YAAA,MAAMC,WAAcN,GAAAA,MAAAA,CAAOO,YAAY,CAACL,cAAe,CAAA;YACvD,MAAM,EAAEM,UAAU,EAAE,GAAGF,WAAAA;YAEvB,MAAM,EACJG,WAAW,EACXC,OAASC,EAAAA,YAAY,EACrBC,OAAO,EACR,GAAGJ,UAAU,CAACL,KAAM,CAAA;;AAGrB,YAAA,MAAMU,WAAcC,GAAAA,CAAAA,CAAEC,GAAG,CAACX,IAAMK,EAAAA,WAAAA,CAAAA;AAEhC,YAAA,IAAI,CAACK,CAAAA,CAAEE,OAAO,CAACH,WAAc,CAAA,EAAA;gBAC3B,OAAO,IAAI,CAACI,aAAa,CAAC;AACxBf,oBAAAA,cAAAA;AACAC,oBAAAA,KAAAA;AACAe,oBAAAA,KAAAA,EAAOC,QAAQN,WAAaD,EAAAA,OAAAA,CAAAA;AAC5BP,oBAAAA;AACF,iBAAA,CAAA;AACF;YAEA,OAAO,IAAI,CAACY,aAAa,CAAC;AACxBf,gBAAAA,cAAAA;AACAC,gBAAAA,KAAAA;gBACAe,KAAOC,EAAAA,OAAAA,CACLL,EAAEM,UAAU,CAACT,gBAAgBA,YAAiBA,EAAAA,GAAAA,YAAAA,IAAgBL,WAAYe,CAAAA,SAAS,EACnFT,OAAAA,CAAAA;AAEFP,gBAAAA;AACF,aAAA,CAAA;AACF,SAAA;QAEA,MAAMY,aAAAA,CAAAA,CAAc,EAClBf,cAAc,EACdC,KAAK,EACLe,KAAK,EACLb,MAAM,EAMP,EAAA;AACC,YAAA,MAAMiB,iBAAiB,MAAMtB,MAAAA,CAAOuB,SAAS,CAACrB,cAAAA,CAAAA,CAAgBsB,QAAQ,CAAC;gBACrEC,OAAS,EAAA;AACP,oBAAA,CAACtB,QAAQ;wBAAEuB,WAAaR,EAAAA;AAAM;AAChC,iBAAA;AACAb,gBAAAA,MAAAA;;;gBAGAsB,MAAQ,EAAA;AACV,aAAA,CAAA;AAEA,YAAA,IAAI,CAACL,cAAAA,IAAkBA,cAAeM,CAAAA,MAAM,KAAK,CAAG,EAAA;;gBAElD,OAAOV,KAAAA;AACT;YAEA,IAAIW,kBAAAA;AACJ,YAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACT,cAAiB,CAAA,EAAA;gBAClCO,kBAAqB,GAAA;AAACP,oBAAAA,cAAc,CAACnB,KAAM;AAAC,iBAAA;aACvC,MAAA;AACL0B,gBAAAA,kBAAAA,GAAqBP,eAAeU,GAAG,CAAC,CAACC,GAAaA,GAAAA,GAAG,CAAC9B,KAAM,CAAA,CAAA;AAClE;;AAGA,YAAA,IAAI,CAAC0B,kBAAAA,CAAmBK,QAAQ,CAAChB,KAAQ,CAAA,EAAA;gBACvC,OAAOA,KAAAA;AACT;AAEA,YAAA,IAAIiB,CAAI,GAAA,CAAA;AACR,YAAA,IAAIC,
|
|
1
|
+
{"version":3,"file":"uid.js","sources":["../../../server/src/services/uid.ts"],"sourcesContent":["import _ from 'lodash';\nimport slugify from '@sindresorhus/slugify';\n\nimport type { Core, Schema, UID } from '@strapi/types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async generateUIDField({\n contentTypeUID,\n field,\n data,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n data: Record<string, any>;\n locale?: string;\n }) {\n const contentType = strapi.contentTypes[contentTypeUID];\n const { attributes } = contentType;\n\n const {\n targetField,\n default: defaultValue,\n options,\n } = attributes[field] as Schema.Attribute.UID;\n\n // @ts-expect-error targetField can be undefined\n const targetValue = _.get(data, targetField);\n\n if (!_.isEmpty(targetValue)) {\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(targetValue, options),\n locale,\n });\n }\n\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(\n _.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName,\n options\n ),\n locale,\n });\n },\n\n async findUniqueUID({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const foundDocuments = await strapi.documents(contentTypeUID).findMany({\n filters: {\n [field]: { $startsWith: value },\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (!foundDocuments || foundDocuments.length === 0) {\n // If there are no documents found we can return the value as is\n return value;\n }\n\n let possibleCollisions: string[];\n if (!Array.isArray(foundDocuments)) {\n possibleCollisions = [foundDocuments[field]];\n } else {\n possibleCollisions = foundDocuments.map((doc: any) => doc[field]);\n }\n\n // If there are no documents sharing the proposed UID, we can return the value as is\n if (!possibleCollisions.includes(value)) {\n return value;\n }\n\n let i = 1;\n let tmpUId = `${value}-${i}`;\n while (possibleCollisions.includes(tmpUId)) {\n // While there are documents sharing the proposed UID, we need to find a new one\n // by incrementing the suffix until we find a unique one\n i += 1;\n tmpUId = `${value}-${i}`;\n }\n\n return tmpUId;\n },\n\n async checkUIDAvailability({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const documentCount = await strapi.documents(contentTypeUID).count({\n filters: {\n [field]: value,\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (documentCount && documentCount > 0) {\n // If there are documents sharing the proposed UID, we can return false\n return false;\n }\n\n return true;\n },\n});\n"],"names":["strapi","generateUIDField","contentTypeUID","field","data","locale","contentType","contentTypes","attributes","targetField","default","defaultValue","options","targetValue","_","get","isEmpty","findUniqueUID","value","slugify","isFunction","modelName","foundDocuments","documents","findMany","filters","$startsWith","status","length","possibleCollisions","Array","isArray","map","doc","includes","i","tmpUId","checkUIDAvailability","documentCount","count"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uid.mjs","sources":["../../../server/src/services/uid.ts"],"sourcesContent":["import _ from 'lodash';\nimport slugify from '@sindresorhus/slugify';\n\nimport type { Core, Schema, UID } from '@strapi/types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async generateUIDField({\n contentTypeUID,\n field,\n data,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n data: Record<string, any>;\n locale?: string;\n }) {\n const contentType = strapi.contentTypes[contentTypeUID];\n const { attributes } = contentType;\n\n const {\n targetField,\n default: defaultValue,\n options,\n } = attributes[field] as Schema.Attribute.UID;\n\n // @ts-expect-error targetField can be undefined\n const targetValue = _.get(data, targetField);\n\n if (!_.isEmpty(targetValue)) {\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(targetValue, options),\n locale,\n });\n }\n\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(\n _.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName,\n options\n ),\n locale,\n });\n },\n\n async findUniqueUID({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const foundDocuments = await strapi.documents(contentTypeUID).findMany({\n filters: {\n [field]: { $startsWith: value },\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (!foundDocuments || foundDocuments.length === 0) {\n // If there are no documents found we can return the value as is\n return value;\n }\n\n let possibleCollisions: string[];\n if (!Array.isArray(foundDocuments)) {\n possibleCollisions = [foundDocuments[field]];\n } else {\n possibleCollisions = foundDocuments.map((doc: any) => doc[field]);\n }\n\n // If there are no documents sharing the proposed UID, we can return the value as is\n if (!possibleCollisions.includes(value)) {\n return value;\n }\n\n let i = 1;\n let tmpUId = `${value}-${i}`;\n while (possibleCollisions.includes(tmpUId)) {\n // While there are documents sharing the proposed UID, we need to find a new one\n // by incrementing the suffix until we find a unique one\n i += 1;\n tmpUId = `${value}-${i}`;\n }\n\n return tmpUId;\n },\n\n async checkUIDAvailability({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const documentCount = await strapi.documents(contentTypeUID).count({\n filters: {\n [field]: value,\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (documentCount && documentCount > 0) {\n // If there are documents sharing the proposed UID, we can return false\n return false;\n }\n\n return true;\n },\n});\n"],"names":["strapi","generateUIDField","contentTypeUID","field","data","locale","contentType","contentTypes","attributes","targetField","default","defaultValue","options","targetValue","_","get","isEmpty","findUniqueUID","value","slugify","isFunction","modelName","foundDocuments","documents","findMany","filters","$startsWith","status","length","possibleCollisions","Array","isArray","map","doc","includes","i","tmpUId","checkUIDAvailability","documentCount","count"],"mappings":";;;AAKA,UAAe,CAAA,CAAC,EAAEA,MAAM,EAA2B,IAAM;QACvD,MAAMC,gBAAAA,CAAAA,CAAiB,EACrBC,cAAc,EACdC,KAAK,EACLC,IAAI,EACJC,MAAM,EAMP,EAAA;AACC,YAAA,MAAMC,WAAcN,GAAAA,MAAAA,CAAOO,YAAY,CAACL,cAAe,CAAA;YACvD,MAAM,EAAEM,UAAU,EAAE,GAAGF,WAAAA;YAEvB,MAAM,EACJG,WAAW,EACXC,OAASC,EAAAA,YAAY,EACrBC,OAAO,EACR,GAAGJ,UAAU,CAACL,KAAM,CAAA;;AAGrB,YAAA,MAAMU,WAAcC,GAAAA,CAAAA,CAAEC,GAAG,CAACX,IAAMK,EAAAA,WAAAA,CAAAA;AAEhC,YAAA,IAAI,CAACK,CAAAA,CAAEE,OAAO,CAACH,WAAc,CAAA,EAAA;gBAC3B,OAAO,IAAI,CAACI,aAAa,CAAC;AACxBf,oBAAAA,cAAAA;AACAC,oBAAAA,KAAAA;AACAe,oBAAAA,KAAAA,EAAOC,QAAQN,WAAaD,EAAAA,OAAAA,CAAAA;AAC5BP,oBAAAA;AACF,iBAAA,CAAA;AACF;YAEA,OAAO,IAAI,CAACY,aAAa,CAAC;AACxBf,gBAAAA,cAAAA;AACAC,gBAAAA,KAAAA;gBACAe,KAAOC,EAAAA,OAAAA,CACLL,EAAEM,UAAU,CAACT,gBAAgBA,YAAiBA,EAAAA,GAAAA,YAAAA,IAAgBL,WAAYe,CAAAA,SAAS,EACnFT,OAAAA,CAAAA;AAEFP,gBAAAA;AACF,aAAA,CAAA;AACF,SAAA;QAEA,MAAMY,aAAAA,CAAAA,CAAc,EAClBf,cAAc,EACdC,KAAK,EACLe,KAAK,EACLb,MAAM,EAMP,EAAA;AACC,YAAA,MAAMiB,iBAAiB,MAAMtB,MAAAA,CAAOuB,SAAS,CAACrB,cAAAA,CAAAA,CAAgBsB,QAAQ,CAAC;gBACrEC,OAAS,EAAA;AACP,oBAAA,CAACtB,QAAQ;wBAAEuB,WAAaR,EAAAA;AAAM;AAChC,iBAAA;AACAb,gBAAAA,MAAAA;;;gBAGAsB,MAAQ,EAAA;AACV,aAAA,CAAA;AAEA,YAAA,IAAI,CAACL,cAAAA,IAAkBA,cAAeM,CAAAA,MAAM,KAAK,CAAG,EAAA;;gBAElD,OAAOV,KAAAA;AACT;YAEA,IAAIW,kBAAAA;AACJ,YAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACT,cAAiB,CAAA,EAAA;gBAClCO,kBAAqB,GAAA;AAACP,oBAAAA,cAAc,CAACnB,KAAM;AAAC,iBAAA;aACvC,MAAA;AACL0B,gBAAAA,kBAAAA,GAAqBP,eAAeU,GAAG,CAAC,CAACC,GAAaA,GAAAA,GAAG,CAAC9B,KAAM,CAAA,CAAA;AAClE;;AAGA,YAAA,IAAI,CAAC0B,kBAAAA,CAAmBK,QAAQ,CAAChB,KAAQ,CAAA,EAAA;gBACvC,OAAOA,KAAAA;AACT;AAEA,YAAA,IAAIiB,CAAI,GAAA,CAAA;AACR,YAAA,IAAIC,
|
|
1
|
+
{"version":3,"file":"uid.mjs","sources":["../../../server/src/services/uid.ts"],"sourcesContent":["import _ from 'lodash';\nimport slugify from '@sindresorhus/slugify';\n\nimport type { Core, Schema, UID } from '@strapi/types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async generateUIDField({\n contentTypeUID,\n field,\n data,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n data: Record<string, any>;\n locale?: string;\n }) {\n const contentType = strapi.contentTypes[contentTypeUID];\n const { attributes } = contentType;\n\n const {\n targetField,\n default: defaultValue,\n options,\n } = attributes[field] as Schema.Attribute.UID;\n\n // @ts-expect-error targetField can be undefined\n const targetValue = _.get(data, targetField);\n\n if (!_.isEmpty(targetValue)) {\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(targetValue, options),\n locale,\n });\n }\n\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(\n _.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName,\n options\n ),\n locale,\n });\n },\n\n async findUniqueUID({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const foundDocuments = await strapi.documents(contentTypeUID).findMany({\n filters: {\n [field]: { $startsWith: value },\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (!foundDocuments || foundDocuments.length === 0) {\n // If there are no documents found we can return the value as is\n return value;\n }\n\n let possibleCollisions: string[];\n if (!Array.isArray(foundDocuments)) {\n possibleCollisions = [foundDocuments[field]];\n } else {\n possibleCollisions = foundDocuments.map((doc: any) => doc[field]);\n }\n\n // If there are no documents sharing the proposed UID, we can return the value as is\n if (!possibleCollisions.includes(value)) {\n return value;\n }\n\n let i = 1;\n let tmpUId = `${value}-${i}`;\n while (possibleCollisions.includes(tmpUId)) {\n // While there are documents sharing the proposed UID, we need to find a new one\n // by incrementing the suffix until we find a unique one\n i += 1;\n tmpUId = `${value}-${i}`;\n }\n\n return tmpUId;\n },\n\n async checkUIDAvailability({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const documentCount = await strapi.documents(contentTypeUID).count({\n filters: {\n [field]: value,\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (documentCount && documentCount > 0) {\n // If there are documents sharing the proposed UID, we can return false\n return false;\n }\n\n return true;\n },\n});\n"],"names":["strapi","generateUIDField","contentTypeUID","field","data","locale","contentType","contentTypes","attributes","targetField","default","defaultValue","options","targetValue","_","get","isEmpty","findUniqueUID","value","slugify","isFunction","modelName","foundDocuments","documents","findMany","filters","$startsWith","status","length","possibleCollisions","Array","isArray","map","doc","includes","i","tmpUId","checkUIDAvailability","documentCount","count"],"mappings":"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"}
|
|
@@ -87,7 +87,7 @@ const isVisible = (schema, name)=>{
|
|
|
87
87
|
if (isHidden(schema, name)) {
|
|
88
88
|
return false;
|
|
89
89
|
}
|
|
90
|
-
if (isTimestamp(schema, name) || name === 'id') {
|
|
90
|
+
if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {
|
|
91
91
|
return false;
|
|
92
92
|
}
|
|
93
93
|
if (isPublicationField(name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.js","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport { intersection } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getNonVisibleAttributes(model),\n getWritableAttributes(model)\n );\n\n return [\n 'id',\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attributes.js","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport { intersection } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getNonVisibleAttributes(model),\n getWritableAttributes(model)\n );\n\n return [\n 'id',\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection"],"mappings":"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"}
|
|
@@ -85,7 +85,7 @@ const isVisible = (schema, name)=>{
|
|
|
85
85
|
if (isHidden(schema, name)) {
|
|
86
86
|
return false;
|
|
87
87
|
}
|
|
88
|
-
if (isTimestamp(schema, name) || name === 'id') {
|
|
88
|
+
if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {
|
|
89
89
|
return false;
|
|
90
90
|
}
|
|
91
91
|
if (isPublicationField(name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.mjs","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport { intersection } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getNonVisibleAttributes(model),\n getWritableAttributes(model)\n );\n\n return [\n 'id',\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attributes.mjs","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport { intersection } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getNonVisibleAttributes(model),\n getWritableAttributes(model)\n );\n\n return [\n 'id',\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection"],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ async function createDefaultLayouts(schema) {
|
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
function createDefaultListLayout(schema) {
|
|
40
|
-
return Object.keys(schema.attributes).filter((name)=>attributes.isListable(schema, name)).slice(0, DEFAULT_LIST_LENGTH);
|
|
40
|
+
return Object.keys(schema.attributes).filter((name)=>attributes.isListable(schema, name) && name !== 'documentId').slice(0, DEFAULT_LIST_LENGTH);
|
|
41
41
|
}
|
|
42
42
|
const rowSize = (els)=>els.reduce((sum, el)=>sum + el.size, 0);
|
|
43
43
|
function createDefaultEditLayout(schema) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layouts.js","sources":["../../../../../server/src/services/utils/configuration/layouts.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport { isListable, hasEditableAttribute, hasRelationAttribute } from './attributes';\n\nconst DEFAULT_LIST_LENGTH = 4;\nconst MAX_ROW_SIZE = 12;\n\nconst isAllowedFieldSize = (type: any, size: any) => {\n const { getFieldSize } = getService('field-sizes');\n const fieldSize = getFieldSize(type);\n\n // Check if field was locked to another size\n if (!fieldSize.isResizable && size !== fieldSize.default) {\n return false;\n }\n\n // Otherwise allow unless it's bigger than a row\n return size <= MAX_ROW_SIZE;\n};\n\nconst getDefaultFieldSize = (attribute: any) => {\n const { hasFieldSize, getFieldSize } = getService('field-sizes');\n\n // Check if it's a custom field with a custom size and get the default size for the field type\n return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type)\n .default;\n};\n\nasync function createDefaultLayouts(schema: any) {\n return {\n // @ts-expect-error necessary to provide this default layout\n list: createDefaultListLayout(schema),\n // @ts-expect-error necessary to provide this default layout\n edit: createDefaultEditLayout(schema),\n ..._.pick(_.get(schema, ['config', 'layouts'], {}), ['list', 'edit']),\n };\n}\n\nfunction createDefaultListLayout(schema: any) {\n return Object.keys(schema.attributes)\n .filter((name) => isListable(schema, name))\n .slice(0, DEFAULT_LIST_LENGTH);\n}\n\nconst rowSize = (els: any) => els.reduce((sum: any, el: any) => sum + el.size, 0);\n\nfunction createDefaultEditLayout(schema: any) {\n const keys = Object.keys(schema.attributes).filter((name) => hasEditableAttribute(schema, name));\n\n return appendToEditLayout([], keys, schema);\n}\n\n/** Synchronisation functions */\n\nfunction syncLayouts(configuration: any, schema: any) {\n if (_.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);\n\n const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};\n\n let cleanList = list.filter((attr: any) => isListable(schema, attr));\n\n // TODO V5: remove editRelations\n const cleanEditRelations = editRelations.filter((attr: any) =>\n hasRelationAttribute(schema, attr)\n );\n\n // backward compatibility with when relations were on the side of the layout\n // it migrates the displayed relations to the main edit layout\n const elementsToReAppend = [...cleanEditRelations];\n let cleanEdit: unknown[] = [];\n for (const row of edit) {\n const newRow: unknown[] = [];\n\n for (const el of row) {\n if (!hasEditableAttribute(schema, el.name)) continue;\n\n // Check if the field is a custom field with a custom size.\n // If so, use the custom size instead of the type size\n const { hasFieldSize } = getService('field-sizes');\n const fieldType = hasFieldSize(schema.attributes[el.name].customField)\n ? schema.attributes[el.name].customField\n : schema.attributes[el.name].type;\n\n /* if the type of a field was changed (ex: string -> json) or a new field was added in the schema\n and the new type doesn't allow the size of the previous type, append the field at the end of layouts\n */\n if (!isAllowedFieldSize(fieldType, el.size)) {\n elementsToReAppend.push(el.name);\n continue;\n }\n\n newRow.push(el);\n }\n\n if (newRow.length > 0) {\n cleanEdit.push(newRow);\n }\n }\n\n cleanEdit = appendToEditLayout(cleanEdit as any, elementsToReAppend, schema);\n\n const newAttributes = _.difference(\n Object.keys(schema.attributes),\n Object.keys(configuration.metadatas)\n );\n\n /** Add new attributes where they belong */\n\n if (cleanList.length < DEFAULT_LIST_LENGTH) {\n // add newAttributes\n // only add valid listable attributes\n cleanList = _.uniq(\n cleanList\n .concat(newAttributes.filter((key) => isListable(schema, key)))\n .slice(0, DEFAULT_LIST_LENGTH)\n );\n }\n\n // add new attributes to edit view\n const newEditAttributes = newAttributes.filter((key) => hasEditableAttribute(schema, key));\n\n cleanEdit = appendToEditLayout(cleanEdit, newEditAttributes, schema);\n\n return {\n list: cleanList.length > 0 ? cleanList : createDefaultListLayout(schema),\n edit: cleanEdit.length > 0 ? cleanEdit : createDefaultEditLayout(schema),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/default-param-last\nconst appendToEditLayout = (layout: any = [], keysToAppend: any, schema: any) => {\n if (keysToAppend.length === 0) return layout;\n let currentRowIndex = Math.max(layout.length - 1, 0);\n\n // init currentRow if necessary\n if (!layout[currentRowIndex]) {\n layout[currentRowIndex] = [];\n }\n\n for (const key of keysToAppend) {\n const attribute = schema.attributes[key];\n\n const attributeSize = getDefaultFieldSize(attribute);\n const currenRowSize = rowSize(layout[currentRowIndex]);\n\n if (currenRowSize + attributeSize > MAX_ROW_SIZE) {\n currentRowIndex += 1;\n layout[currentRowIndex] = [];\n }\n\n layout[currentRowIndex].push({\n name: key,\n size: attributeSize,\n });\n }\n\n return layout;\n};\n\nexport { createDefaultLayouts, syncLayouts };\n"],"names":["DEFAULT_LIST_LENGTH","MAX_ROW_SIZE","isAllowedFieldSize","type","size","getFieldSize","getService","fieldSize","isResizable","default","getDefaultFieldSize","attribute","hasFieldSize","customField","createDefaultLayouts","schema","list","createDefaultListLayout","edit","createDefaultEditLayout","_","pick","get","Object","keys","attributes","filter","name","isListable","slice","rowSize","els","reduce","sum","el","hasEditableAttribute","appendToEditLayout","syncLayouts","configuration","isEmpty","layouts","editRelations","cleanList","attr","cleanEditRelations","hasRelationAttribute","elementsToReAppend","cleanEdit","row","newRow","fieldType","push","length","newAttributes","difference","metadatas","uniq","concat","key","newEditAttributes","layout","keysToAppend","currentRowIndex","Math","max","attributeSize","currenRowSize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layouts.js","sources":["../../../../../server/src/services/utils/configuration/layouts.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport { isListable, hasEditableAttribute, hasRelationAttribute } from './attributes';\n\nconst DEFAULT_LIST_LENGTH = 4;\nconst MAX_ROW_SIZE = 12;\n\nconst isAllowedFieldSize = (type: any, size: any) => {\n const { getFieldSize } = getService('field-sizes');\n const fieldSize = getFieldSize(type);\n\n // Check if field was locked to another size\n if (!fieldSize.isResizable && size !== fieldSize.default) {\n return false;\n }\n\n // Otherwise allow unless it's bigger than a row\n return size <= MAX_ROW_SIZE;\n};\n\nconst getDefaultFieldSize = (attribute: any) => {\n const { hasFieldSize, getFieldSize } = getService('field-sizes');\n\n // Check if it's a custom field with a custom size and get the default size for the field type\n return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type)\n .default;\n};\n\nasync function createDefaultLayouts(schema: any) {\n return {\n // @ts-expect-error necessary to provide this default layout\n list: createDefaultListLayout(schema),\n // @ts-expect-error necessary to provide this default layout\n edit: createDefaultEditLayout(schema),\n ..._.pick(_.get(schema, ['config', 'layouts'], {}), ['list', 'edit']),\n };\n}\n\nfunction createDefaultListLayout(schema: any) {\n return Object.keys(schema.attributes)\n .filter((name) => isListable(schema, name) && name !== 'documentId')\n .slice(0, DEFAULT_LIST_LENGTH);\n}\n\nconst rowSize = (els: any) => els.reduce((sum: any, el: any) => sum + el.size, 0);\n\nfunction createDefaultEditLayout(schema: any) {\n const keys = Object.keys(schema.attributes).filter((name) => hasEditableAttribute(schema, name));\n\n return appendToEditLayout([], keys, schema);\n}\n\n/** Synchronisation functions */\n\nfunction syncLayouts(configuration: any, schema: any) {\n if (_.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);\n\n const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};\n\n let cleanList = list.filter((attr: any) => isListable(schema, attr));\n\n // TODO V5: remove editRelations\n const cleanEditRelations = editRelations.filter((attr: any) =>\n hasRelationAttribute(schema, attr)\n );\n\n // backward compatibility with when relations were on the side of the layout\n // it migrates the displayed relations to the main edit layout\n const elementsToReAppend = [...cleanEditRelations];\n let cleanEdit: unknown[] = [];\n for (const row of edit) {\n const newRow: unknown[] = [];\n\n for (const el of row) {\n if (!hasEditableAttribute(schema, el.name)) continue;\n\n // Check if the field is a custom field with a custom size.\n // If so, use the custom size instead of the type size\n const { hasFieldSize } = getService('field-sizes');\n const fieldType = hasFieldSize(schema.attributes[el.name].customField)\n ? schema.attributes[el.name].customField\n : schema.attributes[el.name].type;\n\n /* if the type of a field was changed (ex: string -> json) or a new field was added in the schema\n and the new type doesn't allow the size of the previous type, append the field at the end of layouts\n */\n if (!isAllowedFieldSize(fieldType, el.size)) {\n elementsToReAppend.push(el.name);\n continue;\n }\n\n newRow.push(el);\n }\n\n if (newRow.length > 0) {\n cleanEdit.push(newRow);\n }\n }\n\n cleanEdit = appendToEditLayout(cleanEdit as any, elementsToReAppend, schema);\n\n const newAttributes = _.difference(\n Object.keys(schema.attributes),\n Object.keys(configuration.metadatas)\n );\n\n /** Add new attributes where they belong */\n\n if (cleanList.length < DEFAULT_LIST_LENGTH) {\n // add newAttributes\n // only add valid listable attributes\n cleanList = _.uniq(\n cleanList\n .concat(newAttributes.filter((key) => isListable(schema, key)))\n .slice(0, DEFAULT_LIST_LENGTH)\n );\n }\n\n // add new attributes to edit view\n const newEditAttributes = newAttributes.filter((key) => hasEditableAttribute(schema, key));\n\n cleanEdit = appendToEditLayout(cleanEdit, newEditAttributes, schema);\n\n return {\n list: cleanList.length > 0 ? cleanList : createDefaultListLayout(schema),\n edit: cleanEdit.length > 0 ? cleanEdit : createDefaultEditLayout(schema),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/default-param-last\nconst appendToEditLayout = (layout: any = [], keysToAppend: any, schema: any) => {\n if (keysToAppend.length === 0) return layout;\n let currentRowIndex = Math.max(layout.length - 1, 0);\n\n // init currentRow if necessary\n if (!layout[currentRowIndex]) {\n layout[currentRowIndex] = [];\n }\n\n for (const key of keysToAppend) {\n const attribute = schema.attributes[key];\n\n const attributeSize = getDefaultFieldSize(attribute);\n const currenRowSize = rowSize(layout[currentRowIndex]);\n\n if (currenRowSize + attributeSize > MAX_ROW_SIZE) {\n currentRowIndex += 1;\n layout[currentRowIndex] = [];\n }\n\n layout[currentRowIndex].push({\n name: key,\n size: attributeSize,\n });\n }\n\n return layout;\n};\n\nexport { createDefaultLayouts, syncLayouts };\n"],"names":["DEFAULT_LIST_LENGTH","MAX_ROW_SIZE","isAllowedFieldSize","type","size","getFieldSize","getService","fieldSize","isResizable","default","getDefaultFieldSize","attribute","hasFieldSize","customField","createDefaultLayouts","schema","list","createDefaultListLayout","edit","createDefaultEditLayout","_","pick","get","Object","keys","attributes","filter","name","isListable","slice","rowSize","els","reduce","sum","el","hasEditableAttribute","appendToEditLayout","syncLayouts","configuration","isEmpty","layouts","editRelations","cleanList","attr","cleanEditRelations","hasRelationAttribute","elementsToReAppend","cleanEdit","row","newRow","fieldType","push","length","newAttributes","difference","metadatas","uniq","concat","key","newEditAttributes","layout","keysToAppend","currentRowIndex","Math","max","attributeSize","currenRowSize"],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ async function createDefaultLayouts(schema) {
|
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
function createDefaultListLayout(schema) {
|
|
38
|
-
return Object.keys(schema.attributes).filter((name)=>isListable(schema, name)).slice(0, DEFAULT_LIST_LENGTH);
|
|
38
|
+
return Object.keys(schema.attributes).filter((name)=>isListable(schema, name) && name !== 'documentId').slice(0, DEFAULT_LIST_LENGTH);
|
|
39
39
|
}
|
|
40
40
|
const rowSize = (els)=>els.reduce((sum, el)=>sum + el.size, 0);
|
|
41
41
|
function createDefaultEditLayout(schema) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layouts.mjs","sources":["../../../../../server/src/services/utils/configuration/layouts.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport { isListable, hasEditableAttribute, hasRelationAttribute } from './attributes';\n\nconst DEFAULT_LIST_LENGTH = 4;\nconst MAX_ROW_SIZE = 12;\n\nconst isAllowedFieldSize = (type: any, size: any) => {\n const { getFieldSize } = getService('field-sizes');\n const fieldSize = getFieldSize(type);\n\n // Check if field was locked to another size\n if (!fieldSize.isResizable && size !== fieldSize.default) {\n return false;\n }\n\n // Otherwise allow unless it's bigger than a row\n return size <= MAX_ROW_SIZE;\n};\n\nconst getDefaultFieldSize = (attribute: any) => {\n const { hasFieldSize, getFieldSize } = getService('field-sizes');\n\n // Check if it's a custom field with a custom size and get the default size for the field type\n return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type)\n .default;\n};\n\nasync function createDefaultLayouts(schema: any) {\n return {\n // @ts-expect-error necessary to provide this default layout\n list: createDefaultListLayout(schema),\n // @ts-expect-error necessary to provide this default layout\n edit: createDefaultEditLayout(schema),\n ..._.pick(_.get(schema, ['config', 'layouts'], {}), ['list', 'edit']),\n };\n}\n\nfunction createDefaultListLayout(schema: any) {\n return Object.keys(schema.attributes)\n .filter((name) => isListable(schema, name))\n .slice(0, DEFAULT_LIST_LENGTH);\n}\n\nconst rowSize = (els: any) => els.reduce((sum: any, el: any) => sum + el.size, 0);\n\nfunction createDefaultEditLayout(schema: any) {\n const keys = Object.keys(schema.attributes).filter((name) => hasEditableAttribute(schema, name));\n\n return appendToEditLayout([], keys, schema);\n}\n\n/** Synchronisation functions */\n\nfunction syncLayouts(configuration: any, schema: any) {\n if (_.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);\n\n const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};\n\n let cleanList = list.filter((attr: any) => isListable(schema, attr));\n\n // TODO V5: remove editRelations\n const cleanEditRelations = editRelations.filter((attr: any) =>\n hasRelationAttribute(schema, attr)\n );\n\n // backward compatibility with when relations were on the side of the layout\n // it migrates the displayed relations to the main edit layout\n const elementsToReAppend = [...cleanEditRelations];\n let cleanEdit: unknown[] = [];\n for (const row of edit) {\n const newRow: unknown[] = [];\n\n for (const el of row) {\n if (!hasEditableAttribute(schema, el.name)) continue;\n\n // Check if the field is a custom field with a custom size.\n // If so, use the custom size instead of the type size\n const { hasFieldSize } = getService('field-sizes');\n const fieldType = hasFieldSize(schema.attributes[el.name].customField)\n ? schema.attributes[el.name].customField\n : schema.attributes[el.name].type;\n\n /* if the type of a field was changed (ex: string -> json) or a new field was added in the schema\n and the new type doesn't allow the size of the previous type, append the field at the end of layouts\n */\n if (!isAllowedFieldSize(fieldType, el.size)) {\n elementsToReAppend.push(el.name);\n continue;\n }\n\n newRow.push(el);\n }\n\n if (newRow.length > 0) {\n cleanEdit.push(newRow);\n }\n }\n\n cleanEdit = appendToEditLayout(cleanEdit as any, elementsToReAppend, schema);\n\n const newAttributes = _.difference(\n Object.keys(schema.attributes),\n Object.keys(configuration.metadatas)\n );\n\n /** Add new attributes where they belong */\n\n if (cleanList.length < DEFAULT_LIST_LENGTH) {\n // add newAttributes\n // only add valid listable attributes\n cleanList = _.uniq(\n cleanList\n .concat(newAttributes.filter((key) => isListable(schema, key)))\n .slice(0, DEFAULT_LIST_LENGTH)\n );\n }\n\n // add new attributes to edit view\n const newEditAttributes = newAttributes.filter((key) => hasEditableAttribute(schema, key));\n\n cleanEdit = appendToEditLayout(cleanEdit, newEditAttributes, schema);\n\n return {\n list: cleanList.length > 0 ? cleanList : createDefaultListLayout(schema),\n edit: cleanEdit.length > 0 ? cleanEdit : createDefaultEditLayout(schema),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/default-param-last\nconst appendToEditLayout = (layout: any = [], keysToAppend: any, schema: any) => {\n if (keysToAppend.length === 0) return layout;\n let currentRowIndex = Math.max(layout.length - 1, 0);\n\n // init currentRow if necessary\n if (!layout[currentRowIndex]) {\n layout[currentRowIndex] = [];\n }\n\n for (const key of keysToAppend) {\n const attribute = schema.attributes[key];\n\n const attributeSize = getDefaultFieldSize(attribute);\n const currenRowSize = rowSize(layout[currentRowIndex]);\n\n if (currenRowSize + attributeSize > MAX_ROW_SIZE) {\n currentRowIndex += 1;\n layout[currentRowIndex] = [];\n }\n\n layout[currentRowIndex].push({\n name: key,\n size: attributeSize,\n });\n }\n\n return layout;\n};\n\nexport { createDefaultLayouts, syncLayouts };\n"],"names":["DEFAULT_LIST_LENGTH","MAX_ROW_SIZE","isAllowedFieldSize","type","size","getFieldSize","getService","fieldSize","isResizable","default","getDefaultFieldSize","attribute","hasFieldSize","customField","createDefaultLayouts","schema","list","createDefaultListLayout","edit","createDefaultEditLayout","_","pick","get","Object","keys","attributes","filter","name","isListable","slice","rowSize","els","reduce","sum","el","hasEditableAttribute","appendToEditLayout","syncLayouts","configuration","isEmpty","layouts","editRelations","cleanList","attr","cleanEditRelations","hasRelationAttribute","elementsToReAppend","cleanEdit","row","newRow","fieldType","push","length","newAttributes","difference","metadatas","uniq","concat","key","newEditAttributes","layout","keysToAppend","currentRowIndex","Math","max","attributeSize","currenRowSize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layouts.mjs","sources":["../../../../../server/src/services/utils/configuration/layouts.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport { isListable, hasEditableAttribute, hasRelationAttribute } from './attributes';\n\nconst DEFAULT_LIST_LENGTH = 4;\nconst MAX_ROW_SIZE = 12;\n\nconst isAllowedFieldSize = (type: any, size: any) => {\n const { getFieldSize } = getService('field-sizes');\n const fieldSize = getFieldSize(type);\n\n // Check if field was locked to another size\n if (!fieldSize.isResizable && size !== fieldSize.default) {\n return false;\n }\n\n // Otherwise allow unless it's bigger than a row\n return size <= MAX_ROW_SIZE;\n};\n\nconst getDefaultFieldSize = (attribute: any) => {\n const { hasFieldSize, getFieldSize } = getService('field-sizes');\n\n // Check if it's a custom field with a custom size and get the default size for the field type\n return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type)\n .default;\n};\n\nasync function createDefaultLayouts(schema: any) {\n return {\n // @ts-expect-error necessary to provide this default layout\n list: createDefaultListLayout(schema),\n // @ts-expect-error necessary to provide this default layout\n edit: createDefaultEditLayout(schema),\n ..._.pick(_.get(schema, ['config', 'layouts'], {}), ['list', 'edit']),\n };\n}\n\nfunction createDefaultListLayout(schema: any) {\n return Object.keys(schema.attributes)\n .filter((name) => isListable(schema, name) && name !== 'documentId')\n .slice(0, DEFAULT_LIST_LENGTH);\n}\n\nconst rowSize = (els: any) => els.reduce((sum: any, el: any) => sum + el.size, 0);\n\nfunction createDefaultEditLayout(schema: any) {\n const keys = Object.keys(schema.attributes).filter((name) => hasEditableAttribute(schema, name));\n\n return appendToEditLayout([], keys, schema);\n}\n\n/** Synchronisation functions */\n\nfunction syncLayouts(configuration: any, schema: any) {\n if (_.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);\n\n const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};\n\n let cleanList = list.filter((attr: any) => isListable(schema, attr));\n\n // TODO V5: remove editRelations\n const cleanEditRelations = editRelations.filter((attr: any) =>\n hasRelationAttribute(schema, attr)\n );\n\n // backward compatibility with when relations were on the side of the layout\n // it migrates the displayed relations to the main edit layout\n const elementsToReAppend = [...cleanEditRelations];\n let cleanEdit: unknown[] = [];\n for (const row of edit) {\n const newRow: unknown[] = [];\n\n for (const el of row) {\n if (!hasEditableAttribute(schema, el.name)) continue;\n\n // Check if the field is a custom field with a custom size.\n // If so, use the custom size instead of the type size\n const { hasFieldSize } = getService('field-sizes');\n const fieldType = hasFieldSize(schema.attributes[el.name].customField)\n ? schema.attributes[el.name].customField\n : schema.attributes[el.name].type;\n\n /* if the type of a field was changed (ex: string -> json) or a new field was added in the schema\n and the new type doesn't allow the size of the previous type, append the field at the end of layouts\n */\n if (!isAllowedFieldSize(fieldType, el.size)) {\n elementsToReAppend.push(el.name);\n continue;\n }\n\n newRow.push(el);\n }\n\n if (newRow.length > 0) {\n cleanEdit.push(newRow);\n }\n }\n\n cleanEdit = appendToEditLayout(cleanEdit as any, elementsToReAppend, schema);\n\n const newAttributes = _.difference(\n Object.keys(schema.attributes),\n Object.keys(configuration.metadatas)\n );\n\n /** Add new attributes where they belong */\n\n if (cleanList.length < DEFAULT_LIST_LENGTH) {\n // add newAttributes\n // only add valid listable attributes\n cleanList = _.uniq(\n cleanList\n .concat(newAttributes.filter((key) => isListable(schema, key)))\n .slice(0, DEFAULT_LIST_LENGTH)\n );\n }\n\n // add new attributes to edit view\n const newEditAttributes = newAttributes.filter((key) => hasEditableAttribute(schema, key));\n\n cleanEdit = appendToEditLayout(cleanEdit, newEditAttributes, schema);\n\n return {\n list: cleanList.length > 0 ? cleanList : createDefaultListLayout(schema),\n edit: cleanEdit.length > 0 ? cleanEdit : createDefaultEditLayout(schema),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/default-param-last\nconst appendToEditLayout = (layout: any = [], keysToAppend: any, schema: any) => {\n if (keysToAppend.length === 0) return layout;\n let currentRowIndex = Math.max(layout.length - 1, 0);\n\n // init currentRow if necessary\n if (!layout[currentRowIndex]) {\n layout[currentRowIndex] = [];\n }\n\n for (const key of keysToAppend) {\n const attribute = schema.attributes[key];\n\n const attributeSize = getDefaultFieldSize(attribute);\n const currenRowSize = rowSize(layout[currentRowIndex]);\n\n if (currenRowSize + attributeSize > MAX_ROW_SIZE) {\n currentRowIndex += 1;\n layout[currentRowIndex] = [];\n }\n\n layout[currentRowIndex].push({\n name: key,\n size: attributeSize,\n });\n }\n\n return layout;\n};\n\nexport { createDefaultLayouts, syncLayouts };\n"],"names":["DEFAULT_LIST_LENGTH","MAX_ROW_SIZE","isAllowedFieldSize","type","size","getFieldSize","getService","fieldSize","isResizable","default","getDefaultFieldSize","attribute","hasFieldSize","customField","createDefaultLayouts","schema","list","createDefaultListLayout","edit","createDefaultEditLayout","_","pick","get","Object","keys","attributes","filter","name","isListable","slice","rowSize","els","reduce","sum","el","hasEditableAttribute","appendToEditLayout","syncLayouts","configuration","isEmpty","layouts","editRelations","cleanList","attr","cleanEditRelations","hasRelationAttribute","elementsToReAppend","cleanEdit","row","newRow","fieldType","push","length","newAttributes","difference","metadatas","uniq","concat","key","newEditAttributes","layout","keysToAppend","currentRowIndex","Math","max","attributeSize","currenRowSize"],"mappings":";;;;AAIA,MAAMA,mBAAsB,GAAA,CAAA;AAC5B,MAAMC,YAAe,GAAA,EAAA;AAErB,MAAMC,kBAAAA,GAAqB,CAACC,IAAWC,EAAAA,IAAAA,GAAAA;AACrC,IAAA,MAAM,EAAEC,YAAY,EAAE,GAAGC,UAAW,CAAA,aAAA,CAAA;AACpC,IAAA,MAAMC,YAAYF,YAAaF,CAAAA,IAAAA,CAAAA;;AAG/B,IAAA,IAAI,CAACI,SAAUC,CAAAA,WAAW,IAAIJ,IAASG,KAAAA,SAAAA,CAAUE,OAAO,EAAE;QACxD,OAAO,KAAA;AACT;;AAGA,IAAA,OAAOL,IAAQH,IAAAA,YAAAA;AACjB,CAAA;AAEA,MAAMS,sBAAsB,CAACC,SAAAA,GAAAA;AAC3B,IAAA,MAAM,EAAEC,YAAY,EAAEP,YAAY,EAAE,GAAGC,UAAW,CAAA,aAAA,CAAA;;IAGlD,OAAOD,YAAAA,CAAaO,YAAaD,CAAAA,SAAAA,CAAUE,WAAW,CAAA,GAAIF,SAAUE,CAAAA,WAAW,GAAGF,SAAAA,CAAUR,IAAI,CAAA,CAC7FM,OAAO;AACZ,CAAA;AAEA,eAAeK,qBAAqBC,MAAW,EAAA;IAC7C,OAAO;;AAELC,QAAAA,IAAAA,EAAMC,uBAAwBF,CAAAA,MAAAA,CAAAA;;AAE9BG,QAAAA,IAAAA,EAAMC,uBAAwBJ,CAAAA,MAAAA,CAAAA;AAC9B,QAAA,GAAGK,EAAEC,IAAI,CAACD,CAAEE,CAAAA,GAAG,CAACP,MAAQ,EAAA;AAAC,YAAA,QAAA;AAAU,YAAA;AAAU,SAAA,EAAE,EAAK,CAAA,EAAA;AAAC,YAAA,MAAA;AAAQ,YAAA;SAAO;AACtE,KAAA;AACF;AAEA,SAASE,wBAAwBF,MAAW,EAAA;AAC1C,IAAA,OAAOQ,OAAOC,IAAI,CAACT,MAAOU,CAAAA,UAAU,EACjCC,MAAM,CAAC,CAACC,IAAAA,GAASC,WAAWb,MAAQY,EAAAA,IAAAA,CAAAA,IAASA,SAAS,YACtDE,CAAAA,CAAAA,KAAK,CAAC,CAAG7B,EAAAA,mBAAAA,CAAAA;AACd;AAEA,MAAM8B,OAAU,GAAA,CAACC,GAAaA,GAAAA,GAAAA,CAAIC,MAAM,CAAC,CAACC,GAAAA,EAAUC,EAAYD,GAAAA,GAAAA,GAAMC,EAAG9B,CAAAA,IAAI,EAAE,CAAA,CAAA;AAE/E,SAASe,wBAAwBJ,MAAW,EAAA;AAC1C,IAAA,MAAMS,IAAOD,GAAAA,MAAAA,CAAOC,IAAI,CAACT,MAAOU,CAAAA,UAAU,CAAEC,CAAAA,MAAM,CAAC,CAACC,IAASQ,GAAAA,oBAAAA,CAAqBpB,MAAQY,EAAAA,IAAAA,CAAAA,CAAAA;IAE1F,OAAOS,kBAAAA,CAAmB,EAAE,EAAEZ,IAAMT,EAAAA,MAAAA,CAAAA;AACtC;AAEA,iCAEA,SAASsB,WAAYC,CAAAA,aAAkB,EAAEvB,MAAW,EAAA;AAClD,IAAA,IAAIK,EAAEmB,OAAO,CAACD,cAAcE,OAAO,CAAA,EAAG,OAAO1B,oBAAqBC,CAAAA,MAAAA,CAAAA;AAElE,IAAA,MAAM,EAAEC,IAAAA,GAAO,EAAE,EAAEyB,gBAAgB,EAAE,EAAEvB,IAAO,GAAA,EAAE,EAAE,GAAGoB,aAAcE,CAAAA,OAAO,IAAI,EAAC;AAE/E,IAAA,IAAIE,YAAY1B,IAAKU,CAAAA,MAAM,CAAC,CAACiB,IAAAA,GAAcf,WAAWb,MAAQ4B,EAAAA,IAAAA,CAAAA,CAAAA;;AAG9D,IAAA,MAAMC,qBAAqBH,aAAcf,CAAAA,MAAM,CAAC,CAACiB,IAAAA,GAC/CE,qBAAqB9B,MAAQ4B,EAAAA,IAAAA,CAAAA,CAAAA;;;AAK/B,IAAA,MAAMG,kBAAqB,GAAA;AAAIF,QAAAA,GAAAA;AAAmB,KAAA;AAClD,IAAA,IAAIG,YAAuB,EAAE;IAC7B,KAAK,MAAMC,OAAO9B,IAAM,CAAA;AACtB,QAAA,MAAM+B,SAAoB,EAAE;QAE5B,KAAK,MAAMf,MAAMc,GAAK,CAAA;AACpB,YAAA,IAAI,CAACb,oBAAAA,CAAqBpB,MAAQmB,EAAAA,EAAAA,CAAGP,IAAI,CAAG,EAAA;;;AAI5C,YAAA,MAAM,EAAEf,YAAY,EAAE,GAAGN,UAAW,CAAA,aAAA,CAAA;YACpC,MAAM4C,SAAAA,GAAYtC,YAAaG,CAAAA,MAAAA,CAAOU,UAAU,CAACS,EAAGP,CAAAA,IAAI,CAAC,CAACd,WAAW,CAAA,GACjEE,MAAOU,CAAAA,UAAU,CAACS,EAAAA,CAAGP,IAAI,CAAC,CAACd,WAAW,GACtCE,MAAAA,CAAOU,UAAU,CAACS,EAAGP,CAAAA,IAAI,CAAC,CAACxB,IAAI;AAEnC;;AAEA,SACA,IAAI,CAACD,kBAAAA,CAAmBgD,SAAWhB,EAAAA,EAAAA,CAAG9B,IAAI,CAAG,EAAA;gBAC3C0C,kBAAmBK,CAAAA,IAAI,CAACjB,EAAAA,CAAGP,IAAI,CAAA;AAC/B,gBAAA;AACF;AAEAsB,YAAAA,MAAAA,CAAOE,IAAI,CAACjB,EAAAA,CAAAA;AACd;QAEA,IAAIe,MAAAA,CAAOG,MAAM,GAAG,CAAG,EAAA;AACrBL,YAAAA,SAAAA,CAAUI,IAAI,CAACF,MAAAA,CAAAA;AACjB;AACF;IAEAF,SAAYX,GAAAA,kBAAAA,CAAmBW,WAAkBD,kBAAoB/B,EAAAA,MAAAA,CAAAA;AAErE,IAAA,MAAMsC,aAAgBjC,GAAAA,CAAAA,CAAEkC,UAAU,CAChC/B,OAAOC,IAAI,CAACT,MAAOU,CAAAA,UAAU,CAC7BF,EAAAA,MAAAA,CAAOC,IAAI,CAACc,cAAciB,SAAS,CAAA,CAAA;AAGrC,gDAEA,IAAIb,SAAUU,CAAAA,MAAM,GAAGpD,mBAAqB,EAAA;;;AAG1C0C,QAAAA,SAAAA,GAAYtB,EAAEoC,IAAI,CAChBd,SACGe,CAAAA,MAAM,CAACJ,aAAc3B,CAAAA,MAAM,CAAC,CAACgC,MAAQ9B,UAAWb,CAAAA,MAAAA,EAAQ2C,GACxD7B,CAAAA,CAAAA,CAAAA,CAAAA,KAAK,CAAC,CAAG7B,EAAAA,mBAAAA,CAAAA,CAAAA;AAEhB;;AAGA,IAAA,MAAM2D,oBAAoBN,aAAc3B,CAAAA,MAAM,CAAC,CAACgC,GAAAA,GAAQvB,qBAAqBpB,MAAQ2C,EAAAA,GAAAA,CAAAA,CAAAA;IAErFX,SAAYX,GAAAA,kBAAAA,CAAmBW,WAAWY,iBAAmB5C,EAAAA,MAAAA,CAAAA;IAE7D,OAAO;AACLC,QAAAA,IAAAA,EAAM0B,SAAUU,CAAAA,MAAM,GAAG,CAAA,GAAIV,YAAYzB,uBAAwBF,CAAAA,MAAAA,CAAAA;AACjEG,QAAAA,IAAAA,EAAM6B,SAAUK,CAAAA,MAAM,GAAG,CAAA,GAAIL,YAAY5B,uBAAwBJ,CAAAA,MAAAA;AACnE,KAAA;AACF;AAEA;AACA,MAAMqB,kBAAqB,GAAA,CAACwB,MAAc,GAAA,EAAE,EAAEC,YAAmB9C,EAAAA,MAAAA,GAAAA;AAC/D,IAAA,IAAI8C,YAAaT,CAAAA,MAAM,KAAK,CAAA,EAAG,OAAOQ,MAAAA;AACtC,IAAA,IAAIE,kBAAkBC,IAAKC,CAAAA,GAAG,CAACJ,MAAOR,CAAAA,MAAM,GAAG,CAAG,EAAA,CAAA,CAAA;;AAGlD,IAAA,IAAI,CAACQ,MAAM,CAACE,eAAAA,CAAgB,EAAE;QAC5BF,MAAM,CAACE,eAAgB,CAAA,GAAG,EAAE;AAC9B;IAEA,KAAK,MAAMJ,OAAOG,YAAc,CAAA;AAC9B,QAAA,MAAMlD,SAAYI,GAAAA,MAAAA,CAAOU,UAAU,CAACiC,GAAI,CAAA;AAExC,QAAA,MAAMO,gBAAgBvD,mBAAoBC,CAAAA,SAAAA,CAAAA;AAC1C,QAAA,MAAMuD,aAAgBpC,GAAAA,OAAAA,CAAQ8B,MAAM,CAACE,eAAgB,CAAA,CAAA;QAErD,IAAII,aAAAA,GAAgBD,gBAAgBhE,YAAc,EAAA;YAChD6D,eAAmB,IAAA,CAAA;YACnBF,MAAM,CAACE,eAAgB,CAAA,GAAG,EAAE;AAC9B;AAEAF,QAAAA,MAAM,CAACE,eAAAA,CAAgB,CAACX,IAAI,CAAC;YAC3BxB,IAAM+B,EAAAA,GAAAA;YACNtD,IAAM6D,EAAAA;AACR,SAAA,CAAA;AACF;IAEA,OAAOL,MAAAA;AACT,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadatas.js","sources":["../../../../../server/src/services/utils/configuration/metadatas.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport {\n isSortable,\n isSearchable,\n isVisible,\n isListable,\n isRelation,\n getDefaultMainField,\n} from './attributes';\n\nfunction createDefaultMetadatas(schema: any) {\n return {\n ...Object.keys(schema.attributes).reduce((acc: any, name) => {\n acc[name] = createDefaultMetadata(schema, name);\n return acc;\n }, {}),\n id: {\n edit: {},\n list: {\n label: 'id',\n searchable: true,\n sortable: true,\n },\n },\n };\n}\n\nfunction createDefaultMetadata(schema: any, name: any) {\n const edit = {\n label: name,\n description: '',\n placeholder: '',\n visible: isVisible(schema, name),\n editable: true,\n } as any;\n\n const fieldAttributes = schema.attributes[name];\n if (isRelation(fieldAttributes)) {\n const { targetModel } = fieldAttributes;\n\n const targetSchema = getTargetSchema(targetModel);\n\n if (targetSchema) {\n edit.mainField = getDefaultMainField(targetSchema);\n }\n }\n\n _.assign(\n edit,\n _.pick(_.get(schema, ['config', 'metadatas', name, 'edit'], {}), [\n 'label',\n 'description',\n 'placeholder',\n 'visible',\n 'editable',\n 'mainField',\n ])\n );\n\n const list = {\n // @ts-expect-error we need to specify these properties\n label: name,\n // @ts-expect-error we need to specify these properties\n searchable: isSearchable(schema, name),\n // @ts-expect-error we need to specify these properties\n sortable: isSortable(schema, name),\n ..._.pick(_.get(schema, ['config', 'metadatas', name, 'list'], {}), [\n 'label',\n 'searchable',\n 'sortable',\n ]),\n };\n\n return { edit, list };\n}\n\n/** Synchronisation functions */\n\nasync function syncMetadatas(configuration: any, schema: any) {\n // clear all keys that do not exist anymore\n if (_.isEmpty(configuration.metadatas)) {\n return createDefaultMetadatas(schema);\n }\n\n // remove old keys\n const metasWithValidKeys = _.pick(configuration.metadatas, Object.keys(schema.attributes));\n\n // add new keys and missing fields\n const metasWithDefaults = _.merge({}, createDefaultMetadatas(schema), metasWithValidKeys);\n\n // clear the invalid mainFields\n const updatedMetas = Object.keys(metasWithDefaults).reduce((acc, key) => {\n const { edit, list } = metasWithDefaults[key];\n const attr = schema.attributes[key];\n\n const updatedMeta = { edit, list };\n // update sortable attr\n if (list.sortable && !isSortable(schema, key)) {\n _.set(updatedMeta, ['list', 'sortable'], false);\n _.set(acc, [key], updatedMeta);\n }\n\n if (list.searchable && !isSearchable(schema, key)) {\n _.set(updatedMeta, ['list', 'searchable'], false);\n _.set(acc, [key], updatedMeta);\n }\n\n if (!_.has(edit, 'mainField')) return acc;\n\n // remove mainField if the attribute is not a relation anymore\n if (!isRelation(attr)) {\n _.set(updatedMeta, 'edit', _.omit(edit, ['mainField']));\n _.set(acc, [key], updatedMeta);\n return acc;\n }\n\n // if the mainField is id you can keep it\n if (edit.mainField === 'id') return acc;\n\n // check the mainField in the targetModel\n const targetSchema = getTargetSchema(attr.targetModel);\n\n if (!targetSchema) return acc;\n\n if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {\n _.set(updatedMeta, ['edit', 'mainField'], getDefaultMainField(targetSchema));\n _.set(acc, [key], updatedMeta);\n return acc;\n }\n\n return acc;\n }, {});\n\n return _.assign(metasWithDefaults, updatedMetas);\n}\n\nconst getTargetSchema = (targetModel: any) => {\n return getService('content-types').findContentType(targetModel);\n};\n\nexport { createDefaultMetadatas, syncMetadatas };\n"],"names":["createDefaultMetadatas","schema","Object","keys","attributes","reduce","acc","name","createDefaultMetadata","id","edit","list","label","searchable","sortable","description","placeholder","visible","isVisible","editable","fieldAttributes","isRelation","targetModel","targetSchema","getTargetSchema","mainField","getDefaultMainField","_","assign","pick","get","isSearchable","isSortable","syncMetadatas","configuration","isEmpty","metadatas","metasWithValidKeys","metasWithDefaults","merge","updatedMetas","key","attr","updatedMeta","set","has","omit","isListable","getService","findContentType"],"mappings":";;;;;;AAWA,SAASA,uBAAuBC,MAAW,EAAA;IACzC,OAAO;QACL,GAAGC,MAAAA,CAAOC,IAAI,CAACF,MAAAA,CAAOG,UAAU,CAAEC,CAAAA,MAAM,CAAC,CAACC,GAAUC,EAAAA,IAAAA,GAAAA;AAClDD,YAAAA,GAAG,CAACC,IAAAA,CAAK,GAAGC,qBAAAA,CAAsBP,MAAQM,EAAAA,IAAAA,CAAAA;YAC1C,OAAOD,GAAAA;AACT,SAAA,EAAG,EAAG,CAAA;QACNG,EAAI,EAAA;AACFC,YAAAA,IAAAA,EAAM,EAAC;YACPC,IAAM,EAAA;gBACJC,KAAO,EAAA,IAAA;gBACPC,UAAY,EAAA,IAAA;gBACZC,QAAU,EAAA;AACZ;AACF;AACF,KAAA;AACF;AAEA,SAASN,qBAAAA,CAAsBP,MAAW,EAAEM,IAAS,EAAA;AACnD,IAAA,MAAMG,IAAO,GAAA;QACXE,KAAOL,EAAAA,IAAAA;
|
|
1
|
+
{"version":3,"file":"metadatas.js","sources":["../../../../../server/src/services/utils/configuration/metadatas.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport {\n isSortable,\n isSearchable,\n isVisible,\n isListable,\n isRelation,\n getDefaultMainField,\n} from './attributes';\n\nfunction createDefaultMetadatas(schema: any) {\n return {\n ...Object.keys(schema.attributes).reduce((acc: any, name) => {\n acc[name] = createDefaultMetadata(schema, name);\n return acc;\n }, {}),\n id: {\n edit: {},\n list: {\n label: 'id',\n searchable: true,\n sortable: true,\n },\n },\n documentId: {\n edit: {},\n list: {\n label: 'documentId',\n searchable: true,\n sortable: true,\n },\n },\n };\n}\n\nfunction createDefaultMetadata(schema: any, name: any) {\n const edit = {\n label: name,\n description: '',\n placeholder: '',\n visible: isVisible(schema, name),\n editable: true,\n } as any;\n\n const fieldAttributes = schema.attributes[name];\n if (isRelation(fieldAttributes)) {\n const { targetModel } = fieldAttributes;\n\n const targetSchema = getTargetSchema(targetModel);\n\n if (targetSchema) {\n edit.mainField = getDefaultMainField(targetSchema);\n }\n }\n\n _.assign(\n edit,\n _.pick(_.get(schema, ['config', 'metadatas', name, 'edit'], {}), [\n 'label',\n 'description',\n 'placeholder',\n 'visible',\n 'editable',\n 'mainField',\n ])\n );\n\n const list = {\n // @ts-expect-error we need to specify these properties\n label: name,\n // @ts-expect-error we need to specify these properties\n searchable: isSearchable(schema, name),\n // @ts-expect-error we need to specify these properties\n sortable: isSortable(schema, name),\n ..._.pick(_.get(schema, ['config', 'metadatas', name, 'list'], {}), [\n 'label',\n 'searchable',\n 'sortable',\n ]),\n };\n\n return { edit, list };\n}\n\n/** Synchronisation functions */\n\nasync function syncMetadatas(configuration: any, schema: any) {\n // clear all keys that do not exist anymore\n if (_.isEmpty(configuration.metadatas)) {\n return createDefaultMetadatas(schema);\n }\n\n // remove old keys\n const metasWithValidKeys = _.pick(configuration.metadatas, Object.keys(schema.attributes));\n\n // add new keys and missing fields\n const metasWithDefaults = _.merge({}, createDefaultMetadatas(schema), metasWithValidKeys);\n\n // clear the invalid mainFields\n const updatedMetas = Object.keys(metasWithDefaults).reduce((acc, key) => {\n const { edit, list } = metasWithDefaults[key];\n const attr = schema.attributes[key];\n\n const updatedMeta = { edit, list };\n\n // update sortable attr\n if (list.sortable && !isSortable(schema, key)) {\n _.set(updatedMeta, ['list', 'sortable'], false);\n _.set(acc, [key], updatedMeta);\n }\n\n if (list.searchable && !isSearchable(schema, key)) {\n _.set(updatedMeta, ['list', 'searchable'], false);\n _.set(acc, [key], updatedMeta);\n }\n\n if (!_.has(edit, 'mainField')) return acc;\n\n // remove mainField if the attribute is not a relation anymore\n if (!isRelation(attr)) {\n _.set(updatedMeta, 'edit', _.omit(edit, ['mainField']));\n _.set(acc, [key], updatedMeta);\n return acc;\n }\n\n // if the mainField is id you can keep it\n if (edit.mainField === 'id') return acc;\n\n // check the mainField in the targetModel\n const targetSchema = getTargetSchema(attr.targetModel);\n\n if (!targetSchema) return acc;\n\n if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {\n _.set(updatedMeta, ['edit', 'mainField'], getDefaultMainField(targetSchema));\n _.set(acc, [key], updatedMeta);\n return acc;\n }\n\n return acc;\n }, {});\n\n return _.assign(metasWithDefaults, updatedMetas);\n}\n\nconst getTargetSchema = (targetModel: any) => {\n return getService('content-types').findContentType(targetModel);\n};\n\nexport { createDefaultMetadatas, syncMetadatas };\n"],"names":["createDefaultMetadatas","schema","Object","keys","attributes","reduce","acc","name","createDefaultMetadata","id","edit","list","label","searchable","sortable","documentId","description","placeholder","visible","isVisible","editable","fieldAttributes","isRelation","targetModel","targetSchema","getTargetSchema","mainField","getDefaultMainField","_","assign","pick","get","isSearchable","isSortable","syncMetadatas","configuration","isEmpty","metadatas","metasWithValidKeys","metasWithDefaults","merge","updatedMetas","key","attr","updatedMeta","set","has","omit","isListable","getService","findContentType"],"mappings":"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"}
|