import { useState, useEffect, useRef } from 'react' import { FolderPlus, Check, Plus } from 'lucide-react' import { foldersApi } from '@/api/folders' import type { FolderListItem } from '@/types' import { cn } from '@/lib/utils' interface AddToFolderMenuProps { treeId: string onFolderCreated?: () => void } export function AddToFolderMenu({ treeId, onFolderCreated }: AddToFolderMenuProps) { const [isOpen, setIsOpen] = useState(false) const [folders, setFolders] = useState([]) const [treeFolderIds, setTreeFolderIds] = useState>(new Set()) const [isLoading, setIsLoading] = useState(false) const menuRef = useRef(null) useEffect(() => { if (isOpen) { loadFoldersAndAssignments() } }, [isOpen, treeId]) // Close on outside click useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { setIsOpen(false) } } if (isOpen) { document.addEventListener('mousedown', handleClickOutside) } return () => document.removeEventListener('mousedown', handleClickOutside) }, [isOpen]) const loadFoldersAndAssignments = async () => { setIsLoading(true) try { const foldersData = await foldersApi.list() setFolders(foldersData) // Check which folders contain this tree const folderIds = new Set() for (const folder of foldersData) { try { const treeIds = await foldersApi.getTreeIds(folder.id) if (treeIds.includes(treeId)) { folderIds.add(folder.id) } } catch { // Ignore errors for individual folder checks } } setTreeFolderIds(folderIds) } catch (err) { console.error('Failed to load folders:', err) } finally { setIsLoading(false) } } const toggleFolder = async (folderId: string) => { try { if (treeFolderIds.has(folderId)) { await foldersApi.removeTree(folderId, treeId) setTreeFolderIds((prev) => { const next = new Set(prev) next.delete(folderId) return next }) } else { await foldersApi.addTree(folderId, treeId) setTreeFolderIds((prev) => new Set([...prev, folderId])) } // Dispatch event to refresh folder counts window.dispatchEvent(new Event('folder-changed')) } catch (err) { console.error('Failed to toggle folder:', err) } } return (
{isOpen && (
{isLoading ? (
Loading...
) : folders.length === 0 ? (
No folders yet
) : ( folders.map((folder) => ( )) )}
)}
) } export default AddToFolderMenu