@strapi/upload 5.51.0 → 5.51.2
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/AssetCard/VideoPreview.js +1 -1
- package/dist/admin/components/AssetCard/VideoPreview.js.map +1 -1
- package/dist/admin/components/AssetCard/VideoPreview.mjs +1 -1
- package/dist/admin/components/AssetCard/VideoPreview.mjs.map +1 -1
- package/dist/admin/components/TableList/TableList.js +1 -1
- package/dist/admin/components/TableList/TableList.js.map +1 -1
- package/dist/admin/components/TableList/TableList.mjs +1 -1
- package/dist/admin/components/TableList/TableList.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +21 -4
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +21 -4
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
- package/dist/admin/future/components/Drawer.js +3 -1
- package/dist/admin/future/components/Drawer.js.map +1 -1
- package/dist/admin/future/components/Drawer.mjs +3 -1
- package/dist/admin/future/components/Drawer.mjs.map +1 -1
- package/dist/admin/future/components/UploadProgressDialog.js +200 -27
- package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
- package/dist/admin/future/components/UploadProgressDialog.mjs +203 -30
- package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
- package/dist/admin/future/hooks/useMediaLibraryPermissions.js +35 -0
- package/dist/admin/future/hooks/useMediaLibraryPermissions.js.map +1 -0
- package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs +33 -0
- package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/AssetsPage.js +344 -150
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +343 -149
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +75 -32
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +75 -32
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +46 -19
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +47 -20
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +161 -19
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +162 -20
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js +100 -0
- package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs +98 -0
- package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.js +218 -37
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +219 -38
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +370 -0
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +368 -0
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +209 -0
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +207 -0
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js +193 -0
- package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs +191 -0
- package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +129 -37
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +131 -39
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js +120 -13
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs +120 -13
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +71 -0
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +69 -0
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js +34 -0
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs +32 -0
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js +15 -0
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs +13 -1
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +19 -25
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +19 -25
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js +35 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs +33 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +13 -3
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +13 -3
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/EmptyState.js +62 -3
- package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs +62 -4
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/FilterBadges.js +408 -0
- package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/FilterBadges.mjs +406 -0
- package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/FilterMenu.js +273 -0
- package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/FilterMenu.mjs +267 -0
- package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +195 -40
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +198 -43
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js +33 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs +31 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js +22 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs +19 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/SortMenu.js +154 -0
- package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/SortMenu.mjs +152 -0
- package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js +40 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs +38 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +75 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +71 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +33 -12
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +33 -12
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +40 -4
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +40 -4
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useListFilters.js +168 -0
- package/dist/admin/future/pages/Assets/hooks/useListFilters.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs +162 -0
- package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useListSort.js +124 -0
- package/dist/admin/future/pages/Assets/hooks/useListSort.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useListSort.mjs +120 -0
- package/dist/admin/future/pages/Assets/hooks/useListSort.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js +201 -0
- package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js.map +1 -0
- package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs +198 -0
- package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/utils/listQueryKey.js +29 -0
- package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -0
- package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +27 -0
- package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.js +84 -0
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.js.map +1 -0
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs +81 -0
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/utils/selection.js +104 -0
- package/dist/admin/future/pages/Assets/utils/selection.js.map +1 -0
- package/dist/admin/future/pages/Assets/utils/selection.mjs +94 -0
- package/dist/admin/future/pages/Assets/utils/selection.mjs.map +1 -0
- package/dist/admin/future/services/api.js +163 -28
- package/dist/admin/future/services/api.js.map +1 -1
- package/dist/admin/future/services/api.mjs +163 -30
- package/dist/admin/future/services/api.mjs.map +1 -1
- package/dist/admin/future/services/assets.js +62 -18
- package/dist/admin/future/services/assets.js.map +1 -1
- package/dist/admin/future/services/assets.mjs +62 -19
- package/dist/admin/future/services/assets.mjs.map +1 -1
- package/dist/admin/future/services/folders.js +31 -19
- package/dist/admin/future/services/folders.js.map +1 -1
- package/dist/admin/future/services/folders.mjs +31 -19
- package/dist/admin/future/services/folders.mjs.map +1 -1
- package/dist/admin/future/services/settings.js +10 -3
- package/dist/admin/future/services/settings.js.map +1 -1
- package/dist/admin/future/services/settings.mjs +10 -3
- package/dist/admin/future/services/settings.mjs.map +1 -1
- package/dist/admin/future/store/uploadProgress.js +109 -2
- package/dist/admin/future/store/uploadProgress.js.map +1 -1
- package/dist/admin/future/store/uploadProgress.mjs +105 -3
- package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
- package/dist/admin/future/utils/buildDragSetFromSelection.js +33 -0
- package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -0
- package/dist/admin/future/utils/buildDragSetFromSelection.mjs +31 -0
- package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -0
- package/dist/admin/future/utils/canDropItemOnFolder.js +4 -0
- package/dist/admin/future/utils/canDropItemOnFolder.js.map +1 -1
- package/dist/admin/future/utils/canDropItemOnFolder.mjs +4 -0
- package/dist/admin/future/utils/canDropItemOnFolder.mjs.map +1 -1
- package/dist/admin/future/utils/flattenFolderStructure.js +28 -0
- package/dist/admin/future/utils/flattenFolderStructure.js.map +1 -0
- package/dist/admin/future/utils/flattenFolderStructure.mjs +26 -0
- package/dist/admin/future/utils/flattenFolderStructure.mjs.map +1 -0
- package/dist/admin/future/utils/formatMoveSuccessMessage.js +19 -0
- package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -0
- package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +17 -0
- package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -0
- package/dist/admin/future/utils/getFolderLabel.js +31 -0
- package/dist/admin/future/utils/getFolderLabel.js.map +1 -0
- package/dist/admin/future/utils/getFolderLabel.mjs +29 -0
- package/dist/admin/future/utils/getFolderLabel.mjs.map +1 -0
- package/dist/admin/future/utils/searchQueryParam.js +11 -0
- package/dist/admin/future/utils/searchQueryParam.js.map +1 -0
- package/dist/admin/future/utils/searchQueryParam.mjs +9 -0
- package/dist/admin/future/utils/searchQueryParam.mjs.map +1 -0
- package/dist/admin/hooks/useSelectionState.js +2 -4
- package/dist/admin/hooks/useSelectionState.js.map +1 -1
- package/dist/admin/hooks/useSelectionState.mjs +2 -4
- package/dist/admin/hooks/useSelectionState.mjs.map +1 -1
- package/dist/admin/shared/constants.js +43 -0
- package/dist/admin/shared/constants.js.map +1 -0
- package/dist/admin/shared/constants.mjs +38 -0
- package/dist/admin/shared/constants.mjs.map +1 -0
- package/dist/admin/src/future/hooks/useMediaLibraryPermissions.d.ts +21 -0
- package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +7 -1
- package/dist/admin/src/future/pages/Assets/components/AssetsSearchInput.d.ts +5 -0
- package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +7 -1
- package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +14 -0
- package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +13 -0
- package/dist/admin/src/future/pages/Assets/components/DateRangeCalendar.d.ts +8 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +2 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.d.ts +2 -2
- package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +17 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.d.ts +7 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/dndIds.d.ts +3 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +3 -1
- package/dist/admin/src/future/pages/Assets/components/Dnd/useFolderTreeDroppable.d.ts +19 -0
- package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +8 -1
- package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +18 -1
- package/dist/admin/src/future/pages/Assets/components/FilterBadges.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/components/FilterMenu.d.ts +22 -0
- package/dist/admin/src/future/pages/Assets/components/FolderTree/FolderTree.d.ts +13 -4
- package/dist/admin/src/future/pages/Assets/components/FolderTree/filterFolderTree.d.ts +16 -0
- package/dist/admin/src/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +23 -0
- package/dist/admin/src/future/pages/Assets/hooks/useAssetSearch.d.ts +12 -0
- package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +46 -0
- package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +13 -3
- package/dist/admin/src/future/pages/Assets/hooks/useListFilters.d.ts +69 -0
- package/dist/admin/src/future/pages/Assets/hooks/useListSort.d.ts +47 -0
- package/dist/admin/src/future/pages/Assets/utils/buildAssetFilters.d.ts +46 -0
- package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +29 -0
- package/dist/admin/src/future/pages/Assets/utils/mergeMixedList.d.ts +40 -0
- package/dist/admin/src/future/pages/Assets/utils/selection.d.ts +50 -0
- package/dist/admin/src/future/services/api.d.ts +53 -5
- package/dist/admin/src/future/services/assets.d.ts +13 -2
- package/dist/admin/src/future/services/folders.d.ts +7 -1
- package/dist/admin/src/future/services/settings.d.ts +2 -2
- package/dist/admin/src/future/store/uploadProgress.d.ts +83 -1
- package/dist/admin/src/future/types/dnd.d.ts +5 -0
- package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +11 -0
- package/dist/admin/src/future/utils/canDropItemOnFolder.d.ts +1 -1
- package/dist/admin/src/future/utils/flattenFolderStructure.d.ts +18 -0
- package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +14 -0
- package/dist/admin/src/future/utils/getFolderLabel.d.ts +11 -0
- package/dist/admin/src/future/utils/searchQueryParam.d.ts +7 -0
- package/dist/admin/src/hooks/useAiAvailability.d.ts +1 -1
- package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
- package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
- package/dist/admin/src/hooks/useSettings.d.ts +1 -0
- package/dist/admin/src/hooks/useTracking.d.ts +1 -1
- package/dist/admin/src/hooks/useUpload.d.ts +1 -1
- package/dist/admin/translations/en.json.js +85 -2
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +85 -2
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/urlYupSchema.js +33 -9
- package/dist/admin/utils/urlYupSchema.js.map +1 -1
- package/dist/admin/utils/urlYupSchema.mjs +33 -9
- package/dist/admin/utils/urlYupSchema.mjs.map +1 -1
- package/dist/server/config.js +13 -5
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +13 -5
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/constants.js.map +1 -1
- package/dist/server/constants.mjs.map +1 -1
- package/dist/server/controllers/admin-file.js +30 -0
- package/dist/server/controllers/admin-file.js.map +1 -1
- package/dist/server/controllers/admin-file.mjs +30 -0
- package/dist/server/controllers/admin-file.mjs.map +1 -1
- package/dist/server/controllers/admin-settings.js +20 -2
- package/dist/server/controllers/admin-settings.js.map +1 -1
- package/dist/server/controllers/admin-settings.mjs +21 -3
- package/dist/server/controllers/admin-settings.mjs.map +1 -1
- package/dist/server/controllers/content-api.js +1 -2
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/content-api.mjs +2 -2
- package/dist/server/controllers/content-api.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/ai-metadata.js +12 -0
- package/dist/server/controllers/validation/admin/ai-metadata.js.map +1 -0
- package/dist/server/controllers/validation/admin/ai-metadata.mjs +10 -0
- package/dist/server/controllers/validation/admin/ai-metadata.mjs.map +1 -0
- package/dist/server/controllers/validation/admin/settings.js +4 -1
- package/dist/server/controllers/validation/admin/settings.js.map +1 -1
- package/dist/server/controllers/validation/admin/settings.mjs +1 -1
- package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
- package/dist/server/routes/admin.js +18 -0
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +18 -0
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/services/ai-metadata.js +108 -11
- package/dist/server/services/ai-metadata.js.map +1 -1
- package/dist/server/services/ai-metadata.mjs +108 -11
- package/dist/server/services/ai-metadata.mjs.map +1 -1
- package/dist/server/services/file.js +86 -13
- package/dist/server/services/file.js.map +1 -1
- package/dist/server/services/file.mjs +87 -14
- package/dist/server/services/file.mjs.map +1 -1
- package/dist/server/services/image-manipulation.js +4 -4
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/image-manipulation.mjs +4 -4
- package/dist/server/services/image-manipulation.mjs.map +1 -1
- package/dist/server/shared/constants.js +43 -0
- package/dist/server/shared/constants.js.map +1 -0
- package/dist/server/shared/constants.mjs +38 -0
- package/dist/server/shared/constants.mjs.map +1 -0
- package/dist/server/src/config.d.ts +2 -0
- package/dist/server/src/config.d.ts.map +1 -1
- package/dist/server/src/constants.d.ts +2 -1
- package/dist/server/src/constants.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-file.d.ts +10 -0
- package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts +2 -0
- package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/admin/settings.d.ts +1 -1
- package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +7 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata.d.ts +19 -0
- package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
- package/dist/server/src/services/file.d.ts +12 -2
- package/dist/server/src/services/file.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +3 -0
- package/dist/server/src/types.d.ts.map +1 -1
- package/dist/shared/constants.d.ts +35 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/contracts/files.d.ts +25 -0
- package/dist/shared/contracts/files.d.ts.map +1 -1
- package/dist/shared/contracts/folders.d.ts +1 -1
- package/dist/shared/contracts/settings.d.ts +7 -0
- package/package.json +8 -8
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Typography, Flex } from '@strapi/design-system';
|
|
3
3
|
import { Folder, File } from '@strapi/icons';
|
|
4
|
+
import { useIntl } from 'react-intl';
|
|
4
5
|
import { styled } from 'styled-components';
|
|
6
|
+
import { getTranslationKey } from '../../../../utils/translations.mjs';
|
|
5
7
|
|
|
8
|
+
// Folder & File (@strapi/icons) share viewBox 0 0 32 32 but File's glyph is
|
|
9
|
+
// narrower/lighter. Rendering File a few px larger inside a fixed square box makes
|
|
10
|
+
// the two previews read at the same visual size without shifting the chip layout.
|
|
11
|
+
const FOLDER_ICON_SIZE = 20;
|
|
12
|
+
const FILE_ICON_SIZE = 24;
|
|
13
|
+
const ICON_BOX = 24;
|
|
6
14
|
const Chip = styled(Flex)`
|
|
15
|
+
position: relative;
|
|
7
16
|
align-items: center;
|
|
8
17
|
gap: ${({ theme })=>theme.spaces[2]};
|
|
9
18
|
padding: ${({ theme })=>`${theme.spaces[2]} ${theme.spaces[3]}`};
|
|
@@ -13,23 +22,121 @@ const Chip = styled(Flex)`
|
|
|
13
22
|
cursor: grabbing;
|
|
14
23
|
max-width: 24rem;
|
|
15
24
|
`;
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
const CompositeChip = styled(Chip)`
|
|
26
|
+
box-shadow:
|
|
27
|
+
${({ theme })=>theme.shadows.tableShadow},
|
|
28
|
+
0 4px 0 -1px ${({ theme })=>theme.colors.primary100},
|
|
29
|
+
0 4px 0 0 ${({ theme })=>theme.colors.primary200},
|
|
30
|
+
0 7px 0 -1px ${({ theme })=>theme.colors.primary100},
|
|
31
|
+
0 7px 0 0 ${({ theme })=>theme.colors.primary200};
|
|
32
|
+
`;
|
|
33
|
+
const CountGroup = styled(Flex)`
|
|
34
|
+
align-items: center;
|
|
35
|
+
gap: ${({ theme })=>theme.spaces[1]};
|
|
36
|
+
`;
|
|
37
|
+
const IconBox = styled(Flex)`
|
|
38
|
+
flex-shrink: 0;
|
|
39
|
+
width: ${ICON_BOX}px;
|
|
40
|
+
height: ${ICON_BOX}px;
|
|
41
|
+
align-items: center;
|
|
42
|
+
justify-content: center;
|
|
43
|
+
`;
|
|
44
|
+
const TotalBadge = styled(Flex)`
|
|
45
|
+
position: absolute;
|
|
46
|
+
top: -${({ theme })=>theme.spaces[2]};
|
|
47
|
+
right: -${({ theme })=>theme.spaces[2]};
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
min-width: ${({ theme })=>theme.spaces[5]};
|
|
51
|
+
height: ${({ theme })=>theme.spaces[5]};
|
|
52
|
+
padding: 0 ${({ theme })=>theme.spaces[1]};
|
|
53
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
54
|
+
background: ${({ theme })=>theme.colors.primary600};
|
|
55
|
+
`;
|
|
56
|
+
const DragOverlayChip = ({ items })=>{
|
|
57
|
+
const { formatMessage } = useIntl();
|
|
58
|
+
if (items.length === 0) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
if (items.length === 1) {
|
|
62
|
+
const item = items[0];
|
|
63
|
+
const isFolder = item.kind === 'folder';
|
|
64
|
+
const Icon = isFolder ? Folder : File;
|
|
65
|
+
const size = isFolder ? FOLDER_ICON_SIZE : FILE_ICON_SIZE;
|
|
66
|
+
return /*#__PURE__*/ jsxs(Chip, {
|
|
67
|
+
children: [
|
|
68
|
+
/*#__PURE__*/ jsx(IconBox, {
|
|
69
|
+
children: /*#__PURE__*/ jsx(Icon, {
|
|
70
|
+
width: size,
|
|
71
|
+
height: size
|
|
72
|
+
})
|
|
73
|
+
}),
|
|
74
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
75
|
+
textColor: "neutral800",
|
|
76
|
+
fontWeight: "semiBold",
|
|
77
|
+
ellipsis: true,
|
|
78
|
+
children: item.name
|
|
79
|
+
})
|
|
80
|
+
]
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const folderCount = items.filter((item)=>item.kind === 'folder').length;
|
|
84
|
+
const fileCount = items.filter((item)=>item.kind === 'file').length;
|
|
85
|
+
const total = folderCount + fileCount;
|
|
86
|
+
return /*#__PURE__*/ jsxs(CompositeChip, {
|
|
87
|
+
gap: 3,
|
|
19
88
|
children: [
|
|
20
|
-
/*#__PURE__*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
89
|
+
folderCount > 0 ? /*#__PURE__*/ jsxs(CountGroup, {
|
|
90
|
+
children: [
|
|
91
|
+
/*#__PURE__*/ jsx(IconBox, {
|
|
92
|
+
children: /*#__PURE__*/ jsx(Folder, {
|
|
93
|
+
width: FOLDER_ICON_SIZE,
|
|
94
|
+
height: FOLDER_ICON_SIZE
|
|
95
|
+
})
|
|
96
|
+
}),
|
|
97
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
98
|
+
textColor: "neutral800",
|
|
99
|
+
fontWeight: "semiBold",
|
|
100
|
+
children: formatMessage({
|
|
101
|
+
id: getTranslationKey('dnd.overlay.folders'),
|
|
102
|
+
defaultMessage: '{count, plural, one {# folder} other {# folders}}'
|
|
103
|
+
}, {
|
|
104
|
+
count: folderCount
|
|
105
|
+
})
|
|
106
|
+
})
|
|
107
|
+
]
|
|
108
|
+
}) : null,
|
|
109
|
+
fileCount > 0 ? /*#__PURE__*/ jsxs(CountGroup, {
|
|
110
|
+
children: [
|
|
111
|
+
/*#__PURE__*/ jsx(IconBox, {
|
|
112
|
+
children: /*#__PURE__*/ jsx(File, {
|
|
113
|
+
width: FILE_ICON_SIZE,
|
|
114
|
+
height: FILE_ICON_SIZE
|
|
115
|
+
})
|
|
116
|
+
}),
|
|
117
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
118
|
+
textColor: "neutral800",
|
|
119
|
+
fontWeight: "semiBold",
|
|
120
|
+
children: formatMessage({
|
|
121
|
+
id: getTranslationKey('dnd.overlay.files'),
|
|
122
|
+
defaultMessage: '{count, plural, one {# file} other {# files}}'
|
|
123
|
+
}, {
|
|
124
|
+
count: fileCount
|
|
125
|
+
})
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
}) : null,
|
|
129
|
+
/*#__PURE__*/ jsx(TotalBadge, {
|
|
130
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
131
|
+
textColor: "neutral0",
|
|
132
|
+
fontWeight: "bold",
|
|
133
|
+
variant: "pi",
|
|
134
|
+
children: total
|
|
135
|
+
})
|
|
29
136
|
})
|
|
30
137
|
]
|
|
31
138
|
});
|
|
32
|
-
};
|
|
139
|
+
};
|
|
33
140
|
|
|
34
141
|
export { DragOverlayChip };
|
|
35
142
|
//# sourceMappingURL=DragOverlayChip.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragOverlayChip.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.tsx"],"sourcesContent":["import { Flex, Typography } from '@strapi/design-system';\nimport { File as FileIcon, Folder as FolderIcon } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport type { DragItemData } from '../../../../types/dnd';\n\nconst Chip = styled(Flex)`\n align-items: center;\n gap: ${({ theme }) => theme.spaces[2]};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[3]}`};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.primary100};\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n cursor: grabbing;\n max-width: 24rem;\n`;\n\ninterface DragOverlayChipProps {\n
|
|
1
|
+
{"version":3,"file":"DragOverlayChip.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.tsx"],"sourcesContent":["import { Flex, Typography } from '@strapi/design-system';\nimport { File as FileIcon, Folder as FolderIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslationKey } from '../../../../utils/translations';\n\nimport type { DragItemData } from '../../../../types/dnd';\n\n// Folder & File (@strapi/icons) share viewBox 0 0 32 32 but File's glyph is\n// narrower/lighter. Rendering File a few px larger inside a fixed square box makes\n// the two previews read at the same visual size without shifting the chip layout.\nconst FOLDER_ICON_SIZE = 20;\nconst FILE_ICON_SIZE = 24;\nconst ICON_BOX = 24;\n\nconst Chip = styled(Flex)`\n position: relative;\n align-items: center;\n gap: ${({ theme }) => theme.spaces[2]};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[3]}`};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.primary100};\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n cursor: grabbing;\n max-width: 24rem;\n`;\n\nconst CompositeChip = styled(Chip)`\n box-shadow:\n ${({ theme }) => theme.shadows.tableShadow},\n 0 4px 0 -1px ${({ theme }) => theme.colors.primary100},\n 0 4px 0 0 ${({ theme }) => theme.colors.primary200},\n 0 7px 0 -1px ${({ theme }) => theme.colors.primary100},\n 0 7px 0 0 ${({ theme }) => theme.colors.primary200};\n`;\n\nconst CountGroup = styled(Flex)`\n align-items: center;\n gap: ${({ theme }) => theme.spaces[1]};\n`;\n\nconst IconBox = styled(Flex)`\n flex-shrink: 0;\n width: ${ICON_BOX}px;\n height: ${ICON_BOX}px;\n align-items: center;\n justify-content: center;\n`;\n\nconst TotalBadge = styled(Flex)`\n position: absolute;\n top: -${({ theme }) => theme.spaces[2]};\n right: -${({ theme }) => theme.spaces[2]};\n align-items: center;\n justify-content: center;\n min-width: ${({ theme }) => theme.spaces[5]};\n height: ${({ theme }) => theme.spaces[5]};\n padding: 0 ${({ theme }) => theme.spaces[1]};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.primary600};\n`;\n\ninterface DragOverlayChipProps {\n items: DragItemData[];\n}\n\nexport const DragOverlayChip = ({ items }: DragOverlayChipProps) => {\n const { formatMessage } = useIntl();\n\n if (items.length === 0) {\n return null;\n }\n\n if (items.length === 1) {\n const item = items[0];\n const isFolder = item.kind === 'folder';\n const Icon = isFolder ? FolderIcon : FileIcon;\n const size = isFolder ? FOLDER_ICON_SIZE : FILE_ICON_SIZE;\n\n return (\n <Chip>\n <IconBox>\n <Icon width={size} height={size} />\n </IconBox>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {item.name}\n </Typography>\n </Chip>\n );\n }\n\n const folderCount = items.filter((item) => item.kind === 'folder').length;\n const fileCount = items.filter((item) => item.kind === 'file').length;\n const total = folderCount + fileCount;\n\n return (\n <CompositeChip gap={3}>\n {folderCount > 0 ? (\n <CountGroup>\n <IconBox>\n <FolderIcon width={FOLDER_ICON_SIZE} height={FOLDER_ICON_SIZE} />\n </IconBox>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\">\n {formatMessage(\n {\n id: getTranslationKey('dnd.overlay.folders'),\n defaultMessage: '{count, plural, one {# folder} other {# folders}}',\n },\n { count: folderCount }\n )}\n </Typography>\n </CountGroup>\n ) : null}\n {fileCount > 0 ? (\n <CountGroup>\n <IconBox>\n <FileIcon width={FILE_ICON_SIZE} height={FILE_ICON_SIZE} />\n </IconBox>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\">\n {formatMessage(\n {\n id: getTranslationKey('dnd.overlay.files'),\n defaultMessage: '{count, plural, one {# file} other {# files}}',\n },\n { count: fileCount }\n )}\n </Typography>\n </CountGroup>\n ) : null}\n <TotalBadge>\n <Typography textColor=\"neutral0\" fontWeight=\"bold\" variant=\"pi\">\n {total}\n </Typography>\n </TotalBadge>\n </CompositeChip>\n );\n};\n"],"names":["FOLDER_ICON_SIZE","FILE_ICON_SIZE","ICON_BOX","Chip","styled","Flex","theme","spaces","borderRadius","colors","primary100","shadows","tableShadow","CompositeChip","primary200","CountGroup","IconBox","TotalBadge","primary600","DragOverlayChip","items","formatMessage","useIntl","length","item","isFolder","kind","Icon","FolderIcon","FileIcon","size","_jsxs","_jsx","width","height","Typography","textColor","fontWeight","ellipsis","name","folderCount","filter","fileCount","total","gap","id","getTranslationKey","defaultMessage","count","variant"],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var selection = require('../../utils/selection.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Stamp an item with the authoritative current-folder location. Drag/selection is
|
|
7
|
+
* page-scoped to the current folder, so this is more reliable than the item's own
|
|
8
|
+
* `folderId`/`parentId` — a dragged folder's `parent` is not populated by the
|
|
9
|
+
* folders query, so its `parentId` would otherwise collapse to `null`.
|
|
10
|
+
*/ const locateItem = (item, currentFolderId)=>item.kind === 'file' ? {
|
|
11
|
+
...item,
|
|
12
|
+
folderId: currentFolderId
|
|
13
|
+
} : {
|
|
14
|
+
...item,
|
|
15
|
+
parentId: currentFolderId
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Derive the drag payload once at drag start.
|
|
19
|
+
*
|
|
20
|
+
* - Dragging a selected item moves the complete current selection.
|
|
21
|
+
* - Dragging an unselected item moves only that item.
|
|
22
|
+
*
|
|
23
|
+
* Selection is page-scoped to the current folder, so every item is stamped with
|
|
24
|
+
* `currentFolderId` as its location for move validation.
|
|
25
|
+
*/ const buildDragSet = (activeData, selectedKeys, currentFolderId)=>{
|
|
26
|
+
if (!selectedKeys || selectedKeys.size === 0) {
|
|
27
|
+
return {
|
|
28
|
+
items: [
|
|
29
|
+
locateItem(activeData, currentFolderId)
|
|
30
|
+
],
|
|
31
|
+
fromSelection: false
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const activeKey = activeData.kind === 'file' ? selection.assetKey(activeData.id) : selection.folderKey(activeData.id);
|
|
35
|
+
if (!selectedKeys.has(activeKey)) {
|
|
36
|
+
return {
|
|
37
|
+
items: [
|
|
38
|
+
locateItem(activeData, currentFolderId)
|
|
39
|
+
],
|
|
40
|
+
fromSelection: false
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const items = [];
|
|
44
|
+
selectedKeys.forEach((key)=>{
|
|
45
|
+
const separator = key.indexOf(':');
|
|
46
|
+
const kind = key.slice(0, separator);
|
|
47
|
+
const id = Number(key.slice(separator + 1));
|
|
48
|
+
if (kind === 'asset') {
|
|
49
|
+
items.push({
|
|
50
|
+
kind: 'file',
|
|
51
|
+
id,
|
|
52
|
+
name: activeData.kind === 'file' && activeData.id === id ? activeData.name : '',
|
|
53
|
+
folderId: currentFolderId
|
|
54
|
+
});
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
items.push({
|
|
58
|
+
kind: 'folder',
|
|
59
|
+
id,
|
|
60
|
+
name: activeData.kind === 'folder' && activeData.id === id ? activeData.name : '',
|
|
61
|
+
parentId: currentFolderId
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
items,
|
|
66
|
+
fromSelection: true
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
exports.buildDragSet = buildDragSet;
|
|
71
|
+
//# sourceMappingURL=buildDragSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildDragSet.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/buildDragSet.ts"],"sourcesContent":["import { assetKey, folderKey, type ItemKey } from '../../utils/selection';\n\nimport type { DragItemData } from '../../../../types/dnd';\n\nexport interface DragSet {\n items: DragItemData[];\n /** True when the active item was already selected — membership is the full selection. */\n fromSelection: boolean;\n}\n\n/**\n * Stamp an item with the authoritative current-folder location. Drag/selection is\n * page-scoped to the current folder, so this is more reliable than the item's own\n * `folderId`/`parentId` — a dragged folder's `parent` is not populated by the\n * folders query, so its `parentId` would otherwise collapse to `null`.\n */\nconst locateItem = (item: DragItemData, currentFolderId: number | null): DragItemData =>\n item.kind === 'file'\n ? { ...item, folderId: currentFolderId }\n : { ...item, parentId: currentFolderId };\n\n/**\n * Derive the drag payload once at drag start.\n *\n * - Dragging a selected item moves the complete current selection.\n * - Dragging an unselected item moves only that item.\n *\n * Selection is page-scoped to the current folder, so every item is stamped with\n * `currentFolderId` as its location for move validation.\n */\nexport const buildDragSet = (\n activeData: DragItemData,\n selectedKeys: Set<ItemKey> | undefined,\n currentFolderId: number | null\n): DragSet => {\n if (!selectedKeys || selectedKeys.size === 0) {\n return { items: [locateItem(activeData, currentFolderId)], fromSelection: false };\n }\n\n const activeKey: ItemKey =\n activeData.kind === 'file' ? assetKey(activeData.id) : folderKey(activeData.id);\n\n if (!selectedKeys.has(activeKey)) {\n return { items: [locateItem(activeData, currentFolderId)], fromSelection: false };\n }\n\n const items: DragItemData[] = [];\n\n selectedKeys.forEach((key) => {\n const separator = key.indexOf(':');\n const kind = key.slice(0, separator);\n const id = Number(key.slice(separator + 1));\n\n if (kind === 'asset') {\n items.push({\n kind: 'file',\n id,\n name: activeData.kind === 'file' && activeData.id === id ? activeData.name : '',\n folderId: currentFolderId,\n });\n return;\n }\n\n items.push({\n kind: 'folder',\n id,\n name: activeData.kind === 'folder' && activeData.id === id ? activeData.name : '',\n parentId: currentFolderId,\n });\n });\n\n return { items, fromSelection: true };\n};\n"],"names":["locateItem","item","currentFolderId","kind","folderId","parentId","buildDragSet","activeData","selectedKeys","size","items","fromSelection","activeKey","assetKey","id","folderKey","has","forEach","key","separator","indexOf","slice","Number","push","name"],"mappings":";;;;AAUA;;;;;IAMA,MAAMA,aAAa,CAACC,IAAAA,EAAoBC,kBACtCD,IAAAA,CAAKE,IAAI,KAAK,MAAA,GACV;AAAE,QAAA,GAAGF,IAAI;QAAEG,QAAAA,EAAUF;KAAgB,GACrC;AAAE,QAAA,GAAGD,IAAI;QAAEI,QAAAA,EAAUH;AAAgB,KAAA;AAE3C;;;;;;;;AAQC,IACM,MAAMI,YAAAA,GAAe,CAC1BC,YACAC,YAAAA,EACAN,eAAAA,GAAAA;AAEA,IAAA,IAAI,CAACM,YAAAA,IAAgBA,YAAAA,CAAaC,IAAI,KAAK,CAAA,EAAG;QAC5C,OAAO;YAAEC,KAAAA,EAAO;AAACV,gBAAAA,UAAAA,CAAWO,UAAAA,EAAYL,eAAAA;AAAiB,aAAA;YAAES,aAAAA,EAAe;AAAM,SAAA;AAClF,IAAA;IAEA,MAAMC,SAAAA,GACJL,UAAAA,CAAWJ,IAAI,KAAK,MAAA,GAASU,kBAAAA,CAASN,UAAAA,CAAWO,EAAE,CAAA,GAAIC,mBAAAA,CAAUR,UAAAA,CAAWO,EAAE,CAAA;AAEhF,IAAA,IAAI,CAACN,YAAAA,CAAaQ,GAAG,CAACJ,SAAAA,CAAAA,EAAY;QAChC,OAAO;YAAEF,KAAAA,EAAO;AAACV,gBAAAA,UAAAA,CAAWO,UAAAA,EAAYL,eAAAA;AAAiB,aAAA;YAAES,aAAAA,EAAe;AAAM,SAAA;AAClF,IAAA;AAEA,IAAA,MAAMD,QAAwB,EAAE;IAEhCF,YAAAA,CAAaS,OAAO,CAAC,CAACC,GAAAA,GAAAA;QACpB,MAAMC,SAAAA,GAAYD,GAAAA,CAAIE,OAAO,CAAC,GAAA,CAAA;AAC9B,QAAA,MAAMjB,IAAAA,GAAOe,GAAAA,CAAIG,KAAK,CAAC,CAAA,EAAGF,SAAAA,CAAAA;AAC1B,QAAA,MAAML,EAAAA,GAAKQ,MAAAA,CAAOJ,GAAAA,CAAIG,KAAK,CAACF,SAAAA,GAAY,CAAA,CAAA,CAAA;AAExC,QAAA,IAAIhB,SAAS,OAAA,EAAS;AACpBO,YAAAA,KAAAA,CAAMa,IAAI,CAAC;gBACTpB,IAAAA,EAAM,MAAA;AACNW,gBAAAA,EAAAA;gBACAU,IAAAA,EAAMjB,UAAAA,CAAWJ,IAAI,KAAK,MAAA,IAAUI,UAAAA,CAAWO,EAAE,KAAKA,EAAAA,GAAKP,UAAAA,CAAWiB,IAAI,GAAG,EAAA;gBAC7EpB,QAAAA,EAAUF;AACZ,aAAA,CAAA;AACA,YAAA;AACF,QAAA;AAEAQ,QAAAA,KAAAA,CAAMa,IAAI,CAAC;YACTpB,IAAAA,EAAM,QAAA;AACNW,YAAAA,EAAAA;YACAU,IAAAA,EAAMjB,UAAAA,CAAWJ,IAAI,KAAK,QAAA,IAAYI,UAAAA,CAAWO,EAAE,KAAKA,EAAAA,GAAKP,UAAAA,CAAWiB,IAAI,GAAG,EAAA;YAC/EnB,QAAAA,EAAUH;AACZ,SAAA,CAAA;AACF,IAAA,CAAA,CAAA;IAEA,OAAO;AAAEQ,QAAAA,KAAAA;QAAOC,aAAAA,EAAe;AAAK,KAAA;AACtC;;;;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { assetKey, folderKey } from '../../utils/selection.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Stamp an item with the authoritative current-folder location. Drag/selection is
|
|
5
|
+
* page-scoped to the current folder, so this is more reliable than the item's own
|
|
6
|
+
* `folderId`/`parentId` — a dragged folder's `parent` is not populated by the
|
|
7
|
+
* folders query, so its `parentId` would otherwise collapse to `null`.
|
|
8
|
+
*/ const locateItem = (item, currentFolderId)=>item.kind === 'file' ? {
|
|
9
|
+
...item,
|
|
10
|
+
folderId: currentFolderId
|
|
11
|
+
} : {
|
|
12
|
+
...item,
|
|
13
|
+
parentId: currentFolderId
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Derive the drag payload once at drag start.
|
|
17
|
+
*
|
|
18
|
+
* - Dragging a selected item moves the complete current selection.
|
|
19
|
+
* - Dragging an unselected item moves only that item.
|
|
20
|
+
*
|
|
21
|
+
* Selection is page-scoped to the current folder, so every item is stamped with
|
|
22
|
+
* `currentFolderId` as its location for move validation.
|
|
23
|
+
*/ const buildDragSet = (activeData, selectedKeys, currentFolderId)=>{
|
|
24
|
+
if (!selectedKeys || selectedKeys.size === 0) {
|
|
25
|
+
return {
|
|
26
|
+
items: [
|
|
27
|
+
locateItem(activeData, currentFolderId)
|
|
28
|
+
],
|
|
29
|
+
fromSelection: false
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const activeKey = activeData.kind === 'file' ? assetKey(activeData.id) : folderKey(activeData.id);
|
|
33
|
+
if (!selectedKeys.has(activeKey)) {
|
|
34
|
+
return {
|
|
35
|
+
items: [
|
|
36
|
+
locateItem(activeData, currentFolderId)
|
|
37
|
+
],
|
|
38
|
+
fromSelection: false
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const items = [];
|
|
42
|
+
selectedKeys.forEach((key)=>{
|
|
43
|
+
const separator = key.indexOf(':');
|
|
44
|
+
const kind = key.slice(0, separator);
|
|
45
|
+
const id = Number(key.slice(separator + 1));
|
|
46
|
+
if (kind === 'asset') {
|
|
47
|
+
items.push({
|
|
48
|
+
kind: 'file',
|
|
49
|
+
id,
|
|
50
|
+
name: activeData.kind === 'file' && activeData.id === id ? activeData.name : '',
|
|
51
|
+
folderId: currentFolderId
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
items.push({
|
|
56
|
+
kind: 'folder',
|
|
57
|
+
id,
|
|
58
|
+
name: activeData.kind === 'folder' && activeData.id === id ? activeData.name : '',
|
|
59
|
+
parentId: currentFolderId
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
items,
|
|
64
|
+
fromSelection: true
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { buildDragSet };
|
|
69
|
+
//# sourceMappingURL=buildDragSet.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildDragSet.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/buildDragSet.ts"],"sourcesContent":["import { assetKey, folderKey, type ItemKey } from '../../utils/selection';\n\nimport type { DragItemData } from '../../../../types/dnd';\n\nexport interface DragSet {\n items: DragItemData[];\n /** True when the active item was already selected — membership is the full selection. */\n fromSelection: boolean;\n}\n\n/**\n * Stamp an item with the authoritative current-folder location. Drag/selection is\n * page-scoped to the current folder, so this is more reliable than the item's own\n * `folderId`/`parentId` — a dragged folder's `parent` is not populated by the\n * folders query, so its `parentId` would otherwise collapse to `null`.\n */\nconst locateItem = (item: DragItemData, currentFolderId: number | null): DragItemData =>\n item.kind === 'file'\n ? { ...item, folderId: currentFolderId }\n : { ...item, parentId: currentFolderId };\n\n/**\n * Derive the drag payload once at drag start.\n *\n * - Dragging a selected item moves the complete current selection.\n * - Dragging an unselected item moves only that item.\n *\n * Selection is page-scoped to the current folder, so every item is stamped with\n * `currentFolderId` as its location for move validation.\n */\nexport const buildDragSet = (\n activeData: DragItemData,\n selectedKeys: Set<ItemKey> | undefined,\n currentFolderId: number | null\n): DragSet => {\n if (!selectedKeys || selectedKeys.size === 0) {\n return { items: [locateItem(activeData, currentFolderId)], fromSelection: false };\n }\n\n const activeKey: ItemKey =\n activeData.kind === 'file' ? assetKey(activeData.id) : folderKey(activeData.id);\n\n if (!selectedKeys.has(activeKey)) {\n return { items: [locateItem(activeData, currentFolderId)], fromSelection: false };\n }\n\n const items: DragItemData[] = [];\n\n selectedKeys.forEach((key) => {\n const separator = key.indexOf(':');\n const kind = key.slice(0, separator);\n const id = Number(key.slice(separator + 1));\n\n if (kind === 'asset') {\n items.push({\n kind: 'file',\n id,\n name: activeData.kind === 'file' && activeData.id === id ? activeData.name : '',\n folderId: currentFolderId,\n });\n return;\n }\n\n items.push({\n kind: 'folder',\n id,\n name: activeData.kind === 'folder' && activeData.id === id ? activeData.name : '',\n parentId: currentFolderId,\n });\n });\n\n return { items, fromSelection: true };\n};\n"],"names":["locateItem","item","currentFolderId","kind","folderId","parentId","buildDragSet","activeData","selectedKeys","size","items","fromSelection","activeKey","assetKey","id","folderKey","has","forEach","key","separator","indexOf","slice","Number","push","name"],"mappings":";;AAUA;;;;;IAMA,MAAMA,aAAa,CAACC,IAAAA,EAAoBC,kBACtCD,IAAAA,CAAKE,IAAI,KAAK,MAAA,GACV;AAAE,QAAA,GAAGF,IAAI;QAAEG,QAAAA,EAAUF;KAAgB,GACrC;AAAE,QAAA,GAAGD,IAAI;QAAEI,QAAAA,EAAUH;AAAgB,KAAA;AAE3C;;;;;;;;AAQC,IACM,MAAMI,YAAAA,GAAe,CAC1BC,YACAC,YAAAA,EACAN,eAAAA,GAAAA;AAEA,IAAA,IAAI,CAACM,YAAAA,IAAgBA,YAAAA,CAAaC,IAAI,KAAK,CAAA,EAAG;QAC5C,OAAO;YAAEC,KAAAA,EAAO;AAACV,gBAAAA,UAAAA,CAAWO,UAAAA,EAAYL,eAAAA;AAAiB,aAAA;YAAES,aAAAA,EAAe;AAAM,SAAA;AAClF,IAAA;IAEA,MAAMC,SAAAA,GACJL,UAAAA,CAAWJ,IAAI,KAAK,MAAA,GAASU,QAAAA,CAASN,UAAAA,CAAWO,EAAE,CAAA,GAAIC,SAAAA,CAAUR,UAAAA,CAAWO,EAAE,CAAA;AAEhF,IAAA,IAAI,CAACN,YAAAA,CAAaQ,GAAG,CAACJ,SAAAA,CAAAA,EAAY;QAChC,OAAO;YAAEF,KAAAA,EAAO;AAACV,gBAAAA,UAAAA,CAAWO,UAAAA,EAAYL,eAAAA;AAAiB,aAAA;YAAES,aAAAA,EAAe;AAAM,SAAA;AAClF,IAAA;AAEA,IAAA,MAAMD,QAAwB,EAAE;IAEhCF,YAAAA,CAAaS,OAAO,CAAC,CAACC,GAAAA,GAAAA;QACpB,MAAMC,SAAAA,GAAYD,GAAAA,CAAIE,OAAO,CAAC,GAAA,CAAA;AAC9B,QAAA,MAAMjB,IAAAA,GAAOe,GAAAA,CAAIG,KAAK,CAAC,CAAA,EAAGF,SAAAA,CAAAA;AAC1B,QAAA,MAAML,EAAAA,GAAKQ,MAAAA,CAAOJ,GAAAA,CAAIG,KAAK,CAACF,SAAAA,GAAY,CAAA,CAAA,CAAA;AAExC,QAAA,IAAIhB,SAAS,OAAA,EAAS;AACpBO,YAAAA,KAAAA,CAAMa,IAAI,CAAC;gBACTpB,IAAAA,EAAM,MAAA;AACNW,gBAAAA,EAAAA;gBACAU,IAAAA,EAAMjB,UAAAA,CAAWJ,IAAI,KAAK,MAAA,IAAUI,UAAAA,CAAWO,EAAE,KAAKA,EAAAA,GAAKP,UAAAA,CAAWiB,IAAI,GAAG,EAAA;gBAC7EpB,QAAAA,EAAUF;AACZ,aAAA,CAAA;AACA,YAAA;AACF,QAAA;AAEAQ,QAAAA,KAAAA,CAAMa,IAAI,CAAC;YACTpB,IAAAA,EAAM,QAAA;AACNW,YAAAA,EAAAA;YACAU,IAAAA,EAAMjB,UAAAA,CAAWJ,IAAI,KAAK,QAAA,IAAYI,UAAAA,CAAWO,EAAE,KAAKA,EAAAA,GAAKP,UAAAA,CAAWiB,IAAI,GAAG,EAAA;YAC/EnB,QAAAA,EAAUH;AACZ,SAAA,CAAA;AACF,IAAA,CAAA,CAAA;IAEA,OAAO;AAAEQ,QAAAA,KAAAA;QAAOC,aAAAA,EAAe;AAAK,KAAA;AACtC;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var canDropItemOnFolder = require('../../../../utils/canDropItemOnFolder.js');
|
|
4
|
+
var flattenFolderStructure = require('../../../../utils/flattenFolderStructure.js');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Evaluate destination validity once for the full drag set. Callers look up
|
|
8
|
+
* targets in O(1) via {@link Set.has} — `null` represents the Home/root drop.
|
|
9
|
+
*/ const computeValidDropTargets = (items, folderStructure)=>{
|
|
10
|
+
const valid = new Set();
|
|
11
|
+
if (items.length === 0) {
|
|
12
|
+
return valid;
|
|
13
|
+
}
|
|
14
|
+
if (canDropItemOnFolder.canDropItemOnFolder({
|
|
15
|
+
items,
|
|
16
|
+
targetFolderId: null,
|
|
17
|
+
folderStructure
|
|
18
|
+
})) {
|
|
19
|
+
valid.add(null);
|
|
20
|
+
}
|
|
21
|
+
for (const { id } of flattenFolderStructure.flattenFolderStructure(folderStructure)){
|
|
22
|
+
if (canDropItemOnFolder.canDropItemOnFolder({
|
|
23
|
+
items,
|
|
24
|
+
targetFolderId: id,
|
|
25
|
+
folderStructure
|
|
26
|
+
})) {
|
|
27
|
+
valid.add(id);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return valid;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
exports.computeValidDropTargets = computeValidDropTargets;
|
|
34
|
+
//# sourceMappingURL=computeValidDropTargets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeValidDropTargets.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.ts"],"sourcesContent":["import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\nimport { flattenFolderStructure } from '../../../../utils/flattenFolderStructure';\n\nimport type { FolderNode } from '../../../../../../../shared/contracts/folders';\nimport type { DragItemData } from '../../../../types/dnd';\n\n/**\n * Evaluate destination validity once for the full drag set. Callers look up\n * targets in O(1) via {@link Set.has} — `null` represents the Home/root drop.\n */\nexport const computeValidDropTargets = (\n items: DragItemData[],\n folderStructure: FolderNode[]\n): Set<number | null> => {\n const valid = new Set<number | null>();\n\n if (items.length === 0) {\n return valid;\n }\n\n if (canDropItemOnFolder({ items, targetFolderId: null, folderStructure })) {\n valid.add(null);\n }\n\n for (const { id } of flattenFolderStructure(folderStructure)) {\n if (canDropItemOnFolder({ items, targetFolderId: id, folderStructure })) {\n valid.add(id);\n }\n }\n\n return valid;\n};\n"],"names":["computeValidDropTargets","items","folderStructure","valid","Set","length","canDropItemOnFolder","targetFolderId","add","id","flattenFolderStructure"],"mappings":";;;;;AAMA;;;AAGC,IACM,MAAMA,uBAAAA,GAA0B,CACrCC,KAAAA,EACAC,eAAAA,GAAAA;AAEA,IAAA,MAAMC,QAAQ,IAAIC,GAAAA,EAAAA;IAElB,IAAIH,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAG;QACtB,OAAOF,KAAAA;AACT,IAAA;AAEA,IAAA,IAAIG,uCAAAA,CAAoB;AAAEL,QAAAA,KAAAA;QAAOM,cAAAA,EAAgB,IAAA;AAAML,QAAAA;KAAgB,CAAA,EAAI;AACzEC,QAAAA,KAAAA,CAAMK,GAAG,CAAC,IAAA,CAAA;AACZ,IAAA;AAEA,IAAA,KAAK,MAAM,EAAEC,EAAE,EAAE,IAAIC,8CAAuBR,eAAAA,CAAAA,CAAkB;AAC5D,QAAA,IAAII,uCAAAA,CAAoB;AAAEL,YAAAA,KAAAA;YAAOM,cAAAA,EAAgBE,EAAAA;AAAIP,YAAAA;SAAgB,CAAA,EAAI;AACvEC,YAAAA,KAAAA,CAAMK,GAAG,CAACC,EAAAA,CAAAA;AACZ,QAAA;AACF,IAAA;IAEA,OAAON,KAAAA;AACT;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder.mjs';
|
|
2
|
+
import { flattenFolderStructure } from '../../../../utils/flattenFolderStructure.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Evaluate destination validity once for the full drag set. Callers look up
|
|
6
|
+
* targets in O(1) via {@link Set.has} — `null` represents the Home/root drop.
|
|
7
|
+
*/ const computeValidDropTargets = (items, folderStructure)=>{
|
|
8
|
+
const valid = new Set();
|
|
9
|
+
if (items.length === 0) {
|
|
10
|
+
return valid;
|
|
11
|
+
}
|
|
12
|
+
if (canDropItemOnFolder({
|
|
13
|
+
items,
|
|
14
|
+
targetFolderId: null,
|
|
15
|
+
folderStructure
|
|
16
|
+
})) {
|
|
17
|
+
valid.add(null);
|
|
18
|
+
}
|
|
19
|
+
for (const { id } of flattenFolderStructure(folderStructure)){
|
|
20
|
+
if (canDropItemOnFolder({
|
|
21
|
+
items,
|
|
22
|
+
targetFolderId: id,
|
|
23
|
+
folderStructure
|
|
24
|
+
})) {
|
|
25
|
+
valid.add(id);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return valid;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { computeValidDropTargets };
|
|
32
|
+
//# sourceMappingURL=computeValidDropTargets.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeValidDropTargets.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.ts"],"sourcesContent":["import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\nimport { flattenFolderStructure } from '../../../../utils/flattenFolderStructure';\n\nimport type { FolderNode } from '../../../../../../../shared/contracts/folders';\nimport type { DragItemData } from '../../../../types/dnd';\n\n/**\n * Evaluate destination validity once for the full drag set. Callers look up\n * targets in O(1) via {@link Set.has} — `null` represents the Home/root drop.\n */\nexport const computeValidDropTargets = (\n items: DragItemData[],\n folderStructure: FolderNode[]\n): Set<number | null> => {\n const valid = new Set<number | null>();\n\n if (items.length === 0) {\n return valid;\n }\n\n if (canDropItemOnFolder({ items, targetFolderId: null, folderStructure })) {\n valid.add(null);\n }\n\n for (const { id } of flattenFolderStructure(folderStructure)) {\n if (canDropItemOnFolder({ items, targetFolderId: id, folderStructure })) {\n valid.add(id);\n }\n }\n\n return valid;\n};\n"],"names":["computeValidDropTargets","items","folderStructure","valid","Set","length","canDropItemOnFolder","targetFolderId","add","id","flattenFolderStructure"],"mappings":";;;AAMA;;;AAGC,IACM,MAAMA,uBAAAA,GAA0B,CACrCC,KAAAA,EACAC,eAAAA,GAAAA;AAEA,IAAA,MAAMC,QAAQ,IAAIC,GAAAA,EAAAA;IAElB,IAAIH,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAG;QACtB,OAAOF,KAAAA;AACT,IAAA;AAEA,IAAA,IAAIG,mBAAAA,CAAoB;AAAEL,QAAAA,KAAAA;QAAOM,cAAAA,EAAgB,IAAA;AAAML,QAAAA;KAAgB,CAAA,EAAI;AACzEC,QAAAA,KAAAA,CAAMK,GAAG,CAAC,IAAA,CAAA;AACZ,IAAA;AAEA,IAAA,KAAK,MAAM,EAAEC,EAAE,EAAE,IAAIC,uBAAuBR,eAAAA,CAAAA,CAAkB;AAC5D,QAAA,IAAII,mBAAAA,CAAoB;AAAEL,YAAAA,KAAAA;YAAOM,cAAAA,EAAgBE,EAAAA;AAAIP,YAAAA;SAAgB,CAAA,EAAI;AACvEC,YAAAA,KAAAA,CAAMK,GAAG,CAACC,EAAAA,CAAAA;AACZ,QAAA;AACF,IAAA;IAEA,OAAON,KAAAA;AACT;;;;"}
|
|
@@ -10,9 +10,24 @@ const parseFolderTargetId = (dndId)=>{
|
|
|
10
10
|
const match = /^folder-target:(\d+)$/.exec(dndId);
|
|
11
11
|
return match ? Number(match[1]) : null;
|
|
12
12
|
};
|
|
13
|
+
const toFolderTreeTargetId = (id)=>`folder-tree-target:${id}`;
|
|
14
|
+
const HOME_TREE_TARGET_ID = 'folder-tree-target:home';
|
|
15
|
+
const parseFolderTreeTargetId = (dndId)=>{
|
|
16
|
+
if (typeof dndId !== 'string') {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (dndId === HOME_TREE_TARGET_ID) {
|
|
20
|
+
return 'root';
|
|
21
|
+
}
|
|
22
|
+
const match = /^folder-tree-target:(\d+)$/.exec(dndId);
|
|
23
|
+
return match ? Number(match[1]) : null;
|
|
24
|
+
};
|
|
13
25
|
|
|
26
|
+
exports.HOME_TREE_TARGET_ID = HOME_TREE_TARGET_ID;
|
|
14
27
|
exports.parseFolderTargetId = parseFolderTargetId;
|
|
28
|
+
exports.parseFolderTreeTargetId = parseFolderTreeTargetId;
|
|
15
29
|
exports.toFileDraggableId = toFileDraggableId;
|
|
16
30
|
exports.toFolderDraggableId = toFolderDraggableId;
|
|
17
31
|
exports.toFolderTargetId = toFolderTargetId;
|
|
32
|
+
exports.toFolderTreeTargetId = toFolderTreeTargetId;
|
|
18
33
|
//# sourceMappingURL=dndIds.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dndIds.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number"],"mappings":";;AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC
|
|
1
|
+
{"version":3,"file":"dndIds.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n\nexport const toFolderTreeTargetId = (id: number) => `folder-tree-target:${id}` as const;\n\nexport const HOME_TREE_TARGET_ID = 'folder-tree-target:home' as const;\n\nexport const parseFolderTreeTargetId = (dndId: string | number): number | 'root' | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n if (dndId === HOME_TREE_TARGET_ID) {\n return 'root';\n }\n\n const match = /^folder-tree-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number","toFolderTreeTargetId","HOME_TREE_TARGET_ID","parseFolderTreeTargetId"],"mappings":";;AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;AAEO,MAAMG,uBAAuB,CAACR,EAAAA,GAAe,CAAC,mBAAmB,EAAEA;AAEnE,MAAMS,sBAAsB;AAE5B,MAAMC,0BAA0B,CAACN,KAAAA,GAAAA;IACtC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAIA,UAAUK,mBAAAA,EAAqB;QACjC,OAAO,MAAA;AACT,IAAA;IAEA,MAAMJ,KAAAA,GAAQ,4BAAA,CAA6BC,IAAI,CAACF,KAAAA,CAAAA;AAChD,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;;;;;;;"}
|
|
@@ -8,6 +8,18 @@ const parseFolderTargetId = (dndId)=>{
|
|
|
8
8
|
const match = /^folder-target:(\d+)$/.exec(dndId);
|
|
9
9
|
return match ? Number(match[1]) : null;
|
|
10
10
|
};
|
|
11
|
+
const toFolderTreeTargetId = (id)=>`folder-tree-target:${id}`;
|
|
12
|
+
const HOME_TREE_TARGET_ID = 'folder-tree-target:home';
|
|
13
|
+
const parseFolderTreeTargetId = (dndId)=>{
|
|
14
|
+
if (typeof dndId !== 'string') {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (dndId === HOME_TREE_TARGET_ID) {
|
|
18
|
+
return 'root';
|
|
19
|
+
}
|
|
20
|
+
const match = /^folder-tree-target:(\d+)$/.exec(dndId);
|
|
21
|
+
return match ? Number(match[1]) : null;
|
|
22
|
+
};
|
|
11
23
|
|
|
12
|
-
export { parseFolderTargetId, toFileDraggableId, toFolderDraggableId, toFolderTargetId };
|
|
24
|
+
export { HOME_TREE_TARGET_ID, parseFolderTargetId, parseFolderTreeTargetId, toFileDraggableId, toFolderDraggableId, toFolderTargetId, toFolderTreeTargetId };
|
|
13
25
|
//# sourceMappingURL=dndIds.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dndIds.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number"],"mappings":"AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;"}
|
|
1
|
+
{"version":3,"file":"dndIds.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n\nexport const toFolderTreeTargetId = (id: number) => `folder-tree-target:${id}` as const;\n\nexport const HOME_TREE_TARGET_ID = 'folder-tree-target:home' as const;\n\nexport const parseFolderTreeTargetId = (dndId: string | number): number | 'root' | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n if (dndId === HOME_TREE_TARGET_ID) {\n return 'root';\n }\n\n const match = /^folder-tree-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number","toFolderTreeTargetId","HOME_TREE_TARGET_ID","parseFolderTreeTargetId"],"mappings":"AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;AAEO,MAAMG,uBAAuB,CAACR,EAAAA,GAAe,CAAC,mBAAmB,EAAEA;AAEnE,MAAMS,sBAAsB;AAE5B,MAAMC,0BAA0B,CAACN,KAAAA,GAAAA;IACtC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAIA,UAAUK,mBAAAA,EAAqB;QACjC,OAAO,MAAA;AACT,IAAA;IAEA,MAAMJ,KAAAA,GAAQ,4BAAA,CAA6BC,IAAI,CAACF,KAAAA,CAAAA;AAChD,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;"}
|
|
@@ -2,11 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var core = require('@dnd-kit/core');
|
|
5
|
-
var folders = require('../../../../services/folders.js');
|
|
6
|
-
var canDropItemOnFolder = require('../../../../utils/canDropItemOnFolder.js');
|
|
7
5
|
var AssetsDndProvider = require('./AssetsDndProvider.js');
|
|
8
6
|
var dndIds = require('./dndIds.js');
|
|
9
7
|
|
|
8
|
+
const getFileFolderId = (folder)=>{
|
|
9
|
+
if (folder == null) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
if (typeof folder === 'object') {
|
|
13
|
+
return folder.id ?? null;
|
|
14
|
+
}
|
|
15
|
+
if (typeof folder === 'number') {
|
|
16
|
+
return folder;
|
|
17
|
+
}
|
|
18
|
+
return Number(folder) || null;
|
|
19
|
+
};
|
|
10
20
|
const useFileDraggable = (asset)=>{
|
|
11
21
|
const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
|
|
12
22
|
isMovePending: false
|
|
@@ -15,7 +25,7 @@ const useFileDraggable = (asset)=>{
|
|
|
15
25
|
kind: 'file',
|
|
16
26
|
id: asset.id,
|
|
17
27
|
name: asset.name,
|
|
18
|
-
folderId:
|
|
28
|
+
folderId: getFileFolderId(asset.folder)
|
|
19
29
|
}), [
|
|
20
30
|
asset.folder,
|
|
21
31
|
asset.id,
|
|
@@ -28,11 +38,11 @@ const useFileDraggable = (asset)=>{
|
|
|
28
38
|
});
|
|
29
39
|
};
|
|
30
40
|
const useFolderDraggableDroppable = (folder)=>{
|
|
31
|
-
const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
|
|
32
|
-
isMovePending: false
|
|
41
|
+
const { isMovePending, isValidDropTarget } = AssetsDndProvider.useAssetsDndOptional() ?? {
|
|
42
|
+
isMovePending: false,
|
|
43
|
+
isValidDropTarget: ()=>false
|
|
33
44
|
};
|
|
34
45
|
const { active } = core.useDndContext();
|
|
35
|
-
const { data: folderStructure = [] } = folders.useGetFolderStructureQuery();
|
|
36
46
|
const parentId = typeof folder.parent === 'object' && folder.parent != null ? folder.parent.id ?? null : folder.parent ?? null;
|
|
37
47
|
const dragData = React.useMemo(()=>({
|
|
38
48
|
kind: 'folder',
|
|
@@ -62,26 +72,10 @@ const useFolderDraggableDroppable = (folder)=>{
|
|
|
62
72
|
data: dropData,
|
|
63
73
|
disabled: isMovePending
|
|
64
74
|
});
|
|
65
|
-
const
|
|
66
|
-
const isValidDropTarget = React.useMemo(()=>{
|
|
67
|
-
if (!activeData || activeData.id === folder.id && activeData.kind === 'folder') {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
return canDropItemOnFolder.canDropItemOnFolder({
|
|
71
|
-
items: [
|
|
72
|
-
activeData
|
|
73
|
-
],
|
|
74
|
-
targetFolderId: folder.id,
|
|
75
|
-
folderStructure
|
|
76
|
-
});
|
|
77
|
-
}, [
|
|
78
|
-
activeData,
|
|
79
|
-
folder.id,
|
|
80
|
-
folderStructure
|
|
81
|
-
]);
|
|
75
|
+
const isValidTarget = isValidDropTarget(folder.id);
|
|
82
76
|
const isOver = droppable.isOver;
|
|
83
|
-
const showValidDropHighlight = isOver &&
|
|
84
|
-
const showInvalidDropCursor = isOver && !
|
|
77
|
+
const showValidDropHighlight = isOver && isValidTarget;
|
|
78
|
+
const showInvalidDropCursor = isOver && !isValidTarget && active != null;
|
|
85
79
|
return {
|
|
86
80
|
dragData,
|
|
87
81
|
draggable,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAssetDnd.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';\n\nimport {
|
|
1
|
+
{"version":3,"file":"useAssetDnd.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type { DragFileData, DragFolderData, FolderTargetData } from '../../../../types/dnd';\n\nconst getFileFolderId = (\n folder: number | string | { id?: number } | null | undefined\n): number | null => {\n if (folder == null) {\n return null;\n }\n\n if (typeof folder === 'object') {\n return folder.id ?? null;\n }\n\n if (typeof folder === 'number') {\n return folder;\n }\n\n return Number(folder) || null;\n};\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | { id?: number } | null;\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId: getFileFolderId(asset.folder),\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n return useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: isMovePending,\n });\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {\n isMovePending: false,\n isValidDropTarget: () => false,\n };\n const { active } = useDndContext();\n\n const parentId =\n typeof folder.parent === 'object' && folder.parent != null\n ? (folder.parent.id ?? null)\n : (folder.parent ?? null);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: isMovePending,\n });\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: isMovePending,\n });\n\n const isValidTarget = isValidDropTarget(folder.id);\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidTarget;\n const showInvalidDropCursor = isOver && !isValidTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["getFileFolderId","folder","id","Number","useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","name","folderId","useDraggable","toFileDraggableId","disabled","useFolderDraggableDroppable","isValidDropTarget","active","useDndContext","parentId","parent","dragData","dropData","draggable","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
|