'use client' import React, { useEffect, useState } from 'react' import { AlertTriangle, Loader2 } from 'lucide-react' import type { EditTenantForm, TenantOverview } from '../_types' import { STATUS_OPTIONS } from './constants' import { apiFetch } from './helpers' import { Modal } from './Modal' export function EditTenantModal({ open, onClose, tenant, onUpdated, }: { open: boolean onClose: () => void tenant: TenantOverview | null onUpdated: () => void }) { const [form, setForm] = useState({ name: '', max_users: 100, llm_quota_monthly: 10000, status: 'active', }) const [saving, setSaving] = useState(false) const [error, setError] = useState(null) useEffect(() => { if (tenant) { setForm({ name: tenant.name, max_users: tenant.max_users, llm_quota_monthly: tenant.llm_quota_monthly, status: tenant.status, }) setError(null) } }, [tenant]) const isValid = form.name.trim().length >= 2 const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!isValid || !tenant) return setSaving(true) setError(null) try { await apiFetch(`/tenants/${tenant.id}`, { method: 'PUT', body: JSON.stringify({ name: form.name.trim(), max_users: form.max_users, llm_quota_monthly: form.llm_quota_monthly, status: form.status, }), }) onUpdated() onClose() } catch (err) { setError(err instanceof Error ? err.message : 'Fehler beim Aktualisieren') } finally { setSaving(false) } } return (
{error && (
{error}
)}
setForm((prev) => ({ ...prev, name: e.target.value }))} className="w-full px-3 py-2 border border-slate-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" />
setForm((prev) => ({ ...prev, max_users: parseInt(e.target.value) || 0 }))} min={1} className="w-full px-3 py-2 border border-slate-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" />
setForm((prev) => ({ ...prev, llm_quota_monthly: parseInt(e.target.value) || 0 }))} min={0} step={1000} className="w-full px-3 py-2 border border-slate-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" />
) }