"use client"; import { useEffect, useRef, useState } from "react"; import { createPortal } from "react-dom"; import { X, Upload, FileJson, AlertCircle, Check } from "lucide-react"; import { parseMetaAny } from "@/lib/jav/metaImport"; import type { NfoMetadata } from "@/lib/jav/nfoParser"; interface Props { onClose: () => void; onApply: (meta: NfoMetadata) => void; } export function NfoImportDialog({ onClose, onApply }: Props) { const [text, setText] = useState(""); const [error, setError] = useState(null); const [preview, setPreview] = useState(null); const fileRef = useRef(null); useEffect(() => { const onKey = (e: KeyboardEvent) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [onClose]); function tryParse(raw: string) { setError(null); if (!raw.trim()) { setPreview(null); return; } const m = parseMetaAny(raw); if (!m) { setPreview(null); setError("Couldn't recognize this as a .nfo XML or metadata JSON."); return; } setPreview(m); } async function onFile(file: File) { const t = await file.text(); setText(t); tryParse(t); } function apply() { if (preview) { onApply(preview); onClose(); } } if (typeof document === "undefined") return null; return createPortal(
{ if (e.target === e.currentTarget) onClose(); }} >
Import Metadata
From a .nfo (XML) file or metadata JSON
.nfo, .xml, .json { const f = e.target.files?.[0]; if (f) onFile(f); e.target.value = ""; }} />