import { useActionMutation, useActionQuery, } from "@agent-native/core/client/hooks"; import { useT } from "@agent-native/core/client/i18n"; import { IconRefresh } from "@tabler/icons-react"; import { useMemo } from "react"; import { useNavigate, useSearchParams } from "react-router"; import { toast } from "sonner"; import { CrmDashboardPanel } from "@/components/crm/CrmDashboardPanel"; import { PageHeader, SetupEmptyState } from "@/components/crm/Surface"; import { Button } from "@/components/ui/button"; import { crmDashboardMetaTitle } from "@/i18n/en-US"; import { dashboardDataPanelId } from "@/lib/dashboard"; import type { CrmDashboard } from "@/lib/types"; export function meta() { return [{ title: crmDashboardMetaTitle }]; } export default function DashboardRoute() { const t = useT(); const [searchParams] = useSearchParams(); const navigate = useNavigate(); const dashboards = useActionQuery( "list-crm-dashboards" as never, {} as never, ); const install = useActionMutation< { dashboardId: string }, Record >("install-crm-pipeline-dashboard" as never); const dashboard = useMemo(() => { const requested = searchParams.get("id"); return ( dashboards.data?.find((item) => item.id === requested) ?? dashboards.data?.find((item) => item.kind === "pipeline") ); }, [dashboards.data, searchParams]); async function installDashboard() { try { const result = await install.mutateAsync({}); navigate(`/dashboard?id=${encodeURIComponent(result.dashboardId)}`, { replace: true, }); toast.success(t("dashboard.ready")); } catch (error) { toast.error( error instanceof Error ? error.message : t("dashboard.installFailed"), ); } } if (dashboards.isLoading) { return ( ); } if (!dashboard) { return ( <> ); } return ( <> {install.isPending ? t("dashboard.updating") : t("dashboard.updatePack")} } />
{dashboard.config.panels.map((panel) => ( ))}
); }