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()}
+
+
+
+
+
+ );
+}
+
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()}
-
-
-
-
-
+
))}
);
}
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}
)}