import { useCallback, useEffect, useState } from "react"; import { useNavigate, useParams } from "react-router-dom"; import type { GitRepository } from "../types/git-repository"; import { deleteRepository, listRepositories } from "../api/git-repositories"; import { Icon } from "../components/ui/Icon"; import { RepositoryCreateDialog } from "../components/features/project/RepositoryCreateDialog"; type RepoStatus = "loading" | "ready" | "error"; export const GitRepositoriesPage = () => { const { projectId } = useParams<{ projectId: string }>(); const navigate = useNavigate(); const [status, setStatus] = useState("loading"); const [repositories, setRepositories] = useState([]); const [showCreate, setShowCreate] = useState(false); const [deleteConfirmId, setDeleteConfirmId] = useState(null); const loadRepositories = useCallback(async () => { if (!projectId) return; setStatus("loading"); try { const data = await listRepositories(projectId); setRepositories(data); setStatus("ready"); } catch { setRepositories([]); setStatus("error"); } }, [projectId]); useEffect(() => { void loadRepositories(); }, [loadRepositories]); const handleDelete = async (repoId: string) => { if (!projectId) return; try { await deleteRepository(projectId, repoId); setDeleteConfirmId(null); await loadRepositories(); } catch { setDeleteConfirmId(null); } }; const isEmpty = status === "ready" && repositories.length === 0; return (

Repositories

{status === "loading" &&

Loading repositories...

} {status === "error" && (

Failed to load repositories

)} {isEmpty && (

No repositories yet. Create your first repository above.

)} {status === "ready" && repositories.length > 0 && (
{repositories.map((repo) => (

{repo.name}

{repo.is_mirror && repo.remote_url && (

Mirror of {repo.remote_url}

)}

{repo.path}

{deleteConfirmId === repo.id ? (
Are you sure?
) : ( )}
))}
)} {showCreate && ( setShowCreate(false)} onCreated={loadRepositories} /> )}
); };