Recette : Tableau de bord personnalisé
Créez une vue de tableau de bord personnalisée qui affiche les analyses à côté de votre panneau d’administration.
Créer le composant de tableau de bord
Section intitulée « Créer le composant de tableau de bord »import { useRebaseContext } from "@rebasepro/core";import { useEffect, useState } from "react";
function DashboardView() { const context = useRebaseContext(); const [stats, setStats] = useState({ totalOrders: 0, totalRevenue: 0, activeProducts: 0, recentOrders: [] });
useEffect(() => { async function loadStats() { // Use the data source to fetch aggregate data const orders = await context.dataSource.fetchCollection({ path: "orders", collection: ordersCollection, limit: 1000 });
const products = await context.dataSource.fetchCollection({ path: "products", collection: productsCollection, filter: { active: ["==", true] } });
setStats({ totalOrders: orders.length, totalRevenue: orders.reduce((sum, o) => sum + (o.values.total ?? 0), 0), activeProducts: products.length, recentOrders: orders.slice(0, 5) }); } loadStats(); }, []);
return ( <div className="p-8"> <h1 className="text-2xl font-bold mb-6">Dashboard</h1> <div className="grid grid-cols-3 gap-4 mb-8"> <StatCard title="Total Orders" value={stats.totalOrders} /> <StatCard title="Revenue" value={`$${stats.totalRevenue.toFixed(2)}`} /> <StatCard title="Active Products" value={stats.activeProducts} /> </div> <h2 className="text-lg font-semibold mb-4">Recent Orders</h2> <ul> {stats.recentOrders.map(order => ( <li key={order.id}> Order #{order.id} — ${order.values.total} </li> ))} </ul> </div> );}
function StatCard({ title, value }: { title: string; value: string | number }) { return ( <div className="bg-surface-100 dark:bg-surface-800 rounded-lg p-6"> <p className="text-sm text-surface-500">{title}</p> <p className="text-3xl font-bold">{value}</p> </div> );}Enregistrer en tant que vue personnalisée
Section intitulée « Enregistrer en tant que vue personnalisée »const views: CMSView[] = [ { slug: "dashboard", name: "Dashboard", icon: "dashboard", group: "Analytics", view: <DashboardView /> }];Transmettez-le au contrôleur de navigation :
const navigationStateController = useBuildNavigationStateController({ views, collections: () => collections, // ...});Le tableau de bord apparaît maintenant dans la barre latérale sous “Analytics” et est accessible à /dashboard.
Ajouter des graphiques
Section intitulée « Ajouter des graphiques »Installez une bibliothèque de graphiques :
pnpm add rechartsUtilisez-le ensuite dans votre tableau de bord :
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip } from "recharts";
function RevenueChart({ data }) { return ( <LineChart width={600} height={300} data={data}> <CartesianGrid strokeDasharray="3 3" /> <XAxis dataKey="date" /> <YAxis /> <Tooltip /> <Line type="monotone" dataKey="revenue" stroke="#8884d8" /> </LineChart> );}Prochaines étapes
Section intitulée « Prochaines étapes »- Vues personnalisées — Aperçu du frontend
- Référence des hooks — Hooks disponibles