"use client"; import { useSearchParams, useRouter } from "next/navigation"; import dynamic from "next/dynamic"; import { trpc } from "~/lib/trpc/client.js"; const OverviewTab = dynamic(() => import("./skills/OverviewTab.js").then((m) => ({ default: m.OverviewTab })), { loading: () =>
, }); const SearchTab = dynamic(() => import("./skills/SearchTab.js").then((m) => ({ default: m.SearchTab })), { loading: () => , }); const GapsTab = dynamic(() => import("./skills/GapsTab.js").then((m) => ({ default: m.GapsTab })), { loading: () => , }); const PeopleFinderTab = dynamic(() => import("./skills/PeopleFinderTab.js").then((m) => ({ default: m.PeopleFinderTab })), { loading: () => , }); const TABS = [ { key: "overview", label: "Overview" }, { key: "search", label: "Search" }, { key: "gaps", label: "Gaps" }, { key: "people", label: "People Finder" }, ] as const; type TabKey = (typeof TABS)[number]["key"]; export function SkillsHub() { const searchParams = useSearchParams(); const router = useRouter(); const rawTab = searchParams.get("tab"); const activeTab: TabKey = TABS.some((t) => t.key === rawTab) ? (rawTab as TabKey) : "overview"; function setTab(tab: TabKey) { const params = new URLSearchParams(searchParams.toString()); params.set("tab", tab); router.replace(`/analytics/skills?${params.toString()}` as `/analytics/skills`, { scroll: false }); } const { data, isLoading, error } = trpc.resource.getSkillsAnalytics.useQuery(undefined, { staleTime: 60_000 }); if (isLoading) { return ({data?.totalResources} active resources · {data?.totalSkillEntries} distinct skills