"use client"; import { useEffect, useState } from "react"; import DesktopHeader from "../../components/DesktopHeader"; import MobileHeader from "../../components/MobileHeader"; import Footer from "../../components/Footer"; import FilterCard from "../../components/FilterCard"; type MerchProduct = { id: string; name: string; unitAmount: number | null; currency: string | null; thumbnailUrl: string | null; variantId: string | null; }; export default function MerchPage() { const [products, setProducts] = useState([]); const [loading, setLoading] = useState(false); const [message, setMessage] = useState(""); useEffect(() => { async function load() { setLoading(true); setMessage(""); try { const res = await fetch("/api/printful/products"); const data = await res.json(); if (!res.ok) throw new Error(data.error || "Failed to load merch."); setProducts(data.products || []); } catch (err: any) { setMessage(err.message || "Failed to load merch."); } finally { setLoading(false); } } load(); }, []); return (

Merch

{message ?
{message}
: null}
{products.map((product) => (
{product.thumbnailUrl ? ( {product.name} ) : (
)}
{product.name}
{product.unitAmount && product.currency ? `${(product.unitAmount / 100).toFixed(2)} ${product.currency.toUpperCase()}` : "Price unavailable"}
))} {!products.length && !loading ? (
No merch yet.
) : null}
); }