"use client"; import { useState, useRef, useEffect, useTransition } from "react"; import { Button } from "../components/ui"; import { ProviderIcon } from "../components/ProviderIcon"; import { useTranslation } from "../../lib/i18n/context"; interface LibraryActionsProps { libraryId: string; monitorEnabled: boolean; scanMode: string; watcherEnabled: boolean; metadataProvider: string | null; fallbackMetadataProvider: string | null; onUpdate?: () => void; } export function LibraryActions({ libraryId, monitorEnabled, scanMode, watcherEnabled, metadataProvider, fallbackMetadataProvider, onUpdate }: LibraryActionsProps) { const { t } = useTranslation(); 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; const newMetadataProvider = (formData.get("metadata_provider") as string) || null; const newFallbackProvider = (formData.get("fallback_metadata_provider") as string) || null; try { const [response] = await Promise.all([ fetch(`/api/libraries/${libraryId}/monitoring`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ monitor_enabled: monitorEnabled, scan_mode: scanMode, watcher_enabled: watcherEnabled, }), }), fetch(`/api/libraries/${libraryId}/metadata-provider`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ metadata_provider: newMetadataProvider, fallback_metadata_provider: newFallbackProvider }), }), ]); 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}

)}
)}
); }