@strapi/upload 5.49.0 → 5.50.1
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/ai/components/AIAssetCard.js +10 -10
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
- package/dist/admin/ai/components/AIAssetCard.mjs +11 -11
- package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -1
- package/dist/admin/ai/components/AIUploadModal.js +0 -1
- package/dist/admin/ai/components/AIUploadModal.js.map +1 -1
- package/dist/admin/ai/components/AIUploadModal.mjs +0 -1
- package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.js +3 -4
- package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.mjs +4 -5
- package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/AssetCardBase.js +0 -1
- package/dist/admin/components/AssetCard/AssetCardBase.js.map +1 -1
- package/dist/admin/components/AssetCard/AssetCardBase.mjs +0 -1
- package/dist/admin/components/AssetCard/AssetCardBase.mjs.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js +0 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs +0 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.js +3 -4
- package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +4 -5
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.js +0 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.mjs +0 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js +0 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs +0 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +0 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +1 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js +0 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js.map +1 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs +0 -1
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +0 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +0 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +0 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs +0 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.js +0 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.js.map +1 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs +0 -1
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +0 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +0 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +3 -3
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +4 -4
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs +0 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +2 -3
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +3 -4
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +0 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs +0 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs.map +1 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js +0 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js.map +1 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs +0 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs.map +1 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js +0 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js.map +1 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs +0 -1
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +3 -4
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +4 -5
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +0 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js +2 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs +2 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +1 -2
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +2 -3
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +2 -2
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +2 -2
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
- package/dist/admin/components/SortPicker/SortPicker.js +0 -1
- package/dist/admin/components/SortPicker/SortPicker.js.map +1 -1
- package/dist/admin/components/SortPicker/SortPicker.mjs +0 -1
- package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -1
- package/dist/admin/components/TableList/CellContent.js +0 -1
- package/dist/admin/components/TableList/CellContent.js.map +1 -1
- package/dist/admin/components/TableList/CellContent.mjs +0 -1
- package/dist/admin/components/TableList/CellContent.mjs.map +1 -1
- package/dist/admin/components/TableList/PreviewCell.js +3 -4
- package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
- package/dist/admin/components/TableList/PreviewCell.mjs +4 -5
- package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
- package/dist/admin/components/TableList/TableList.js +0 -1
- package/dist/admin/components/TableList/TableList.js.map +1 -1
- package/dist/admin/components/TableList/TableList.mjs +0 -1
- package/dist/admin/components/TableList/TableList.mjs.map +1 -1
- package/dist/admin/components/TableList/TableRows.js +0 -1
- package/dist/admin/components/TableList/TableRows.js.map +1 -1
- package/dist/admin/components/TableList/TableRows.mjs +0 -1
- package/dist/admin/components/TableList/TableRows.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +2 -3
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +3 -4
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +0 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +0 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +0 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -1
- package/dist/admin/constants.js +4 -7
- package/dist/admin/constants.js.map +1 -1
- package/dist/admin/constants.mjs +4 -7
- package/dist/admin/constants.mjs.map +1 -1
- package/dist/admin/enums.js +14 -16
- package/dist/admin/enums.js.map +1 -1
- package/dist/admin/enums.mjs +13 -15
- package/dist/admin/enums.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.js +125 -122
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +125 -122
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +700 -0
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +678 -0
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +134 -17
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +137 -20
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js +27 -5
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs +27 -5
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/useCropImg.js +211 -0
- package/dist/admin/future/pages/Assets/components/AssetDetails/useCropImg.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetDetails/useCropImg.mjs +188 -0
- package/dist/admin/future/pages/Assets/components/AssetDetails/useCropImg.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +50 -5
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +51 -6
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.js +43 -4
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +44 -5
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +195 -0
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +192 -0
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js +37 -0
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs +35 -0
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js +18 -0
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs +13 -0
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +97 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +94 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js +13 -4
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs +13 -4
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +6 -3
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +6 -3
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
- package/dist/admin/future/services/api.js +37 -1
- package/dist/admin/future/services/api.js.map +1 -1
- package/dist/admin/future/services/api.mjs +37 -2
- package/dist/admin/future/services/api.mjs.map +1 -1
- package/dist/admin/future/services/folders.js +36 -5
- package/dist/admin/future/services/folders.js.map +1 -1
- package/dist/admin/future/services/folders.mjs +36 -6
- package/dist/admin/future/services/folders.mjs.map +1 -1
- package/dist/admin/future/utils/buildBulkMovePayload.js +20 -0
- package/dist/admin/future/utils/buildBulkMovePayload.js.map +1 -0
- package/dist/admin/future/utils/buildBulkMovePayload.mjs +18 -0
- package/dist/admin/future/utils/buildBulkMovePayload.mjs.map +1 -0
- package/dist/admin/future/utils/canDropItemOnFolder.js +64 -0
- package/dist/admin/future/utils/canDropItemOnFolder.js.map +1 -0
- package/dist/admin/future/utils/canDropItemOnFolder.mjs +61 -0
- package/dist/admin/future/utils/canDropItemOnFolder.mjs.map +1 -0
- package/dist/admin/future/utils/getAssetIcon.js +4 -4
- package/dist/admin/future/utils/getAssetIcon.js.map +1 -1
- package/dist/admin/future/utils/getAssetIcon.mjs +4 -4
- package/dist/admin/future/utils/getAssetIcon.mjs.map +1 -1
- package/dist/admin/future/utils/getBulkMoveErrorMessage.js +23 -0
- package/dist/admin/future/utils/getBulkMoveErrorMessage.js.map +1 -0
- package/dist/admin/future/utils/getBulkMoveErrorMessage.mjs +21 -0
- package/dist/admin/future/utils/getBulkMoveErrorMessage.mjs.map +1 -0
- package/dist/admin/hooks/useAIMetadataJob.js +0 -1
- package/dist/admin/hooks/useAIMetadataJob.js.map +1 -1
- package/dist/admin/hooks/useAIMetadataJob.mjs +0 -1
- package/dist/admin/hooks/useAIMetadataJob.mjs.map +1 -1
- package/dist/admin/hooks/useAssets.js.map +1 -1
- package/dist/admin/hooks/useAssets.mjs.map +1 -1
- package/dist/admin/hooks/useBulkEdit.js +0 -1
- package/dist/admin/hooks/useBulkEdit.js.map +1 -1
- package/dist/admin/hooks/useBulkEdit.mjs +0 -1
- package/dist/admin/hooks/useBulkEdit.mjs.map +1 -1
- package/dist/admin/hooks/useBulkMove.js +0 -1
- package/dist/admin/hooks/useBulkMove.js.map +1 -1
- package/dist/admin/hooks/useBulkMove.mjs +0 -1
- package/dist/admin/hooks/useBulkMove.mjs.map +1 -1
- package/dist/admin/hooks/useBulkRemove.js +0 -1
- package/dist/admin/hooks/useBulkRemove.js.map +1 -1
- package/dist/admin/hooks/useBulkRemove.mjs +0 -1
- package/dist/admin/hooks/useBulkRemove.mjs.map +1 -1
- package/dist/admin/hooks/useEditAsset.js +0 -1
- package/dist/admin/hooks/useEditAsset.js.map +1 -1
- package/dist/admin/hooks/useEditAsset.mjs +0 -1
- package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
- package/dist/admin/hooks/useEditFolder.js +4 -3
- package/dist/admin/hooks/useEditFolder.js.map +1 -1
- package/dist/admin/hooks/useEditFolder.mjs +4 -3
- package/dist/admin/hooks/useEditFolder.mjs.map +1 -1
- package/dist/admin/hooks/useFolder.js +0 -1
- package/dist/admin/hooks/useFolder.js.map +1 -1
- package/dist/admin/hooks/useFolder.mjs +0 -1
- package/dist/admin/hooks/useFolder.mjs.map +1 -1
- package/dist/admin/hooks/useFolderStructure.js +0 -1
- package/dist/admin/hooks/useFolderStructure.js.map +1 -1
- package/dist/admin/hooks/useFolderStructure.mjs +0 -1
- package/dist/admin/hooks/useFolderStructure.mjs.map +1 -1
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/index.js +0 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +0 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/App/App.js +0 -1
- package/dist/admin/pages/App/App.js.map +1 -1
- package/dist/admin/pages/App/App.mjs +0 -1
- package/dist/admin/pages/App/App.mjs.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +0 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +0 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +0 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +0 -1
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -1
- package/dist/admin/pages/App/MediaLibrary.js +0 -1
- package/dist/admin/pages/App/MediaLibrary.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary.mjs +0 -1
- package/dist/admin/pages/App/MediaLibrary.mjs.map +1 -1
- package/dist/admin/pages/App/components/BulkActions.js +0 -1
- package/dist/admin/pages/App/components/BulkActions.js.map +1 -1
- package/dist/admin/pages/App/components/BulkActions.mjs +0 -1
- package/dist/admin/pages/App/components/BulkActions.mjs.map +1 -1
- package/dist/admin/pages/App/components/EmptyOrNoPermissions.js +0 -1
- package/dist/admin/pages/App/components/EmptyOrNoPermissions.js.map +1 -1
- package/dist/admin/pages/App/components/EmptyOrNoPermissions.mjs +0 -1
- package/dist/admin/pages/App/components/EmptyOrNoPermissions.mjs.map +1 -1
- package/dist/admin/pages/App/components/Filters.js +0 -1
- package/dist/admin/pages/App/components/Filters.js.map +1 -1
- package/dist/admin/pages/App/components/Filters.mjs +0 -1
- package/dist/admin/pages/App/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/App/components/Header.js +0 -1
- package/dist/admin/pages/App/components/Header.js.map +1 -1
- package/dist/admin/pages/App/components/Header.mjs +0 -1
- package/dist/admin/pages/App/components/Header.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +1 -2
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +1 -2
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +11 -12
- package/dist/admin/src/components/EmptyAssets/EmptyAssets.d.ts +0 -1
- package/dist/admin/src/components/FolderCard/contexts/FolderCard.d.ts +2 -3
- package/dist/admin/src/constants.d.ts +5 -4
- package/dist/admin/src/enums.d.ts +14 -12
- package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +10 -0
- package/dist/admin/src/future/pages/Assets/components/AssetDetails/useCropImg.d.ts +48 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +12 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/dndIds.d.ts +4 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +51 -0
- package/dist/admin/src/future/services/api.d.ts +24 -6
- package/dist/admin/src/future/services/assets.d.ts +1 -1
- package/dist/admin/src/future/services/folders.d.ts +12 -2
- package/dist/admin/src/future/services/settings.d.ts +1 -1
- package/dist/admin/src/future/store/uploadProgress.d.ts +1 -1
- package/dist/admin/src/future/types/dnd.d.ts +22 -0
- package/dist/admin/src/future/utils/buildBulkMovePayload.d.ts +2 -0
- package/dist/admin/src/future/utils/canDropItemOnFolder.d.ts +9 -0
- package/dist/admin/src/future/utils/getBulkMoveErrorMessage.d.ts +1 -0
- package/dist/admin/src/hooks/useAIMetadataJob.d.ts +1 -1
- package/dist/admin/src/hooks/useBulkEdit.d.ts +14 -14
- package/dist/admin/src/hooks/useBulkMove.d.ts +146 -15
- package/dist/admin/src/hooks/useBulkRemove.d.ts +186 -15
- package/dist/admin/src/hooks/useCropImg.d.ts +2 -2
- package/dist/admin/src/hooks/useEditFolder.d.ts +7 -6
- package/dist/admin/src/hooks/useModalQueryParams.d.ts +5 -5
- package/dist/admin/src/hooks/usePersistentState.d.ts +0 -1
- package/dist/admin/src/hooks/useSettings.d.ts +5 -5
- package/dist/admin/src/hooks/useTracking.d.ts +1 -1
- package/dist/admin/src/pages/App/ConfigureTheView/state/actions.d.ts +1 -1
- package/dist/admin/src/pages/App/ConfigureTheView/state/init.d.ts +1 -1
- package/dist/admin/src/utils/getBreadcrumbDataML.d.ts +1 -1
- package/dist/admin/src/utils/getFolderParents.d.ts +3 -3
- package/dist/admin/src/utils/icons.d.ts +2 -1
- package/dist/admin/src/utils/rawFileToAsset.d.ts +1 -1
- package/dist/admin/src/utils/urlsToAssets.d.ts +2 -10
- package/dist/admin/translations/en.json.js +28 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +28 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ja.json.js +175 -0
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +175 -0
- package/dist/admin/translations/ja.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +54 -29
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +54 -29
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/admin/utils/icons.js +5 -5
- package/dist/admin/utils/icons.js.map +1 -1
- package/dist/admin/utils/icons.mjs +6 -6
- package/dist/admin/utils/icons.mjs.map +1 -1
- package/dist/admin/utils/typeFromMime.js +9 -9
- package/dist/admin/utils/typeFromMime.js.map +1 -1
- package/dist/admin/utils/typeFromMime.mjs +10 -10
- package/dist/admin/utils/typeFromMime.mjs.map +1 -1
- package/dist/admin/utils/urlsToAssets.js +1 -2
- package/dist/admin/utils/urlsToAssets.js.map +1 -1
- package/dist/admin/utils/urlsToAssets.mjs +1 -2
- package/dist/admin/utils/urlsToAssets.mjs.map +1 -1
- package/dist/server/controllers/admin-upload.js +3 -2
- package/dist/server/controllers/admin-upload.js.map +1 -1
- package/dist/server/controllers/admin-upload.mjs +3 -2
- package/dist/server/controllers/admin-upload.mjs.map +1 -1
- package/dist/server/controllers/content-api.js +6 -5
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/content-api.mjs +6 -5
- package/dist/server/controllers/content-api.mjs.map +1 -1
- package/dist/server/src/controllers/admin-file.d.ts +4 -12
- package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-folder.d.ts +2 -2
- package/dist/server/src/controllers/admin-settings.d.ts +2 -2
- package/dist/server/src/controllers/admin-upload.d.ts +3 -3
- package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
- package/dist/server/src/controllers/content-api.d.ts +2 -2
- package/dist/server/src/controllers/content-api.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +14 -23
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/find-entity-and-check-permissions.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/folders.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/configureView.d.ts +1 -1
- package/dist/server/src/controllers/validation/admin/folder-file.d.ts +1 -1
- package/dist/server/src/controllers/validation/admin/folder-file.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/folder.d.ts +2 -2
- package/dist/server/src/controllers/validation/admin/folder.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/settings.d.ts +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/utils.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-api/upload.d.ts.map +1 -1
- package/dist/server/src/controllers/view-configuration.d.ts +1 -1
- package/dist/server/src/graphql.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +36 -53
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/upload.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata-jobs.d.ts +1 -1
- package/dist/server/src/services/ai-metadata-jobs.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
- package/dist/server/src/services/extensions/utils.d.ts.map +1 -1
- package/dist/server/src/services/file.d.ts +2 -2
- package/dist/server/src/services/file.d.ts.map +1 -1
- package/dist/server/src/services/folder.d.ts +1 -1
- package/dist/server/src/services/folder.d.ts.map +1 -1
- package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +22 -30
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/services/provider.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/services/weekly-metrics.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +4 -3
- package/dist/server/src/types.d.ts.map +1 -1
- package/dist/server/src/utils/cron.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/mime-validation.d.ts.map +1 -1
- package/dist/server/utils/mime-validation.js +3 -1
- package/dist/server/utils/mime-validation.js.map +1 -1
- package/dist/server/utils/mime-validation.mjs +3 -1
- package/dist/server/utils/mime-validation.mjs.map +1 -1
- package/package.json +11 -10
- package/dist/admin/future/enums.js +0 -12
- package/dist/admin/future/enums.js.map +0 -1
- package/dist/admin/future/enums.mjs +0 -10
- package/dist/admin/future/enums.mjs.map +0 -1
- package/dist/admin/src/future/enums.d.ts +0 -6
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useCallback, useMemo, createContext, useContext } from 'react';
|
|
3
|
+
import { useSensors, useSensor, PointerSensor, DndContext, pointerWithin, DragOverlay } from '@dnd-kit/core';
|
|
4
|
+
import { useNotification } from '@strapi/admin/strapi-admin';
|
|
5
|
+
import { VisuallyHidden, Box } from '@strapi/design-system';
|
|
6
|
+
import { useIntl } from 'react-intl';
|
|
7
|
+
import { useGetFolderStructureQuery, useBulkMoveMutation } from '../../../../services/folders.mjs';
|
|
8
|
+
import { buildBulkMovePayload } from '../../../../utils/buildBulkMovePayload.mjs';
|
|
9
|
+
import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder.mjs';
|
|
10
|
+
import { getBulkMoveErrorMessage } from '../../../../utils/getBulkMoveErrorMessage.mjs';
|
|
11
|
+
import { getTranslationKey } from '../../../../utils/translations.mjs';
|
|
12
|
+
import { parseFolderTargetId } from './dndIds.mjs';
|
|
13
|
+
import { DragOverlayChip } from './DragOverlayChip.mjs';
|
|
14
|
+
|
|
15
|
+
const AssetsDndContext = /*#__PURE__*/ createContext(null);
|
|
16
|
+
const useAssetsDndOptional = ()=>useContext(AssetsDndContext);
|
|
17
|
+
const getDragItems = (activeData)=>{
|
|
18
|
+
if (!activeData) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
// TODO(CMS-433): include selectedItems from active data for multi-drag payload members.
|
|
22
|
+
return [
|
|
23
|
+
activeData
|
|
24
|
+
];
|
|
25
|
+
};
|
|
26
|
+
const AssetsDndProvider = ({ children })=>{
|
|
27
|
+
const { formatMessage } = useIntl();
|
|
28
|
+
const { toggleNotification } = useNotification();
|
|
29
|
+
const { data: folderStructure = [] } = useGetFolderStructureQuery();
|
|
30
|
+
const [bulkMove, { isLoading: isMovePending }] = useBulkMoveMutation();
|
|
31
|
+
const [activeItem, setActiveItem] = useState(null);
|
|
32
|
+
const [liveAnnouncement, setLiveAnnouncement] = useState('');
|
|
33
|
+
const announceToLiveRegion = useCallback((message)=>{
|
|
34
|
+
setLiveAnnouncement('');
|
|
35
|
+
requestAnimationFrame(()=>setLiveAnnouncement(message));
|
|
36
|
+
}, []);
|
|
37
|
+
const sensors = useSensors(useSensor(PointerSensor, {
|
|
38
|
+
activationConstraint: {
|
|
39
|
+
distance: 8
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
42
|
+
const contextValue = useMemo(()=>({
|
|
43
|
+
isInternalDragActive: activeItem !== null,
|
|
44
|
+
isMovePending
|
|
45
|
+
}), [
|
|
46
|
+
activeItem,
|
|
47
|
+
isMovePending
|
|
48
|
+
]);
|
|
49
|
+
const handleDragStart = useCallback((event)=>{
|
|
50
|
+
const data = event.active.data.current;
|
|
51
|
+
setActiveItem(data ?? null);
|
|
52
|
+
}, []);
|
|
53
|
+
const handleDragEnd = useCallback(async (event)=>{
|
|
54
|
+
const { active, over } = event;
|
|
55
|
+
setActiveItem(null);
|
|
56
|
+
if (isMovePending || !over) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const targetFolderId = parseFolderTargetId(over.id);
|
|
60
|
+
const activeData = active.data.current;
|
|
61
|
+
if (targetFolderId == null || !activeData) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const items = getDragItems(activeData);
|
|
65
|
+
if (!canDropItemOnFolder({
|
|
66
|
+
items,
|
|
67
|
+
targetFolderId,
|
|
68
|
+
folderStructure
|
|
69
|
+
})) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const payload = buildBulkMovePayload(items);
|
|
73
|
+
const successMessage = formatMessage({
|
|
74
|
+
id: getTranslationKey('modal.move.success-label'),
|
|
75
|
+
defaultMessage: 'Elements have been moved successfully.'
|
|
76
|
+
});
|
|
77
|
+
const errorFallback = formatMessage({
|
|
78
|
+
id: getTranslationKey('modal.move.error-label'),
|
|
79
|
+
defaultMessage: 'An error occurred while moving the elements.'
|
|
80
|
+
});
|
|
81
|
+
try {
|
|
82
|
+
await bulkMove({
|
|
83
|
+
...payload,
|
|
84
|
+
destinationFolderId: targetFolderId
|
|
85
|
+
}).unwrap();
|
|
86
|
+
announceToLiveRegion(successMessage);
|
|
87
|
+
toggleNotification({
|
|
88
|
+
type: 'success',
|
|
89
|
+
message: successMessage
|
|
90
|
+
});
|
|
91
|
+
} catch (error) {
|
|
92
|
+
const errorMessage = getBulkMoveErrorMessage(error, errorFallback);
|
|
93
|
+
announceToLiveRegion(formatMessage({
|
|
94
|
+
id: getTranslationKey('dnd.announce.move-failure'),
|
|
95
|
+
defaultMessage: 'Move failed. {message}'
|
|
96
|
+
}, {
|
|
97
|
+
message: errorMessage
|
|
98
|
+
}));
|
|
99
|
+
toggleNotification({
|
|
100
|
+
type: 'danger',
|
|
101
|
+
message: errorMessage
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}, [
|
|
105
|
+
announceToLiveRegion,
|
|
106
|
+
bulkMove,
|
|
107
|
+
folderStructure,
|
|
108
|
+
formatMessage,
|
|
109
|
+
isMovePending,
|
|
110
|
+
toggleNotification
|
|
111
|
+
]);
|
|
112
|
+
const handleDragCancel = useCallback(()=>{
|
|
113
|
+
setActiveItem(null);
|
|
114
|
+
}, []);
|
|
115
|
+
const announcements = useMemo(()=>({
|
|
116
|
+
onDragStart: ({ active })=>{
|
|
117
|
+
const data = active.data.current;
|
|
118
|
+
return data ? formatMessage({
|
|
119
|
+
id: getTranslationKey('dnd.announce.drag-start'),
|
|
120
|
+
defaultMessage: 'Picked up {name}. Drop on a folder to move.'
|
|
121
|
+
}, {
|
|
122
|
+
name: data.name
|
|
123
|
+
}) : '';
|
|
124
|
+
},
|
|
125
|
+
onDragOver: ()=>'',
|
|
126
|
+
onDragEnd: ({ active, over })=>{
|
|
127
|
+
if (!over) {
|
|
128
|
+
return formatMessage({
|
|
129
|
+
id: getTranslationKey('dnd.announce.cancel'),
|
|
130
|
+
defaultMessage: 'Drag cancelled.'
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
const targetFolderId = parseFolderTargetId(over.id);
|
|
134
|
+
const activeData = active.data.current;
|
|
135
|
+
if (targetFolderId == null || !activeData) {
|
|
136
|
+
return '';
|
|
137
|
+
}
|
|
138
|
+
const items = getDragItems(activeData);
|
|
139
|
+
if (!canDropItemOnFolder({
|
|
140
|
+
items,
|
|
141
|
+
targetFolderId,
|
|
142
|
+
folderStructure
|
|
143
|
+
})) {
|
|
144
|
+
return formatMessage({
|
|
145
|
+
id: getTranslationKey('dnd.announce.invalid-drop'),
|
|
146
|
+
defaultMessage: 'Cannot move item to this folder.'
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return '';
|
|
150
|
+
},
|
|
151
|
+
onDragCancel: ()=>formatMessage({
|
|
152
|
+
id: getTranslationKey('dnd.announce.cancel'),
|
|
153
|
+
defaultMessage: 'Drag cancelled.'
|
|
154
|
+
})
|
|
155
|
+
}), [
|
|
156
|
+
folderStructure,
|
|
157
|
+
formatMessage
|
|
158
|
+
]);
|
|
159
|
+
return /*#__PURE__*/ jsx(AssetsDndContext.Provider, {
|
|
160
|
+
value: contextValue,
|
|
161
|
+
children: /*#__PURE__*/ jsxs(DndContext, {
|
|
162
|
+
sensors: sensors,
|
|
163
|
+
collisionDetection: pointerWithin,
|
|
164
|
+
onDragStart: handleDragStart,
|
|
165
|
+
onDragEnd: handleDragEnd,
|
|
166
|
+
onDragCancel: handleDragCancel,
|
|
167
|
+
accessibility: {
|
|
168
|
+
announcements
|
|
169
|
+
},
|
|
170
|
+
children: [
|
|
171
|
+
/*#__PURE__*/ jsx(VisuallyHidden, {
|
|
172
|
+
"aria-live": "polite",
|
|
173
|
+
"aria-atomic": "true",
|
|
174
|
+
children: liveAnnouncement
|
|
175
|
+
}),
|
|
176
|
+
/*#__PURE__*/ jsx(Box, {
|
|
177
|
+
position: "relative",
|
|
178
|
+
children: children
|
|
179
|
+
}),
|
|
180
|
+
/*#__PURE__*/ jsx(DragOverlay, {
|
|
181
|
+
dropAnimation: null,
|
|
182
|
+
children: activeItem ? /*#__PURE__*/ jsx(DragOverlayChip, {
|
|
183
|
+
item: activeItem
|
|
184
|
+
}) : null
|
|
185
|
+
})
|
|
186
|
+
]
|
|
187
|
+
})
|
|
188
|
+
});
|
|
189
|
+
}; // TODO(CMS-229): FolderTree droppables + keyboard move path.
|
|
190
|
+
|
|
191
|
+
export { AssetsDndProvider, useAssetsDndOptional };
|
|
192
|
+
//# sourceMappingURL=AssetsDndProvider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetsDndProvider.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from 'react';\n\nimport {\n DndContext,\n DragOverlay,\n PointerSensor,\n pointerWithin,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n} from '@dnd-kit/core';\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport { Box, VisuallyHidden } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useBulkMoveMutation, useGetFolderStructureQuery } from '../../../../services/folders';\nimport { buildBulkMovePayload } from '../../../../utils/buildBulkMovePayload';\nimport { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\nimport { getBulkMoveErrorMessage } from '../../../../utils/getBulkMoveErrorMessage';\nimport { getTranslationKey } from '../../../../utils/translations';\n\nimport { parseFolderTargetId } from './dndIds';\nimport { DragOverlayChip } from './DragOverlayChip';\n\nimport type { DragItemData } from '../../../../types/dnd';\n\n/* -------------------------------------------------------------------------------------------------\n * Context — shared with UploadDropZoneProvider for bidirectional drag guard.\n * See UploadDropZoneContext.tsx TODO linking both providers.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsDndContextValue {\n isInternalDragActive: boolean;\n isMovePending: boolean;\n}\n\nconst AssetsDndContext = createContext<AssetsDndContextValue | null>(null);\n\nexport const useAssetsDnd = () => {\n const context = useContext(AssetsDndContext);\n\n if (!context) {\n throw new Error('useAssetsDnd must be used within AssetsDndProvider');\n }\n\n return context;\n};\n\nexport const useAssetsDndOptional = () => useContext(AssetsDndContext);\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsDndProviderProps {\n children: ReactNode;\n}\n\nconst getDragItems = (activeData: DragItemData | undefined): DragItemData[] => {\n if (!activeData) {\n return [];\n }\n\n // TODO(CMS-433): include selectedItems from active data for multi-drag payload members.\n return [activeData];\n};\n\nexport const AssetsDndProvider = ({ children }: AssetsDndProviderProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { data: folderStructure = [] } = useGetFolderStructureQuery();\n const [bulkMove, { isLoading: isMovePending }] = useBulkMoveMutation();\n const [activeItem, setActiveItem] = useState<DragItemData | null>(null);\n const [liveAnnouncement, setLiveAnnouncement] = useState('');\n\n const announceToLiveRegion = useCallback((message: string) => {\n setLiveAnnouncement('');\n requestAnimationFrame(() => setLiveAnnouncement(message));\n }, []);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 8 },\n })\n );\n\n const contextValue = useMemo<AssetsDndContextValue>(\n () => ({\n isInternalDragActive: activeItem !== null,\n isMovePending,\n }),\n [activeItem, isMovePending]\n );\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n const data = event.active.data.current as DragItemData | undefined;\n setActiveItem(data ?? null);\n }, []);\n\n const handleDragEnd = useCallback(\n async (event: DragEndEvent) => {\n const { active, over } = event;\n setActiveItem(null);\n\n if (isMovePending || !over) {\n return;\n }\n\n const targetFolderId = parseFolderTargetId(over.id);\n const activeData = active.data.current as DragItemData | undefined;\n\n if (targetFolderId == null || !activeData) {\n return;\n }\n\n const items = getDragItems(activeData);\n\n if (\n !canDropItemOnFolder({\n items,\n targetFolderId,\n folderStructure,\n })\n ) {\n return;\n }\n\n const payload = buildBulkMovePayload(items);\n const successMessage = formatMessage({\n id: getTranslationKey('modal.move.success-label'),\n defaultMessage: 'Elements have been moved successfully.',\n });\n const errorFallback = formatMessage({\n id: getTranslationKey('modal.move.error-label'),\n defaultMessage: 'An error occurred while moving the elements.',\n });\n\n try {\n await bulkMove({ ...payload, destinationFolderId: targetFolderId }).unwrap();\n\n announceToLiveRegion(successMessage);\n\n toggleNotification({\n type: 'success',\n message: successMessage,\n });\n } catch (error) {\n const errorMessage = getBulkMoveErrorMessage(error, errorFallback);\n\n announceToLiveRegion(\n formatMessage(\n {\n id: getTranslationKey('dnd.announce.move-failure'),\n defaultMessage: 'Move failed. {message}',\n },\n { message: errorMessage }\n )\n );\n\n toggleNotification({\n type: 'danger',\n message: errorMessage,\n });\n }\n },\n [\n announceToLiveRegion,\n bulkMove,\n folderStructure,\n formatMessage,\n isMovePending,\n toggleNotification,\n ]\n );\n\n const handleDragCancel = useCallback(() => {\n setActiveItem(null);\n }, []);\n\n const announcements = useMemo(\n () => ({\n onDragStart: ({ active }: DragStartEvent) => {\n const data = active.data.current as DragItemData | undefined;\n return data\n ? formatMessage(\n {\n id: getTranslationKey('dnd.announce.drag-start'),\n defaultMessage: 'Picked up {name}. Drop on a folder to move.',\n },\n { name: data.name }\n )\n : '';\n },\n onDragOver: () => '',\n onDragEnd: ({ active, over }: DragEndEvent) => {\n if (!over) {\n return formatMessage({\n id: getTranslationKey('dnd.announce.cancel'),\n defaultMessage: 'Drag cancelled.',\n });\n }\n\n const targetFolderId = parseFolderTargetId(over.id);\n const activeData = active.data.current as DragItemData | undefined;\n\n if (targetFolderId == null || !activeData) {\n return '';\n }\n\n const items = getDragItems(activeData);\n\n if (\n !canDropItemOnFolder({\n items,\n targetFolderId,\n folderStructure,\n })\n ) {\n return formatMessage({\n id: getTranslationKey('dnd.announce.invalid-drop'),\n defaultMessage: 'Cannot move item to this folder.',\n });\n }\n\n return '';\n },\n onDragCancel: () =>\n formatMessage({\n id: getTranslationKey('dnd.announce.cancel'),\n defaultMessage: 'Drag cancelled.',\n }),\n }),\n [folderStructure, formatMessage]\n );\n\n return (\n <AssetsDndContext.Provider value={contextValue}>\n <DndContext\n sensors={sensors}\n collisionDetection={pointerWithin}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n accessibility={{ announcements }}\n >\n <VisuallyHidden aria-live=\"polite\" aria-atomic=\"true\">\n {liveAnnouncement}\n </VisuallyHidden>\n <Box position=\"relative\">{children}</Box>\n <DragOverlay dropAnimation={null}>\n {activeItem ? <DragOverlayChip item={activeItem} /> : null}\n </DragOverlay>\n </DndContext>\n </AssetsDndContext.Provider>\n );\n};\n\n// TODO(CMS-229): FolderTree droppables + keyboard move path.\n"],"names":["AssetsDndContext","createContext","useAssetsDndOptional","useContext","getDragItems","activeData","AssetsDndProvider","children","formatMessage","useIntl","toggleNotification","useNotification","data","folderStructure","useGetFolderStructureQuery","bulkMove","isLoading","isMovePending","useBulkMoveMutation","activeItem","setActiveItem","useState","liveAnnouncement","setLiveAnnouncement","announceToLiveRegion","useCallback","message","requestAnimationFrame","sensors","useSensors","useSensor","PointerSensor","activationConstraint","distance","contextValue","useMemo","isInternalDragActive","handleDragStart","event","active","current","handleDragEnd","over","targetFolderId","parseFolderTargetId","id","items","canDropItemOnFolder","payload","buildBulkMovePayload","successMessage","getTranslationKey","defaultMessage","errorFallback","destinationFolderId","unwrap","type","error","errorMessage","getBulkMoveErrorMessage","handleDragCancel","announcements","onDragStart","name","onDragOver","onDragEnd","onDragCancel","_jsx","Provider","value","_jsxs","DndContext","collisionDetection","pointerWithin","accessibility","VisuallyHidden","aria-live","aria-atomic","Box","position","DragOverlay","dropAnimation","DragOverlayChip","item"],"mappings":";;;;;;;;;;;;;;AAqCA,MAAMA,iCAAmBC,aAAAA,CAA4C,IAAA,CAAA;AAY9D,MAAMC,oBAAAA,GAAuB,IAAMC,UAAAA,CAAWH,gBAAAA;AAUrD,MAAMI,eAAe,CAACC,UAAAA,GAAAA;AACpB,IAAA,IAAI,CAACA,UAAAA,EAAY;AACf,QAAA,OAAO,EAAE;AACX,IAAA;;IAGA,OAAO;AAACA,QAAAA;AAAW,KAAA;AACrB,CAAA;AAEO,MAAMC,iBAAAA,GAAoB,CAAC,EAAEC,QAAQ,EAA0B,GAAA;IACpE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,IAAAA,EAAMC,eAAAA,GAAkB,EAAE,EAAE,GAAGC,0BAAAA,EAAAA;AACvC,IAAA,MAAM,CAACC,QAAAA,EAAU,EAAEC,WAAWC,aAAa,EAAE,CAAC,GAAGC,mBAAAA,EAAAA;AACjD,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,QAAAA,CAA8B,IAAA,CAAA;AAClE,IAAA,MAAM,CAACC,gBAAAA,EAAkBC,mBAAAA,CAAoB,GAAGF,QAAAA,CAAS,EAAA,CAAA;IAEzD,MAAMG,oBAAAA,GAAuBC,YAAY,CAACC,OAAAA,GAAAA;QACxCH,mBAAAA,CAAoB,EAAA,CAAA;AACpBI,QAAAA,qBAAAA,CAAsB,IAAMJ,mBAAAA,CAAoBG,OAAAA,CAAAA,CAAAA;AAClD,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,MAAME,OAAAA,GAAUC,UAAAA,CACdC,SAAAA,CAAUC,aAAAA,EAAe;QACvBC,oBAAAA,EAAsB;YAAEC,QAAAA,EAAU;AAAE;AACtC,KAAA,CAAA,CAAA;IAGF,MAAMC,YAAAA,GAAeC,OAAAA,CACnB,KAAO;AACLC,YAAAA,oBAAAA,EAAsBjB,UAAAA,KAAe,IAAA;AACrCF,YAAAA;AACF,SAAA,CAAA,EACA;AAACE,QAAAA,UAAAA;AAAYF,QAAAA;AAAc,KAAA,CAAA;IAG7B,MAAMoB,eAAAA,GAAkBZ,YAAY,CAACa,KAAAA,GAAAA;AACnC,QAAA,MAAM1B,OAAO0B,KAAAA,CAAMC,MAAM,CAAC3B,IAAI,CAAC4B,OAAO;AACtCpB,QAAAA,aAAAA,CAAcR,IAAAA,IAAQ,IAAA,CAAA;AACxB,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,MAAM6B,aAAAA,GAAgBhB,YACpB,OAAOa,KAAAA,GAAAA;AACL,QAAA,MAAM,EAAEC,MAAM,EAAEG,IAAI,EAAE,GAAGJ,KAAAA;QACzBlB,aAAAA,CAAc,IAAA,CAAA;QAEd,IAAIH,aAAAA,IAAiB,CAACyB,IAAAA,EAAM;AAC1B,YAAA;AACF,QAAA;QAEA,MAAMC,cAAAA,GAAiBC,mBAAAA,CAAoBF,IAAAA,CAAKG,EAAE,CAAA;AAClD,QAAA,MAAMxC,UAAAA,GAAakC,MAAAA,CAAO3B,IAAI,CAAC4B,OAAO;QAEtC,IAAIG,cAAAA,IAAkB,IAAA,IAAQ,CAACtC,UAAAA,EAAY;AACzC,YAAA;AACF,QAAA;AAEA,QAAA,MAAMyC,QAAQ1C,YAAAA,CAAaC,UAAAA,CAAAA;AAE3B,QAAA,IACE,CAAC0C,mBAAAA,CAAoB;AACnBD,YAAAA,KAAAA;AACAH,YAAAA,cAAAA;AACA9B,YAAAA;SACF,CAAA,EACA;AACA,YAAA;AACF,QAAA;AAEA,QAAA,MAAMmC,UAAUC,oBAAAA,CAAqBH,KAAAA,CAAAA;AACrC,QAAA,MAAMI,iBAAiB1C,aAAAA,CAAc;AACnCqC,YAAAA,EAAAA,EAAIM,iBAAAA,CAAkB,0BAAA,CAAA;YACtBC,cAAAA,EAAgB;AAClB,SAAA,CAAA;AACA,QAAA,MAAMC,gBAAgB7C,aAAAA,CAAc;AAClCqC,YAAAA,EAAAA,EAAIM,iBAAAA,CAAkB,wBAAA,CAAA;YACtBC,cAAAA,EAAgB;AAClB,SAAA,CAAA;QAEA,IAAI;AACF,YAAA,MAAMrC,QAAAA,CAAS;AAAE,gBAAA,GAAGiC,OAAO;gBAAEM,mBAAAA,EAAqBX;AAAe,aAAA,CAAA,CAAGY,MAAM,EAAA;YAE1E/B,oBAAAA,CAAqB0B,cAAAA,CAAAA;YAErBxC,kBAAAA,CAAmB;gBACjB8C,IAAAA,EAAM,SAAA;gBACN9B,OAAAA,EAASwB;AACX,aAAA,CAAA;AACF,QAAA,CAAA,CAAE,OAAOO,KAAAA,EAAO;YACd,MAAMC,YAAAA,GAAeC,wBAAwBF,KAAAA,EAAOJ,aAAAA,CAAAA;AAEpD7B,YAAAA,oBAAAA,CACEhB,aAAAA,CACE;AACEqC,gBAAAA,EAAAA,EAAIM,iBAAAA,CAAkB,2BAAA,CAAA;gBACtBC,cAAAA,EAAgB;aAClB,EACA;gBAAE1B,OAAAA,EAASgC;AAAa,aAAA,CAAA,CAAA;YAI5BhD,kBAAAA,CAAmB;gBACjB8C,IAAAA,EAAM,QAAA;gBACN9B,OAAAA,EAASgC;AACX,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EACA;AACElC,QAAAA,oBAAAA;AACAT,QAAAA,QAAAA;AACAF,QAAAA,eAAAA;AACAL,QAAAA,aAAAA;AACAS,QAAAA,aAAAA;AACAP,QAAAA;AACD,KAAA,CAAA;AAGH,IAAA,MAAMkD,mBAAmBnC,WAAAA,CAAY,IAAA;QACnCL,aAAAA,CAAc,IAAA,CAAA;AAChB,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,MAAMyC,aAAAA,GAAgB1B,OAAAA,CACpB,KAAO;YACL2B,WAAAA,EAAa,CAAC,EAAEvB,MAAM,EAAkB,GAAA;AACtC,gBAAA,MAAM3B,IAAAA,GAAO2B,MAAAA,CAAO3B,IAAI,CAAC4B,OAAO;AAChC,gBAAA,OAAO5B,OACHJ,aAAAA,CACE;AACEqC,oBAAAA,EAAAA,EAAIM,iBAAAA,CAAkB,yBAAA,CAAA;oBACtBC,cAAAA,EAAgB;iBAClB,EACA;AAAEW,oBAAAA,IAAAA,EAAMnD,KAAKmD;iBAAK,CAAA,GAEpB,EAAA;AACN,YAAA,CAAA;AACAC,YAAAA,UAAAA,EAAY,IAAM,EAAA;AAClBC,YAAAA,SAAAA,EAAW,CAAC,EAAE1B,MAAM,EAAEG,IAAI,EAAgB,GAAA;AACxC,gBAAA,IAAI,CAACA,IAAAA,EAAM;AACT,oBAAA,OAAOlC,aAAAA,CAAc;AACnBqC,wBAAAA,EAAAA,EAAIM,iBAAAA,CAAkB,qBAAA,CAAA;wBACtBC,cAAAA,EAAgB;AAClB,qBAAA,CAAA;AACF,gBAAA;gBAEA,MAAMT,cAAAA,GAAiBC,mBAAAA,CAAoBF,IAAAA,CAAKG,EAAE,CAAA;AAClD,gBAAA,MAAMxC,UAAAA,GAAakC,MAAAA,CAAO3B,IAAI,CAAC4B,OAAO;gBAEtC,IAAIG,cAAAA,IAAkB,IAAA,IAAQ,CAACtC,UAAAA,EAAY;oBACzC,OAAO,EAAA;AACT,gBAAA;AAEA,gBAAA,MAAMyC,QAAQ1C,YAAAA,CAAaC,UAAAA,CAAAA;AAE3B,gBAAA,IACE,CAAC0C,mBAAAA,CAAoB;AACnBD,oBAAAA,KAAAA;AACAH,oBAAAA,cAAAA;AACA9B,oBAAAA;iBACF,CAAA,EACA;AACA,oBAAA,OAAOL,aAAAA,CAAc;AACnBqC,wBAAAA,EAAAA,EAAIM,iBAAAA,CAAkB,2BAAA,CAAA;wBACtBC,cAAAA,EAAgB;AAClB,qBAAA,CAAA;AACF,gBAAA;gBAEA,OAAO,EAAA;AACT,YAAA,CAAA;AACAc,YAAAA,YAAAA,EAAc,IACZ1D,aAAAA,CAAc;AACZqC,oBAAAA,EAAAA,EAAIM,iBAAAA,CAAkB,qBAAA,CAAA;oBACtBC,cAAAA,EAAgB;AAClB,iBAAA;AACJ,SAAA,CAAA,EACA;AAACvC,QAAAA,eAAAA;AAAiBL,QAAAA;AAAc,KAAA,CAAA;IAGlC,qBACE2D,GAAA,CAACnE,iBAAiBoE,QAAQ,EAAA;QAACC,KAAAA,EAAOnC,YAAAA;AAChC,QAAA,QAAA,gBAAAoC,IAAA,CAACC,UAAAA,EAAAA;YACC3C,OAAAA,EAASA,OAAAA;YACT4C,kBAAAA,EAAoBC,aAAAA;YACpBX,WAAAA,EAAazB,eAAAA;YACb4B,SAAAA,EAAWxB,aAAAA;YACXyB,YAAAA,EAAcN,gBAAAA;YACdc,aAAAA,EAAe;AAAEb,gBAAAA;AAAc,aAAA;;8BAE/BM,GAAA,CAACQ,cAAAA,EAAAA;oBAAeC,WAAAA,EAAU,QAAA;oBAASC,aAAAA,EAAY,MAAA;AAC5CvD,oBAAAA,QAAAA,EAAAA;;8BAEH6C,GAAA,CAACW,GAAAA,EAAAA;oBAAIC,QAAAA,EAAS,UAAA;AAAYxE,oBAAAA,QAAAA,EAAAA;;8BAC1B4D,GAAA,CAACa,WAAAA,EAAAA;oBAAYC,aAAAA,EAAe,IAAA;AACzB9D,oBAAAA,QAAAA,EAAAA,UAAAA,iBAAagD,GAAA,CAACe,eAAAA,EAAAA;wBAAgBC,IAAAA,EAAMhE;AAAiB,qBAAA,CAAA,GAAA;;;;;AAKhE,EAAE;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var designSystem = require('@strapi/design-system');
|
|
5
|
+
var icons = require('@strapi/icons');
|
|
6
|
+
var styledComponents = require('styled-components');
|
|
7
|
+
|
|
8
|
+
const Chip = styledComponents.styled(designSystem.Flex)`
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: ${({ theme })=>theme.spaces[2]};
|
|
11
|
+
padding: ${({ theme })=>`${theme.spaces[2]} ${theme.spaces[3]}`};
|
|
12
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
13
|
+
background: ${({ theme })=>theme.colors.primary100};
|
|
14
|
+
box-shadow: ${({ theme })=>theme.shadows.tableShadow};
|
|
15
|
+
cursor: grabbing;
|
|
16
|
+
max-width: 24rem;
|
|
17
|
+
`;
|
|
18
|
+
const DragOverlayChip = ({ item })=>{
|
|
19
|
+
const Icon = item.kind === 'folder' ? icons.Folder : icons.File;
|
|
20
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(Chip, {
|
|
21
|
+
children: [
|
|
22
|
+
/*#__PURE__*/ jsxRuntime.jsx(Icon, {
|
|
23
|
+
width: 20,
|
|
24
|
+
height: 20
|
|
25
|
+
}),
|
|
26
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
27
|
+
textColor: "neutral800",
|
|
28
|
+
fontWeight: "semiBold",
|
|
29
|
+
ellipsis: true,
|
|
30
|
+
children: item.name
|
|
31
|
+
})
|
|
32
|
+
]
|
|
33
|
+
});
|
|
34
|
+
}; // TODO composite overlay with folder/file counts + total badge.
|
|
35
|
+
|
|
36
|
+
exports.DragOverlayChip = DragOverlayChip;
|
|
37
|
+
//# sourceMappingURL=DragOverlayChip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DragOverlayChip.js","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 item: DragItemData;\n}\n\nexport const DragOverlayChip = ({ item }: DragOverlayChipProps) => {\n const Icon = item.kind === 'folder' ? FolderIcon : FileIcon;\n\n return (\n <Chip>\n <Icon width={20} height={20} />\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {item.name}\n </Typography>\n </Chip>\n );\n};\n\n// TODO composite overlay with folder/file counts + total badge.\n"],"names":["Chip","styled","Flex","theme","spaces","borderRadius","colors","primary100","shadows","tableShadow","DragOverlayChip","item","Icon","kind","FolderIcon","FileIcon","_jsxs","_jsx","width","height","Typography","textColor","fontWeight","ellipsis","name"],"mappings":";;;;;;;AAMA,MAAMA,IAAAA,GAAOC,uBAAAA,CAAOC,iBAAAA,CAAK;;OAElB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;AAC7B,WAAA,EAAE,CAAC,EAAED,KAAK,EAAE,GAAK,CAAA,EAAGA,MAAMC,MAAM,CAAC,CAAA,CAAE,CAAC,CAAC,EAAED,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,EAAE,CAAC;AACnD,iBAAA,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAME,YAAY,CAAC;cACvC,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,MAAM,CAACC,UAAU,CAAC;cACzC,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAMK,OAAO,CAACC,WAAW,CAAC;;;AAGzD,CAAC;AAMM,MAAMC,eAAAA,GAAkB,CAAC,EAAEC,IAAI,EAAwB,GAAA;AAC5D,IAAA,MAAMC,IAAAA,GAAOD,IAAAA,CAAKE,IAAI,KAAK,WAAWC,YAAAA,GAAaC,UAAAA;AAEnD,IAAA,qBACEC,eAAA,CAAChB,IAAAA,EAAAA;;0BACCiB,cAAA,CAACL,IAAAA,EAAAA;gBAAKM,KAAAA,EAAO,EAAA;gBAAIC,MAAAA,EAAQ;;0BACzBF,cAAA,CAACG,uBAAAA,EAAAA;gBAAWC,SAAAA,EAAU,YAAA;gBAAaC,UAAAA,EAAW,UAAA;gBAAWC,QAAQ,EAAA,IAAA;AAC9DZ,gBAAAA,QAAAA,EAAAA,IAAAA,CAAKa;;;;AAId,EAAE;;;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Typography, Flex } from '@strapi/design-system';
|
|
3
|
+
import { Folder, File } from '@strapi/icons';
|
|
4
|
+
import { styled } from 'styled-components';
|
|
5
|
+
|
|
6
|
+
const Chip = styled(Flex)`
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: ${({ theme })=>theme.spaces[2]};
|
|
9
|
+
padding: ${({ theme })=>`${theme.spaces[2]} ${theme.spaces[3]}`};
|
|
10
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
11
|
+
background: ${({ theme })=>theme.colors.primary100};
|
|
12
|
+
box-shadow: ${({ theme })=>theme.shadows.tableShadow};
|
|
13
|
+
cursor: grabbing;
|
|
14
|
+
max-width: 24rem;
|
|
15
|
+
`;
|
|
16
|
+
const DragOverlayChip = ({ item })=>{
|
|
17
|
+
const Icon = item.kind === 'folder' ? Folder : File;
|
|
18
|
+
return /*#__PURE__*/ jsxs(Chip, {
|
|
19
|
+
children: [
|
|
20
|
+
/*#__PURE__*/ jsx(Icon, {
|
|
21
|
+
width: 20,
|
|
22
|
+
height: 20
|
|
23
|
+
}),
|
|
24
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
25
|
+
textColor: "neutral800",
|
|
26
|
+
fontWeight: "semiBold",
|
|
27
|
+
ellipsis: true,
|
|
28
|
+
children: item.name
|
|
29
|
+
})
|
|
30
|
+
]
|
|
31
|
+
});
|
|
32
|
+
}; // TODO composite overlay with folder/file counts + total badge.
|
|
33
|
+
|
|
34
|
+
export { DragOverlayChip };
|
|
35
|
+
//# sourceMappingURL=DragOverlayChip.mjs.map
|
|
@@ -0,0 +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 item: DragItemData;\n}\n\nexport const DragOverlayChip = ({ item }: DragOverlayChipProps) => {\n const Icon = item.kind === 'folder' ? FolderIcon : FileIcon;\n\n return (\n <Chip>\n <Icon width={20} height={20} />\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {item.name}\n </Typography>\n </Chip>\n );\n};\n\n// TODO composite overlay with folder/file counts + total badge.\n"],"names":["Chip","styled","Flex","theme","spaces","borderRadius","colors","primary100","shadows","tableShadow","DragOverlayChip","item","Icon","kind","FolderIcon","FileIcon","_jsxs","_jsx","width","height","Typography","textColor","fontWeight","ellipsis","name"],"mappings":";;;;;AAMA,MAAMA,IAAAA,GAAOC,MAAAA,CAAOC,IAAAA,CAAK;;OAElB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;AAC7B,WAAA,EAAE,CAAC,EAAED,KAAK,EAAE,GAAK,CAAA,EAAGA,MAAMC,MAAM,CAAC,CAAA,CAAE,CAAC,CAAC,EAAED,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,EAAE,CAAC;AACnD,iBAAA,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAME,YAAY,CAAC;cACvC,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,MAAM,CAACC,UAAU,CAAC;cACzC,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAMK,OAAO,CAACC,WAAW,CAAC;;;AAGzD,CAAC;AAMM,MAAMC,eAAAA,GAAkB,CAAC,EAAEC,IAAI,EAAwB,GAAA;AAC5D,IAAA,MAAMC,IAAAA,GAAOD,IAAAA,CAAKE,IAAI,KAAK,WAAWC,MAAAA,GAAaC,IAAAA;AAEnD,IAAA,qBACEC,IAAA,CAAChB,IAAAA,EAAAA;;0BACCiB,GAAA,CAACL,IAAAA,EAAAA;gBAAKM,KAAAA,EAAO,EAAA;gBAAIC,MAAAA,EAAQ;;0BACzBF,GAAA,CAACG,UAAAA,EAAAA;gBAAWC,SAAAA,EAAU,YAAA;gBAAaC,UAAAA,EAAW,UAAA;gBAAWC,QAAQ,EAAA,IAAA;AAC9DZ,gBAAAA,QAAAA,EAAAA,IAAAA,CAAKa;;;;AAId,EAAE;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const toFileDraggableId = (id)=>`file:${id}`;
|
|
4
|
+
const toFolderDraggableId = (id)=>`folder:${id}`;
|
|
5
|
+
const toFolderTargetId = (id)=>`folder-target:${id}`;
|
|
6
|
+
const parseFolderTargetId = (dndId)=>{
|
|
7
|
+
if (typeof dndId !== 'string') {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const match = /^folder-target:(\d+)$/.exec(dndId);
|
|
11
|
+
return match ? Number(match[1]) : null;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
exports.parseFolderTargetId = parseFolderTargetId;
|
|
15
|
+
exports.toFileDraggableId = toFileDraggableId;
|
|
16
|
+
exports.toFolderDraggableId = toFolderDraggableId;
|
|
17
|
+
exports.toFolderTargetId = toFolderTargetId;
|
|
18
|
+
//# sourceMappingURL=dndIds.js.map
|
|
@@ -0,0 +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;;;;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const toFileDraggableId = (id)=>`file:${id}`;
|
|
2
|
+
const toFolderDraggableId = (id)=>`folder:${id}`;
|
|
3
|
+
const toFolderTargetId = (id)=>`folder-target:${id}`;
|
|
4
|
+
const parseFolderTargetId = (dndId)=>{
|
|
5
|
+
if (typeof dndId !== 'string') {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const match = /^folder-target:(\d+)$/.exec(dndId);
|
|
9
|
+
return match ? Number(match[1]) : null;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { parseFolderTargetId, toFileDraggableId, toFolderDraggableId, toFolderTargetId };
|
|
13
|
+
//# sourceMappingURL=dndIds.mjs.map
|
|
@@ -0,0 +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;;;;"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var core = require('@dnd-kit/core');
|
|
5
|
+
var folders = require('../../../../services/folders.js');
|
|
6
|
+
var canDropItemOnFolder = require('../../../../utils/canDropItemOnFolder.js');
|
|
7
|
+
var AssetsDndProvider = require('./AssetsDndProvider.js');
|
|
8
|
+
var dndIds = require('./dndIds.js');
|
|
9
|
+
|
|
10
|
+
const useFileDraggable = (asset)=>{
|
|
11
|
+
const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
|
|
12
|
+
isMovePending: false
|
|
13
|
+
};
|
|
14
|
+
const data = React.useMemo(()=>({
|
|
15
|
+
kind: 'file',
|
|
16
|
+
id: asset.id,
|
|
17
|
+
name: asset.name,
|
|
18
|
+
folderId: asset.folder == null ? null : typeof asset.folder === 'number' ? asset.folder : Number(asset.folder) || null
|
|
19
|
+
}), [
|
|
20
|
+
asset.folder,
|
|
21
|
+
asset.id,
|
|
22
|
+
asset.name
|
|
23
|
+
]);
|
|
24
|
+
return core.useDraggable({
|
|
25
|
+
id: dndIds.toFileDraggableId(asset.id),
|
|
26
|
+
data,
|
|
27
|
+
disabled: isMovePending
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
const useFolderDraggableDroppable = (folder)=>{
|
|
31
|
+
const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
|
|
32
|
+
isMovePending: false
|
|
33
|
+
};
|
|
34
|
+
const { active } = core.useDndContext();
|
|
35
|
+
const { data: folderStructure = [] } = folders.useGetFolderStructureQuery();
|
|
36
|
+
const parentId = typeof folder.parent === 'object' && folder.parent != null ? folder.parent.id ?? null : folder.parent ?? null;
|
|
37
|
+
const dragData = React.useMemo(()=>({
|
|
38
|
+
kind: 'folder',
|
|
39
|
+
id: folder.id,
|
|
40
|
+
name: folder.name,
|
|
41
|
+
parentId
|
|
42
|
+
}), [
|
|
43
|
+
folder.id,
|
|
44
|
+
folder.name,
|
|
45
|
+
parentId
|
|
46
|
+
]);
|
|
47
|
+
const dropData = React.useMemo(()=>({
|
|
48
|
+
kind: 'folder-target',
|
|
49
|
+
id: folder.id,
|
|
50
|
+
name: folder.name
|
|
51
|
+
}), [
|
|
52
|
+
folder.id,
|
|
53
|
+
folder.name
|
|
54
|
+
]);
|
|
55
|
+
const draggable = core.useDraggable({
|
|
56
|
+
id: dndIds.toFolderDraggableId(folder.id),
|
|
57
|
+
data: dragData,
|
|
58
|
+
disabled: isMovePending
|
|
59
|
+
});
|
|
60
|
+
const droppable = core.useDroppable({
|
|
61
|
+
id: dndIds.toFolderTargetId(folder.id),
|
|
62
|
+
data: dropData,
|
|
63
|
+
disabled: isMovePending
|
|
64
|
+
});
|
|
65
|
+
const activeData = active?.data.current;
|
|
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
|
+
]);
|
|
82
|
+
const isOver = droppable.isOver;
|
|
83
|
+
const showValidDropHighlight = isOver && isValidDropTarget;
|
|
84
|
+
const showInvalidDropCursor = isOver && !isValidDropTarget && active != null;
|
|
85
|
+
return {
|
|
86
|
+
dragData,
|
|
87
|
+
draggable,
|
|
88
|
+
droppable,
|
|
89
|
+
isDragging: draggable.isDragging,
|
|
90
|
+
showValidDropHighlight,
|
|
91
|
+
showInvalidDropCursor
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
exports.useFileDraggable = useFileDraggable;
|
|
96
|
+
exports.useFolderDraggableDroppable = useFolderDraggableDroppable;
|
|
97
|
+
//# sourceMappingURL=useAssetDnd.js.map
|
|
@@ -0,0 +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 { useGetFolderStructureQuery } from '../../../../services/folders';\nimport { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type {\n DragFileData,\n DragFolderData,\n DragItemData,\n FolderTargetData,\n} from '../../../../types/dnd';\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | 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:\n asset.folder == null\n ? null\n : typeof asset.folder === 'number'\n ? asset.folder\n : Number(asset.folder) || null,\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 } = useAssetsDndOptional() ?? { isMovePending: false };\n const { active } = useDndContext();\n const { data: folderStructure = [] } = useGetFolderStructureQuery();\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 activeData = active?.data.current as DragItemData | undefined;\n\n const isValidDropTarget = useMemo(() => {\n if (!activeData || (activeData.id === folder.id && activeData.kind === 'folder')) {\n return false;\n }\n\n return canDropItemOnFolder({\n items: [activeData],\n targetFolderId: folder.id,\n folderStructure,\n });\n }, [activeData, folder.id, folderStructure]);\n\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidDropTarget;\n const showInvalidDropCursor = isOver && !isValidDropTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","id","name","folderId","folder","Number","useDraggable","toFileDraggableId","disabled","useFolderDraggableDroppable","active","useDndContext","folderStructure","useGetFolderStructureQuery","parentId","parent","dragData","dropData","draggable","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","activeData","current","isValidDropTarget","canDropItemOnFolder","items","targetFolderId","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';
|
|
3
|
+
import { useGetFolderStructureQuery } from '../../../../services/folders.mjs';
|
|
4
|
+
import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder.mjs';
|
|
5
|
+
import { useAssetsDndOptional } from './AssetsDndProvider.mjs';
|
|
6
|
+
import { toFolderDraggableId, toFolderTargetId, toFileDraggableId } from './dndIds.mjs';
|
|
7
|
+
|
|
8
|
+
const useFileDraggable = (asset)=>{
|
|
9
|
+
const { isMovePending } = useAssetsDndOptional() ?? {
|
|
10
|
+
isMovePending: false
|
|
11
|
+
};
|
|
12
|
+
const data = useMemo(()=>({
|
|
13
|
+
kind: 'file',
|
|
14
|
+
id: asset.id,
|
|
15
|
+
name: asset.name,
|
|
16
|
+
folderId: asset.folder == null ? null : typeof asset.folder === 'number' ? asset.folder : Number(asset.folder) || null
|
|
17
|
+
}), [
|
|
18
|
+
asset.folder,
|
|
19
|
+
asset.id,
|
|
20
|
+
asset.name
|
|
21
|
+
]);
|
|
22
|
+
return useDraggable({
|
|
23
|
+
id: toFileDraggableId(asset.id),
|
|
24
|
+
data,
|
|
25
|
+
disabled: isMovePending
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
const useFolderDraggableDroppable = (folder)=>{
|
|
29
|
+
const { isMovePending } = useAssetsDndOptional() ?? {
|
|
30
|
+
isMovePending: false
|
|
31
|
+
};
|
|
32
|
+
const { active } = useDndContext();
|
|
33
|
+
const { data: folderStructure = [] } = useGetFolderStructureQuery();
|
|
34
|
+
const parentId = typeof folder.parent === 'object' && folder.parent != null ? folder.parent.id ?? null : folder.parent ?? null;
|
|
35
|
+
const dragData = useMemo(()=>({
|
|
36
|
+
kind: 'folder',
|
|
37
|
+
id: folder.id,
|
|
38
|
+
name: folder.name,
|
|
39
|
+
parentId
|
|
40
|
+
}), [
|
|
41
|
+
folder.id,
|
|
42
|
+
folder.name,
|
|
43
|
+
parentId
|
|
44
|
+
]);
|
|
45
|
+
const dropData = useMemo(()=>({
|
|
46
|
+
kind: 'folder-target',
|
|
47
|
+
id: folder.id,
|
|
48
|
+
name: folder.name
|
|
49
|
+
}), [
|
|
50
|
+
folder.id,
|
|
51
|
+
folder.name
|
|
52
|
+
]);
|
|
53
|
+
const draggable = useDraggable({
|
|
54
|
+
id: toFolderDraggableId(folder.id),
|
|
55
|
+
data: dragData,
|
|
56
|
+
disabled: isMovePending
|
|
57
|
+
});
|
|
58
|
+
const droppable = useDroppable({
|
|
59
|
+
id: toFolderTargetId(folder.id),
|
|
60
|
+
data: dropData,
|
|
61
|
+
disabled: isMovePending
|
|
62
|
+
});
|
|
63
|
+
const activeData = active?.data.current;
|
|
64
|
+
const isValidDropTarget = useMemo(()=>{
|
|
65
|
+
if (!activeData || activeData.id === folder.id && activeData.kind === 'folder') {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return canDropItemOnFolder({
|
|
69
|
+
items: [
|
|
70
|
+
activeData
|
|
71
|
+
],
|
|
72
|
+
targetFolderId: folder.id,
|
|
73
|
+
folderStructure
|
|
74
|
+
});
|
|
75
|
+
}, [
|
|
76
|
+
activeData,
|
|
77
|
+
folder.id,
|
|
78
|
+
folderStructure
|
|
79
|
+
]);
|
|
80
|
+
const isOver = droppable.isOver;
|
|
81
|
+
const showValidDropHighlight = isOver && isValidDropTarget;
|
|
82
|
+
const showInvalidDropCursor = isOver && !isValidDropTarget && active != null;
|
|
83
|
+
return {
|
|
84
|
+
dragData,
|
|
85
|
+
draggable,
|
|
86
|
+
droppable,
|
|
87
|
+
isDragging: draggable.isDragging,
|
|
88
|
+
showValidDropHighlight,
|
|
89
|
+
showInvalidDropCursor
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export { useFileDraggable, useFolderDraggableDroppable };
|
|
94
|
+
//# sourceMappingURL=useAssetDnd.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAssetDnd.mjs","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 { useGetFolderStructureQuery } from '../../../../services/folders';\nimport { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type {\n DragFileData,\n DragFolderData,\n DragItemData,\n FolderTargetData,\n} from '../../../../types/dnd';\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | 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:\n asset.folder == null\n ? null\n : typeof asset.folder === 'number'\n ? asset.folder\n : Number(asset.folder) || null,\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 } = useAssetsDndOptional() ?? { isMovePending: false };\n const { active } = useDndContext();\n const { data: folderStructure = [] } = useGetFolderStructureQuery();\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 activeData = active?.data.current as DragItemData | undefined;\n\n const isValidDropTarget = useMemo(() => {\n if (!activeData || (activeData.id === folder.id && activeData.kind === 'folder')) {\n return false;\n }\n\n return canDropItemOnFolder({\n items: [activeData],\n targetFolderId: folder.id,\n folderStructure,\n });\n }, [activeData, folder.id, folderStructure]);\n\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidDropTarget;\n const showInvalidDropCursor = isOver && !isValidDropTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","id","name","folderId","folder","Number","useDraggable","toFileDraggableId","disabled","useFolderDraggableDroppable","active","useDndContext","folderStructure","useGetFolderStructureQuery","parentId","parent","dragData","dropData","draggable","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","activeData","current","isValidDropTarget","canDropItemOnFolder","items","targetFolderId","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ var icons = require('@strapi/icons');
|
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
8
|
var styledComponents = require('styled-components');
|
|
9
9
|
var translations = require('../../../../utils/translations.js');
|
|
10
|
+
var AssetsDndProvider = require('../Dnd/AssetsDndProvider.js');
|
|
10
11
|
var UploadDropZoneContext = require('./UploadDropZoneContext.js');
|
|
11
12
|
|
|
12
13
|
function _interopNamespace(e) {
|
|
@@ -45,11 +46,14 @@ const DropZoneOverlay = styledComponents.styled(designSystem.Box)`
|
|
|
45
46
|
pointer-events: none;
|
|
46
47
|
`;
|
|
47
48
|
const DropZoneWithOverlay = ({ children })=>{
|
|
48
|
-
const { isDragging } = UploadDropZoneContext.useUploadDropZone();
|
|
49
|
+
const { isDragging: isUploadDragActive } = UploadDropZoneContext.useUploadDropZone();
|
|
50
|
+
const assetsDnd = AssetsDndProvider.useAssetsDndOptional();
|
|
51
|
+
const isInternalDragActive = assetsDnd?.isInternalDragActive ?? false;
|
|
52
|
+
const showOverlay = isUploadDragActive && !isInternalDragActive;
|
|
49
53
|
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
|
|
50
54
|
position: "relative",
|
|
51
55
|
children: [
|
|
52
|
-
|
|
56
|
+
showOverlay && /*#__PURE__*/ jsxRuntime.jsx(DropZoneOverlay, {}),
|
|
53
57
|
children
|
|
54
58
|
]
|
|
55
59
|
});
|
|
@@ -73,7 +77,10 @@ const DropZoneWithOverlay = ({ children })=>{
|
|
|
73
77
|
`;
|
|
74
78
|
const DropFilesMessage = ({ uploadDropZoneRef, folderName })=>{
|
|
75
79
|
const { formatMessage } = reactIntl.useIntl();
|
|
76
|
-
const { isDragging } = UploadDropZoneContext.useUploadDropZone();
|
|
80
|
+
const { isDragging: isUploadDragActive } = UploadDropZoneContext.useUploadDropZone();
|
|
81
|
+
const assetsDnd = AssetsDndProvider.useAssetsDndOptional();
|
|
82
|
+
const isInternalDragActive = assetsDnd?.isInternalDragActive ?? false;
|
|
83
|
+
const showMessage = isUploadDragActive && !isInternalDragActive;
|
|
77
84
|
// Dropzone message position (relative to main content)
|
|
78
85
|
const [leftContentWidth, setLeftContentWidth] = React__namespace.useState(0);
|
|
79
86
|
// Calculate the left content width to position the dropzone message correctly
|
|
@@ -92,7 +99,9 @@ const DropFilesMessage = ({ uploadDropZoneRef, folderName })=>{
|
|
|
92
99
|
}, [
|
|
93
100
|
uploadDropZoneRef
|
|
94
101
|
]);
|
|
95
|
-
if (!
|
|
102
|
+
if (!showMessage) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
96
105
|
return /*#__PURE__*/ jsxRuntime.jsxs(DropFilesMessageImpl, {
|
|
97
106
|
$leftContentWidth: leftContentWidth,
|
|
98
107
|
children: [
|