"use client"; import { FormEvent, useEffect, useMemo, useRef, useState } from "react"; import Link from "next/link"; import { useAccount } from "@/contexts/AccountContext"; import { addListing, loadExchange, type ExchangeListing } from "@/lib/exchangeState"; export default function ExchangePlatformPage() { const { user, hydrated: accountReady } = useAccount(); const prefilledAuthor = useRef(false); const [rows, setRows] = useState([]); const [filter, setFilter] = useState<"all" | "wts" | "wtb">("all"); const [kind, setKind] = useState<"wts" | "wtb">("wts"); const [title, setTitle] = useState(""); const [body, setBody] = useState(""); const [price, setPrice] = useState(""); const [currency, setCurrency] = useState<"BTC" | "XMR" | "USD">("BTC"); const [author, setAuthor] = useState(""); const [exchangeReady, setExchangeReady] = useState(false); useEffect(() => { setRows(loadExchange()); setExchangeReady(true); }, []); useEffect(() => { if (!accountReady || !user || prefilledAuthor.current) return; setAuthor(user.displayName); prefilledAuthor.current = true; }, [accountReady, user]); const list = useMemo(() => { if (filter === "all") return rows; return rows.filter((r) => r.kind === filter); }, [rows, filter]); const onSubmit = (e: FormEvent) => { e.preventDefault(); if (!title.trim() || !body.trim() || !price.trim()) return; addListing({ kind, title, body, price, currency, author, }); setRows(loadExchange()); setTitle(""); setBody(""); setPrice(""); }; const btn = (active: boolean) => `flex-1 border-2 border-[#6b5344] py-3 text-xs font-black uppercase transition-colors ${ active ? "bg-[#8d6e4a]/40 text-[#f0e6d8]" : "bg-transparent text-[#a89888] hover:bg-[#1a1614]" }`; const tab = (active: boolean) => `border-2 px-4 py-2 text-xs font-black uppercase ${ active ? "border-[#c4a574] bg-[#c4a574]/20 text-[#f0e6d8]" : "border-[#4a3f36]/80 bg-transparent text-[#8a7b6b]" }`; return (

Guidelines · Ledger · Sign up

Submit a listing

setAuthor(e.target.value)} /> setTitle(e.target.value)} /> setPrice(e.target.value)} />