import { useEffect, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { KeyRound, X, Save } from 'lucide-react'; import { credentials } from '../../api'; import type { Credential } from '../../api'; import { Breadcrumbs, Button, Card, Input, CodeEditor, useToast } from '../../ui'; import styles from '../Page.module.css'; export function EditCredentialPage() { const { t } = useTranslation(); const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const toast = useToast(); const [credential, setCredential] = useState(null); const [name, setName] = useState(''); const [data, setData] = useState(''); const [nameError, setNameError] = useState(''); const [dataError, setDataError] = useState(''); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (!id) return; credentials .get(id) .then((c) => { setCredential(c); setName(c.name); setData(c.data ?? ''); }) .catch((err: Error) => setError(err.message)) .finally(() => setLoading(false)); }, [id]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); let valid = true; if (!name.trim()) { setNameError(t('credentials.form_name_required')); valid = false; } if (data.trim()) { try { JSON.parse(data.trim()); } catch { setDataError(t('credentials.form_data_invalid_json')); valid = false; } } if (!valid) return; setSaving(true); setError(null); try { await credentials.update(id!, { name: name.trim(), data: data.trim() || null, }); toast.success('Credential updated'); navigate(`/credentials/${id}`); } catch (err) { const message = (err as Error).message; setError(message); toast.error(message); } finally { setSaving(false); } }; return (
, onClick: () => navigate('/credentials') }, { label: credential?.name ?? `#${id}`, onClick: () => navigate(`/credentials/${id}`), }, { label: t('credentials.edit_title') }, ]} />
{loading &&

{t('credentials.loading')}

} {!loading && credential && (
{ setName(e.target.value); setNameError(''); }} error={nameError || undefined} required autoFocus />
{ setData(v); setDataError(''); }} rows={6} error={!!dataError} /> {dataError && {dataError}}
)}
); }