'use client'; import useCaptureEvent from "@/hooks/useCaptureEvent"; import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card" import { DisplayConnectionError } from "./connectionError" import { NotFoundWarning } from "./notFoundWarning" import { useDomain } from "@/hooks/useDomain"; import { useRouter } from "next/navigation"; import { useCallback } from "react"; import { useQuery } from "@tanstack/react-query"; import { flagConnectionForSync, getConnectionInfo } from "@/actions"; import { isServiceError, unwrapServiceError } from "@/lib/utils"; import { env } from "@/env.mjs"; import { ConnectionSyncStatus } from "@sourcebot/db"; import { FiLoader } from "react-icons/fi"; import { CircleCheckIcon, AlertTriangle, CircleXIcon } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { ReloadIcon } from "@radix-ui/react-icons"; import { toast } from "@/components/hooks/use-toast"; interface OverviewProps { connectionId: number; } export const Overview = ({ connectionId }: OverviewProps) => { const captureEvent = useCaptureEvent(); const domain = useDomain(); const router = useRouter(); const { data: connection, isPending, error, refetch } = useQuery({ queryKey: ['connection', domain, connectionId], queryFn: () => unwrapServiceError(getConnectionInfo(connectionId, domain)), refetchInterval: env.NEXT_PUBLIC_POLLING_INTERVAL_MS, }); const handleSecretsNavigation = useCallback(() => { captureEvent('wa_connection_secrets_navigation_pressed', {}); router.push(`/${domain}/secrets`); }, [captureEvent, domain, router]); const onRetrySync = useCallback(async () => { const result = await flagConnectionForSync(connectionId, domain); if (isServiceError(result)) { toast({ description: `❌ Failed to flag connection for sync.`, }); captureEvent('wa_connection_retry_sync_fail', { error: result.errorCode, }); } else { toast({ description: "✅ Connection flagged for sync.", }); captureEvent('wa_connection_retry_sync_success', {}); refetch(); } }, [connectionId, domain, captureEvent, refetch]); if (error) { return
{connection.connectionType}
{connection.syncedAt ? new Date(connection.syncedAt).toLocaleDateString() : "never"}
{connection.numLinkedRepos}