import { useEffect, useRef, useState } from 'react'; import { AutoSizer } from '@/components/AutoSizer'; import { useFormatDateInterval } from '@/hooks/useFormatDateInterval'; import type { IChartData, IInterval } from '@/types'; import { getChartColor } from '@/utils/theme'; import { CartesianGrid, Line, LineChart, Tooltip, XAxis, YAxis, } from 'recharts'; import { useChartContext } from './ChartProvider'; import { ReportLineChartTooltip } from './ReportLineChartTooltip'; import { ReportTable } from './ReportTable'; interface ReportLineChartProps { data: IChartData; interval: IInterval; } export function ReportLineChart({ interval, data }: ReportLineChartProps) { const { editMode } = useChartContext(); const [visibleSeries, setVisibleSeries] = useState([]); const formatDate = useFormatDateInterval(interval); const ref = useRef(false); useEffect(() => { if (!ref.current && data) { const max = 20; setVisibleSeries( data?.series?.slice(0, max).map((serie) => serie.name) ?? [] ); // ref.current = true; } }, [data]); return ( <> {({ width }) => ( } /> { return formatDate(m); }} tickLine={false} allowDuplicatedCategory={false} /> {data?.series .filter((serie) => { return visibleSeries.includes(serie.name); }) .map((serie) => { const realIndex = data?.series.findIndex( (item) => item.name === serie.name ); const key = serie.name; const strokeColor = getChartColor(realIndex); return ( ); })} )} {editMode && ( )} ); }