import { Check, ChevronDown, ChevronRight, Folder, ImagePlus, PencilLine, Trash2, X, } from 'lucide-react'; import type { Dispatch, SetStateAction } from 'react'; import { PlatformTextField } from '../common/PlatformTextField'; import { EditorIconButton } from './ImageCanvasEditorPrimitives'; import { ASSET_DRAG_MIME_TYPE, getDraggedAssetId, hasDataTransferType, } from './ImageCanvasEditorModel'; import type { AssetPointerDragState, EditorAsset, EditorAssetFolder, UploadTarget, } from './ImageCanvasEditorTypes'; import { ImageCanvasAssetRowView } from './ImageCanvasAssetRowView'; import type { GroupedEditorAssetFolder, UploadFilesOptions, } from './ImageCanvasAssetLibraryPanelView'; type ImageCanvasAssetFolderSectionViewProps = { folder: GroupedEditorAssetFolder; assetPointerDragRef: { current: AssetPointerDragState | null }; suppressAssetClickRef: { current: boolean }; isAssetSelectionMode: boolean; selectedAssetIds: Set; assetMoveDropFolderId: string | null; renamingFolder: { folderId: string; value: string } | null; renamingAsset: { assetId: string; value: string } | null; setRenamingFolder: Dispatch< SetStateAction<{ folderId: string; value: string } | null> >; setRenamingAsset: Dispatch< SetStateAction<{ assetId: string; value: string } | null> >; setActiveUploadFolderId: Dispatch>; setUploadDropTarget: Dispatch>; setAssetPointerDrag: Dispatch>; setSelectedAssetIds: Dispatch>>; updateAssetMoveDropFolder: (folderId: string | null) => void; addUploadedFiles: (files: FileList | File[], options?: UploadFilesOptions) => void; requestUpload: (target: UploadTarget) => void; moveAssetToFolder: (assetId: string, folderId: string) => void; toggleAssetFolder: (folderId: string) => void; startRenamingFolder: (folder: EditorAssetFolder) => void; commitFolderRename: (folder: EditorAssetFolder) => void; deleteAssetFolder: (folder: EditorAssetFolder) => void; startRenamingAsset: (asset: EditorAsset) => void; commitAssetRename: (asset: EditorAsset) => void; deleteUploadedAsset: (asset: EditorAsset) => void; toggleAssetSelected: (assetId: string) => void; addAssetLayer: (asset: EditorAsset) => void; }; export function ImageCanvasAssetFolderSectionView({ folder, assetPointerDragRef, suppressAssetClickRef, isAssetSelectionMode, selectedAssetIds, assetMoveDropFolderId, renamingFolder, renamingAsset, setRenamingFolder, setRenamingAsset, setActiveUploadFolderId, setUploadDropTarget, setAssetPointerDrag, setSelectedAssetIds, updateAssetMoveDropFolder, addUploadedFiles, requestUpload, moveAssetToFolder, toggleAssetFolder, startRenamingFolder, commitFolderRename, deleteAssetFolder, startRenamingAsset, commitAssetRename, deleteUploadedAsset, toggleAssetSelected, addAssetLayer, }: ImageCanvasAssetFolderSectionViewProps) { return (
{ if (hasDataTransferType(event.dataTransfer, ASSET_DRAG_MIME_TYPE)) { event.preventDefault(); event.stopPropagation(); setUploadDropTarget(null); updateAssetMoveDropFolder(folder.id); event.dataTransfer.dropEffect = 'move'; return; } if (hasDataTransferType(event.dataTransfer, 'Files')) { event.preventDefault(); event.stopPropagation(); setUploadDropTarget('assets'); event.dataTransfer.dropEffect = 'copy'; } }} onDrop={(event) => { const movingAssetId = getDraggedAssetId(event.dataTransfer); if (movingAssetId) { event.preventDefault(); event.stopPropagation(); setUploadDropTarget(null); updateAssetMoveDropFolder(null); moveAssetToFolder(movingAssetId, folder.id); return; } if (!event.dataTransfer.files.length) { return; } event.preventDefault(); event.stopPropagation(); setUploadDropTarget(null); updateAssetMoveDropFolder(null); addUploadedFiles(event.dataTransfer.files, { folderId: folder.id, }); }} >
toggleAssetFolder(folder.id)} /> {renamingFolder?.folderId === folder.id ? ( setRenamingFolder({ folderId: folder.id, value: event.target.value, }) } onKeyDown={(event) => { if (event.key === 'Enter') { event.preventDefault(); commitFolderRename(folder); } if (event.key === 'Escape') { event.preventDefault(); setRenamingFolder(null); } }} /> ) : ( {folder.label} )} {folder.assets.length} {renamingFolder?.folderId === folder.id ? ( <> commitFolderRename(folder)} /> setRenamingFolder(null)} /> ) : ( startRenamingFolder(folder)} /> )} {!folder.systemDefault ? ( deleteAssetFolder(folder)} /> ) : null} { setActiveUploadFolderId(folder.id); requestUpload('asset'); }} />
); }