import { useState } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { deleteRepository, listRepositories, } from "../api/git_repositories"; import type { GitRepository } from "../api/git_repositories"; import { EmptyState, ErrorState, LoadingState } from "../components/data-states"; import { Icon } from "../components/icon"; import { RepositoryCreateDialog } from "../components/repository-create-dialog"; import { useAsyncData } from "../hooks/use-async-data"; export const GitRepositoriesPage = () => { const { projectId } = useParams<{ projectId: string }>(); const navigate = useNavigate(); const [showCreate, setShowCreate] = useState(false); const [deleteConfirmId, setDeleteConfirmId] = useState(null); const { data: repositories, status, reload } = useAsyncData( async () => { if (!projectId) return []; return await listRepositories(projectId); }, [projectId] ); const handleDelete = async (repoId: string) => { if (!projectId) return; try { await deleteRepository(projectId, repoId); setDeleteConfirmId(null); reload(); } catch { setDeleteConfirmId(null); } }; const safeRepositories = repositories ?? []; const isEmpty = status === "ready" && safeRepositories.length === 0; return (

Repositories

{status === "loading" && } {status === "error" && } {isEmpty && } {status === "ready" && safeRepositories.length > 0 && (
{safeRepositories.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={reload} /> )}
); };