"use client"; import { useEffect, useRef, useState } from "react"; import { listDrafts, deleteDraft, type Draft } from "@/lib/drafts"; import { relativeTime } from "@/lib/use-autosave"; import { useStore } from "@/lib/store"; import { useT } from "@/lib/i18n"; export function DraftsMenu() { const [open, setOpen] = useState(false); const [drafts, setDrafts] = useState([]); const ref = useRef(null); const setContent = useStore((s) => s.setContent); const setFormat = useStore((s) => s.setFormat); const setFilename = useStore((s) => s.setFilename); const pushLog = useStore((s) => s.pushLog); const t = useT(); const refresh = () => setDrafts(listDrafts()); useEffect(() => { if (open) refresh(); }, [open]); useEffect(() => { const handler = (e: MouseEvent) => { if (open && ref.current && !ref.current.contains(e.target as Node)) { setOpen(false); } }; document.addEventListener("mousedown", handler); return () => document.removeEventListener("mousedown", handler); }, [open]); const restore = (d: Draft) => { if (!confirm(t("drafts.restoreConfirm", { when: relativeTime(d.ts) }))) return; setContent(d.content); setFormat(d.format); setFilename(d.filename); pushLog({ kind: "info", text: t("drafts.restoredLog", { when: relativeTime(d.ts), n: d.bytes.toLocaleString() }), }); setOpen(false); }; const remove = (e: React.MouseEvent, ts: number) => { e.stopPropagation(); deleteDraft(ts); refresh(); }; return (
{open && (
{t("drafts.heading")} {t("drafts.count", { n: drafts.length })}
{drafts.length === 0 ? (
{t("drafts.empty.title")}
{t("drafts.empty.hint")}
) : (
{drafts.map((d) => ( ))}
)}
)}
); }