Spaces:
Running
Running
github-actions[bot]
Deploy from MaciSekander/fed-sentiment-analyzer@f9d4abf19279af4ef78eea9d53844dd022994fbb
d0622ef | import { useEffect, useMemo, useState } from "react"; | |
| import { getFedFunds, getHistory, type FedFundsResponse, type HistoryResponse } from "../api"; | |
| import { computeTimeDomain } from "../lib/chartTime"; | |
| import { buildLede } from "../lib/narrative"; | |
| import Timeline from "./Timeline"; | |
| import FedFundsChart from "./FedFundsChart"; | |
| import DocumentDrilldown from "./DocumentDrilldown"; | |
| import HighlightsDashboard from "./HighlightsDashboard"; | |
| import RegimeLegend from "./RegimeLegend"; | |
| export default function HistoryView() { | |
| const [history, setHistory] = useState<HistoryResponse | null>(null); | |
| const [historyError, setHistoryError] = useState<string | null>(null); | |
| const [fedFunds, setFedFunds] = useState<FedFundsResponse | null>(null); | |
| const [selectedDocId, setSelectedDocId] = useState<string | null>(null); | |
| useEffect(() => { | |
| getHistory() | |
| .then(setHistory) | |
| .catch((err) => setHistoryError(err instanceof Error ? err.message : String(err))); | |
| getFedFunds() | |
| .then(setFedFunds) | |
| .catch(() => setFedFunds(null)); // the rate chart is a nice-to-have, not core -- fail quietly | |
| }, []); | |
| const domain = useMemo<[number, number] | null>(() => { | |
| if (!history) return null; | |
| return computeTimeDomain( | |
| history.points.map((p) => p.date), | |
| history.regimes, | |
| ); | |
| }, [history]); | |
| if (historyError) { | |
| return <p className="error">Couldn't load history: {historyError}</p>; | |
| } | |
| if (!history || !domain) { | |
| return <p className="muted">Loading historical data…</p>; | |
| } | |
| return ( | |
| <section className="history-section"> | |
| <p className="lede prose">{buildLede(history.highlights)}</p> | |
| <div className="chart-block"> | |
| <h2 className="section-heading">Sentiment over time</h2> | |
| <Timeline history={history} domain={domain} onSelectDocument={setSelectedDocId} /> | |
| {fedFunds && <FedFundsChart fedFunds={fedFunds} domain={domain} />} | |
| </div> | |
| {selectedDocId && ( | |
| <DocumentDrilldown docId={selectedDocId} onClose={() => setSelectedDocId(null)} /> | |
| )} | |
| <h2 className="section-heading">Key highlights</h2> | |
| <HighlightsDashboard highlights={history.highlights} /> | |
| <h2 className="section-heading">Fed Chair eras & data notes</h2> | |
| <RegimeLegend regimes={history.regimes} annotations={history.annotations} byChair={history.highlights.by_chair} /> | |
| </section> | |
| ); | |
| } | |