"use client"; import { useEffect, useState } from "react"; import { api } from "@/lib/api"; import { buildKpis } from "@/lib/overview"; import { FinancialsCard } from "@/components/prism/FinancialsCard"; import { KPIStrip } from "@/components/prism/KPIStrip"; import { RatiosPage } from "@/components/prism/RatiosPage"; import { TickerHeader } from "@/components/prism/TickerHeader"; import type { FinancialsResponse, TickerOverview } from "@/types/api"; type StatementKey = "income" | "balance" | "cash_flow" | "ratios"; type FinancialStatementKey = Exclude; type PeriodKey = "annual" | "quarterly"; type FinState = "loading" | "ready" | "error"; type Props = { ticker: string; overview: TickerOverview; isSaved: boolean; onToggleWatchlist: () => void; }; const STATEMENT_LABELS: Record = { income: "INCOME", balance: "BALANCE", cash_flow: "CASH FLOW", ratios: "RATIOS", }; export function FinancialsPage({ ticker, overview, isSaved, onToggleWatchlist }: Props) { const [statement, setStatement] = useState("income"); const [period, setPeriod] = useState("annual"); const [data, setData] = useState(null); const [finState, setFinState] = useState("loading"); const kpis = buildKpis(overview); useEffect(() => { if (statement === "ratios") { return; } let cancelled = false; setFinState("loading"); setData(null); api .financials(ticker, period) .then((res) => { if (!cancelled) { setData(res); setFinState("ready"); } }) .catch(() => { if (!cancelled) setFinState("error"); }); return () => { cancelled = true; }; }, [ticker, period, statement]); return ( <>
{(["income", "balance", "cash_flow", "ratios"] as StatementKey[]).map((key) => ( ))}
{statement === "ratios" ? ( ) : ( <> {finState === "loading" && (
)} {finState === "error" && (

Financial statements unavailable for {ticker}.

)} {finState === "ready" && data && ( )} )} ); }