"use client"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useCallback, useEffect, useState } from "react"; import { api } from "@/lib/api/client"; import type { components } from "@/lib/api/schema"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; type Tree = components["schemas"]["TreeRead"]; export default function TreesPage() { const router = useRouter(); const [trees, setTrees] = useState([]); const [name, setName] = useState(""); const [ready, setReady] = useState(false); const load = useCallback(async () => { const { data, response } = await api.GET("/api/v1/trees"); if (response.status === 401) { router.push("/login"); return; } setTrees(data ?? []); setReady(true); }, [router]); useEffect(() => { load(); }, [load]); async function createTree(e: React.FormEvent) { e.preventDefault(); if (!name.trim()) return; const { error } = await api.POST("/api/v1/trees", { body: { name } }); if (!error) { setName(""); load(); } } async function logout() { await api.POST("/api/v1/auth/logout"); router.push("/login"); } if (!ready) return

Loading…

; return (

Your trees

New tree
setName(e.target.value)} />
{trees.length === 0 ? (

No trees yet — create your first one above.

) : ( )}
); }