"use client"; import { useEffect, useState } from "react"; import { loadSession, signOut, type Person } from "@/lib/auth-client"; import { SignInForm } from "./SignInForm"; import { Logo } from "./Logo"; import { Feed } from "./Feed"; type State = { kind: "loading" } | { kind: "out" } | { kind: "in"; person: Person }; export function App() { const [state, setState] = useState({ kind: "loading" }); const [signingOut, setSigningOut] = useState(false); useEffect(() => { let live = true; loadSession().then((person) => { if (live) setState(person ? { kind: "in", person } : { kind: "out" }); }); return () => { live = false; }; }, []); async function handleSignOut() { if (signingOut) return; setSigningOut(true); await signOut(); setSigningOut(false); setState({ kind: "out" }); } if (state.kind === "loading") { return (

Loading...

); } if (state.kind === "out") { return setState({ kind: "in", person })} />; } return (
{state.person.name} {state.person.email}
setState({ kind: "out" })} />
); }