import React, { useCallback, useEffect, useState } from "react"; import { useParams } from "react-router-dom"; import { deleteRepository, listRepositories, type GitRepository } from "../../../api/git-repositories"; import { RepositoryCreateDialog } from "./repository-create-dialog"; import { Icon } from "../../icon"; export const RepositoriesSettingsTab: React.FC = () => { const { projectId } = useParams<{ projectId: string }>(); const [repositories, setRepositories] = useState([]); const [loading, setLoading] = useState(true); const [showCreate, setShowCreate] = useState(false); const [error, setError] = useState(""); const loadRepositories = useCallback(async () => { if (!projectId) { setLoading(false); return; } setLoading(true); try { const data = await listRepositories(projectId); setRepositories(data); } catch { setError("Failed to load repositories"); } finally { setLoading(false); } }, [projectId]); useEffect(() => { void loadRepositories(); }, [loadRepositories]); const handleDelete = async (repoId: string) => { if (!projectId) return; if (!window.confirm("Are you sure you want to delete this repository?")) return; try { await deleteRepository(projectId, repoId); setRepositories((current) => current.filter((r) => r.id !== repoId)); } catch { setError("Failed to delete repository"); } }; if (loading) return
Loading...
; return (

Repositories

{error &&
{error}
}
{repositories.length === 0 ? (

No repositories yet.

) : ( repositories.map((repo) => (

{repo.name}

{repo.remote_url}

{repo.is_mirror ? "Mirror" : "Clone"}
)) )}
{showCreate && ( setShowCreate(false)} onCreated={loadRepositories} /> )}
); };