import FolderCopyIcon from "@mui/icons-material/FolderCopy"; import FunctionsIcon from "@mui/icons-material/Functions"; import ImportExportIcon from "@mui/icons-material/ImportExport"; import RefreshIcon from "@mui/icons-material/Refresh"; import ScaleIcon from "@mui/icons-material/Scale"; import { Grid, IconButton, Paper, Tooltip, Typography } from "@mui/material"; import { LineChart } from "@mui/x-charts/LineChart"; import { filesize } from "filesize"; import React from "react"; import { GlobalStats, StatBalanceVariation, StatsApi } from "../api/StatsApi"; import { useAccounts } from "../hooks/AccountsListProvider"; import { usePublicMode } from "../hooks/context_providers/PublicModeProvider"; import { fmtDateFromTime, time } from "../utils/DateUtils"; import { AmountWidget } from "../widgets/AmountWidget"; import { AsyncWidget } from "../widgets/AsyncWidget"; import { MoneyMgrWebRouteContainer } from "../widgets/MoneyMgrWebRouteContainer"; export function HomeRoute(): React.ReactElement { const publicMode = usePublicMode().enabled; const account = useAccounts(); const loadKey = React.useRef(1); const [global, setGlobal] = React.useState(); const [lastYear, setLastYear] = React.useState< StatBalanceVariation[] | undefined >(); const load = async () => { setGlobal(await StatsApi.GetGlobal()); const lastyear = await StatsApi.BalanceVariationStats( time() - 3600 * 24 * 365, time(), 3600 * 24 ); // Manually compute sum for (const entry of lastyear) { let sum = 0; for (const a of account.list.list) { sum += entry[a.id.toString()]; } entry.sum = sum; } setLastYear(lastyear); }; const reload = () => { loadKey.current += 1; setGlobal(undefined); }; return ( } > {publicMode ? ( Dasbhoard is hidden when public mode is enabled. ) : ( } /> )} ); } export function StatsDashboard(p: { global: GlobalStats; lastYear: StatBalanceVariation[]; }): React.ReactElement { return ( <> } icon={} /> } /> } /> } /> ); } export function StatTile(p: { title: string; value: number | string | React.ReactElement; icon: React.ReactElement; }): React.ReactElement { return ( {p.icon} {p.title} {p.value} ); } export function StatChart(p: { label: string; start?: number; lastYear: StatBalanceVariation[]; }): React.ReactElement { const accounts = useAccounts(); return (
{p.label} { return { id: a.id, label: a.name, dataKey: a.id.toString(), stack: "total", area: false, showMark: false, }; }), ]} height={400} hideLegend />
); }