diff --git a/app/admin/dashboard.tsx b/app/admin/dashboard.tsx index 047b49f97..638ba04eb 100644 --- a/app/admin/dashboard.tsx +++ b/app/admin/dashboard.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useActionState } from 'react'; +import { useState, useTransition } from 'react'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Trash2, Loader2 } from 'lucide-react'; @@ -37,14 +37,72 @@ function DashboardHeader() { ); } +function TenantCard({ + tenant, + onDelete +}: { + tenant: Tenant; + onDelete: (result: DeleteState) => void; +}) { + const [isPending, startTransition] = useTransition(); + + const handleDelete = () => { + startTransition(async () => { + const formData = new FormData(); + formData.append('subdomain', tenant.subdomain); + const result = await deleteSubdomainAction({}, formData); + onDelete(result); + }); + }; + + return ( + + +
+ {tenant.subdomain} + +
+
+ +
+
{tenant.emoji}
+
+ Created: {new Date(tenant.createdAt).toLocaleDateString()} +
+
+
+ + Visit subdomain → + +
+
+
+ ); +} + function TenantGrid({ tenants, - action, - isPending + onDelete }: { tenants: Tenant[]; - action: (formData: FormData) => void; - isPending: boolean; + onDelete: (result: DeleteState) => void; }) { if (tenants.length === 0) { return ( @@ -59,76 +117,34 @@ function TenantGrid({ return (
{tenants.map((tenant) => ( - - -
- {tenant.subdomain} -
- - -
-
-
- -
-
{tenant.emoji}
-
- Created: {new Date(tenant.createdAt).toLocaleDateString()} -
-
-
- - Visit subdomain → - -
-
-
+ ))}
); } export function AdminDashboard({ tenants }: { tenants: Tenant[] }) { - const [state, action, isPending] = useActionState( - deleteSubdomainAction, - {} - ); + const [message, setMessage] = useState({}); + + const handleDelete = (result: DeleteState) => { + setMessage(result); + setTimeout(() => setMessage({}), 3000); + }; return (
- + - {state.error && ( + {message.error && (
- {state.error} + {message.error}
)} - {state.success && ( + {message.success && (
- {state.success} + {message.success}
)}