"use client"; import { FormEvent, useEffect, useMemo, useRef, useState } from "react"; import { useSearchParams } from "next/navigation"; import { useAccount } from "@/contexts/AccountContext"; import { addBarterListing, loadBarter, type BarterLane, type BarterListing } from "@/lib/barterState"; const LANES: { id: BarterLane; label: string; hint: string }[] = [ { id: "goods", label: "Physical / goods", hint: "Hardware, prints, tokens, boxes…" }, { id: "services", label: "Labor / skills", hint: "Tune-ups, consults, studio time…" }, { id: "data", label: "Data / media", hint: "Scans, decks, anonymized sets…" }, { id: "open", label: "Open terms", hint: "Wildcard swaps — spell it out." }, ]; export default function BarterPitPage() { const sp = useSearchParams(); const laneFilter = sp.get("lane") as BarterLane | null; const { user, hydrated: accountReady } = useAccount(); const prefilledAuthor = useRef(false); const [rows, setRows] = useState([]); const [barterReady, setBarterReady] = useState(false); const [lane, setLane] = useState("open"); const [author, setAuthor] = useState(""); const [title, setTitle] = useState(""); const [have, setHave] = useState(""); const [want, setWant] = useState(""); const [body, setBody] = useState(""); useEffect(() => { setRows(loadBarter()); setBarterReady(true); }, []); useEffect(() => { if (!accountReady || !user || prefilledAuthor.current) return; setAuthor(user.displayName); prefilledAuthor.current = true; }, [accountReady, user]); useEffect(() => { if (laneFilter && ["goods", "services", "data", "open"].includes(laneFilter)) { setLane(laneFilter); } }, [laneFilter]); const filtered = useMemo(() => { const sorted = [...rows].sort((a, b) => b.ts - a.ts); if (!laneFilter || !["goods", "services", "data", "open"].includes(laneFilter)) return sorted; return sorted.filter((r) => r.lane === laneFilter); }, [rows, laneFilter]); const onSubmit = (e: FormEvent) => { e.preventDefault(); if (!title.trim() || !have.trim() || !want.trim()) return; addBarterListing({ lane, author, title, have, want, body, }); setRows(loadBarter()); setTitle(""); setHave(""); setWant(""); setBody(""); }; return (
{!barterReady ? (

Syncing order book…

) : ( filtered.map((r) => (
{r.lane}

{r.title}

{r.author || "Anonymous"}

Offers (have)

{r.have}

Wants (take)

{r.want}

{r.body ? (

{r.body}

) : null}
)) )}