import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { api } from '../api/client'; import type { Remote } from '../api/types'; import { Badge } from '../components/Badge'; import { DataTable } from '../components/DataTable'; import { typeColor } from '../packagetypes'; import './Remotes.css'; export function Locals() { const navigate = useNavigate(); const [remotes, setRemotes] = useState([]); const [filter, setFilter] = useState(''); const [loading, setLoading] = useState(true); useEffect(() => { api.listRemotes() .then(r => setRemotes((r || []).filter(x => x.repo_type === 'local'))) .finally(() => setLoading(false)); }, []); const filtered = remotes.filter(r => { if (filter && !r.name.toLowerCase().includes(filter.toLowerCase())) return false; return true; }); return (

Local Repositories

setFilter(e.target.value)} /> {filtered.length} locals
{loading ? (
Loading...
) : ( {r.name}, }, { key: 'type', header: 'Type', render: (r: Remote) => ( {r.package_type} ), width: '110px', }, { key: 'description', header: 'Description', render: (r: Remote) => r.description || —, }, { key: 'managed', header: 'Managed', render: (r: Remote) => r.managed_by ? {r.managed_by} : —, width: '100px', }, ]} data={filtered} emptyMessage="No local repositories configured" onRowClick={(r) => navigate(`/locals/${r.name}`)} /> )}
); }