'use client'; import { useToast } from "@/components/hooks/use-toast"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useDomain } from "@/hooks/useDomain"; import { SINGLE_TENANT_ORG_DOMAIN } from "@/lib/constants"; import { RepositoryQuery } from "@/lib/types"; import { getCodeHostInfoForRepo, getShortenedNumberDisplayString } from "@/lib/utils"; import clsx from "clsx"; import { Loader2Icon, RefreshCwIcon } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useMemo } from "react"; interface ProgressIndicatorProps { numberOfReposWithFirstTimeIndexingJobsInProgress: number; sampleRepos: RepositoryQuery[]; } export const ProgressIndicator = ({ numberOfReposWithFirstTimeIndexingJobsInProgress: numRepos, sampleRepos, }: ProgressIndicatorProps) => { const domain = useDomain(); const router = useRouter(); const { toast } = useToast(); if (numRepos === 0) { return null; } const numReposString = getShortenedNumberDisplayString(numRepos); return ( {numReposString}

{`Syncing ${numReposString} ${numRepos === 1 ? 'repository' : 'repositories'}`}

{sampleRepos.map((repo) => ( ))}
{numRepos > sampleRepos.length && (
{`View ${numRepos - sampleRepos.length} more`}
)}
) } const RepoItem = ({ repo }: { repo: RepositoryQuery }) => { const { repoIcon, displayName } = useMemo(() => { const info = getCodeHostInfoForRepo({ name: repo.repoName, codeHostType: repo.codeHostType, displayName: repo.repoDisplayName, webUrl: repo.webUrl, }); return { repoIcon: {info.codeHostName}, displayName: info.displayName, } }, [repo.repoName, repo.codeHostType, repo.repoDisplayName, repo.webUrl]); return ( {repoIcon} {displayName} ) }