import { useEffect, useRef, useState } from "react"; import { ProgressCard } from "@/components/common/progress-card"; import { useTranslation } from "@/contexts/i18n-context"; import { useToolProcessor } from "@/hooks/use-tool-processor"; import { format } from "@/lib/format"; import { useFileStore } from "@/stores/file-store"; export function PdfMetadataSettings() { const { t } = useTranslation(); const s = t.toolSettings["pdf-metadata"]; const { files } = useFileStore(); const { processFiles, processAllFiles, processing, error, progress } = useToolProcessor("pdf-metadata"); const [title, setTitle] = useState(""); const [author, setAuthor] = useState(""); const [subject, setSubject] = useState(""); const [keywords, setKeywords] = useState(""); const hasFile = files.length > 0; const hasMultiple = files.length > 1; const handleProcess = () => { const settings: Record = {}; if (title) settings.title = title; if (author) settings.author = author; if (subject) settings.subject = subject; if (keywords) settings.keywords = keywords; if (hasMultiple) { processAllFiles(files, settings); } else { processFiles(files, settings); } }; return (
setTitle(e.target.value)} className="w-full mt-0.5 px-2 py-1.5 rounded border border-border bg-background text-sm text-foreground" />
setAuthor(e.target.value)} className="w-full mt-0.5 px-2 py-1.5 rounded border border-border bg-background text-sm text-foreground" />
setSubject(e.target.value)} className="w-full mt-0.5 px-2 py-1.5 rounded border border-border bg-background text-sm text-foreground" />
setKeywords(e.target.value)} className="w-full mt-0.5 px-2 py-1.5 rounded border border-border bg-background text-sm text-foreground" />
{error &&

{error}

} {processing ? ( ) : ( )}
); } export interface PdfMetadataControlsProps { settings?: Record; onChange?: (settings: Record) => void; } export function PdfMetadataControls({ settings: initial, onChange }: PdfMetadataControlsProps) { const { t } = useTranslation(); const s = t.toolSettings["pdf-metadata"]; const [title, setTitle] = useState(""); const [author, setAuthor] = useState(""); const [subject, setSubject] = useState(""); const [keywords, setKeywords] = useState(""); const initializedRef = useRef(false); useEffect(() => { if (!initial || initializedRef.current) return; initializedRef.current = true; if (initial.title != null) setTitle(String(initial.title)); if (initial.author != null) setAuthor(String(initial.author)); if (initial.subject != null) setSubject(String(initial.subject)); if (initial.keywords != null) setKeywords(String(initial.keywords)); }, [initial]); const onChangeRef = useRef(onChange); useEffect(() => { onChangeRef.current = onChange; }); useEffect(() => { const out: Record = {}; if (title) out.title = title; if (author) out.author = author; if (subject) out.subject = subject; if (keywords) out.keywords = keywords; onChangeRef.current?.(out); }, [title, author, subject, keywords]); return (
setTitle(e.target.value)} className="w-full mt-0.5 px-2 py-1.5 rounded border border-border bg-background text-sm text-foreground" />
setAuthor(e.target.value)} className="w-full mt-0.5 px-2 py-1.5 rounded border border-border bg-background text-sm text-foreground" />
setSubject(e.target.value)} className="w-full mt-0.5 px-2 py-1.5 rounded border border-border bg-background text-sm text-foreground" />
setKeywords(e.target.value)} className="w-full mt-0.5 px-2 py-1.5 rounded border border-border bg-background text-sm text-foreground" />
); }