import { useEffect, useState } from 'react'; import type { FormEvent } from 'react'; import { api } from '../api/client'; import StatusBadge from '../components/StatusBadge'; interface PgSource { id: number; name: string; host: string; port: number; database_name: string; username: string; status: string; } const emptyForm = { name: '', host: '', port: '5432', database_name: '', username: '', password: '' }; export default function PgSources() { const [sources, setSources] = useState([]); const [form, setForm] = useState(emptyForm); const [error, setError] = useState(''); async function load() { try { setSources(await api.get('/api/pg/sources')); } catch (e) { setError((e as Error).message); } } useEffect(() => { load(); }, []); async function handleAdd(e: FormEvent) { e.preventDefault(); setError(''); try { await api.post('/api/pg/sources', { ...form, port: parseInt(form.port) }); setForm(emptyForm); load(); } catch (e) { setError((e as Error).message); } } async function handleDelete(id: number) { if (!confirm('Quelle wirklich loeschen?')) return; try { await api.del(`/api/pg/sources/${id}`); load(); } catch (e) { setError((e as Error).message); } } return (

PostgreSQL Quellen

{error &&
{error}
}
{sources.length === 0 && ( )} {sources.map((s) => ( ))}
Name Host:Port/DB Status Aktionen
Keine Quellen konfiguriert
{s.name} {s.host}:{s.port}/{s.database_name}

Quelle hinzufuegen

{[ { key: 'name', label: 'Name *', type: 'text' }, { key: 'host', label: 'Host *', type: 'text' }, { key: 'port', label: 'Port', type: 'number' }, { key: 'database_name', label: 'Datenbank *', type: 'text' }, { key: 'username', label: 'Benutzername *', type: 'text' }, { key: 'password', label: 'Passwort *', type: 'password' }, ].map(({ key, label, type }) => (
)[key]} onChange={(e) => setForm({ ...form, [key]: e.target.value })} />
))}
); }