import { useEffect, useRef, useState } from "react"; import { CartesianGrid, Legend, Line, LineChart, Tooltip, XAxis, YAxis, } from "recharts"; import type { BacklinksOverviewData } from "./backlinksPageTypes"; import { formatFullDate, formatMonthLabel, formatTooltipValue, } from "./backlinksPageUtils"; export function BacklinksTrendChart({ data, }: { data: BacklinksOverviewData["trends"]; }) { const { containerRef, chartWidth } = useChartWidth(); if (data.length === 0) { return ; } return (
{chartWidth > 0 ? ( ) : null}
); } export function BacklinksNewLostChart({ data, }: { data: BacklinksOverviewData["newLostTrends"]; }) { const { containerRef, chartWidth } = useChartWidth(); if (data.length === 0) { return ; } return (
{chartWidth > 0 ? ( ) : null}
); } function useChartWidth() { const containerRef = useRef(null); const [chartWidth, setChartWidth] = useState(0); useEffect(() => { const container = containerRef.current; if (!container) { return; } const updateWidth = () => { setChartWidth(container.clientWidth); }; updateWidth(); const observer = new ResizeObserver(updateWidth); observer.observe(container); return () => { observer.disconnect(); }; }, []); return { containerRef, chartWidth }; } function EmptyChartState() { return (
Not enough historical data yet.
); } function formatChartTick(value: unknown) { return typeof value === "string" ? formatMonthLabel(value) : ""; } function formatChartLabel(value: unknown) { return typeof value === "string" ? formatFullDate(value) : ""; }