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 './Remotes.css'; const typeColors: Record = { docker: 'blue', helm: 'green', rpm: 'yellow', pypi: 'blue', npm: 'red', generic: 'default', alpine: 'green', puppet: 'yellow', terraform: 'blue', goproxy: 'green', }; 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}`)} /> )}
); }