import { useState } from "react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import { ArrowLeft, Tag } from "lucide-react"; import PeriodSelector from "../components/dashboard/PeriodSelector"; import HubNetBalanceTile from "../components/reports/HubNetBalanceTile"; import HighlightsTopMoversTable from "../components/reports/HighlightsTopMoversTable"; import HighlightsTopMoversChart from "../components/reports/HighlightsTopMoversChart"; import HighlightsTopTransactionsList from "../components/reports/HighlightsTopTransactionsList"; import ViewModeToggle, { readViewMode, type ViewMode } from "../components/reports/ViewModeToggle"; import ContextMenu from "../components/shared/ContextMenu"; import AddKeywordDialog from "../components/categories/AddKeywordDialog"; import { useHighlights } from "../hooks/useHighlights"; import { useReportsPeriod } from "../hooks/useReportsPeriod"; import type { RecentTransaction } from "../shared/types"; const STORAGE_KEY = "reports-viewmode-highlights"; export default function ReportsHighlightsPage() { const { t } = useTranslation(); const { period, setPeriod, from, to, setCustomDates } = useReportsPeriod(); const { data, isLoading, error, windowDays, setWindowDays } = useHighlights(); const [viewMode, setViewMode] = useState(() => readViewMode(STORAGE_KEY)); const [menu, setMenu] = useState<{ x: number; y: number; tx: RecentTransaction } | null>(null); const [pending, setPending] = useState(null); const preserveSearch = typeof window !== "undefined" ? window.location.search : ""; const handleContextMenu = (e: React.MouseEvent, tx: RecentTransaction) => { e.preventDefault(); setMenu({ x: e.clientX, y: e.clientY, tx }); }; return (

{t("reports.hub.highlights")}

{error && (
{error}
)} {data && (

{t("reports.highlights.balances")}

m.netBalance)} /> m.netBalance)} />

{t("reports.highlights.topMovers")}

{viewMode === "chart" ? ( ) : ( )}
)} {menu && ( setMenu(null)} items={[ { icon: , label: t("reports.keyword.addFromTransaction"), onClick: () => setPending(menu.tx), }, ]} /> )} {pending && ( setPending(null)} onApplied={() => setPending(null)} /> )}
); }