import { useState, useCallback } from "react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import { ArrowLeft } from "lucide-react"; import PeriodSelector from "../components/dashboard/PeriodSelector"; import MonthlyTrendsChart from "../components/reports/MonthlyTrendsChart"; import MonthlyTrendsTable from "../components/reports/MonthlyTrendsTable"; import CategoryOverTimeChart from "../components/reports/CategoryOverTimeChart"; import type { CategoryOverTimeChartType } from "../components/reports/CategoryOverTimeChart"; import CategoryOverTimeTable from "../components/reports/CategoryOverTimeTable"; import ViewModeToggle, { readViewMode, type ViewMode } from "../components/reports/ViewModeToggle"; import TrendsChartTypeToggle, { readTrendsChartType, TRENDS_CHART_TYPE_STORAGE_KEY, } from "../components/reports/TrendsChartTypeToggle"; import { useTrends } from "../hooks/useTrends"; import { useReportsPeriod } from "../hooks/useReportsPeriod"; import type { CategoryBreakdownItem } from "../shared/types"; const STORAGE_KEY = "reports-viewmode-trends"; export default function ReportsTrendsPage() { const { t } = useTranslation(); const { period, setPeriod, from, to, setCustomDates } = useReportsPeriod(); const { subView, setSubView, monthlyTrends, categoryOverTime, isLoading, error } = useTrends(); const [viewMode, setViewMode] = useState(() => readViewMode(STORAGE_KEY)); const [chartType, setChartType] = useState(() => readTrendsChartType()); const [hiddenCategories, setHiddenCategories] = useState>(new Set()); const preserveSearch = typeof window !== "undefined" ? window.location.search : ""; const toggleHidden = useCallback((name: string) => { setHiddenCategories((prev) => { const next = new Set(prev); if (next.has(name)) next.delete(name); else next.add(name); return next; }); }, []); const showAll = useCallback(() => setHiddenCategories(new Set()), []); // viewDetails not used in trends view — transactions details are accessed from category zoom. const noOpDetails = useCallback((_item: CategoryBreakdownItem) => {}, []); return (

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

{subView === "byCategory" && viewMode === "chart" && ( )}
{error && (
{error}
)} {subView === "global" ? ( viewMode === "chart" ? ( ) : ( ) ) : viewMode === "chart" ? ( ) : ( )}
); }