@strapi/upload 5.59.0 → 5.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js +434 -0
- package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs +432 -0
- package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js +91 -0
- package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs +89 -0
- package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js +29 -0
- package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs +27 -0
- package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js +178 -0
- package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs +175 -0
- package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/SortableSelection.js +143 -0
- package/dist/admin/components/AssetPickerDialog/SortableSelection.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs +141 -0
- package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs.map +1 -0
- package/dist/admin/components/AssetPickerDialog/pickerSelection.js +49 -0
- package/dist/admin/components/AssetPickerDialog/pickerSelection.js.map +1 -0
- package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs +41 -0
- package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs.map +1 -0
- package/dist/admin/components/Drawer.js +12 -7
- package/dist/admin/components/Drawer.js.map +1 -1
- package/dist/admin/components/Drawer.mjs +12 -7
- package/dist/admin/components/Drawer.mjs.map +1 -1
- package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js +188 -0
- package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js.map +1 -0
- package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs +186 -0
- package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js +9 -4
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs +9 -4
- package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AssetCard.js +240 -0
- package/dist/admin/components/MediaLibraryInput/AssetCard.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetCard.mjs +237 -0
- package/dist/admin/components/MediaLibraryInput/AssetCard.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetCarousel.js +161 -0
- package/dist/admin/components/MediaLibraryInput/AssetCarousel.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs +159 -0
- package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.js +76 -49
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs +77 -50
- package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AssetPreview.js +109 -0
- package/dist/admin/components/MediaLibraryInput/AssetPreview.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs +106 -0
- package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/AssetRow.js +146 -79
- package/dist/admin/components/MediaLibraryInput/AssetRow.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/AssetRow.mjs +148 -82
- package/dist/admin/components/MediaLibraryInput/AssetRow.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/FieldControls.js +32 -0
- package/dist/admin/components/MediaLibraryInput/FieldControls.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/FieldControls.mjs +29 -0
- package/dist/admin/components/MediaLibraryInput/FieldControls.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +163 -111
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +162 -114
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js +42 -0
- package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs +40 -0
- package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/openAssetDetails.js +46 -0
- package/dist/admin/components/MediaLibraryInput/openAssetDetails.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs +43 -0
- package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/useFieldUploads.js +122 -0
- package/dist/admin/components/MediaLibraryInput/useFieldUploads.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs +120 -0
- package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs.map +1 -0
- package/dist/admin/components/UploadProgressDialog.js +2 -1
- package/dist/admin/components/UploadProgressDialog.js.map +1 -1
- package/dist/admin/components/UploadProgressDialog.mjs +2 -1
- package/dist/admin/components/UploadProgressDialog.mjs.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.js +12 -2
- package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs +12 -2
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
- package/dist/admin/index.js +10 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +10 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/Assets/AssetsPage.js +14 -303
- package/dist/admin/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/pages/Assets/AssetsPage.mjs +13 -282
- package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +2 -2
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +181 -65
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +184 -69
- package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.mjs +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.js +142 -31
- package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs +145 -34
- package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsSearchInput.js +43 -2
- package/dist/admin/pages/Assets/components/AssetsSearchInput.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs +45 -4
- package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.js +58 -34
- package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsTable.mjs +60 -36
- package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/AssetsView.js +145 -0
- package/dist/admin/pages/Assets/components/AssetsView.js.map +1 -0
- package/dist/admin/pages/Assets/components/AssetsView.mjs +143 -0
- package/dist/admin/pages/Assets/components/AssetsView.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/BulkActionsBar.mjs +1 -1
- package/dist/admin/pages/Assets/components/BusyOverlay.mjs +1 -1
- package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.mjs +1 -1
- package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js +40 -0
- package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs +38 -0
- package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/assetSortable.js +29 -0
- package/dist/admin/pages/Assets/components/Dnd/assetSortable.js.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs +24 -0
- package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/Dnd/dndIds.js +5 -0
- package/dist/admin/pages/Assets/components/Dnd/dndIds.js.map +1 -1
- package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs +5 -1
- package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js +41 -13
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs +41 -13
- package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FilterBadges.mjs +2 -2
- package/dist/admin/pages/Assets/components/FilterMenu.mjs +2 -2
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js +274 -55
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs +277 -59
- package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js +32 -0
- package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js.map +1 -0
- package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs +29 -0
- package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs.map +1 -0
- package/dist/admin/pages/Assets/components/ViewToggle.js +126 -0
- package/dist/admin/pages/Assets/components/ViewToggle.js.map +1 -0
- package/dist/admin/pages/Assets/components/ViewToggle.mjs +104 -0
- package/dist/admin/pages/Assets/components/ViewToggle.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetSearch.js +2 -2
- package/dist/admin/pages/Assets/hooks/useAssetSearch.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs +2 -2
- package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetSelection.js +19 -1
- package/dist/admin/pages/Assets/hooks/useAssetSelection.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs +20 -3
- package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useAssetsList.js +87 -0
- package/dist/admin/pages/Assets/hooks/useAssetsList.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useAssetsList.mjs +85 -0
- package/dist/admin/pages/Assets/hooks/useAssetsList.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useBusyAssets.mjs +1 -1
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.js +2 -1
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs +3 -2
- package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js +2 -6
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs +2 -6
- package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useListFilters.js +2 -1
- package/dist/admin/pages/Assets/hooks/useListFilters.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useListFilters.mjs +3 -2
- package/dist/admin/pages/Assets/hooks/useListFilters.mjs.map +1 -1
- package/dist/admin/pages/Assets/hooks/useListQueryParams.js +80 -0
- package/dist/admin/pages/Assets/hooks/useListQueryParams.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs +77 -0
- package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListSettings.js +32 -0
- package/dist/admin/pages/Assets/hooks/useListSettings.js.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListSettings.mjs +29 -0
- package/dist/admin/pages/Assets/hooks/useListSettings.mjs.map +1 -0
- package/dist/admin/pages/Assets/hooks/useListSort.js +2 -1
- package/dist/admin/pages/Assets/hooks/useListSort.js.map +1 -1
- package/dist/admin/pages/Assets/hooks/useListSort.mjs +3 -2
- package/dist/admin/pages/Assets/hooks/useListSort.mjs.map +1 -1
- package/dist/admin/services/api.js +92 -7
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +91 -9
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/src/components/AssetPickerDialog/AssetPickerDialog.d.ts +19 -0
- package/dist/admin/src/components/AssetPickerDialog/FolderBreadcrumbs.d.ts +10 -0
- package/dist/admin/src/components/AssetPickerDialog/MediaLibraryPickerDialog.d.ts +19 -0
- package/dist/admin/src/components/AssetPickerDialog/PickerSelectionProvider.d.ts +28 -0
- package/dist/admin/src/components/AssetPickerDialog/SortableSelection.d.ts +12 -0
- package/dist/admin/src/components/AssetPickerDialog/pickerSelection.d.ts +26 -0
- package/dist/admin/src/components/Drawer.d.ts +8 -0
- package/dist/admin/src/components/EditorFileDropZone/EditorFileDropZone.d.ts +21 -0
- package/dist/admin/src/components/MediaLibraryInput/AddAssetMenu.d.ts +7 -1
- package/dist/admin/src/components/MediaLibraryInput/AssetCard.d.ts +25 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetCarousel.d.ts +16 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetDropZone.d.ts +11 -3
- package/dist/admin/src/components/MediaLibraryInput/AssetPreview.d.ts +17 -0
- package/dist/admin/src/components/MediaLibraryInput/AssetRow.d.ts +13 -3
- package/dist/admin/src/components/MediaLibraryInput/FieldControls.d.ts +19 -0
- package/dist/admin/src/components/MediaLibraryInput/MediaLibraryInput.d.ts +3 -1
- package/dist/admin/src/components/MediaLibraryInput/UploadProgressBar.d.ts +7 -0
- package/dist/admin/src/components/MediaLibraryInput/openAssetDetails.d.ts +10 -0
- package/dist/admin/src/components/MediaLibraryInput/useFieldUploads.d.ts +31 -0
- package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +2 -0
- package/dist/admin/src/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +41 -5
- package/dist/admin/src/pages/Assets/components/AssetsGrid.d.ts +3 -1
- package/dist/admin/src/pages/Assets/components/AssetsSearchInput.d.ts +11 -1
- package/dist/admin/src/pages/Assets/components/AssetsView.d.ts +29 -0
- package/dist/admin/src/pages/Assets/components/Dnd/ReorderHandle.d.ts +12 -0
- package/dist/admin/src/pages/Assets/components/Dnd/assetSortable.d.ts +37 -0
- package/dist/admin/src/pages/Assets/components/Dnd/dndIds.d.ts +5 -0
- package/dist/admin/src/pages/Assets/components/Dnd/useAssetDnd.d.ts +23 -2
- package/dist/admin/src/pages/Assets/components/FolderTree/FolderTree.d.ts +1 -0
- package/dist/admin/src/pages/Assets/components/FolderTree/collapsedBranch.d.ts +21 -0
- package/dist/admin/src/pages/Assets/components/ViewToggle.d.ts +8 -0
- package/dist/admin/src/pages/Assets/hooks/useAssetSelection.d.ts +26 -0
- package/dist/admin/src/pages/Assets/hooks/useAssetsList.d.ts +30 -0
- package/dist/admin/src/pages/Assets/hooks/useIsAssetDetailsOpen.d.ts +2 -6
- package/dist/admin/src/pages/Assets/hooks/useListQueryParams.d.ts +27 -0
- package/dist/admin/src/pages/Assets/hooks/useListSettings.d.ts +29 -0
- package/dist/admin/src/services/api.d.ts +24 -1
- package/dist/admin/src/store/uploadProgress.d.ts +14 -1
- package/dist/admin/src/utils/findFolderPath.d.ts +6 -0
- package/dist/admin/src/utils/isAllowedAssetType.d.ts +14 -0
- package/dist/admin/store/uploadProgress.js +30 -3
- package/dist/admin/store/uploadProgress.js.map +1 -1
- package/dist/admin/store/uploadProgress.mjs +29 -4
- package/dist/admin/store/uploadProgress.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +24 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +24 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/findFolderPath.js +26 -0
- package/dist/admin/utils/findFolderPath.js.map +1 -0
- package/dist/admin/utils/findFolderPath.mjs +24 -0
- package/dist/admin/utils/findFolderPath.mjs.map +1 -0
- package/dist/admin/utils/isAllowedAssetType.js +33 -0
- package/dist/admin/utils/isAllowedAssetType.js.map +1 -0
- package/dist/admin/utils/isAllowedAssetType.mjs +31 -0
- package/dist/admin/utils/isAllowedAssetType.mjs.map +1 -0
- package/dist/server/audit-logs.js +264 -0
- package/dist/server/audit-logs.js.map +1 -0
- package/dist/server/audit-logs.mjs +255 -0
- package/dist/server/audit-logs.mjs.map +1 -0
- package/dist/server/bootstrap.js +4 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +4 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-folder-file.js +23 -1
- package/dist/server/controllers/admin-folder-file.js.map +1 -1
- package/dist/server/controllers/admin-folder-file.mjs +23 -1
- package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
- package/dist/server/controllers/admin-settings.js +5 -1
- package/dist/server/controllers/admin-settings.js.map +1 -1
- package/dist/server/controllers/admin-settings.mjs +5 -1
- package/dist/server/controllers/admin-settings.mjs.map +1 -1
- package/dist/server/services/folder.js +48 -1
- package/dist/server/services/folder.js.map +1 -1
- package/dist/server/services/folder.mjs +48 -1
- package/dist/server/services/folder.mjs.map +1 -1
- package/dist/server/services/image-manipulation.js +14 -7
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/image-manipulation.mjs +14 -7
- package/dist/server/services/image-manipulation.mjs.map +1 -1
- package/dist/server/services/upload.js +100 -16
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +102 -18
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/audit-logs.d.ts +142 -0
- package/dist/server/src/audit-logs.d.ts.map +1 -0
- 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-settings.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
- package/dist/server/src/services/extensions/utils.d.ts +11 -11
- package/dist/server/src/services/folder.d.ts.map +1 -1
- package/dist/server/src/services/image-manipulation.d.ts +4 -4
- package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +63 -12
- package/dist/server/src/types.d.ts.map +1 -1
- package/package.json +11 -16
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js +0 -45
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js.map +0 -1
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs +0 -43
- package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs.map +0 -1
- package/dist/admin/src/components/MediaLibraryInput/NoLibraryAccessDialog.d.ts +0 -10
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import { useMemo, useRef, useCallback, useEffect, useState, useId, createElement } from 'react';
|
|
3
|
+
import { useDroppable } from '@dnd-kit/core';
|
|
3
4
|
import { SubNav } from '@strapi/admin/strapi-admin';
|
|
4
|
-
import { Flex, Typography, Box, Loader, IconButton } from '@strapi/design-system';
|
|
5
|
-
import { House, Folder, ChevronDown } from '@strapi/icons';
|
|
5
|
+
import { Flex, Typography, Box, Loader, Tooltip, IconButton } from '@strapi/design-system';
|
|
6
|
+
import { House, Folder, More, ChevronRight, ChevronDown } from '@strapi/icons';
|
|
6
7
|
import { useIntl } from 'react-intl';
|
|
7
8
|
import { css, styled } from 'styled-components';
|
|
8
|
-
import { TruncatedText } from '../../../../components/TruncatedText.mjs';
|
|
9
9
|
import { useGetFolderStructureQuery } from '../../../../services/folders.mjs';
|
|
10
|
+
import { findFolderPath } from '../../../../utils/findFolderPath.mjs';
|
|
10
11
|
import { isEventFromWithin } from '../../../../utils/isEventFromWithin.mjs';
|
|
11
12
|
import { getTranslationKey } from '../../../../utils/translations.mjs';
|
|
12
13
|
import { useAssetsDndOptional } from '../Dnd/AssetsDndProvider.mjs';
|
|
14
|
+
import { toFolderTreeSummaryId } from '../Dnd/dndIds.mjs';
|
|
13
15
|
import { useFolderTreeDroppable } from '../Dnd/useFolderTreeDroppable.mjs';
|
|
16
|
+
import { getCollapsedBranch } from './collapsedBranch.mjs';
|
|
14
17
|
import { FolderTreeRowMenu } from './FolderTreeRowMenu.mjs';
|
|
15
18
|
import { useSpringLoadedExpand } from './useSpringLoadedExpand.mjs';
|
|
16
19
|
|
|
@@ -54,6 +57,13 @@ import { useSpringLoadedExpand } from './useSpringLoadedExpand.mjs';
|
|
|
54
57
|
outline-offset: -2px;
|
|
55
58
|
}
|
|
56
59
|
`;
|
|
60
|
+
// Squared where path rows meet, so the path reads as one block rather than a
|
|
61
|
+
// stack of separately highlighted rows.
|
|
62
|
+
const getOpenPathRadius = (segment, radius)=>({
|
|
63
|
+
start: `${radius} ${radius} 0 0`,
|
|
64
|
+
middle: '0',
|
|
65
|
+
end: `0 0 ${radius} ${radius}`
|
|
66
|
+
})[segment];
|
|
57
67
|
const TreeRow = styled(Flex)`
|
|
58
68
|
cursor: ${({ $isMovePending, $isInvalidDropCursor })=>{
|
|
59
69
|
if ($isMovePending) {
|
|
@@ -62,13 +72,28 @@ const TreeRow = styled(Flex)`
|
|
|
62
72
|
return $isInvalidDropCursor ? 'not-allowed' : 'default';
|
|
63
73
|
}};
|
|
64
74
|
pointer-events: ${({ $isMovePending })=>$isMovePending ? 'none' : 'auto'};
|
|
65
|
-
border-radius: ${({ theme })
|
|
66
|
-
background: ${({ $isActive, theme })
|
|
75
|
+
border-radius: ${({ $openPathSegment, theme })=>$openPathSegment ? getOpenPathRadius($openPathSegment, theme.borderRadius) : theme.borderRadius};
|
|
76
|
+
background: ${({ $isActive, $openPathSegment, theme })=>{
|
|
77
|
+
if ($isActive) {
|
|
78
|
+
return theme.colors.primary100;
|
|
79
|
+
}
|
|
80
|
+
// While a summary row is open, the path down to the open folder is tinted —
|
|
81
|
+
// the folders it reveals plus the parent — so the tint reads as "on the way
|
|
82
|
+
// here" and the open folder's own highlight as "here".
|
|
83
|
+
return $openPathSegment ? theme.colors.neutral100 : 'transparent';
|
|
84
|
+
}};
|
|
67
85
|
|
|
68
86
|
// The whole row lights up, so pointing anywhere along it — chevron, label or
|
|
69
|
-
// the actions trigger — reads as one target.
|
|
87
|
+
// the actions trigger — reads as one target. A path row steps past its tint
|
|
88
|
+
// rather than to primary100, which would make it look like a second open
|
|
89
|
+
// folder (and, in dark mode, is the same colour as the tint).
|
|
70
90
|
&:hover {
|
|
71
|
-
background: ${({ $isActive, theme })
|
|
91
|
+
background: ${({ $isActive, $openPathSegment, theme })=>{
|
|
92
|
+
if ($isActive) {
|
|
93
|
+
return theme.colors.primary100;
|
|
94
|
+
}
|
|
95
|
+
return $openPathSegment ? theme.colors.neutral150 : theme.colors.neutral100;
|
|
96
|
+
}};
|
|
72
97
|
}
|
|
73
98
|
|
|
74
99
|
${({ $isValidDropTarget, theme })=>$isValidDropTarget && css`
|
|
@@ -83,31 +108,14 @@ const TreeRow = styled(Flex)`
|
|
|
83
108
|
`;
|
|
84
109
|
/* -------------------------------------------------------------------------------------------------
|
|
85
110
|
* useExpandedFolders — local expand/collapse state
|
|
86
|
-
* -----------------------------------------------------------------------------------------------*/ const
|
|
87
|
-
for (const node of nodes){
|
|
88
|
-
if (node.id === targetId) {
|
|
89
|
-
return trail;
|
|
90
|
-
}
|
|
91
|
-
if (node.children?.length) {
|
|
92
|
-
const nextTrail = node.id != null ? [
|
|
93
|
-
...trail,
|
|
94
|
-
node.id
|
|
95
|
-
] : trail;
|
|
96
|
-
const found = findAncestorIds(node.children, targetId, nextTrail);
|
|
97
|
-
if (found !== null) {
|
|
98
|
-
return found;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
};
|
|
104
|
-
const useExpandedFolders = (folderStructure, currentFolderId)=>{
|
|
111
|
+
* -----------------------------------------------------------------------------------------------*/ const useExpandedFolders = (folderStructure, currentFolderId)=>{
|
|
105
112
|
const [expandedIds, setExpandedIds] = useState(()=>new Set());
|
|
106
113
|
useEffect(()=>{
|
|
107
114
|
if (currentFolderId == null) {
|
|
108
115
|
return;
|
|
109
116
|
}
|
|
110
|
-
|
|
117
|
+
// The path ends with the current folder itself, which needs no expanding.
|
|
118
|
+
const ancestors = findFolderPath(folderStructure, currentFolderId)?.slice(0, -1).map((folder)=>folder.id).filter((id)=>id != null);
|
|
111
119
|
if (!ancestors || ancestors.length === 0) {
|
|
112
120
|
return;
|
|
113
121
|
}
|
|
@@ -182,6 +190,11 @@ const useExpandedFolders = (folderStructure, currentFolderId)=>{
|
|
|
182
190
|
/* -------------------------------------------------------------------------------------------------
|
|
183
191
|
* FolderTreeItem — single tree row (internal)
|
|
184
192
|
* -----------------------------------------------------------------------------------------------*/ const INDENT_PER_LEVEL_REM = 1.6;
|
|
193
|
+
/**
|
|
194
|
+
* Deeper rows keep this level's indent, so a name never runs out of room however
|
|
195
|
+
* deep the tree goes. Rows past it stay readable through their path tooltip.
|
|
196
|
+
*/ const MAX_VISUAL_LEVEL = 4;
|
|
197
|
+
const getIndentRem = (level)=>Math.min(level, MAX_VISUAL_LEVEL) * INDENT_PER_LEVEL_REM;
|
|
185
198
|
/**
|
|
186
199
|
* Breathing room between the row's highlight and the controls at either end.
|
|
187
200
|
* Asymmetric on purpose: the chevron reads as part of the indent, while the
|
|
@@ -232,7 +245,7 @@ const RotatingChevron = styled(ChevronDown)`
|
|
|
232
245
|
transform: rotate(${({ $expanded })=>$expanded ? '0deg' : '-90deg'});
|
|
233
246
|
transition: transform 0.2s ease;
|
|
234
247
|
`;
|
|
235
|
-
const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, currentFolderId, showActiveFolder, isExpanded, onToggle, onExpand, onSelect, isMovePending })=>{
|
|
248
|
+
const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, currentFolderId, showActiveFolder, isExpanded, onToggle, onExpand, onSelect, isMovePending, ancestorNames, isHiddenAncestor = false, openPathSegment, subtree })=>{
|
|
236
249
|
const { formatMessage } = useIntl();
|
|
237
250
|
const hasChildren = folderChildren.length > 0;
|
|
238
251
|
// A folder keeps its entry in the expanded set after its last subfolder is
|
|
@@ -240,6 +253,14 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
240
253
|
// show" — otherwise the chevron stays rotated on what is now a leaf.
|
|
241
254
|
const isFolderExpanded = isExpanded(id) && hasChildren;
|
|
242
255
|
const isActive = showActiveFolder && currentFolderId === id;
|
|
256
|
+
const pathLabel = [
|
|
257
|
+
formatMessage({
|
|
258
|
+
id: getTranslationKey('plugin.name'),
|
|
259
|
+
defaultMessage: 'Media Library'
|
|
260
|
+
}),
|
|
261
|
+
...ancestorNames,
|
|
262
|
+
name
|
|
263
|
+
].join(' / ');
|
|
243
264
|
const { droppable: { setNodeRef }, isOver, showValidDropHighlight, showInvalidDropCursor } = useFolderTreeDroppable({
|
|
244
265
|
id,
|
|
245
266
|
name
|
|
@@ -254,7 +275,7 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
254
275
|
const rowButtonRef = useRef(null);
|
|
255
276
|
useSpringLoadedExpand({
|
|
256
277
|
isOver,
|
|
257
|
-
canExpand: hasChildren && !isFolderExpanded,
|
|
278
|
+
canExpand: !isHiddenAncestor && hasChildren && !isFolderExpanded,
|
|
258
279
|
onExpand: handleExpand
|
|
259
280
|
});
|
|
260
281
|
// TODO: full `role="tree"` + arrow-key treeview navigation before revamp GA
|
|
@@ -267,10 +288,11 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
267
288
|
alignItems: "center",
|
|
268
289
|
// Indent plus the row's own inset, so the chevron never sits flush
|
|
269
290
|
// against the edge of the highlight at any depth.
|
|
270
|
-
paddingLeft: `${level
|
|
291
|
+
paddingLeft: `${getIndentRem(level) + ROW_INSET_LEFT_REM}rem`,
|
|
271
292
|
paddingRight: `${ROW_INSET_RIGHT_REM}rem`,
|
|
272
293
|
gap: 1,
|
|
273
294
|
$isActive: isActive,
|
|
295
|
+
$openPathSegment: openPathSegment,
|
|
274
296
|
$isValidDropTarget: showValidDropHighlight,
|
|
275
297
|
$isInvalidDropCursor: showInvalidDropCursor,
|
|
276
298
|
$isMovePending: isMovePending,
|
|
@@ -285,7 +307,9 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
285
307
|
});
|
|
286
308
|
},
|
|
287
309
|
children: [
|
|
288
|
-
/*#__PURE__*/ jsx(
|
|
310
|
+
isHiddenAncestor ? /*#__PURE__*/ jsx(IconSlot, {
|
|
311
|
+
"aria-hidden": true
|
|
312
|
+
}) : /*#__PURE__*/ jsx(ChevronButton, {
|
|
289
313
|
label: hasChildren ? formatMessage({
|
|
290
314
|
id: getTranslationKey(isFolderExpanded ? 'sidebar.tree.collapse' : 'sidebar.tree.expand'),
|
|
291
315
|
defaultMessage: isFolderExpanded ? 'Collapse {name}' : 'Expand {name}'
|
|
@@ -313,21 +337,25 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
313
337
|
/*#__PURE__*/ jsx(Box, {
|
|
314
338
|
flex: "1",
|
|
315
339
|
minWidth: 0,
|
|
316
|
-
children: /*#__PURE__*/ jsx(
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
340
|
+
children: /*#__PURE__*/ jsx(Tooltip, {
|
|
341
|
+
label: pathLabel,
|
|
342
|
+
children: /*#__PURE__*/ jsx(RowButton, {
|
|
343
|
+
ref: rowButtonRef,
|
|
344
|
+
type: "button",
|
|
345
|
+
$isActive: isActive,
|
|
346
|
+
$isValidDropTarget: showValidDropHighlight,
|
|
347
|
+
$isInvalidDropCursor: showInvalidDropCursor,
|
|
348
|
+
$isMovePending: isMovePending,
|
|
349
|
+
"aria-current": isActive ? 'page' : undefined,
|
|
350
|
+
onClick: ()=>onSelect(id),
|
|
351
|
+
"data-testid": `folder-tree-node-${id}`,
|
|
352
|
+
"data-folder-id": id,
|
|
353
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
354
|
+
ellipsis: true,
|
|
355
|
+
variant: "omega",
|
|
356
|
+
fontWeight: isActive ? 'semiBold' : 'regular',
|
|
357
|
+
children: name
|
|
358
|
+
})
|
|
331
359
|
})
|
|
332
360
|
})
|
|
333
361
|
}),
|
|
@@ -343,7 +371,7 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
343
371
|
})
|
|
344
372
|
]
|
|
345
373
|
}),
|
|
346
|
-
hasChildren && isFolderExpanded && /*#__PURE__*/ jsx(NavList, {
|
|
374
|
+
hasChildren && isFolderExpanded && !isHiddenAncestor && (subtree ?? /*#__PURE__*/ jsx(NavList, {
|
|
347
375
|
children: folderChildren.map((child)=>/*#__PURE__*/ jsx(FolderTreeItem, {
|
|
348
376
|
node: child,
|
|
349
377
|
parentId: id,
|
|
@@ -354,9 +382,13 @@ const FolderTreeItemInner = ({ id, name, parentId, folderChildren, level, curren
|
|
|
354
382
|
onToggle: onToggle,
|
|
355
383
|
onExpand: onExpand,
|
|
356
384
|
onSelect: onSelect,
|
|
357
|
-
isMovePending: isMovePending
|
|
385
|
+
isMovePending: isMovePending,
|
|
386
|
+
ancestorNames: [
|
|
387
|
+
...ancestorNames,
|
|
388
|
+
name
|
|
389
|
+
]
|
|
358
390
|
}, child.id ?? child.name))
|
|
359
|
-
})
|
|
391
|
+
}))
|
|
360
392
|
]
|
|
361
393
|
});
|
|
362
394
|
};
|
|
@@ -371,6 +403,155 @@ const FolderTreeItem = ({ node, ...props })=>{
|
|
|
371
403
|
folderChildren: node.children ?? []
|
|
372
404
|
});
|
|
373
405
|
};
|
|
406
|
+
/* -------------------------------------------------------------------------------------------------
|
|
407
|
+
* CollapsedAncestors — the "N parent folders" row of a deep branch (internal)
|
|
408
|
+
* -----------------------------------------------------------------------------------------------*/ const SummaryLabel = styled(Typography)`
|
|
409
|
+
font-style: italic;
|
|
410
|
+
`;
|
|
411
|
+
const SummaryChevron = styled(ChevronRight)`
|
|
412
|
+
transform: rotate(${({ $expanded })=>$expanded ? '90deg' : '0deg'});
|
|
413
|
+
transition: transform 0.2s ease;
|
|
414
|
+
`;
|
|
415
|
+
/**
|
|
416
|
+
* Stands in for the folders between a deep branch's root and the selected
|
|
417
|
+
* folder's parent, and lists them in place when opened.
|
|
418
|
+
*/ const CollapsedAncestors = ({ branch, isOpen, onOpenChange, ...itemProps })=>{
|
|
419
|
+
const { formatMessage } = useIntl();
|
|
420
|
+
const listId = useId();
|
|
421
|
+
const open = useCallback(()=>onOpenChange(true), [
|
|
422
|
+
onOpenChange
|
|
423
|
+
]);
|
|
424
|
+
const rootName = branch.root.name ?? '';
|
|
425
|
+
const hiddenNames = branch.hidden.map((node)=>node.name ?? '');
|
|
426
|
+
// Without this the hidden folders would be unreachable mid-drag, since the row
|
|
427
|
+
// can't be clicked while dragging. It never resolves to a destination.
|
|
428
|
+
const { setNodeRef, isOver } = useDroppable({
|
|
429
|
+
id: toFolderTreeSummaryId(branch.root.id),
|
|
430
|
+
disabled: itemProps.isMovePending
|
|
431
|
+
});
|
|
432
|
+
useSpringLoadedExpand({
|
|
433
|
+
isOver,
|
|
434
|
+
canExpand: !isOpen,
|
|
435
|
+
onExpand: open
|
|
436
|
+
});
|
|
437
|
+
return /*#__PURE__*/ jsxs("li", {
|
|
438
|
+
children: [
|
|
439
|
+
/*#__PURE__*/ jsx(TreeRow, {
|
|
440
|
+
ref: setNodeRef,
|
|
441
|
+
"data-native-context-menu": true,
|
|
442
|
+
alignItems: "center",
|
|
443
|
+
paddingLeft: `${getIndentRem(1) + ROW_INSET_LEFT_REM}rem`,
|
|
444
|
+
paddingRight: `${ROW_INSET_RIGHT_REM}rem`,
|
|
445
|
+
$isInvalidDropCursor: isOver,
|
|
446
|
+
$isMovePending: itemProps.isMovePending,
|
|
447
|
+
children: /*#__PURE__*/ jsx(Tooltip, {
|
|
448
|
+
label: hiddenNames.join(' / '),
|
|
449
|
+
children: /*#__PURE__*/ jsxs(RowButton, {
|
|
450
|
+
type: "button",
|
|
451
|
+
$isActive: false,
|
|
452
|
+
$isInvalidDropCursor: isOver,
|
|
453
|
+
$isMovePending: itemProps.isMovePending,
|
|
454
|
+
"aria-expanded": isOpen,
|
|
455
|
+
"aria-controls": isOpen ? listId : undefined,
|
|
456
|
+
onClick: ()=>onOpenChange(!isOpen),
|
|
457
|
+
"data-testid": "folder-tree-hidden-ancestors",
|
|
458
|
+
children: [
|
|
459
|
+
/*#__PURE__*/ jsx(IconSlot, {
|
|
460
|
+
children: /*#__PURE__*/ jsx(More, {
|
|
461
|
+
"aria-hidden": true,
|
|
462
|
+
fill: "neutral500"
|
|
463
|
+
})
|
|
464
|
+
}),
|
|
465
|
+
/*#__PURE__*/ jsx(Box, {
|
|
466
|
+
flex: "1",
|
|
467
|
+
minWidth: 0,
|
|
468
|
+
children: /*#__PURE__*/ jsx(SummaryLabel, {
|
|
469
|
+
ellipsis: true,
|
|
470
|
+
variant: "omega",
|
|
471
|
+
textColor: "neutral600",
|
|
472
|
+
children: formatMessage({
|
|
473
|
+
id: getTranslationKey('sidebar.tree.hidden-ancestors'),
|
|
474
|
+
defaultMessage: '{count, plural, one {# parent folder} other {# parent folders}}'
|
|
475
|
+
}, {
|
|
476
|
+
count: branch.hidden.length
|
|
477
|
+
})
|
|
478
|
+
})
|
|
479
|
+
}),
|
|
480
|
+
/*#__PURE__*/ jsx(IconSlot, {
|
|
481
|
+
children: /*#__PURE__*/ jsx(SummaryChevron, {
|
|
482
|
+
"aria-hidden": true,
|
|
483
|
+
$expanded: isOpen,
|
|
484
|
+
fill: "neutral500"
|
|
485
|
+
})
|
|
486
|
+
})
|
|
487
|
+
]
|
|
488
|
+
})
|
|
489
|
+
})
|
|
490
|
+
}),
|
|
491
|
+
isOpen && /*#__PURE__*/ jsx(NavList, {
|
|
492
|
+
id: listId,
|
|
493
|
+
children: branch.hidden.map((node, index)=>/*#__PURE__*/ createElement(FolderTreeItem, {
|
|
494
|
+
...itemProps,
|
|
495
|
+
key: node.id ?? node.name,
|
|
496
|
+
node: node,
|
|
497
|
+
parentId: (index === 0 ? branch.root.id : branch.hidden[index - 1].id) ?? null,
|
|
498
|
+
// All at one level: they are a list of the path, not a nested tree.
|
|
499
|
+
level: 2,
|
|
500
|
+
ancestorNames: [
|
|
501
|
+
rootName,
|
|
502
|
+
...hiddenNames.slice(0, index)
|
|
503
|
+
],
|
|
504
|
+
isHiddenAncestor: true,
|
|
505
|
+
openPathSegment: index === 0 ? 'start' : 'middle'
|
|
506
|
+
}))
|
|
507
|
+
})
|
|
508
|
+
]
|
|
509
|
+
});
|
|
510
|
+
};
|
|
511
|
+
/**
|
|
512
|
+
* The root folder of a deep branch, with everything between it and the selected
|
|
513
|
+
* folder's parent folded into one row. See `getCollapsedBranch`.
|
|
514
|
+
*/ const CollapsedBranchItem = ({ branch, ...itemProps })=>{
|
|
515
|
+
const { currentFolderId } = itemProps;
|
|
516
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
517
|
+
// Closed again on every new selection, clicking a hidden folder included.
|
|
518
|
+
// Reset during render rather than in an effect, so the list never paints open
|
|
519
|
+
// for a folder it wasn't opened on.
|
|
520
|
+
const [openedOn, setOpenedOn] = useState(currentFolderId);
|
|
521
|
+
if (openedOn !== currentFolderId) {
|
|
522
|
+
setOpenedOn(currentFolderId);
|
|
523
|
+
setIsOpen(false);
|
|
524
|
+
}
|
|
525
|
+
const ancestorNamesOfParent = [
|
|
526
|
+
branch.root,
|
|
527
|
+
...branch.hidden
|
|
528
|
+
].map((node)=>node.name ?? '');
|
|
529
|
+
return /*#__PURE__*/ jsx(FolderTreeItem, {
|
|
530
|
+
...itemProps,
|
|
531
|
+
node: branch.root,
|
|
532
|
+
parentId: null,
|
|
533
|
+
level: 0,
|
|
534
|
+
ancestorNames: [],
|
|
535
|
+
subtree: /*#__PURE__*/ jsxs(NavList, {
|
|
536
|
+
children: [
|
|
537
|
+
/*#__PURE__*/ jsx(CollapsedAncestors, {
|
|
538
|
+
...itemProps,
|
|
539
|
+
branch: branch,
|
|
540
|
+
isOpen: isOpen,
|
|
541
|
+
onOpenChange: setIsOpen
|
|
542
|
+
}),
|
|
543
|
+
/*#__PURE__*/ jsx(FolderTreeItem, {
|
|
544
|
+
...itemProps,
|
|
545
|
+
node: branch.parent,
|
|
546
|
+
parentId: branch.hidden[branch.hidden.length - 1]?.id ?? branch.root.id ?? null,
|
|
547
|
+
level: 2,
|
|
548
|
+
ancestorNames: ancestorNamesOfParent,
|
|
549
|
+
openPathSegment: isOpen ? 'end' : undefined
|
|
550
|
+
})
|
|
551
|
+
]
|
|
552
|
+
})
|
|
553
|
+
});
|
|
554
|
+
};
|
|
374
555
|
const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';
|
|
375
556
|
/**
|
|
376
557
|
* Left-rail navigation for the Media Library. Fetches folder structure internally
|
|
@@ -395,6 +576,45 @@ const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';
|
|
|
395
576
|
const { isMovePending } = useAssetsDndOptional() ?? {
|
|
396
577
|
isMovePending: false
|
|
397
578
|
};
|
|
579
|
+
const collapsedBranch = useMemo(()=>getCollapsedBranch(folderStructure, currentFolderId), [
|
|
580
|
+
folderStructure,
|
|
581
|
+
currentFolderId
|
|
582
|
+
]);
|
|
583
|
+
// A selection that folds or unfolds a branch remounts the selected row, which
|
|
584
|
+
// drops focus to <body>. Whether focus was in the tree has to be read before
|
|
585
|
+
// the selection, since by the time the new row renders the old one is gone.
|
|
586
|
+
const restoreFocusRef = useRef(false);
|
|
587
|
+
const handleSelectFolder = useCallback((folderId)=>{
|
|
588
|
+
// Re-selecting the open folder renders nothing new, so a flag set here
|
|
589
|
+
// would linger and pull focus back on a later, unrelated navigation.
|
|
590
|
+
restoreFocusRef.current = folderId !== currentFolderId && document.activeElement?.closest(FOLDER_TREE_ROOT_SELECTOR) != null;
|
|
591
|
+
onSelectFolder(folderId);
|
|
592
|
+
}, [
|
|
593
|
+
currentFolderId,
|
|
594
|
+
onSelectFolder
|
|
595
|
+
]);
|
|
596
|
+
useEffect(()=>{
|
|
597
|
+
if (!restoreFocusRef.current || currentFolderId == null) {
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
restoreFocusRef.current = false;
|
|
601
|
+
// Only take back the focus the remount dropped, never steal it from elsewhere.
|
|
602
|
+
if (document.activeElement !== document.body) {
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
document.querySelector(`${FOLDER_TREE_ROOT_SELECTOR} [data-folder-id="${currentFolderId}"]`)?.focus();
|
|
606
|
+
}, [
|
|
607
|
+
currentFolderId
|
|
608
|
+
]);
|
|
609
|
+
const sharedItemProps = {
|
|
610
|
+
currentFolderId,
|
|
611
|
+
showActiveFolder,
|
|
612
|
+
isExpanded,
|
|
613
|
+
onToggle: toggleExpanded,
|
|
614
|
+
onExpand: expandFolder,
|
|
615
|
+
onSelect: handleSelectFolder,
|
|
616
|
+
isMovePending
|
|
617
|
+
};
|
|
398
618
|
const isHomeActive = showActiveFolder && currentFolderId == null;
|
|
399
619
|
const homeLabel = formatMessage({
|
|
400
620
|
id: getTranslationKey('sidebar.home'),
|
|
@@ -529,18 +749,16 @@ const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';
|
|
|
529
749
|
})
|
|
530
750
|
})
|
|
531
751
|
}) : /*#__PURE__*/ jsx(NavList, {
|
|
532
|
-
children: folderStructure.map((node)
|
|
752
|
+
children: folderStructure.map((node)=>collapsedBranch && node.id === collapsedBranch.root.id ? /*#__PURE__*/ jsx(CollapsedBranchItem, {
|
|
753
|
+
branch: collapsedBranch,
|
|
754
|
+
...sharedItemProps
|
|
755
|
+
}, node.id) : /*#__PURE__*/ jsx(FolderTreeItem, {
|
|
533
756
|
node: node,
|
|
534
757
|
// Top of the tree — these sit at the library root.
|
|
535
758
|
parentId: null,
|
|
536
759
|
level: 0,
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
isExpanded: isExpanded,
|
|
540
|
-
onToggle: toggleExpanded,
|
|
541
|
-
onExpand: expandFolder,
|
|
542
|
-
onSelect: onSelectFolder,
|
|
543
|
-
isMovePending: isMovePending
|
|
760
|
+
ancestorNames: [],
|
|
761
|
+
...sharedItemProps
|
|
544
762
|
}, node.id ?? node.name))
|
|
545
763
|
})
|
|
546
764
|
]
|
|
@@ -552,5 +770,5 @@ const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';
|
|
|
552
770
|
});
|
|
553
771
|
};
|
|
554
772
|
|
|
555
|
-
export { FOLDER_TREE_ROOT_SELECTOR, FolderTree };
|
|
773
|
+
export { FOLDER_TREE_ROOT_SELECTOR, FolderTree, getIndentRem };
|
|
556
774
|
//# sourceMappingURL=FolderTree.mjs.map
|