import { ChangeEvent, ReactElement } from "react"; import Head from "next/head"; import Link from "next/link"; import { uploadDocument } from "@documenso/features"; import { getDocumentsForUserFromToken } from "@documenso/lib/query"; import { getUserFromToken } from "@documenso/lib/server"; import Layout from "../components/layout"; import type { NextPageWithLayout } from "./_app"; import { CheckBadgeIcon, DocumentIcon, ExclamationTriangleIcon, UsersIcon, } from "@heroicons/react/24/outline"; import { DocumentStatus, Document as PrismaDocument, SendStatus, SigningStatus, } from "@prisma/client"; import { truncate } from "fs"; import { Tooltip as ReactTooltip } from "react-tooltip"; import { useSubscription } from "@documenso/lib/stripe"; type FormValues = { document: File; }; const DashboardPage: NextPageWithLayout = (props: any) => { const { hasSubscription } = useSubscription(); const stats = [ { name: "Draft", stat: "0", icon: DocumentIcon, link: "/documents?filter=DRAFT", }, { name: "Waiting for others", stat: "0", icon: UsersIcon, link: "/documents?filter=PENDING", }, { name: "Completed", stat: "0", icon: CheckBadgeIcon, link: "/documents?filter=COMPLETED", }, ]; return ( <> Dashboard | Documenso

Dashboard

{stats.map((item) => (
{item.name}
{getStat(item.name, props)}
))}
{ uploadDocument(event); }} hidden />
{ if (hasSubscription) { document?.getElementById("fileUploadHelper")?.click(); } }} aria-disabled={!hasSubscription} className="group hover:border-neon-600 duration-200 relative block w-full cursor-pointer rounded-lg border-2 border-dashed border-gray-300 p-12 text-center focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 aria-disabled:opacity-50 aria-disabled:pointer-events-none"> Add a new PDF document.
); }; DashboardPage.getLayout = function getLayout(page: ReactElement) { return {page}; }; function getStat(name: string, props: any) { if (name === "Draft") return props.dashboard.drafts; if (name === "Waiting for others") return props.dashboard.waiting; if (name === "Completed") return props.dashboard.completed; return 0; } export async function getServerSideProps(context: any) { const user = await getUserFromToken(context.req, context.res); if (!user) return { redirect: { destination: "/login", permanent: false, }, }; const documents: any[] = await getDocumentsForUserFromToken(context); const drafts: PrismaDocument[] = documents.filter((d) => d.status === DocumentStatus.DRAFT); const waiting: any[] = documents.filter( (e) => e.Recipient.length > 0 && e.Recipient.some((r: any) => r.sendStatus === SendStatus.SENT) && e.Recipient.some((r: any) => r.signingStatus === SigningStatus.NOT_SIGNED) ); const completed: PrismaDocument[] = documents.filter( (d) => d.status === DocumentStatus.COMPLETED ); return { props: { dashboard: { drafts: drafts.length, waiting: waiting.length, completed: completed.length, }, }, }; } export default DashboardPage;