import { useEffect, useState } from 'react' import clsx from 'clsx' import { Trash2, Archive } from 'lucide-react' interface DeleteFolderDialogProps { isOpen: boolean folderName: string /** Number of photos under this folder, including descendants. Surfaced * in the dialog copy so the user understands the blast radius. */ photoCount?: number onClose: () => void /** Called with the chosen mode when the user confirms. */ onConfirm: (mode: 'discard' | 'permanent') => void } /** * Two-mode folder delete dialog: * * - Move to discard pile (default, soft, recoverable) * - Permanently delete (destructive, irreversible) * * The user picks a mode via the radio cards then clicks Delete. Esc / * backdrop click cancels. */ export function DeleteFolderDialog({ isOpen, folderName, photoCount, onClose, onConfirm, }: DeleteFolderDialogProps) { const [mode, setMode] = useState<'discard' | 'permanent'>('discard') // Reset mode when re-opening so the safe option is always the default. useEffect(() => { if (isOpen) setMode('discard') }, [isOpen]) // Esc to close. useEffect(() => { if (!isOpen) return const handler = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose() } window.addEventListener('keydown', handler) return () => window.removeEventListener('keydown', handler) }, [isOpen, onClose]) if (!isOpen) return null const photoBlurb = photoCount === undefined ? 'photos in this folder' : photoCount === 0 ? 'this empty folder' : `${photoCount} photo${photoCount === 1 ? '' : 's'} in this folder` return (

Delete folder "{folderName}"?

What should happen to {photoBlurb}?

} title="Move photos to discard pile" description="Photos can be restored later from Discarded. The folder and files stay on disk." selected={mode === 'discard'} onClick={() => setMode('discard')} /> } title="Permanently delete folder and photos" description="Removes the folder, every photo inside it, and the directory from disk. This cannot be undone." selected={mode === 'permanent'} destructive onClick={() => setMode('permanent')} />
) } function ModeCard({ icon, title, description, selected, destructive = false, onClick, }: { icon: React.ReactNode title: string description: string selected: boolean destructive?: boolean onClick: () => void }) { return ( ) }