// Repository picker page (/). Auto-redirects when there is exactly one repo. // Shows a list when multiple repos are registered. import { useReadQuery } from "@apollo/client/react"; import { createFileRoute, Link, useNavigate } from "@tanstack/react-router"; import { GitFork, FolderOpen, AlertCircle } from "lucide-react"; import { useEffect } from "react"; import { type RepositoriesQuery, RepositoriesDocument } from "@/__generated__/graphql"; import { preloadQuery } from "@/lib/apollo"; export const Route = createFileRoute("/")({ component: RouteComponent, loader: () => ({ repositoriesRef: preloadQuery(RepositoriesDocument), }), }); function repoSlug(name: string | null | undefined): string { return name ?? "_"; } function repoLabel(name: string | null | undefined): string { return name ?? "default"; } function RouteComponent() { const { repositoriesRef } = Route.useLoaderData(); const { data, error } = useReadQuery(repositoriesRef); const navigate = useNavigate(); // Auto-redirect when there is exactly one repo — no need to pick. useEffect(() => { if (data?.repositories.nodes.length === 1) { void navigate({ to: "/$repo", params: { repo: repoSlug(data.repositories.nodes[0].name) }, search: { ref: "", path: "", type: "tree" as const }, replace: true, }); } }, [data, navigate]); return (

Repositories

{error && (
Failed to load repositories: {error.message}
)}
{data?.repositories.nodes.map((repo) => (

{repoLabel(repo.name)}

))} {data?.repositories.totalCount === 0 && (

No repositories found.

)}
); }