import { useState, FC } from 'react'; import { useTranslation } from 'react-i18next'; import { SectionWidget, ChartContainer, Awaiting, ChartTooltip, ChartTooltipContent, ChartConfig, } from "@marzneshin/components"; import { XAxis, BarChart, YAxis, CartesianGrid, Bar } from "recharts" import { format as formatByte } from '@chbphone55/pretty-bytes'; import { useNodesUsageQuery, NodeType } from "@marzneshin/modules/nodes"; import { useTransformDateUsageData, ChartDateInterval, SelectDateView, dateXAxisTicks, useFromNowInterval } from "@marzneshin/common/stats-charts"; const chartConfig = { traffic: { label: "Traffic", color: "hsl(var(--chart-1))", }, } satisfies ChartConfig export const NodesUsageWidget: FC<{ node: NodeType }> = ({ node }) => { const { t } = useTranslation(); const [timeRange, setTimeRange] = useState("1d") const { start, end } = useFromNowInterval(timeRange as ChartDateInterval); const { data } = useNodesUsageQuery({ nodeId: node.id, start, end }) const chartData = useTransformDateUsageData(data.usages); const [totalAmount, totalMetric] = formatByte(data.total); return ( {t("page.nodes.nodes-usage-widget.title")} } description={t("page.nodes.nodes-usage-widget.desc")} options={
{totalAmount} {totalMetric} Total
} footer={ } > { const [amount, metric] = formatByte(value) return `${amount} ${metric}` }} /> dateXAxisTicks(value, timeRange as ChartDateInterval)} /> { return new Date(value).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", hour: "numeric" }) }} valueFormatter={(value) => { const [amount, metric] = formatByte(value as number) return `${amount} ${metric}` }} /> } /> } /> ); };