Initial SeConectai briefing system
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
import { auth } from "@/auth";
|
||||
import { sair } from "@/app/(auth)/actions";
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table";
|
||||
import { getAdminDashboard } from "@/lib/admin-service";
|
||||
import Link from "next/link";
|
||||
|
||||
export default async function AdminPage() {
|
||||
const session = await auth();
|
||||
const dashboard = await getAdminDashboard();
|
||||
const countByStatus = Object.fromEntries(
|
||||
dashboard.porStatus.map((item) => [item.status, item._count._all])
|
||||
);
|
||||
|
||||
return (
|
||||
<main className="container py-8">
|
||||
<header className="mb-8 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div>
|
||||
<h1 className="text-3xl font-semibold">Painel administrativo</h1>
|
||||
<p className="mt-2 text-sm text-muted-foreground">
|
||||
Area restrita para {session?.user.email}.
|
||||
</p>
|
||||
</div>
|
||||
<form action={sair}>
|
||||
<Button variant="outline" type="submit">
|
||||
Sair
|
||||
</Button>
|
||||
</form>
|
||||
</header>
|
||||
|
||||
<div className="mb-6 flex flex-wrap gap-3">
|
||||
<Button asChild variant="outline">
|
||||
<Link href="/admin/clientes">Clientes</Link>
|
||||
</Button>
|
||||
<Button asChild variant="outline">
|
||||
<Link href="/admin/perguntas">Perguntas</Link>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-4 md:grid-cols-4">
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle className="text-base">Briefings enviados</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<p className="text-3xl font-semibold">{countByStatus.ENVIADO ?? 0}</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle className="text-base">Em analise</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<p className="text-3xl font-semibold">{countByStatus.EM_ANALISE ?? 0}</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle className="text-base">Concluidos</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<p className="text-3xl font-semibold">{countByStatus.CONCLUIDO ?? 0}</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle className="text-base">Novos em 7 dias</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<p className="text-3xl font-semibold">{dashboard.novosUltimos7Dias}</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
<Card className="mt-6">
|
||||
<CardHeader>
|
||||
<CardTitle>Ultimos envios</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow>
|
||||
<TableHead>Briefing</TableHead>
|
||||
<TableHead>Cliente</TableHead>
|
||||
<TableHead>Status</TableHead>
|
||||
<TableHead>Enviado em</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{dashboard.ultimosEnvios.map((briefing) => (
|
||||
<TableRow key={briefing.id}>
|
||||
<TableCell>
|
||||
<Link className="font-medium text-primary hover:underline" href={`/admin/briefings/${briefing.id}`}>
|
||||
{briefing.titulo}
|
||||
</Link>
|
||||
</TableCell>
|
||||
<TableCell>{briefing.cliente.nomeCompleto}</TableCell>
|
||||
<TableCell><Badge variant="muted">{briefing.status}</Badge></TableCell>
|
||||
<TableCell>{briefing.enviadoEm?.toLocaleString("pt-BR")}</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user