feat(dashboard): add daily trend chart and statistics section to dashboard

- Introduced DailyTrendChart component for visualizing daily scraped TED notices, documents, and translated notices.
- Implemented StatisticsSection to display key metrics with animated counters and a days selector for data range.
- Created utility function to convert API data into labeled points for chart rendering.
- Updated dashboard index to include the new StatisticsSection, enhancing overall dashboard functionality and user experience.
- Refactored existing trends chart to utilize the new DailyPoint type for consistency in data handling.
This commit is contained in:
AmirReza Jamali
2026-06-07 12:39:15 +03:30
parent da1e2f89e7
commit 72948a9b55
21 changed files with 766 additions and 396 deletions
@@ -9,6 +9,7 @@ import {
useTendersQuery,
} from "@/hooks/queries";
import { useMemo } from "react";
import { toLabeledPoints } from "./to-labeled-points";
export type DashboardMetrics = ReturnType<typeof useDashboardData>;
@@ -61,21 +62,10 @@ export function useDashboardData() {
refetchRecent();
};
const trend = useMemo(() => {
const series = trendResponse?.series ?? [];
return series.map((point) => {
const [y, m, d] = point.date.split("-").map(Number);
const date = new Date(Date.UTC(y, (m ?? 1) - 1, d ?? 1));
return {
date: point.date,
label: date.toLocaleDateString("en", {
month: "short",
day: "numeric",
}),
count: point.count,
};
});
}, [trendResponse]);
const trend = useMemo(
() => toLabeledPoints(trendResponse?.series ?? []),
[trendResponse],
);
const countries = useMemo(
() =>