"use client"; import { FormEvent, useState } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { api, ApiError } from "@/lib/api"; import { AdminPageHeader, Banner, Button, TextField, cardClass } from "@/components/admin/controls"; function slugify(value: string): string { return value .trim() .toLowerCase() .replace(/\s+/g, "-") .replace(/[^a-z0-9-]/g, "") .replace(/-+/g, "-") .replace(/^-|-$/g, ""); } export default function NewTenantPage() { const router = useRouter(); const [name, setName] = useState(""); const [slug, setSlug] = useState(""); const [ownerUserId, setOwnerUserId] = useState(""); const [customDomain, setCustomDomain] = useState(""); const [slugTouched, setSlugTouched] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const handleNameChange = (value: string) => { setName(value); if (!slugTouched) setSlug(slugify(value)); }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setError(""); setLoading(true); let keepLoading = false; try { await api.platformTenants.create({ name, slug, owner_user_id: ownerUserId.trim() || null, custom_domain: customDomain.trim() || null, }); keepLoading = true; router.push("/admin/tenants"); } catch (err) { setError(err instanceof ApiError ? err.message : "ایجاد Tenant ناموفق بود"); } finally { if (!keepLoading) setLoading(false); } }; return (