"use client" import { useState, useEffect } from "react" import Link from "next/link" import { supabase } from "@/lib/supabase" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Building2, ArrowLeft, Plus, Loader2 } from "lucide-react" interface Business { business_id: number name: string slug: string created_at: string } async function getAuthHeaders(): Promise { const { data: { session }, } = await supabase.auth.getSession() const headers: HeadersInit = { "Content-Type": "application/json" } if (session?.access_token) { (headers as Record)["Authorization"] = `Bearer ${session.access_token}` } return headers } export default function AdminBusinessesPage() { const [list, setList] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState("") const [createOpen, setCreateOpen] = useState(false) const [createName, setCreateName] = useState("") const [createSubmitting, setCreateSubmitting] = useState(false) const load = async () => { setLoading(true) setError("") try { const res = await fetch("/api/admin/businesses", { headers: await getAuthHeaders(), }) if (!res.ok) { const data = await res.json().catch(() => ({})) throw new Error(data?.error || res.statusText) } const data = await res.json() setList(data) } catch (e) { setError(e instanceof Error ? e.message : "Failed to load businesses") setList([]) } finally { setLoading(false) } } useEffect(() => { load() }, []) const handleCreate = async (e: React.FormEvent) => { e.preventDefault() if (!createName.trim()) return setCreateSubmitting(true) try { const res = await fetch("/api/admin/businesses", { method: "POST", headers: await getAuthHeaders(), body: JSON.stringify({ name: createName.trim() }), }) if (!res.ok) { const data = await res.json().catch(() => ({})) throw new Error(data?.error || res.statusText) } setCreateOpen(false) setCreateName("") load() } catch (e) { setError(e instanceof Error ? e.message : "Failed to create business") } finally { setCreateSubmitting(false) } } return (

Businesses

Manage businesses and view data by business.

{error && (
{error}
)} All businesses Create and list businesses. Use Authorizations to assign users. {loading ? (
) : list.length === 0 ? (

No businesses yet. Add one to get started.

) : (
    {list.map((b) => (
  • {b.name} ({b.slug})
    ID: {b.business_id}
  • ))}
)}
Add business Create a new business. Slug is generated from the name.
setCreateName(e.target.value)} placeholder="Acme Inc" disabled={createSubmitting} />
) }