"use client"; import { useState, useRef, useEffect, useTransition } from "react"; import { Button } from "../components/ui"; interface LibraryActionsProps { libraryId: string; monitorEnabled: boolean; scanMode: string; watcherEnabled: boolean; onUpdate?: () => void; } export function LibraryActions({ libraryId, monitorEnabled, scanMode, watcherEnabled, onUpdate }: LibraryActionsProps) { const [isOpen, setIsOpen] = useState(false); const [isPending, startTransition] = useTransition(); const [saveError, setSaveError] = useState(null); const dropdownRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsOpen(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); const handleSubmit = (formData: FormData) => { setSaveError(null); startTransition(async () => { const monitorEnabled = formData.get("monitor_enabled") === "true"; const watcherEnabled = formData.get("watcher_enabled") === "true"; const scanMode = formData.get("scan_mode") as string; try { const response = await fetch(`/api/libraries/${libraryId}/monitoring`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ monitor_enabled: monitorEnabled, scan_mode: scanMode, watcher_enabled: watcherEnabled, }), }); if (response.ok) { setIsOpen(false); window.location.reload(); } else { const body = await response.json().catch(() => ({})); const msg = body?.error || `HTTP ${response.status}`; console.error("Failed to save settings:", msg); setSaveError(msg); } } catch (error) { const msg = error instanceof Error ? error.message : "Network error"; console.error("Failed to save settings:", msg); setSaveError(msg); } }); }; return (
{isOpen && (
{saveError && (

{saveError}

)}
)}
); }