import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import { getCampaigns, createCampaign, deleteCampaign } from "../api"; import type { Campaign } from "../types"; import styles from "./CampaignList.module.css"; export default function CampaignList() { const [campaigns, setCampaigns] = useState([]); const [newName, setNewName] = useState(""); const navigate = useNavigate(); useEffect(() => { getCampaigns().then(setCampaigns); }, []); async function handleCreate(e: React.FormEvent) { e.preventDefault(); if (!newName.trim()) return; try { const campaign = await createCampaign(newName.trim()); setCampaigns((prev) => [campaign, ...prev]); setNewName(""); } catch (err) { console.error("Failed to create campaign:", err); } } async function handleDelete(e: React.MouseEvent, id: number) { e.stopPropagation(); try { await deleteCampaign(id); setCampaigns((prev) => prev.filter((c) => c.id !== id)); } catch (err) { console.error("Failed to delete campaign:", err); } } return (
setNewName(e.target.value)} />
{campaigns.length === 0 && (

No campaigns yet. Create one above!

)} {campaigns.map((c) => (
navigate(`/campaign/${c.id}`)} >
{c.name}
{new Date(c.created_at).toLocaleDateString()}
))}
); }