"use client"; import { useState, useTransition } from "react"; import { createPortal } from "react-dom"; 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; metadataRefreshMode: string; onUpdate?: () => void; } export function LibraryActions({ libraryId, monitorEnabled, scanMode, watcherEnabled, metadataProvider, fallbackMetadataProvider, metadataRefreshMode, }: LibraryActionsProps) { const { t } = useTranslation(); const [isOpen, setIsOpen] = useState(false); const [isPending, startTransition] = useTransition(); const [saveError, setSaveError] = useState(null); 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; const newMetadataRefreshMode = formData.get("metadata_refresh_mode") as string; 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, metadata_refresh_mode: newMetadataRefreshMode, }), }), 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 && createPortal( <> {/* Backdrop */}
setIsOpen(false)} /> {/* Modal */}
{/* Header */}
{t("libraryActions.settingsTitle")}
{/* Form */}
{/* Section: Indexation */}

{t("libraryActions.sectionIndexation")}

{/* Auto scan */}

{t("libraryActions.autoScanDesc")}

{/* File watcher */}

{t("libraryActions.fileWatchDesc")}


{/* Section: Metadata */}

{t("libraryActions.sectionMetadata")}

{/* Provider */}

{t("libraryActions.providerDesc")}

{/* Fallback */}

{t("libraryActions.fallbackDesc")}

{/* Metadata refresh */}

{t("libraryActions.metadataRefreshDesc")}

{saveError && (

{saveError}

)}
{/* Footer */}
, document.body )} ); }