"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { api } from "@/lib/api"; import { useAuth } from "@/lib/auth"; import { useToast } from "@/lib/toast"; import { useI18n } from "@/lib/i18n"; import RingNext from "@/components/RingNext"; import { useRingSteps } from "@/lib/rings"; import { clearDraft, loadDraft, saveDraft } from "@/lib/localDraft"; const DRAFT_KEY = "nomadro-submit-draft"; type SubmitDraft = { title: string; url: string; notes: string; contentType: string }; export default function ContentSubmitClient() { const { token } = useAuth(); const router = useRouter(); const { toast } = useToast(); const { t } = useI18n(); const rings = useRingSteps(); const [title, setTitle] = useState(""); const [url, setUrl] = useState(""); const [notes, setNotes] = useState(""); const [contentType, setContentType] = useState("article"); const [busy, setBusy] = useState(false); const [done, setDone] = useState(false); const [ready, setReady] = useState(false); useEffect(() => { const draft = loadDraft(DRAFT_KEY); if (draft) { setTitle(draft.title || ""); setUrl(draft.url || ""); setNotes(draft.notes || ""); setContentType(draft.contentType || "article"); } setReady(true); }, []); useEffect(() => { if (!ready) return; const id = window.setTimeout(() => { if (!title && !url && !notes) { clearDraft(DRAFT_KEY); return; } saveDraft(DRAFT_KEY, { title, url, notes, contentType }); }, 400); return () => window.clearTimeout(id); }, [title, url, notes, contentType, ready]); const submit = async () => { if (!token) { router.push("/login?next=/submit"); return; } if (!title.trim() || title.trim().length < 4) { toast(t.submit.needTitle, "info"); return; } if ((contentType === "article" || contentType === "video") && !/^https?:\/\/.+/.test(url.trim())) { toast(t.submit.needUrl, "info"); return; } setBusy(true); try { await api.submitContent( { title: title.trim(), url: url.trim(), notes: notes.trim(), content_type: contentType, name: "", }, token ); clearDraft(DRAFT_KEY); toast(t.submit.ok, "success", { href: "/community", label: t.submit.goCommunity, }); setTitle(""); setUrl(""); setNotes(""); setDone(true); } catch { toast(t.submit.fail, "error"); } finally { setBusy(false); } }; return (
{t.submit.tag}

{t.submit.title}

{t.submit.subtitle}

{!done &&

{t.submit.draftHint}

}
{done ? (

{t.submit.thanksTitle}

{t.submit.thanksDesc}

{t.submit.goCommunity}
) : (
setTitle(e.target.value)} maxLength={120} /> setUrl(e.target.value)} maxLength={500} />