"use client" import React, { useState, useEffect } from "react" import { Search, Folder, Move } from "lucide-react" import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Button } from "@/components/ui/button" import { ScrollArea } from "@/components/ui/scroll-area" import { toast } from "@/hooks/use-toast" import { DriveLsEntry } from "@/lib/drive_types" interface DriveMoveDialogProps { open: boolean onOpenChange: (open: boolean) => void selectedCount: number onMove: (destinationPath: string) => void } export function DriveMoveDialog({ open, onOpenChange, selectedCount, onMove }: DriveMoveDialogProps) { const [directories, setDirectories] = useState([]) const [filteredDirectories, setFilteredDirectories] = useState([]) const [searchQuery, setSearchQuery] = useState("") const [selectedDirectory, setSelectedDirectory] = useState(null) const [loading, setLoading] = useState(false) // Load all directories when dialog opens useEffect(() => { if (open) { loadDirectories() } }, [open]) // Filter directories based on search query useEffect(() => { if (!searchQuery.trim()) { setFilteredDirectories(directories) } else { const query = searchQuery.toLowerCase() const filtered = directories.filter(dir => dir.path.toLowerCase().includes(query) ) setFilteredDirectories(filtered) } }, [searchQuery, directories]) const loadDirectories = async () => { setLoading(true) try { const response = await fetch('/api/directories') if (!response.ok) { throw new Error(`Failed to fetch directories: ${response.statusText}`) } const dirs = await response.json() setDirectories(dirs) setFilteredDirectories(dirs) } catch (error) { console.error('Error loading directories:', error) toast({ title: "Failed to load directories", description: error instanceof Error ? error.message : 'Unknown error occurred', variant: "destructive" }) } finally { setLoading(false) } } const handleMove = () => { if (selectedDirectory) { onMove(selectedDirectory) // Reset dialog state setSelectedDirectory(null) setSearchQuery("") } } const handleClose = () => { onOpenChange(false) // Reset dialog state setSelectedDirectory(null) setSearchQuery("") } return ( Move {selectedCount} item{selectedCount !== 1 ? "s" : ""}
{/* Search Input */}
setSearchQuery(e.target.value)} className="pl-10" />
{/* Directory List */}
{loading ? (
) : filteredDirectories.length === 0 ? (
{searchQuery ? 'No directories found matching your search' : 'No directories available'}
) : (
{filteredDirectories.map((directory) => (
setSelectedDirectory(directory.path)} > {directory.path}
))}
)}
{/* Selected Directory Display */} {selectedDirectory && (
Moving to:
{selectedDirectory}
)} {/* Action Buttons */}
) }