import { useEffect, useState } from 'react' import { settingsApi } from '@/services/api' export default function SettingsPanel() { const [models, setModels] = useState({}) const [exchanges, setExchanges] = useState({}) const [loading, setLoading] = useState(true) const [saving, setSaving] = useState(false) const [error, setError] = useState(null) useEffect(() => { let mounted = true ;(async () => { try { setLoading(true) const [m, e] = await Promise.all([settingsApi.getModels(), settingsApi.getExchanges()]) if (mounted) { setModels(m); setExchanges(e) } } catch (err: any) { setError(err?.message || 'Failed to load settings') } finally { setLoading(false) } })() return () => { mounted = false } }, []) const saveModels = async () => { setSaving(true) try { setModels(await settingsApi.putModels(models)) } finally { setSaving(false) } } const saveExchanges = async () => { setSaving(true) try { setExchanges(await settingsApi.putExchanges(exchanges)) } finally { setSaving(false) } } return (
Settings
{loading &&
Loading…
} {error &&
{error}
} {!loading && !error && (
Models
setModels({ ...models, default_model: v })} /> setModels({ ...models, temperature: Number(v) })} /> setModels({ ...models, max_tokens: Number(v) })} />
Exchanges
setExchanges({ ...exchanges, binance: { ...(exchanges.binance || {}), enabled: v } })} /> setExchanges({ ...exchanges, alpha_vantage: { ...(exchanges.alpha_vantage || {}), enabled: v } })} />
)}
) } function LabeledInput({ label, value, onChange, type = 'text' }: { label: string; value: any; onChange: (v: string) => void; type?: string }) { return ( ) } function Toggle({ label, checked, onChange }: { label: string; checked: boolean; onChange: (v: boolean) => void }) { return ( ) }