"use client"; import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card"; import useCaptureEvent from "@/hooks/useCaptureEvent"; import { useDomain } from "@/hooks/useDomain"; import { env } from "@/env.mjs"; import { unwrapServiceError } from "@/lib/utils"; import { RepoIndexingStatus } from "@prisma/client"; import { useQuery } from "@tanstack/react-query"; import { Loader2Icon } from "lucide-react"; import Link from "next/link"; import { getRepos } from "@/app/api/(client)/client"; export const ProgressNavIndicator = () => { const domain = useDomain(); const captureEvent = useCaptureEvent(); const { data: inProgressRepos, isPending, isError } = useQuery({ queryKey: ['repos'], queryFn: () => unwrapServiceError(getRepos()), select: (data) => data.filter(repo => repo.repoIndexingStatus === RepoIndexingStatus.IN_INDEX_QUEUE || repo.repoIndexingStatus === RepoIndexingStatus.INDEXING), refetchInterval: env.NEXT_PUBLIC_POLLING_INTERVAL_MS, }); if (isPending || isError || inProgressRepos.length === 0) { return null; } return ( captureEvent('wa_progress_nav_pressed', {})} > captureEvent('wa_progress_nav_hover', {})}> {inProgressRepos.length} Indexing in Progress The following repositories are currently being indexed: { inProgressRepos.slice(0, 10) .map(item => ( {item.repoName} ) )} {inProgressRepos.length > 10 && ( And {inProgressRepos.length - 10} more... )} ); };
The following repositories are currently being indexed: