import React, { useEffect, useMemo, useState } from "react"; import { Label, Title } from "../../tremor/Text"; import { BarSkeleton } from "./bar"; import { LineSkeleton } from "./line"; import { MetricSkeleton } from "./metric"; const getSkeleton = (id: string) => { switch (id) { case "metric": return MetricSkeleton; case "bar": return BarSkeleton; case "line": return LineSkeleton; case "area": return LineSkeleton; case "pie": return BarSkeleton; case "matrix": return BarSkeleton; case "table": return BarSkeleton; case "map": return BarSkeleton; case "sankey": return BarSkeleton; default: return BarSkeleton; } } const ProgressBar = ({ className }: { className?: string }) => { const [progress, setProgress] = useState(0); useEffect(() => { const interval = setInterval(() => { setProgress((prevProgress) => { if (prevProgress >= 99) { clearInterval(interval); return 99; } if (prevProgress >= 80) { return Math.min(100, prevProgress + 1); } if (prevProgress >= 60) { return Math.min(100, prevProgress + 2); } if (prevProgress >= 40) { return Math.min(100, prevProgress + 3); } return prevProgress + 4; }); }, 500); return () => { clearInterval(interval); }; }, []); return (
); }; export const ChartPlaceholder: React.FC<{ className?: string; title?: string; showProgress?: boolean; type?: string; }> = ({ className, title, showProgress, type = "bar" }) => { const Skeleton = useMemo(() => getSkeleton(type), [type]); return (
{title && title.trim() !== "" ? ({title}) :
} {showProgress ? :
}
Loading...
) }; export const ChartLoader: React.FC<{ className?: string; id?: string; }> = ({ id, className }) => { return (
); };