import { Suspense, lazy, useEffect } from "react"; import { useParams } from "react-router"; import { incrementItemView } from "@/lib/item-popularity"; import { DashboardSkeleton } from "./DashboardSkeleton"; import { dashboardComponents } from "./registry"; const SqlDashboardPage = lazy(() => import("./sql-dashboard")); // Single shared loading placeholder used across hydration → exists-check → // Suspense → dashboard config load. Matches the real SqlChartCard shape (Card // chrome + title row + chart-body skeleton) so the user sees one continuous // skeleton state rather than four different ones morphing into each other. function SqlDashboardLoader() { return ( }> ); } export default function AdhocRouter() { const { id = "default" } = useParams<{ id: string }>(); const Component = dashboardComponents[id]; useEffect(() => { localStorage.setItem("last-dashboard-id", id); if (Component) incrementItemView("dashboard", id); }, [Component, id]); // Code-based dashboards take priority if (Component) { return ( }> ); } return ; }