39 lines
No EOL
1.2 KiB
TypeScript
39 lines
No EOL
1.2 KiB
TypeScript
import CardWrapper from "@/app/ui/dashboard/cards";
|
|
import { Card } from "@/app/ui/dashboard/cards";
|
|
import RevenueChart from "@/app/ui/dashboard/revenue-chart";
|
|
import LatestInvoices from "@/app/ui/dashboard/latest-invoices";
|
|
import { lusitana } from "@/app/ui/fonts";
|
|
import { Suspense } from "react";
|
|
import {
|
|
RevenueChartSkeleton,
|
|
LatestInvoicesSkeleton,
|
|
CardsSkeleton,
|
|
} from "@/app/ui/skeletons";
|
|
import { Metadata } from 'next';
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'Dashboard | Acme Dashboard',
|
|
};
|
|
|
|
export default async function Page() {
|
|
return (
|
|
<main>
|
|
<h1 className={`${lusitana.className} mb-4 text-xl mb:text-2xl`}>
|
|
Dashboard
|
|
</h1>
|
|
<div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-4">
|
|
<Suspense fallback={<CardsSkeleton />}>
|
|
<CardWrapper />
|
|
</Suspense>
|
|
</div>
|
|
<div className="mt-6 grid grid-cols-1 gap-6 md:grid-cols-4 lg:grid-cols-8">
|
|
<Suspense fallback={<RevenueChartSkeleton />}>
|
|
<RevenueChart />
|
|
</Suspense>
|
|
<Suspense fallback={<LatestInvoicesSkeleton />}>
|
|
<LatestInvoices />
|
|
</Suspense>
|
|
</div>
|
|
</main>
|
|
);
|
|
} |