'use client' import React, { useState } from 'react' import { AlertTriangle, Loader2 } from 'lucide-react' import type { CreateTenantForm } from '../_types' import { EMPTY_CREATE_FORM } from './constants' import { apiFetch, slugify } from './helpers' import { Modal } from './Modal' export function CreateTenantModal({ open, onClose, onCreated, }: { open: boolean onClose: () => void onCreated: () => void }) { const [form, setForm] = useState({ ...EMPTY_CREATE_FORM }) const [saving, setSaving] = useState(false) const [error, setError] = useState(null) const [slugManual, setSlugManual] = useState(false) const handleNameChange = (name: string) => { setForm((prev) => ({ ...prev, name, slug: slugManual ? prev.slug : slugify(name), })) } const handleSlugChange = (slug: string) => { setSlugManual(true) setForm((prev) => ({ ...prev, slug: slugify(slug) })) } const isValid = form.name.trim().length >= 2 && form.slug.trim().length >= 2 const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!isValid) return setSaving(true) setError(null) try { await apiFetch('/tenants', { method: 'POST', body: JSON.stringify({ name: form.name.trim(), slug: form.slug.trim(), max_users: form.max_users, llm_quota_monthly: form.llm_quota_monthly, }), }) setForm({ ...EMPTY_CREATE_FORM }) setSlugManual(false) onCreated() onClose() } catch (err) { setError(err instanceof Error ? err.message : 'Fehler beim Erstellen') } finally { setSaving(false) } } const handleClose = () => { setForm({ ...EMPTY_CREATE_FORM }) setSlugManual(false) setError(null) onClose() } return (
{error && (
{error}
)}
handleNameChange(e.target.value)} placeholder="z.B. Musterfirma GmbH" 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" autoFocus />
handleSlugChange(e.target.value)} placeholder="musterfirma-gmbh" className="w-full px-3 py-2 border border-slate-300 rounded-lg text-sm font-mono focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" />

Kleinbuchstaben, keine Leerzeichen. Wird automatisch aus dem Namen generiert.

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" />
) }