@strapi/upload 5.55.1 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/hooks/useAIMetadataAvailability.js +14 -0
- package/dist/admin/hooks/useAIMetadataAvailability.js.map +1 -0
- package/dist/admin/hooks/useAIMetadataAvailability.mjs +12 -0
- package/dist/admin/hooks/useAIMetadataAvailability.mjs.map +1 -0
- package/dist/admin/hooks/useAIMetadataEnabled.js +7 -5
- package/dist/admin/hooks/useAIMetadataEnabled.js.map +1 -1
- package/dist/admin/hooks/useAIMetadataEnabled.mjs +7 -5
- package/dist/admin/hooks/useAIMetadataEnabled.mjs.map +1 -1
- package/dist/admin/hooks/useTracking.js +4 -10
- package/dist/admin/hooks/useTracking.js.map +1 -1
- package/dist/admin/hooks/useTracking.mjs +5 -10
- package/dist/admin/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/legacy/hooks/useAIMetadataAvailability.js +14 -0
- package/dist/admin/legacy/hooks/useAIMetadataAvailability.js.map +1 -0
- package/dist/admin/legacy/hooks/useAIMetadataAvailability.mjs +12 -0
- package/dist/admin/legacy/hooks/useAIMetadataAvailability.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useAIMetadataEnabled.js +23 -0
- package/dist/admin/legacy/hooks/useAIMetadataEnabled.js.map +1 -0
- package/dist/admin/legacy/hooks/useAIMetadataEnabled.mjs +21 -0
- package/dist/admin/legacy/hooks/useAIMetadataEnabled.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useTracking.js +5 -3
- package/dist/admin/legacy/hooks/useTracking.js.map +1 -1
- package/dist/admin/legacy/hooks/useTracking.mjs +5 -3
- package/dist/admin/legacy/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.js +2 -1
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.mjs +2 -1
- package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/MediaLibrary.js +6 -5
- package/dist/admin/legacy/pages/App/MediaLibrary.js.map +1 -1
- package/dist/admin/legacy/pages/App/MediaLibrary.mjs +6 -5
- package/dist/admin/legacy/pages/App/MediaLibrary.mjs.map +1 -1
- package/dist/admin/pages/Assets/AssetsPage.js +24 -12
- package/dist/admin/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/pages/Assets/AssetsPage.mjs +25 -13
- package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetActions.js +326 -0
- package/dist/admin/pages/Assets/components/AssetActions.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetActions.mjs +324 -0
- package/dist/admin/pages/Assets/components/AssetActions.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetActionsMenu.js +28 -309
- package/dist/admin/pages/Assets/components/AssetActionsMenu.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetActionsMenu.mjs +31 -312
- package/dist/admin/pages/Assets/components/AssetActionsMenu.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetContextMenu.js +79 -0
- package/dist/admin/pages/Assets/components/AssetContextMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetContextMenu.mjs +77 -0
- package/dist/admin/pages/Assets/components/AssetContextMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.js +87 -5
- package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +89 -7
- package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +3 -3
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +3 -3
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.js +62 -5
- package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.mjs +60 -6
- package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.js +27 -4
- package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs +27 -4
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.js +27 -4
- package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.mjs +27 -4
- package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/CursorAnchoredMenu.js +77 -0
- package/dist/admin/pages/Assets/components/CursorAnchoredMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/CursorAnchoredMenu.mjs +75 -0
- package/dist/admin/pages/Assets/components/CursorAnchoredMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.js +4 -2
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.js.map +1 -1
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.mjs +4 -2
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FolderActions.js +139 -0
- package/dist/admin/pages/Assets/components/FolderActions.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderActions.mjs +137 -0
- package/dist/admin/pages/Assets/components/FolderActions.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/FolderActionsMenu.js +25 -119
- package/dist/admin/pages/Assets/components/FolderActionsMenu.js.map +1 -1
- package/dist/admin/pages/Assets/components/FolderActionsMenu.mjs +27 -121
- package/dist/admin/pages/Assets/components/FolderActionsMenu.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FolderContextMenu.js +67 -0
- package/dist/admin/pages/Assets/components/FolderContextMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderContextMenu.mjs +65 -0
- package/dist/admin/pages/Assets/components/FolderContextMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js +139 -45
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs +140 -47
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FolderTree/FolderTreeRowMenu.js +115 -0
- package/dist/admin/pages/Assets/components/FolderTree/FolderTreeRowMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderTree/FolderTreeRowMenu.mjs +113 -0
- package/dist/admin/pages/Assets/components/FolderTree/FolderTreeRowMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/ItemContextMenu.js +125 -0
- package/dist/admin/pages/Assets/components/ItemContextMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/ItemContextMenu.mjs +122 -0
- package/dist/admin/pages/Assets/components/ItemContextMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/MainAreaContextMenu.js +88 -63
- package/dist/admin/pages/Assets/components/MainAreaContextMenu.js.map +1 -1
- package/dist/admin/pages/Assets/components/MainAreaContextMenu.mjs +88 -63
- package/dist/admin/pages/Assets/components/MainAreaContextMenu.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/SelectionActions.js +111 -0
- package/dist/admin/pages/Assets/components/SelectionActions.js.map +1 -0
- package/dist/admin/pages/Assets/components/SelectionActions.mjs +109 -0
- package/dist/admin/pages/Assets/components/SelectionActions.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/SelectionContextMenu.js +82 -0
- package/dist/admin/pages/Assets/components/SelectionContextMenu.js.map +1 -0
- package/dist/admin/pages/Assets/components/SelectionContextMenu.mjs +80 -0
- package/dist/admin/pages/Assets/components/SelectionContextMenu.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetSelection.js +10 -0
- package/dist/admin/pages/Assets/hooks/useAssetSelection.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs +10 -0
- package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +10 -3
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +10 -3
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/src/hooks/useAIMetadataAvailability.d.ts +5 -0
- package/dist/admin/src/hooks/useAIMetadataEnabled.d.ts +5 -3
- package/dist/admin/src/hooks/useTracking.d.ts +0 -7
- package/dist/admin/src/legacy/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +2 -2
- package/dist/admin/src/legacy/hooks/useAIMetadataAvailability.d.ts +5 -0
- package/dist/admin/src/legacy/hooks/useAIMetadataEnabled.d.ts +12 -0
- package/dist/admin/src/legacy/hooks/useSettings.d.ts +1 -0
- package/dist/admin/src/pages/Assets/components/ActionsMenuContent.d.ts +2 -2
- package/dist/admin/src/pages/Assets/components/AssetActions.d.ts +70 -0
- package/dist/admin/src/pages/Assets/components/AssetActionsMenu.d.ts +5 -14
- package/dist/admin/src/pages/Assets/components/AssetContextMenu.d.ts +27 -0
- package/dist/admin/src/pages/Assets/components/AssetDetails/useCropImg.d.ts +16 -0
- package/dist/admin/src/pages/Assets/components/CursorAnchoredMenu.d.ts +32 -0
- package/dist/admin/src/pages/Assets/components/FolderActions.d.ts +48 -0
- package/dist/admin/src/pages/Assets/components/FolderActionsMenu.d.ts +4 -8
- package/dist/admin/src/pages/Assets/components/FolderContextMenu.d.ts +21 -0
- package/dist/admin/src/pages/Assets/components/FolderTree/FolderTree.d.ts +5 -1
- package/dist/admin/src/pages/Assets/components/FolderTree/FolderTreeRowMenu.d.ts +25 -0
- package/dist/admin/src/pages/Assets/components/ItemContextMenu.d.ts +53 -0
- package/dist/admin/src/pages/Assets/components/MainAreaContextMenu.d.ts +15 -1
- package/dist/admin/src/pages/Assets/components/SelectionActions.d.ts +40 -0
- package/dist/admin/src/pages/Assets/components/SelectionContextMenu.d.ts +25 -0
- package/dist/admin/src/pages/Assets/hooks/useAssetSelection.d.ts +5 -0
- package/dist/admin/src/utils/mediaLibraryVersion.d.ts +18 -0
- package/dist/admin/translations/en.json.js +9 -3
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +9 -3
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/mediaLibraryVersion.js +24 -0
- package/dist/admin/utils/mediaLibraryVersion.js.map +1 -0
- package/dist/admin/utils/mediaLibraryVersion.mjs +20 -0
- package/dist/admin/utils/mediaLibraryVersion.mjs.map +1 -0
- package/dist/server/bootstrap.js +7 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +7 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-file.js +2 -2
- package/dist/server/controllers/admin-file.js.map +1 -1
- package/dist/server/controllers/admin-file.mjs +2 -2
- package/dist/server/controllers/admin-file.mjs.map +1 -1
- package/dist/server/controllers/admin-folder-file.js +51 -4
- package/dist/server/controllers/admin-folder-file.js.map +1 -1
- package/dist/server/controllers/admin-folder-file.mjs +52 -5
- package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
- package/dist/server/controllers/admin-folder.js +5 -5
- package/dist/server/controllers/admin-folder.js.map +1 -1
- package/dist/server/controllers/admin-folder.mjs +5 -5
- package/dist/server/controllers/admin-folder.mjs.map +1 -1
- package/dist/server/controllers/admin-settings.js +2 -1
- package/dist/server/controllers/admin-settings.js.map +1 -1
- package/dist/server/controllers/admin-settings.mjs +2 -1
- package/dist/server/controllers/admin-settings.mjs.map +1 -1
- package/dist/server/controllers/content-api.js +30 -7
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/content-api.mjs +30 -7
- package/dist/server/controllers/content-api.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/folder-file.js +4 -4
- package/dist/server/controllers/validation/admin/folder-file.js.map +1 -1
- package/dist/server/controllers/validation/admin/folder-file.mjs +2 -2
- package/dist/server/controllers/validation/admin/folder-file.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/folder.js +3 -4
- package/dist/server/controllers/validation/admin/folder.js.map +1 -1
- package/dist/server/controllers/validation/admin/folder.mjs +3 -4
- package/dist/server/controllers/validation/admin/folder.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/upload.js +1 -2
- package/dist/server/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs +1 -2
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/utils.js +1 -2
- package/dist/server/controllers/validation/admin/utils.js.map +1 -1
- package/dist/server/controllers/validation/admin/utils.mjs +1 -2
- package/dist/server/controllers/validation/admin/utils.mjs.map +1 -1
- package/dist/server/errors.js +12 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/errors.mjs +10 -0
- package/dist/server/errors.mjs.map +1 -0
- package/dist/server/migrations/unsign-richtext-and-blocks-urls.js +2 -2
- package/dist/server/migrations/unsign-richtext-and-blocks-urls.js.map +1 -1
- package/dist/server/migrations/unsign-richtext-and-blocks-urls.mjs +1 -1
- package/dist/server/migrations/unsign-richtext-and-blocks-urls.mjs.map +1 -1
- package/dist/server/routes/content-api.js +3 -3
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/content-api.mjs +3 -3
- package/dist/server/routes/content-api.mjs.map +1 -1
- package/dist/server/routes/validation/upload.js +8 -0
- package/dist/server/routes/validation/upload.js.map +1 -1
- package/dist/server/routes/validation/upload.mjs +8 -0
- package/dist/server/routes/validation/upload.mjs.map +1 -1
- package/dist/server/services/ai-metadata-provider.js +83 -0
- package/dist/server/services/ai-metadata-provider.js.map +1 -0
- package/dist/server/services/ai-metadata-provider.mjs +61 -0
- package/dist/server/services/ai-metadata-provider.mjs.map +1 -0
- package/dist/server/services/ai-metadata-strapi-managed.js +48 -0
- package/dist/server/services/ai-metadata-strapi-managed.js.map +1 -0
- package/dist/server/services/ai-metadata-strapi-managed.mjs +46 -0
- package/dist/server/services/ai-metadata-strapi-managed.mjs.map +1 -0
- package/dist/server/services/ai-metadata.js +5 -58
- package/dist/server/services/ai-metadata.js.map +1 -1
- package/dist/server/services/ai-metadata.mjs +6 -39
- package/dist/server/services/ai-metadata.mjs.map +1 -1
- package/dist/server/services/api-upload-folder.js +3 -3
- package/dist/server/services/api-upload-folder.js.map +1 -1
- package/dist/server/services/api-upload-folder.mjs +3 -3
- package/dist/server/services/api-upload-folder.mjs.map +1 -1
- package/dist/server/services/extensions/utils.js +19 -15
- package/dist/server/services/extensions/utils.js.map +1 -1
- package/dist/server/services/extensions/utils.mjs +19 -15
- package/dist/server/services/extensions/utils.mjs.map +1 -1
- package/dist/server/services/file.js +2 -2
- package/dist/server/services/file.js.map +1 -1
- package/dist/server/services/file.mjs +1 -1
- package/dist/server/services/file.mjs.map +1 -1
- package/dist/server/services/folder.js +9 -6
- package/dist/server/services/folder.js.map +1 -1
- package/dist/server/services/folder.mjs +9 -6
- package/dist/server/services/folder.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/metrics.js +1 -1
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs +1 -1
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/services/provider.js +3 -4
- package/dist/server/services/provider.js.map +1 -1
- package/dist/server/services/provider.mjs +3 -4
- package/dist/server/services/provider.mjs.map +1 -1
- package/dist/server/services/upload.js +5 -6
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +4 -5
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/services/weekly-metrics.js +2 -2
- package/dist/server/services/weekly-metrics.js.map +1 -1
- package/dist/server/services/weekly-metrics.mjs +2 -2
- package/dist/server/services/weekly-metrics.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-folder-file.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-folder.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
- package/dist/server/src/controllers/content-api.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/folder.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/utils.d.ts.map +1 -1
- package/dist/server/src/errors.d.ts +6 -0
- package/dist/server/src/errors.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +6 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/ambient-instance.d.ts +3 -1
- package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
- package/dist/server/src/routes/validation/upload.d.ts +4 -0
- package/dist/server/src/routes/validation/upload.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata-provider.d.ts +26 -0
- package/dist/server/src/services/ai-metadata-provider.d.ts.map +1 -0
- package/dist/server/src/services/ai-metadata-strapi-managed.d.ts +7 -0
- package/dist/server/src/services/ai-metadata-strapi-managed.d.ts.map +1 -0
- package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
- package/dist/server/src/services/extensions/utils.d.ts +33 -1
- package/dist/server/src/services/extensions/utils.d.ts.map +1 -1
- package/dist/server/src/services/folder.d.ts +5 -2
- package/dist/server/src/services/folder.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +6 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/provider.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/utils/images.d.ts +2 -2
- package/dist/server/src/utils/images.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/images.js +6 -7
- package/dist/server/utils/images.js.map +1 -1
- package/dist/server/utils/images.mjs +6 -7
- package/dist/server/utils/images.mjs.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/settings.d.ts +6 -0
- package/package.json +11 -11
- package/dist/admin/legacy/hooks/useAiAvailability.js +0 -22
- package/dist/admin/legacy/hooks/useAiAvailability.js.map +0 -1
- package/dist/admin/legacy/hooks/useAiAvailability.mjs +0 -20
- package/dist/admin/legacy/hooks/useAiAvailability.mjs.map +0 -1
- package/dist/admin/src/legacy/hooks/useAiAvailability.d.ts +0 -4
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var settings = require('../services/settings.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Whether the server has an AI metadata provider registered, either the
|
|
7
|
+
* Strapi-managed one or a custom one.
|
|
8
|
+
*/ const useAIMetadataAvailability = ()=>{
|
|
9
|
+
const { data } = settings.useGetUploadSettingsQuery();
|
|
10
|
+
return data?.data?.aiMetadataAvailable === true;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.useAIMetadataAvailability = useAIMetadataAvailability;
|
|
14
|
+
//# sourceMappingURL=useAIMetadataAvailability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAIMetadataAvailability.js","sources":["../../../admin/src/hooks/useAIMetadataAvailability.ts"],"sourcesContent":["import { useGetUploadSettingsQuery } from '../services/settings';\n\n/**\n * Whether the server has an AI metadata provider registered, either the\n * Strapi-managed one or a custom one.\n */\nexport const useAIMetadataAvailability = (): boolean => {\n const { data } = useGetUploadSettingsQuery();\n\n return data?.data?.aiMetadataAvailable === true;\n};\n"],"names":["useAIMetadataAvailability","data","useGetUploadSettingsQuery","aiMetadataAvailable"],"mappings":";;;;AAEA;;;UAIaA,yBAAAA,GAA4B,IAAA;IACvC,MAAM,EAAEC,IAAI,EAAE,GAAGC,kCAAAA,EAAAA;IAEjB,OAAOD,IAAAA,EAAMA,MAAME,mBAAAA,KAAwB,IAAA;AAC7C;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useGetUploadSettingsQuery } from '../services/settings.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Whether the server has an AI metadata provider registered, either the
|
|
5
|
+
* Strapi-managed one or a custom one.
|
|
6
|
+
*/ const useAIMetadataAvailability = ()=>{
|
|
7
|
+
const { data } = useGetUploadSettingsQuery();
|
|
8
|
+
return data?.data?.aiMetadataAvailable === true;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export { useAIMetadataAvailability };
|
|
12
|
+
//# sourceMappingURL=useAIMetadataAvailability.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAIMetadataAvailability.mjs","sources":["../../../admin/src/hooks/useAIMetadataAvailability.ts"],"sourcesContent":["import { useGetUploadSettingsQuery } from '../services/settings';\n\n/**\n * Whether the server has an AI metadata provider registered, either the\n * Strapi-managed one or a custom one.\n */\nexport const useAIMetadataAvailability = (): boolean => {\n const { data } = useGetUploadSettingsQuery();\n\n return data?.data?.aiMetadataAvailable === true;\n};\n"],"names":["useAIMetadataAvailability","data","useGetUploadSettingsQuery","aiMetadataAvailable"],"mappings":";;AAEA;;;UAIaA,yBAAAA,GAA4B,IAAA;IACvC,MAAM,EAAEC,IAAI,EAAE,GAAGC,yBAAAA,EAAAA;IAEjB,OAAOD,IAAAA,EAAMA,MAAME,mBAAAA,KAAwB,IAAA;AAC7C;;;;"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var ee = require('@strapi/admin/strapi-admin/ee');
|
|
4
3
|
var constants = require('../shared/constants.js');
|
|
5
4
|
var settings = require('../services/settings.js');
|
|
5
|
+
var useAIMetadataAvailability = require('./useAIMetadataAvailability.js');
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Whether the replace flow will actually regenerate AI metadata, so the UI only
|
|
9
9
|
* promises it when it happens.
|
|
10
10
|
*
|
|
11
11
|
* Two independent gates, both required — `GET /upload/settings` returns the
|
|
12
|
-
* stored `aiMetadata` toggle on its own, which stays `true` (its default)
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* stored `aiMetadata` toggle on its own, which stays `true` (its default) when
|
|
13
|
+
* no AI metadata provider is registered, so the setting alone over-promises.
|
|
14
|
+
* `aiMetadataAvailable` is the server telling us a provider is registered
|
|
15
|
+
* (Strapi-managed or custom). The server's own check (`aiMetadata.isEnabled()`)
|
|
16
|
+
* ANDs the same two conditions.
|
|
15
17
|
*
|
|
16
18
|
* Pass `{ mime }` to add the third gate the replace flow applies: it only
|
|
17
19
|
* regenerates metadata for images the AI provider can read
|
|
@@ -27,7 +29,7 @@ var settings = require('../services/settings.js');
|
|
|
27
29
|
* hook exists to close. `useAIMetadataEnabled({ mime: undefined })` still gates
|
|
28
30
|
* (and fails closed); only an omitted `options` skips the mime check.
|
|
29
31
|
*/ const useAIMetadataEnabled = (options)=>{
|
|
30
|
-
const isAIAvailable =
|
|
32
|
+
const isAIAvailable = useAIMetadataAvailability.useAIMetadataAvailability();
|
|
31
33
|
const { data: settings$1 } = settings.useGetUploadSettingsQuery();
|
|
32
34
|
if (!isAIAvailable || !(settings$1?.data?.aiMetadata ?? false)) {
|
|
33
35
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAIMetadataEnabled.js","sources":["../../../admin/src/hooks/useAIMetadataEnabled.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"useAIMetadataEnabled.js","sources":["../../../admin/src/hooks/useAIMetadataEnabled.ts"],"sourcesContent":["import { isAIMetadataSupportedMime } from '../../../shared/constants';\nimport { useGetUploadSettingsQuery } from '../services/settings';\n\nimport { useAIMetadataAvailability } from './useAIMetadataAvailability';\n\n/**\n * Whether the replace flow will actually regenerate AI metadata, so the UI only\n * promises it when it happens.\n *\n * Two independent gates, both required — `GET /upload/settings` returns the\n * stored `aiMetadata` toggle on its own, which stays `true` (its default) when\n * no AI metadata provider is registered, so the setting alone over-promises.\n * `aiMetadataAvailable` is the server telling us a provider is registered\n * (Strapi-managed or custom). The server's own check (`aiMetadata.isEnabled()`)\n * ANDs the same two conditions.\n *\n * Pass `{ mime }` to add the third gate the replace flow applies: it only\n * regenerates metadata for images the AI provider can read\n * (`admin-upload.replaceFile` → `aiMetadata.processFiles`, which filters on this\n * same allowlist). Promising it for a PDF — or for a GIF, which clears the\n * server's looser `image/*` gate but is skipped by the provider — would describe\n * something that never happens.\n *\n * The argument is an object rather than a bare `mime` so the two intents stay\n * distinguishable: `File.mime` is optional on the contract, so a positional\n * parameter let `useAIMetadataEnabled(asset.mime)` collapse into the ungated\n * call whenever the mime was missing — silently taking the permissive path this\n * hook exists to close. `useAIMetadataEnabled({ mime: undefined })` still gates\n * (and fails closed); only an omitted `options` skips the mime check.\n */\nexport const useAIMetadataEnabled = (options?: { mime?: string | null }): boolean => {\n const isAIAvailable = useAIMetadataAvailability();\n const { data: settings } = useGetUploadSettingsQuery();\n\n if (!isAIAvailable || !(settings?.data?.aiMetadata ?? false)) {\n return false;\n }\n\n return options === undefined ? true : isAIMetadataSupportedMime(options.mime);\n};\n"],"names":["useAIMetadataEnabled","options","isAIAvailable","useAIMetadataAvailability","data","settings","useGetUploadSettingsQuery","aiMetadata","undefined","isAIMetadataSupportedMime","mime"],"mappings":";;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;IAyBO,MAAMA,oBAAAA,GAAuB,CAACC,OAAAA,GAAAA;AACnC,IAAA,MAAMC,aAAAA,GAAgBC,mDAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEC,IAAAA,EAAMC,UAAQ,EAAE,GAAGC,kCAAAA,EAAAA;IAE3B,IAAI,CAACJ,iBAAiB,EAAEG,YAAUD,IAAAA,EAAMG,UAAAA,IAAc,KAAI,CAAA,EAAI;QAC5D,OAAO,KAAA;AACT,IAAA;AAEA,IAAA,OAAON,OAAAA,KAAYO,SAAAA,GAAY,IAAA,GAAOC,mCAAAA,CAA0BR,QAAQS,IAAI,CAAA;AAC9E;;;;"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { useAIAvailability } from '@strapi/admin/strapi-admin/ee';
|
|
2
1
|
import { isAIMetadataSupportedMime } from '../shared/constants.mjs';
|
|
3
2
|
import { useGetUploadSettingsQuery } from '../services/settings.mjs';
|
|
3
|
+
import { useAIMetadataAvailability } from './useAIMetadataAvailability.mjs';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Whether the replace flow will actually regenerate AI metadata, so the UI only
|
|
7
7
|
* promises it when it happens.
|
|
8
8
|
*
|
|
9
9
|
* Two independent gates, both required — `GET /upload/settings` returns the
|
|
10
|
-
* stored `aiMetadata` toggle on its own, which stays `true` (its default)
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* stored `aiMetadata` toggle on its own, which stays `true` (its default) when
|
|
11
|
+
* no AI metadata provider is registered, so the setting alone over-promises.
|
|
12
|
+
* `aiMetadataAvailable` is the server telling us a provider is registered
|
|
13
|
+
* (Strapi-managed or custom). The server's own check (`aiMetadata.isEnabled()`)
|
|
14
|
+
* ANDs the same two conditions.
|
|
13
15
|
*
|
|
14
16
|
* Pass `{ mime }` to add the third gate the replace flow applies: it only
|
|
15
17
|
* regenerates metadata for images the AI provider can read
|
|
@@ -25,7 +27,7 @@ import { useGetUploadSettingsQuery } from '../services/settings.mjs';
|
|
|
25
27
|
* hook exists to close. `useAIMetadataEnabled({ mime: undefined })` still gates
|
|
26
28
|
* (and fails closed); only an omitted `options` skips the mime check.
|
|
27
29
|
*/ const useAIMetadataEnabled = (options)=>{
|
|
28
|
-
const isAIAvailable =
|
|
30
|
+
const isAIAvailable = useAIMetadataAvailability();
|
|
29
31
|
const { data: settings } = useGetUploadSettingsQuery();
|
|
30
32
|
if (!isAIAvailable || !(settings?.data?.aiMetadata ?? false)) {
|
|
31
33
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAIMetadataEnabled.mjs","sources":["../../../admin/src/hooks/useAIMetadataEnabled.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"useAIMetadataEnabled.mjs","sources":["../../../admin/src/hooks/useAIMetadataEnabled.ts"],"sourcesContent":["import { isAIMetadataSupportedMime } from '../../../shared/constants';\nimport { useGetUploadSettingsQuery } from '../services/settings';\n\nimport { useAIMetadataAvailability } from './useAIMetadataAvailability';\n\n/**\n * Whether the replace flow will actually regenerate AI metadata, so the UI only\n * promises it when it happens.\n *\n * Two independent gates, both required — `GET /upload/settings` returns the\n * stored `aiMetadata` toggle on its own, which stays `true` (its default) when\n * no AI metadata provider is registered, so the setting alone over-promises.\n * `aiMetadataAvailable` is the server telling us a provider is registered\n * (Strapi-managed or custom). The server's own check (`aiMetadata.isEnabled()`)\n * ANDs the same two conditions.\n *\n * Pass `{ mime }` to add the third gate the replace flow applies: it only\n * regenerates metadata for images the AI provider can read\n * (`admin-upload.replaceFile` → `aiMetadata.processFiles`, which filters on this\n * same allowlist). Promising it for a PDF — or for a GIF, which clears the\n * server's looser `image/*` gate but is skipped by the provider — would describe\n * something that never happens.\n *\n * The argument is an object rather than a bare `mime` so the two intents stay\n * distinguishable: `File.mime` is optional on the contract, so a positional\n * parameter let `useAIMetadataEnabled(asset.mime)` collapse into the ungated\n * call whenever the mime was missing — silently taking the permissive path this\n * hook exists to close. `useAIMetadataEnabled({ mime: undefined })` still gates\n * (and fails closed); only an omitted `options` skips the mime check.\n */\nexport const useAIMetadataEnabled = (options?: { mime?: string | null }): boolean => {\n const isAIAvailable = useAIMetadataAvailability();\n const { data: settings } = useGetUploadSettingsQuery();\n\n if (!isAIAvailable || !(settings?.data?.aiMetadata ?? false)) {\n return false;\n }\n\n return options === undefined ? true : isAIMetadataSupportedMime(options.mime);\n};\n"],"names":["useAIMetadataEnabled","options","isAIAvailable","useAIMetadataAvailability","data","settings","useGetUploadSettingsQuery","aiMetadata","undefined","isAIMetadataSupportedMime","mime"],"mappings":";;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;IAyBO,MAAMA,oBAAAA,GAAuB,CAACC,OAAAA,GAAAA;AACnC,IAAA,MAAMC,aAAAA,GAAgBC,yBAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEC,IAAAA,EAAMC,QAAQ,EAAE,GAAGC,yBAAAA,EAAAA;IAE3B,IAAI,CAACJ,iBAAiB,EAAEG,UAAUD,IAAAA,EAAMG,UAAAA,IAAc,KAAI,CAAA,EAAI;QAC5D,OAAO,KAAA;AACT,IAAA;AAEA,IAAA,OAAON,OAAAA,KAAYO,SAAAA,GAAY,IAAA,GAAOC,yBAAAA,CAA0BR,QAAQS,IAAI,CAAA;AAC9E;;;;"}
|
|
@@ -2,15 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
5
|
-
var ee = require('@strapi/admin/strapi-admin/ee');
|
|
6
5
|
var settings = require('../services/settings.js');
|
|
6
|
+
var mediaLibraryVersion = require('../utils/mediaLibraryVersion.js');
|
|
7
|
+
var useAIMetadataAvailability = require('./useAIMetadataAvailability.js');
|
|
7
8
|
|
|
8
|
-
/**
|
|
9
|
-
* Media Library version tag stamped on every event fired from the current
|
|
10
|
-
* Media Library. Events from `legacy/` omit it, so analytics can filter new
|
|
11
|
-
* usage from the old plan while both trees emit the SAME event names. Bump
|
|
12
|
-
* this if a future revamp ever needs its own bucket.
|
|
13
|
-
*/ const MEDIA_LIBRARY_VERSION = 'v2';
|
|
14
9
|
/**
|
|
15
10
|
* `location` value for every new Media Library event. The new tree is the
|
|
16
11
|
* standalone Media Library page, which the legacy plan tags `'upload'` (as
|
|
@@ -30,7 +25,7 @@ var settings = require('../services/settings.js');
|
|
|
30
25
|
*/ const useTracking = ()=>{
|
|
31
26
|
const { trackUsage: trackStrapiUsage } = strapiAdmin.useTracking();
|
|
32
27
|
const { data } = settings.useGetUploadSettingsQuery();
|
|
33
|
-
const isAiAvailable =
|
|
28
|
+
const isAiAvailable = useAIMetadataAvailability.useAIMetadataAvailability();
|
|
34
29
|
// Memoised so consumers can safely list `trackUsage` in effect deps (the
|
|
35
30
|
// search-input debounce commit does) without re-firing every render.
|
|
36
31
|
const trackUsage = React.useCallback((event, properties)=>{
|
|
@@ -39,7 +34,7 @@ var settings = require('../services/settings.js');
|
|
|
39
34
|
...isAiAvailable ? {
|
|
40
35
|
isAiMediaLibraryConfigured: Boolean(data?.data?.aiMetadata)
|
|
41
36
|
} : {},
|
|
42
|
-
mediaLibraryVersion:
|
|
37
|
+
mediaLibraryVersion: mediaLibraryVersion.getMediaLibraryVersion()
|
|
43
38
|
});
|
|
44
39
|
}, [
|
|
45
40
|
trackStrapiUsage,
|
|
@@ -52,6 +47,5 @@ var settings = require('../services/settings.js');
|
|
|
52
47
|
};
|
|
53
48
|
|
|
54
49
|
exports.MEDIA_LIBRARY_LOCATION = MEDIA_LIBRARY_LOCATION;
|
|
55
|
-
exports.MEDIA_LIBRARY_VERSION = MEDIA_LIBRARY_VERSION;
|
|
56
50
|
exports.useTracking = useTracking;
|
|
57
51
|
//# sourceMappingURL=useTracking.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTracking.js","sources":["../../../admin/src/hooks/useTracking.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useTracking as useStrapiTracking, type TrackingEvent } from '@strapi/admin/strapi-admin';\nimport {
|
|
1
|
+
{"version":3,"file":"useTracking.js","sources":["../../../admin/src/hooks/useTracking.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useTracking as useStrapiTracking, type TrackingEvent } from '@strapi/admin/strapi-admin';\n\nimport { useGetUploadSettingsQuery } from '../services/settings';\nimport { getMediaLibraryVersion } from '../utils/mediaLibraryVersion';\n\nimport { useAIMetadataAvailability } from './useAIMetadataAvailability';\n\n/**\n * `location` value for every new Media Library event. The new tree is the\n * standalone Media Library page, which the legacy plan tags `'upload'` (as\n * opposed to `'content-manager'` for the asset-picker modal). Kept identical so\n * migrated events line up with the legacy ones on the `location` axis.\n */\nexport const MEDIA_LIBRARY_LOCATION = 'upload';\n\n/**\n * Tracking wrapper scoped to the new Media Library. Mirrors the legacy\n * `admin/src/hooks/useTracking` — it forwards to the admin `trackUsage` and\n * injects `isAiMediaLibraryConfigured` when AI is available — and additionally\n * stamps `mediaLibraryVersion` on every event so the migrated plan stays\n * distinguishable from the legacy one.\n *\n * The cast mirrors the legacy wrapper: these two properties are cross-cutting\n * media-tracking metadata that the admin `TrackingEvent` type does not (and\n * should not) enumerate per event.\n */\nexport const useTracking = () => {\n const { trackUsage: trackStrapiUsage } = useStrapiTracking();\n const { data } = useGetUploadSettingsQuery();\n const isAiAvailable = useAIMetadataAvailability();\n\n // Memoised so consumers can safely list `trackUsage` in effect deps (the\n // search-input debounce commit does) without re-firing every render.\n const trackUsage = useCallback(\n <TEvent extends TrackingEvent>(event: TEvent['name'], properties?: TEvent['properties']) => {\n return trackStrapiUsage(event, {\n ...properties,\n ...(isAiAvailable ? { isAiMediaLibraryConfigured: Boolean(data?.data?.aiMetadata) } : {}),\n mediaLibraryVersion: getMediaLibraryVersion(),\n } as TEvent['properties']);\n },\n [trackStrapiUsage, isAiAvailable, data]\n );\n\n return { trackUsage };\n};\n"],"names":["MEDIA_LIBRARY_LOCATION","useTracking","trackUsage","trackStrapiUsage","useStrapiTracking","data","useGetUploadSettingsQuery","isAiAvailable","useAIMetadataAvailability","useCallback","event","properties","isAiMediaLibraryConfigured","Boolean","aiMetadata","mediaLibraryVersion","getMediaLibraryVersion"],"mappings":";;;;;;;;AASA;;;;;IAMO,MAAMA,sBAAAA,GAAyB;AAEtC;;;;;;;;;;UAWaC,WAAAA,GAAc,IAAA;AACzB,IAAA,MAAM,EAAEC,UAAAA,EAAYC,gBAAgB,EAAE,GAAGC,uBAAAA,EAAAA;IACzC,MAAM,EAAEC,IAAI,EAAE,GAAGC,kCAAAA,EAAAA;AACjB,IAAA,MAAMC,aAAAA,GAAgBC,mDAAAA,EAAAA;;;IAItB,MAAMN,UAAAA,GAAaO,iBAAAA,CACjB,CAA+BC,KAAAA,EAAuBC,UAAAA,GAAAA;AACpD,QAAA,OAAOR,iBAAiBO,KAAAA,EAAO;AAC7B,YAAA,GAAGC,UAAU;AACb,YAAA,GAAIJ,aAAAA,GAAgB;gBAAEK,0BAAAA,EAA4BC,OAAAA,CAAQR,MAAMA,IAAAA,EAAMS,UAAAA;AAAY,aAAA,GAAI,EAAE;YACxFC,mBAAAA,EAAqBC,0CAAAA;AACvB,SAAA,CAAA;IACF,CAAA,EACA;AAACb,QAAAA,gBAAAA;AAAkBI,QAAAA,aAAAA;AAAeF,QAAAA;AAAK,KAAA,CAAA;IAGzC,OAAO;AAAEH,QAAAA;AAAW,KAAA;AACtB;;;;;"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
2
|
import { useTracking as useTracking$1 } from '@strapi/admin/strapi-admin';
|
|
3
|
-
import { useAIAvailability } from '@strapi/admin/strapi-admin/ee';
|
|
4
3
|
import { useGetUploadSettingsQuery } from '../services/settings.mjs';
|
|
4
|
+
import { getMediaLibraryVersion } from '../utils/mediaLibraryVersion.mjs';
|
|
5
|
+
import { useAIMetadataAvailability } from './useAIMetadataAvailability.mjs';
|
|
5
6
|
|
|
6
|
-
/**
|
|
7
|
-
* Media Library version tag stamped on every event fired from the current
|
|
8
|
-
* Media Library. Events from `legacy/` omit it, so analytics can filter new
|
|
9
|
-
* usage from the old plan while both trees emit the SAME event names. Bump
|
|
10
|
-
* this if a future revamp ever needs its own bucket.
|
|
11
|
-
*/ const MEDIA_LIBRARY_VERSION = 'v2';
|
|
12
7
|
/**
|
|
13
8
|
* `location` value for every new Media Library event. The new tree is the
|
|
14
9
|
* standalone Media Library page, which the legacy plan tags `'upload'` (as
|
|
@@ -28,7 +23,7 @@ import { useGetUploadSettingsQuery } from '../services/settings.mjs';
|
|
|
28
23
|
*/ const useTracking = ()=>{
|
|
29
24
|
const { trackUsage: trackStrapiUsage } = useTracking$1();
|
|
30
25
|
const { data } = useGetUploadSettingsQuery();
|
|
31
|
-
const isAiAvailable =
|
|
26
|
+
const isAiAvailable = useAIMetadataAvailability();
|
|
32
27
|
// Memoised so consumers can safely list `trackUsage` in effect deps (the
|
|
33
28
|
// search-input debounce commit does) without re-firing every render.
|
|
34
29
|
const trackUsage = useCallback((event, properties)=>{
|
|
@@ -37,7 +32,7 @@ import { useGetUploadSettingsQuery } from '../services/settings.mjs';
|
|
|
37
32
|
...isAiAvailable ? {
|
|
38
33
|
isAiMediaLibraryConfigured: Boolean(data?.data?.aiMetadata)
|
|
39
34
|
} : {},
|
|
40
|
-
mediaLibraryVersion:
|
|
35
|
+
mediaLibraryVersion: getMediaLibraryVersion()
|
|
41
36
|
});
|
|
42
37
|
}, [
|
|
43
38
|
trackStrapiUsage,
|
|
@@ -49,5 +44,5 @@ import { useGetUploadSettingsQuery } from '../services/settings.mjs';
|
|
|
49
44
|
};
|
|
50
45
|
};
|
|
51
46
|
|
|
52
|
-
export { MEDIA_LIBRARY_LOCATION,
|
|
47
|
+
export { MEDIA_LIBRARY_LOCATION, useTracking };
|
|
53
48
|
//# sourceMappingURL=useTracking.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTracking.mjs","sources":["../../../admin/src/hooks/useTracking.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useTracking as useStrapiTracking, type TrackingEvent } from '@strapi/admin/strapi-admin';\nimport {
|
|
1
|
+
{"version":3,"file":"useTracking.mjs","sources":["../../../admin/src/hooks/useTracking.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useTracking as useStrapiTracking, type TrackingEvent } from '@strapi/admin/strapi-admin';\n\nimport { useGetUploadSettingsQuery } from '../services/settings';\nimport { getMediaLibraryVersion } from '../utils/mediaLibraryVersion';\n\nimport { useAIMetadataAvailability } from './useAIMetadataAvailability';\n\n/**\n * `location` value for every new Media Library event. The new tree is the\n * standalone Media Library page, which the legacy plan tags `'upload'` (as\n * opposed to `'content-manager'` for the asset-picker modal). Kept identical so\n * migrated events line up with the legacy ones on the `location` axis.\n */\nexport const MEDIA_LIBRARY_LOCATION = 'upload';\n\n/**\n * Tracking wrapper scoped to the new Media Library. Mirrors the legacy\n * `admin/src/hooks/useTracking` — it forwards to the admin `trackUsage` and\n * injects `isAiMediaLibraryConfigured` when AI is available — and additionally\n * stamps `mediaLibraryVersion` on every event so the migrated plan stays\n * distinguishable from the legacy one.\n *\n * The cast mirrors the legacy wrapper: these two properties are cross-cutting\n * media-tracking metadata that the admin `TrackingEvent` type does not (and\n * should not) enumerate per event.\n */\nexport const useTracking = () => {\n const { trackUsage: trackStrapiUsage } = useStrapiTracking();\n const { data } = useGetUploadSettingsQuery();\n const isAiAvailable = useAIMetadataAvailability();\n\n // Memoised so consumers can safely list `trackUsage` in effect deps (the\n // search-input debounce commit does) without re-firing every render.\n const trackUsage = useCallback(\n <TEvent extends TrackingEvent>(event: TEvent['name'], properties?: TEvent['properties']) => {\n return trackStrapiUsage(event, {\n ...properties,\n ...(isAiAvailable ? { isAiMediaLibraryConfigured: Boolean(data?.data?.aiMetadata) } : {}),\n mediaLibraryVersion: getMediaLibraryVersion(),\n } as TEvent['properties']);\n },\n [trackStrapiUsage, isAiAvailable, data]\n );\n\n return { trackUsage };\n};\n"],"names":["MEDIA_LIBRARY_LOCATION","useTracking","trackUsage","trackStrapiUsage","useStrapiTracking","data","useGetUploadSettingsQuery","isAiAvailable","useAIMetadataAvailability","useCallback","event","properties","isAiMediaLibraryConfigured","Boolean","aiMetadata","mediaLibraryVersion","getMediaLibraryVersion"],"mappings":";;;;;;AASA;;;;;IAMO,MAAMA,sBAAAA,GAAyB;AAEtC;;;;;;;;;;UAWaC,WAAAA,GAAc,IAAA;AACzB,IAAA,MAAM,EAAEC,UAAAA,EAAYC,gBAAgB,EAAE,GAAGC,aAAAA,EAAAA;IACzC,MAAM,EAAEC,IAAI,EAAE,GAAGC,yBAAAA,EAAAA;AACjB,IAAA,MAAMC,aAAAA,GAAgBC,yBAAAA,EAAAA;;;IAItB,MAAMN,UAAAA,GAAaO,WAAAA,CACjB,CAA+BC,KAAAA,EAAuBC,UAAAA,GAAAA;AACpD,QAAA,OAAOR,iBAAiBO,KAAAA,EAAO;AAC7B,YAAA,GAAGC,UAAU;AACb,YAAA,GAAIJ,aAAAA,GAAgB;gBAAEK,0BAAAA,EAA4BC,OAAAA,CAAQR,MAAMA,IAAAA,EAAMS,UAAAA;AAAY,aAAA,GAAI,EAAE;YACxFC,mBAAAA,EAAqBC,sBAAAA;AACvB,SAAA,CAAA;IACF,CAAA,EACA;AAACb,QAAAA,gBAAAA;AAAkBI,QAAAA,aAAAA;AAAeF,QAAAA;AAAK,KAAA,CAAA;IAGzC,OAAO;AAAEH,QAAAA;AAAW,KAAA;AACtB;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useSettings = require('./useSettings.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Whether the server has an AI metadata provider registered, either the
|
|
7
|
+
* Strapi-managed one or a custom one.
|
|
8
|
+
*/ const useAIMetadataAvailability = ()=>{
|
|
9
|
+
const { data } = useSettings.useSettings();
|
|
10
|
+
return data?.aiMetadataAvailable === true;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.useAIMetadataAvailability = useAIMetadataAvailability;
|
|
14
|
+
//# sourceMappingURL=useAIMetadataAvailability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAIMetadataAvailability.js","sources":["../../../../admin/src/legacy/hooks/useAIMetadataAvailability.ts"],"sourcesContent":["import { useSettings } from './useSettings';\n\n/**\n * Whether the server has an AI metadata provider registered, either the\n * Strapi-managed one or a custom one.\n */\nexport const useAIMetadataAvailability = (): boolean => {\n const { data } = useSettings();\n\n return data?.aiMetadataAvailable === true;\n};\n"],"names":["useAIMetadataAvailability","data","useSettings","aiMetadataAvailable"],"mappings":";;;;AAEA;;;UAIaA,yBAAAA,GAA4B,IAAA;IACvC,MAAM,EAAEC,IAAI,EAAE,GAAGC,uBAAAA,EAAAA;AAEjB,IAAA,OAAOD,MAAME,mBAAAA,KAAwB,IAAA;AACvC;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useSettings } from './useSettings.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Whether the server has an AI metadata provider registered, either the
|
|
5
|
+
* Strapi-managed one or a custom one.
|
|
6
|
+
*/ const useAIMetadataAvailability = ()=>{
|
|
7
|
+
const { data } = useSettings();
|
|
8
|
+
return data?.aiMetadataAvailable === true;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export { useAIMetadataAvailability };
|
|
12
|
+
//# sourceMappingURL=useAIMetadataAvailability.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAIMetadataAvailability.mjs","sources":["../../../../admin/src/legacy/hooks/useAIMetadataAvailability.ts"],"sourcesContent":["import { useSettings } from './useSettings';\n\n/**\n * Whether the server has an AI metadata provider registered, either the\n * Strapi-managed one or a custom one.\n */\nexport const useAIMetadataAvailability = (): boolean => {\n const { data } = useSettings();\n\n return data?.aiMetadataAvailable === true;\n};\n"],"names":["useAIMetadataAvailability","data","useSettings","aiMetadataAvailable"],"mappings":";;AAEA;;;UAIaA,yBAAAA,GAA4B,IAAA;IACvC,MAAM,EAAEC,IAAI,EAAE,GAAGC,WAAAA,EAAAA;AAEjB,IAAA,OAAOD,MAAME,mBAAAA,KAAwB,IAAA;AACvC;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useAIMetadataAvailability = require('./useAIMetadataAvailability.js');
|
|
4
|
+
var useSettings = require('./useSettings.js');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Whether the Media Library will actually generate AI metadata: a provider is
|
|
8
|
+
* registered (`useAIMetadataAvailability`) and the stored `aiMetadata` toggle
|
|
9
|
+
* is on. The server ANDs the same two conditions in `aiMetadata.isEnabled()`.
|
|
10
|
+
*
|
|
11
|
+
* `status` is the settings query status, so the page can show its skeleton
|
|
12
|
+
* while the answer is still unknown.
|
|
13
|
+
*/ const useAIMetadataEnabled = ()=>{
|
|
14
|
+
const { status, data } = useSettings.useSettings();
|
|
15
|
+
const isAvailable = useAIMetadataAvailability.useAIMetadataAvailability();
|
|
16
|
+
return {
|
|
17
|
+
status,
|
|
18
|
+
isEnabled: isAvailable && data?.aiMetadata === true
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
exports.useAIMetadataEnabled = useAIMetadataEnabled;
|
|
23
|
+
//# sourceMappingURL=useAIMetadataEnabled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAIMetadataEnabled.js","sources":["../../../../admin/src/legacy/hooks/useAIMetadataEnabled.ts"],"sourcesContent":["import { useAIMetadataAvailability } from './useAIMetadataAvailability';\nimport { useSettings } from './useSettings';\n\n/**\n * Whether the Media Library will actually generate AI metadata: a provider is\n * registered (`useAIMetadataAvailability`) and the stored `aiMetadata` toggle\n * is on. The server ANDs the same two conditions in `aiMetadata.isEnabled()`.\n *\n * `status` is the settings query status, so the page can show its skeleton\n * while the answer is still unknown.\n */\nexport const useAIMetadataEnabled = () => {\n const { status, data } = useSettings();\n const isAvailable = useAIMetadataAvailability();\n\n return { status, isEnabled: isAvailable && data?.aiMetadata === true };\n};\n"],"names":["useAIMetadataEnabled","status","data","useSettings","isAvailable","useAIMetadataAvailability","isEnabled","aiMetadata"],"mappings":";;;;;AAGA;;;;;;;UAQaA,oBAAAA,GAAuB,IAAA;AAClC,IAAA,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAGC,uBAAAA,EAAAA;AACzB,IAAA,MAAMC,WAAAA,GAAcC,mDAAAA,EAAAA;IAEpB,OAAO;AAAEJ,QAAAA,MAAAA;QAAQK,SAAAA,EAAWF,WAAAA,IAAeF,MAAMK,UAAAA,KAAe;AAAK,KAAA;AACvE;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useAIMetadataAvailability } from './useAIMetadataAvailability.mjs';
|
|
2
|
+
import { useSettings } from './useSettings.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Whether the Media Library will actually generate AI metadata: a provider is
|
|
6
|
+
* registered (`useAIMetadataAvailability`) and the stored `aiMetadata` toggle
|
|
7
|
+
* is on. The server ANDs the same two conditions in `aiMetadata.isEnabled()`.
|
|
8
|
+
*
|
|
9
|
+
* `status` is the settings query status, so the page can show its skeleton
|
|
10
|
+
* while the answer is still unknown.
|
|
11
|
+
*/ const useAIMetadataEnabled = ()=>{
|
|
12
|
+
const { status, data } = useSettings();
|
|
13
|
+
const isAvailable = useAIMetadataAvailability();
|
|
14
|
+
return {
|
|
15
|
+
status,
|
|
16
|
+
isEnabled: isAvailable && data?.aiMetadata === true
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { useAIMetadataEnabled };
|
|
21
|
+
//# sourceMappingURL=useAIMetadataEnabled.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAIMetadataEnabled.mjs","sources":["../../../../admin/src/legacy/hooks/useAIMetadataEnabled.ts"],"sourcesContent":["import { useAIMetadataAvailability } from './useAIMetadataAvailability';\nimport { useSettings } from './useSettings';\n\n/**\n * Whether the Media Library will actually generate AI metadata: a provider is\n * registered (`useAIMetadataAvailability`) and the stored `aiMetadata` toggle\n * is on. The server ANDs the same two conditions in `aiMetadata.isEnabled()`.\n *\n * `status` is the settings query status, so the page can show its skeleton\n * while the answer is still unknown.\n */\nexport const useAIMetadataEnabled = () => {\n const { status, data } = useSettings();\n const isAvailable = useAIMetadataAvailability();\n\n return { status, isEnabled: isAvailable && data?.aiMetadata === true };\n};\n"],"names":["useAIMetadataEnabled","status","data","useSettings","isAvailable","useAIMetadataAvailability","isEnabled","aiMetadata"],"mappings":";;;AAGA;;;;;;;UAQaA,oBAAAA,GAAuB,IAAA;AAClC,IAAA,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAGC,WAAAA,EAAAA;AACzB,IAAA,MAAMC,WAAAA,GAAcC,yBAAAA,EAAAA;IAEpB,OAAO;AAAEJ,QAAAA,MAAAA;QAAQK,SAAAA,EAAWF,WAAAA,IAAeF,MAAMK,UAAAA,KAAe;AAAK,KAAA;AACvE;;;;"}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
4
|
-
var
|
|
4
|
+
var mediaLibraryVersion = require('../../utils/mediaLibraryVersion.js');
|
|
5
|
+
var useAIMetadataAvailability = require('./useAIMetadataAvailability.js');
|
|
5
6
|
var useSettings = require('./useSettings.js');
|
|
6
7
|
|
|
7
8
|
const useTracking = ()=>{
|
|
8
9
|
const { trackUsage: trackStrapiUsage } = strapiAdmin.useTracking();
|
|
9
10
|
const { data } = useSettings.useSettings();
|
|
10
|
-
const isAiAvailable =
|
|
11
|
+
const isAiAvailable = useAIMetadataAvailability.useAIMetadataAvailability();
|
|
11
12
|
const trackUsage = (event, properties)=>{
|
|
12
13
|
return trackStrapiUsage(event, {
|
|
13
14
|
...properties,
|
|
14
15
|
...isAiAvailable ? {
|
|
15
16
|
isAiMediaLibraryConfigured: Boolean(data?.aiMetadata)
|
|
16
|
-
} : {}
|
|
17
|
+
} : {},
|
|
18
|
+
mediaLibraryVersion: mediaLibraryVersion.getMediaLibraryVersion()
|
|
17
19
|
});
|
|
18
20
|
};
|
|
19
21
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTracking.js","sources":["../../../../admin/src/legacy/hooks/useTracking.ts"],"sourcesContent":["import { useTracking as useStrapiTracking, TrackingEvent } from '@strapi/admin/strapi-admin';\nimport {
|
|
1
|
+
{"version":3,"file":"useTracking.js","sources":["../../../../admin/src/legacy/hooks/useTracking.ts"],"sourcesContent":["import { useTracking as useStrapiTracking, TrackingEvent } from '@strapi/admin/strapi-admin';\n\nimport { getMediaLibraryVersion } from '../../utils/mediaLibraryVersion';\n\nimport { useAIMetadataAvailability } from './useAIMetadataAvailability';\nimport { useSettings } from './useSettings';\n\nexport const useTracking = () => {\n const { trackUsage: trackStrapiUsage } = useStrapiTracking();\n const { data } = useSettings();\n const isAiAvailable = useAIMetadataAvailability();\n\n const trackUsage = <TEvent extends TrackingEvent>(\n event: TEvent['name'],\n properties?: TEvent['properties']\n ) => {\n return trackStrapiUsage(event, {\n ...properties,\n ...(isAiAvailable ? { isAiMediaLibraryConfigured: Boolean(data?.aiMetadata) } : {}),\n mediaLibraryVersion: getMediaLibraryVersion(),\n } as TEvent['properties']);\n };\n\n return { trackUsage };\n};\n"],"names":["useTracking","trackUsage","trackStrapiUsage","useStrapiTracking","data","useSettings","isAiAvailable","useAIMetadataAvailability","event","properties","isAiMediaLibraryConfigured","Boolean","aiMetadata","mediaLibraryVersion","getMediaLibraryVersion"],"mappings":";;;;;;;MAOaA,WAAAA,GAAc,IAAA;AACzB,IAAA,MAAM,EAAEC,UAAAA,EAAYC,gBAAgB,EAAE,GAAGC,uBAAAA,EAAAA;IACzC,MAAM,EAAEC,IAAI,EAAE,GAAGC,uBAAAA,EAAAA;AACjB,IAAA,MAAMC,aAAAA,GAAgBC,mDAAAA,EAAAA;IAEtB,MAAMN,UAAAA,GAAa,CACjBO,KAAAA,EACAC,UAAAA,GAAAA;AAEA,QAAA,OAAOP,iBAAiBM,KAAAA,EAAO;AAC7B,YAAA,GAAGC,UAAU;AACb,YAAA,GAAIH,aAAAA,GAAgB;AAAEI,gBAAAA,0BAAAA,EAA4BC,QAAQP,IAAAA,EAAMQ,UAAAA;AAAY,aAAA,GAAI,EAAE;YAClFC,mBAAAA,EAAqBC,0CAAAA;AACvB,SAAA,CAAA;AACF,IAAA,CAAA;IAEA,OAAO;AAAEb,QAAAA;AAAW,KAAA;AACtB;;;;"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { useTracking as useTracking$1 } from '@strapi/admin/strapi-admin';
|
|
2
|
-
import {
|
|
2
|
+
import { getMediaLibraryVersion } from '../../utils/mediaLibraryVersion.mjs';
|
|
3
|
+
import { useAIMetadataAvailability } from './useAIMetadataAvailability.mjs';
|
|
3
4
|
import { useSettings } from './useSettings.mjs';
|
|
4
5
|
|
|
5
6
|
const useTracking = ()=>{
|
|
6
7
|
const { trackUsage: trackStrapiUsage } = useTracking$1();
|
|
7
8
|
const { data } = useSettings();
|
|
8
|
-
const isAiAvailable =
|
|
9
|
+
const isAiAvailable = useAIMetadataAvailability();
|
|
9
10
|
const trackUsage = (event, properties)=>{
|
|
10
11
|
return trackStrapiUsage(event, {
|
|
11
12
|
...properties,
|
|
12
13
|
...isAiAvailable ? {
|
|
13
14
|
isAiMediaLibraryConfigured: Boolean(data?.aiMetadata)
|
|
14
|
-
} : {}
|
|
15
|
+
} : {},
|
|
16
|
+
mediaLibraryVersion: getMediaLibraryVersion()
|
|
15
17
|
});
|
|
16
18
|
};
|
|
17
19
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTracking.mjs","sources":["../../../../admin/src/legacy/hooks/useTracking.ts"],"sourcesContent":["import { useTracking as useStrapiTracking, TrackingEvent } from '@strapi/admin/strapi-admin';\nimport {
|
|
1
|
+
{"version":3,"file":"useTracking.mjs","sources":["../../../../admin/src/legacy/hooks/useTracking.ts"],"sourcesContent":["import { useTracking as useStrapiTracking, TrackingEvent } from '@strapi/admin/strapi-admin';\n\nimport { getMediaLibraryVersion } from '../../utils/mediaLibraryVersion';\n\nimport { useAIMetadataAvailability } from './useAIMetadataAvailability';\nimport { useSettings } from './useSettings';\n\nexport const useTracking = () => {\n const { trackUsage: trackStrapiUsage } = useStrapiTracking();\n const { data } = useSettings();\n const isAiAvailable = useAIMetadataAvailability();\n\n const trackUsage = <TEvent extends TrackingEvent>(\n event: TEvent['name'],\n properties?: TEvent['properties']\n ) => {\n return trackStrapiUsage(event, {\n ...properties,\n ...(isAiAvailable ? { isAiMediaLibraryConfigured: Boolean(data?.aiMetadata) } : {}),\n mediaLibraryVersion: getMediaLibraryVersion(),\n } as TEvent['properties']);\n };\n\n return { trackUsage };\n};\n"],"names":["useTracking","trackUsage","trackStrapiUsage","useStrapiTracking","data","useSettings","isAiAvailable","useAIMetadataAvailability","event","properties","isAiMediaLibraryConfigured","Boolean","aiMetadata","mediaLibraryVersion","getMediaLibraryVersion"],"mappings":";;;;;MAOaA,WAAAA,GAAc,IAAA;AACzB,IAAA,MAAM,EAAEC,UAAAA,EAAYC,gBAAgB,EAAE,GAAGC,aAAAA,EAAAA;IACzC,MAAM,EAAEC,IAAI,EAAE,GAAGC,WAAAA,EAAAA;AACjB,IAAA,MAAMC,aAAAA,GAAgBC,yBAAAA,EAAAA;IAEtB,MAAMN,UAAAA,GAAa,CACjBO,KAAAA,EACAC,UAAAA,GAAAA;AAEA,QAAA,OAAOP,iBAAiBM,KAAAA,EAAO;AAC7B,YAAA,GAAGC,UAAU;AACb,YAAA,GAAIH,aAAAA,GAAgB;AAAEI,gBAAAA,0BAAAA,EAA4BC,QAAQP,IAAAA,EAAMQ,UAAAA;AAAY,aAAA,GAAI,EAAE;YAClFC,mBAAAA,EAAqBC,sBAAAA;AACvB,SAAA,CAAA;AACF,IAAA,CAAA;IAEA,OAAO;AAAEb,QAAAA;AAAW,KAAA;AACtB;;;;"}
|
|
@@ -10,6 +10,7 @@ var reactIntl = require('react-intl');
|
|
|
10
10
|
var reactRouterDom = require('react-router-dom');
|
|
11
11
|
var pluginId = require('../../../../pluginId.js');
|
|
12
12
|
var useConfig = require('../../../hooks/useConfig.js');
|
|
13
|
+
var useTracking = require('../../../hooks/useTracking.js');
|
|
13
14
|
require('byte-size');
|
|
14
15
|
require('date-fns');
|
|
15
16
|
var getTrad = require('../../../utils/getTrad.js');
|
|
@@ -45,7 +46,7 @@ var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
|
|
|
45
46
|
|
|
46
47
|
// TODO: find a better naming convention for the file that was an index file before
|
|
47
48
|
const ConfigureTheView = ({ config })=>{
|
|
48
|
-
const { trackUsage } =
|
|
49
|
+
const { trackUsage } = useTracking.useTracking();
|
|
49
50
|
const { formatMessage } = reactIntl.useIntl();
|
|
50
51
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
51
52
|
const { mutateConfig } = useConfig.useConfig();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigureTheView.js","sources":["../../../../../../admin/src/legacy/pages/App/ConfigureTheView/ConfigureTheView.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"ConfigureTheView.js","sources":["../../../../../../admin/src/legacy/pages/App/ConfigureTheView/ConfigureTheView.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { ConfirmDialog, useNotification, Page, Layouts } from '@strapi/admin/strapi-admin';\nimport { Button, Dialog, Link } from '@strapi/design-system';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { pluginId } from '../../../../pluginId';\nimport { useConfig } from '../../../hooks/useConfig';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { getTrad } from '../../../utils';\n\nimport { Settings } from './components/Settings';\nimport { onChange, setLoaded } from './state/actions';\nimport { init, initialState } from './state/init';\nimport { reducer } from './state/reducer';\n\nimport type { InitialState } from './state/init';\nimport type { Action } from './state/reducer';\nimport type { Configuration } from '../../../../../../shared/contracts/configuration';\n\ninterface ConfigureTheViewProps {\n config: Configuration;\n}\n\nexport const ConfigureTheView = ({ config }: ConfigureTheViewProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { mutateConfig } = useConfig();\n const { isLoading: isSubmittingForm } = mutateConfig;\n\n const [showWarningSubmit, setWarningSubmit] = React.useState(false);\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n const [reducerState, dispatch] = React.useReducer(\n reducer,\n initialState,\n (): InitialState => init(config)\n );\n const typedDispatch: React.Dispatch<Action> = dispatch;\n const { initialData, modifiedData } = reducerState;\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n toggleWarningSubmit();\n };\n\n const handleConfirm = async () => {\n trackUsage('willEditMediaLibraryConfig');\n await mutateConfig.mutateAsync(modifiedData as Configuration);\n setWarningSubmit(false);\n typedDispatch(setLoaded());\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.form.success.fields',\n defaultMessage: 'Changes saved',\n }),\n });\n };\n\n const handleChange = ({\n target: { name, value },\n }: {\n target: { name: keyof Configuration; value: string | number };\n }) => {\n typedDispatch(onChange({ name, value }));\n };\n\n return (\n <Layouts.Root>\n <Page.Main aria-busy={isSubmittingForm}>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n navigationAction={\n <Link\n tag={NavLink}\n startIcon={<ArrowLeft />}\n to={`/plugins/${pluginId}`}\n id=\"go-back\"\n >\n {formatMessage({ id: getTrad('config.back'), defaultMessage: 'Back' })}\n </Link>\n }\n primaryAction={\n <Button\n size=\"S\"\n startIcon={<Check />}\n disabled={isEqual(modifiedData, initialData)}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('config.subtitle'),\n defaultMessage: 'Define the view settings of the media library.',\n })}\n title={formatMessage({\n id: getTrad('config.title'),\n defaultMessage: 'Configure the view - Media Library',\n })}\n />\n <Layouts.Content>\n <Settings\n data-testid=\"settings\"\n pageSize={modifiedData.pageSize || ''}\n sort={modifiedData.sort || ''}\n onChange={handleChange}\n />\n </Layouts.Content>\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleConfirm} variant=\"default\">\n {formatMessage({\n id: getTrad('config.popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </form>\n </Page.Main>\n </Layouts.Root>\n );\n};\n"],"names":["ConfigureTheView","config","trackUsage","useTracking","formatMessage","useIntl","toggleNotification","useNotification","mutateConfig","useConfig","isLoading","isSubmittingForm","showWarningSubmit","setWarningSubmit","React","useState","toggleWarningSubmit","prevState","reducerState","dispatch","useReducer","reducer","initialState","init","typedDispatch","initialData","modifiedData","handleSubmit","e","preventDefault","handleConfirm","mutateAsync","setLoaded","type","message","id","defaultMessage","handleChange","target","name","value","onChange","_jsx","Layouts","Root","Page","Main","aria-busy","_jsxs","form","onSubmit","Header","navigationAction","Link","tag","NavLink","startIcon","ArrowLeft","to","pluginId","getTrad","primaryAction","Button","size","Check","disabled","isEqual","fullWidth","subtitle","title","Content","Settings","data-testid","pageSize","sort","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","variant"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { useNotification, Layouts, Page, ConfirmDialog } from '@strapi/admin/strapi-admin';
|
|
4
4
|
import { Button, Link, Dialog } from '@strapi/design-system';
|
|
5
5
|
import { Check, ArrowLeft } from '@strapi/icons';
|
|
6
6
|
import isEqual from 'lodash/isEqual';
|
|
@@ -8,6 +8,7 @@ import { useIntl } from 'react-intl';
|
|
|
8
8
|
import { NavLink } from 'react-router-dom';
|
|
9
9
|
import { pluginId } from '../../../../pluginId.mjs';
|
|
10
10
|
import { useConfig } from '../../../hooks/useConfig.mjs';
|
|
11
|
+
import { useTracking } from '../../../hooks/useTracking.mjs';
|
|
11
12
|
import 'byte-size';
|
|
12
13
|
import 'date-fns';
|
|
13
14
|
import { getTrad } from '../../../utils/getTrad.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigureTheView.mjs","sources":["../../../../../../admin/src/legacy/pages/App/ConfigureTheView/ConfigureTheView.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"ConfigureTheView.mjs","sources":["../../../../../../admin/src/legacy/pages/App/ConfigureTheView/ConfigureTheView.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { ConfirmDialog, useNotification, Page, Layouts } from '@strapi/admin/strapi-admin';\nimport { Button, Dialog, Link } from '@strapi/design-system';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { pluginId } from '../../../../pluginId';\nimport { useConfig } from '../../../hooks/useConfig';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { getTrad } from '../../../utils';\n\nimport { Settings } from './components/Settings';\nimport { onChange, setLoaded } from './state/actions';\nimport { init, initialState } from './state/init';\nimport { reducer } from './state/reducer';\n\nimport type { InitialState } from './state/init';\nimport type { Action } from './state/reducer';\nimport type { Configuration } from '../../../../../../shared/contracts/configuration';\n\ninterface ConfigureTheViewProps {\n config: Configuration;\n}\n\nexport const ConfigureTheView = ({ config }: ConfigureTheViewProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { mutateConfig } = useConfig();\n const { isLoading: isSubmittingForm } = mutateConfig;\n\n const [showWarningSubmit, setWarningSubmit] = React.useState(false);\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n const [reducerState, dispatch] = React.useReducer(\n reducer,\n initialState,\n (): InitialState => init(config)\n );\n const typedDispatch: React.Dispatch<Action> = dispatch;\n const { initialData, modifiedData } = reducerState;\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n toggleWarningSubmit();\n };\n\n const handleConfirm = async () => {\n trackUsage('willEditMediaLibraryConfig');\n await mutateConfig.mutateAsync(modifiedData as Configuration);\n setWarningSubmit(false);\n typedDispatch(setLoaded());\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.form.success.fields',\n defaultMessage: 'Changes saved',\n }),\n });\n };\n\n const handleChange = ({\n target: { name, value },\n }: {\n target: { name: keyof Configuration; value: string | number };\n }) => {\n typedDispatch(onChange({ name, value }));\n };\n\n return (\n <Layouts.Root>\n <Page.Main aria-busy={isSubmittingForm}>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n navigationAction={\n <Link\n tag={NavLink}\n startIcon={<ArrowLeft />}\n to={`/plugins/${pluginId}`}\n id=\"go-back\"\n >\n {formatMessage({ id: getTrad('config.back'), defaultMessage: 'Back' })}\n </Link>\n }\n primaryAction={\n <Button\n size=\"S\"\n startIcon={<Check />}\n disabled={isEqual(modifiedData, initialData)}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('config.subtitle'),\n defaultMessage: 'Define the view settings of the media library.',\n })}\n title={formatMessage({\n id: getTrad('config.title'),\n defaultMessage: 'Configure the view - Media Library',\n })}\n />\n <Layouts.Content>\n <Settings\n data-testid=\"settings\"\n pageSize={modifiedData.pageSize || ''}\n sort={modifiedData.sort || ''}\n onChange={handleChange}\n />\n </Layouts.Content>\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleConfirm} variant=\"default\">\n {formatMessage({\n id: getTrad('config.popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </form>\n </Page.Main>\n </Layouts.Root>\n );\n};\n"],"names":["ConfigureTheView","config","trackUsage","useTracking","formatMessage","useIntl","toggleNotification","useNotification","mutateConfig","useConfig","isLoading","isSubmittingForm","showWarningSubmit","setWarningSubmit","React","useState","toggleWarningSubmit","prevState","reducerState","dispatch","useReducer","reducer","initialState","init","typedDispatch","initialData","modifiedData","handleSubmit","e","preventDefault","handleConfirm","mutateAsync","setLoaded","type","message","id","defaultMessage","handleChange","target","name","value","onChange","_jsx","Layouts","Root","Page","Main","aria-busy","_jsxs","form","onSubmit","Header","navigationAction","Link","tag","NavLink","startIcon","ArrowLeft","to","pluginId","getTrad","primaryAction","Button","size","Check","disabled","isEqual","fullWidth","subtitle","title","Content","Settings","data-testid","pageSize","sort","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","variant"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AA4BO,MAAMA,gBAAAA,GAAmB,CAAC,EAAEC,MAAM,EAAyB,GAAA;IAChE,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,YAAY,EAAE,GAAGC,SAAAA,EAAAA;AACzB,IAAA,MAAM,EAAEC,SAAAA,EAAWC,gBAAgB,EAAE,GAAGH,YAAAA;AAExC,IAAA,MAAM,CAACI,iBAAAA,EAAmBC,gBAAAA,CAAiB,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAC7D,IAAA,MAAMC,mBAAAA,GAAsB,IAAMH,gBAAAA,CAAiB,CAACI,YAAc,CAACA,SAAAA,CAAAA;IAEnE,MAAM,CAACC,YAAAA,EAAcC,QAAAA,CAAS,GAAGL,KAAAA,CAAMM,UAAU,CAC/CC,OAAAA,EACAC,YAAAA,EACA,IAAoBC,IAAAA,CAAKtB,MAAAA,CAAAA,CAAAA;AAE3B,IAAA,MAAMuB,aAAAA,GAAwCL,QAAAA;AAC9C,IAAA,MAAM,EAAEM,WAAW,EAAEC,YAAY,EAAE,GAAGR,YAAAA;AAEtC,IAAA,MAAMS,eAAe,CAACC,CAAAA,GAAAA;AACpBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;AAChBb,QAAAA,mBAAAA,EAAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMc,aAAAA,GAAgB,UAAA;QACpB5B,UAAAA,CAAW,4BAAA,CAAA;QACX,MAAMM,YAAAA,CAAauB,WAAW,CAACL,YAAAA,CAAAA;QAC/Bb,gBAAAA,CAAiB,KAAA,CAAA;QACjBW,aAAAA,CAAcQ,SAAAA,EAAAA,CAAAA;QACd1B,kBAAAA,CAAmB;YACjB2B,IAAAA,EAAM,SAAA;AACNC,YAAAA,OAAAA,EAAS9B,aAAAA,CAAc;gBACrB+B,EAAAA,EAAI,kCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA;AACF,SAAA,CAAA;AACF,IAAA,CAAA;IAEA,MAAMC,YAAAA,GAAe,CAAC,EACpBC,MAAAA,EAAQ,EAAEC,IAAI,EAAEC,KAAK,EAAE,EAGxB,GAAA;AACChB,QAAAA,aAAAA,CAAciB,QAAAA,CAAS;AAAEF,YAAAA,IAAAA;AAAMC,YAAAA;AAAM,SAAA,CAAA,CAAA;AACvC,IAAA,CAAA;IAEA,qBACEE,GAAA,CAACC,QAAQC,IAAI,EAAA;gCACXF,GAAA,CAACG,KAAKC,IAAI,EAAA;YAACC,WAAAA,EAAWpC,gBAAAA;AACpB,YAAA,QAAA,gBAAAqC,IAAA,CAACC,MAAAA,EAAAA;gBAAKC,QAAAA,EAAUvB,YAAAA;;AACd,kCAAAe,GAAA,CAACC,QAAQQ,MAAM,EAAA;AACbC,wBAAAA,gBAAAA,gBACEV,GAAA,CAACW,IAAAA,EAAAA;4BACCC,GAAAA,EAAKC,OAAAA;AACLC,4BAAAA,SAAAA,gBAAWd,GAAA,CAACe,SAAAA,EAAAA,EAAAA,CAAAA;4BACZC,EAAAA,EAAI,CAAC,SAAS,EAAEC,QAAAA,CAAAA,CAAU;4BAC1BxB,EAAAA,EAAG,SAAA;sCAEF/B,aAAAA,CAAc;AAAE+B,gCAAAA,EAAAA,EAAIyB,OAAAA,CAAQ,aAAA,CAAA;gCAAgBxB,cAAAA,EAAgB;AAAO,6BAAA;;AAGxEyB,wBAAAA,aAAAA,gBACEnB,GAAA,CAACoB,MAAAA,EAAAA;4BACCC,IAAAA,EAAK,GAAA;AACLP,4BAAAA,SAAAA,gBAAWd,GAAA,CAACsB,KAAAA,EAAAA,EAAAA,CAAAA;AACZC,4BAAAA,QAAAA,EAAUC,QAAQxC,YAAAA,EAAcD,WAAAA,CAAAA;4BAChCQ,IAAAA,EAAK,QAAA;4BACLkC,SAAS,EAAA,IAAA;sCAER/D,aAAAA,CAAc;gCAAE+B,EAAAA,EAAI,aAAA;gCAAeC,cAAAA,EAAgB;AAAO,6BAAA;;AAG/DgC,wBAAAA,QAAAA,EAAUhE,aAAAA,CAAc;AACtB+B,4BAAAA,EAAAA,EAAIyB,OAAAA,CAAQ,iBAAA,CAAA;4BACZxB,cAAAA,EAAgB;AAClB,yBAAA,CAAA;AACAiC,wBAAAA,KAAAA,EAAOjE,aAAAA,CAAc;AACnB+B,4BAAAA,EAAAA,EAAIyB,OAAAA,CAAQ,cAAA,CAAA;4BACZxB,cAAAA,EAAgB;AAClB,yBAAA;;AAEF,kCAAAM,GAAA,CAACC,QAAQ2B,OAAO,EAAA;AACd,wBAAA,QAAA,gBAAA5B,GAAA,CAAC6B,QAAAA,EAAAA;4BACCC,aAAAA,EAAY,UAAA;4BACZC,QAAAA,EAAU/C,YAAAA,CAAa+C,QAAQ,IAAI,EAAA;4BACnCC,IAAAA,EAAMhD,YAAAA,CAAagD,IAAI,IAAI,EAAA;4BAC3BjC,QAAAA,EAAUJ;;;AAGd,kCAAAK,GAAA,CAACiC,OAAO/B,IAAI,EAAA;wBAACgC,IAAAA,EAAMhE,iBAAAA;wBAAmBiE,YAAAA,EAAc7D,mBAAAA;AAClD,wBAAA,QAAA,gBAAA0B,GAAA,CAACoC,aAAAA,EAAAA;4BAAcC,SAAAA,EAAWjD,aAAAA;4BAAekD,OAAAA,EAAQ,SAAA;sCAC9C5E,aAAAA,CAAc;AACb+B,gCAAAA,EAAAA,EAAIyB,OAAAA,CAAQ,+CAAA,CAAA;gCACZxB,cAAAA,EAAgB;AAClB,6BAAA;;;;;;;AAOd;;;;"}
|