/* ============================================================ KODILA — Admin: Temeljne postavitve ============================================================ */ const EMPTY_SETTINGS = { mail_host: '', mail_port: '', mail_encryption: 'tls', mail_username: '', mail_password: '', mail_from_address: '', mail_from_name: '', ai_model: '', ai_api_key: '', erp_api_endpoint: '', erp_api_key: '', company_city: '', company_country: '', }; function SecretField({ label, isSet, value, onChange, placeholder }) { const [editing, setEditing] = useState(false); if (!editing) { return (
{isSet ? 'Nastavljeno' : 'Ni nastavljeno'}
); } return (
onChange(e.target.value)} />
); } function TemeljnePostavitve() { const toast = useToast(); const [form, setForm] = useState(EMPTY_SETTINGS); const [flags, setFlags] = useState({ mail_password_set: false, ai_api_key_set: false, erp_api_key_set: false }); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [errors, setErrors] = useState({}); const [testTo, setTestTo] = useState(''); const [testing, setTesting] = useState(false); const set = (k, v) => setForm(s => ({ ...s, [k]: v })); const load = async () => { setLoading(true); const { ok, data } = await api('/api/settings'); if (ok) { const s = data.settings; setForm(f => ({ ...f, mail_host: s.mail_host || '', mail_port: s.mail_port || '', mail_encryption: s.mail_encryption || 'tls', mail_username: s.mail_username || '', mail_from_address: s.mail_from_address || '', mail_from_name: s.mail_from_name || '', ai_model: s.ai_model || '', erp_api_endpoint: s.erp_api_endpoint || '', company_city: s.company_city || '', company_country: s.company_country || '', })); setFlags({ mail_password_set: s.mail_password_set, ai_api_key_set: s.ai_api_key_set, erp_api_key_set: s.erp_api_key_set }); } else { toast('Nastavitev ni bilo mogoče naložiti.', 'alert'); } setLoading(false); }; useEffect(() => { load(); }, []); const save = async () => { setSaving(true); setErrors({}); const { ok, data } = await api('/api/settings', { method: 'PUT', body: JSON.stringify(form) }); setSaving(false); if (!ok) { setErrors(data.errors || {}); toast('Shranjevanje ni uspelo — preveri polja.', 'alert'); return; } toast('Nastavitve shranjene', 'check'); set('mail_password', ''); set('ai_api_key', ''); set('erp_api_key', ''); setFlags({ mail_password_set: data.settings.mail_password_set, ai_api_key_set: data.settings.ai_api_key_set, erp_api_key_set: data.settings.erp_api_key_set, }); }; const testMail = async () => { setTesting(true); const { ok, data } = await api('/api/settings/test-mail', { method: 'POST', body: JSON.stringify({ to: testTo || undefined }) }); setTesting(false); if (!ok) { const msg = data.error === 'mail_not_configured' ? 'Najprej vnesi in shrani strežnik ter vrata.' : (data.message || 'Pošiljanje testnega sporočila ni uspelo.'); toast(msg, 'alert'); return; } toast('Testno sporočilo poslano na ' + data.sent_to, 'send'); }; const fieldError = (field) => { const codes = errors[field]; return codes && codes.length ? codes.join(', ') : null; }; if (loading) return
Nalaganje …
; return (
Poštni strežnik (SMTP)
set('mail_host', e.target.value)} placeholder="smtp.kodila.si" />
set('mail_port', e.target.value)} placeholder="587" style={fieldError('mail_port') ? { borderColor: 'var(--danger)' } : null} />
set('mail_username', e.target.value)} placeholder="intranet@kodila.si" />
set('mail_password', v)} placeholder="Novo geslo strežnika" />
set('mail_from_address', e.target.value)} placeholder="intranet@kodila.si" style={fieldError('mail_from_address') ? { borderColor: 'var(--danger)' } : null} />
set('mail_from_name', e.target.value)} placeholder="KODILA Intranet" />
setTestTo(e.target.value)} placeholder="tvoj.naslov@kodila.si" />
AI model
set('ai_model', e.target.value)} placeholder="npr. claude-sonnet-4-6" />
set('ai_api_key', v)} placeholder="sk-…" />
ERP povezava
set('erp_api_endpoint', e.target.value)} placeholder="https://erp.kodila.si/api" style={fieldError('erp_api_endpoint') ? { borderColor: 'var(--danger)' } : null} />
set('erp_api_key', v)} placeholder="API ključ ERP sistema" />
Lokacija sedeža podjetja
set('company_city', e.target.value)} placeholder="npr. Murska Sobota" />
set('company_country', e.target.value)} placeholder="npr. Slovenija" />
); } Object.assign(window, { TemeljnePostavitve });