diff --git a/src/components/FolderTree/FolderTree.tsx b/src/components/FolderTree/FolderTree.tsx index 11665a2..7e4860a 100644 --- a/src/components/FolderTree/FolderTree.tsx +++ b/src/components/FolderTree/FolderTree.tsx @@ -12,7 +12,7 @@ */ import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react'; -import { FaFolder, FaFolderOpen, FaPlus, FaPen, FaTrash, FaChevronRight, FaGlobe, FaSyncAlt } from 'react-icons/fa'; +import { FaFolder, FaFolderOpen, FaPlus, FaPen, FaTrash, FaChevronRight, FaGlobe, FaSyncAlt, FaDownload } from 'react-icons/fa'; import styles from './FolderTree.module.css'; /* ── Public types ──────────────────────────────────────────────────────── */ @@ -61,6 +61,7 @@ export interface FolderTreeProps { onDeleteFile?: (fileId: string) => Promise; onDeleteFiles?: (fileIds: string[]) => Promise; onDeleteFolders?: (folderIds: string[]) => Promise; + onDownloadFolder?: (folderId: string, folderName: string) => Promise; } /* ── Helpers ───────────────────────────────────────────────────────────── */ @@ -285,12 +286,14 @@ interface TreeNodeProps { onMoveFolders?: (folderIds: string[], targetParentId: string | null) => Promise; onMoveFile?: (fileId: string, targetFolderId: string | null) => Promise; onMoveFiles?: (fileIds: string[], targetFolderId: string | null) => Promise; + onDownloadFolder?: (folderId: string, folderName: string) => Promise; } function _TreeNode({ node, depth, selectedFolderId, expandedIds, showFiles, filesByFolder, sel, onToggle, onSelect, onCreateFolder, onRenameFolder, onDeleteFolder, onMoveFolder, onMoveFolders, onMoveFile, onMoveFiles, + onDownloadFolder, }: TreeNodeProps) { const [renaming, setRenaming] = useState(false); const [renameValue, setRenameValue] = useState(node.name); @@ -436,6 +439,11 @@ function _TreeNode({ {node.name} )} + {onDownloadFolder && !(isMultiSelected && sel.selectedItemIds.size > 1) && ( + + )} {onCreateFolder && !(isMultiSelected && sel.selectedItemIds.size > 1) && (