diff --git a/apps/web/pages/api/documents/index.ts b/apps/web/pages/api/documents/index.ts index 7bf97206a..b35c97391 100644 --- a/apps/web/pages/api/documents/index.ts +++ b/apps/web/pages/api/documents/index.ts @@ -2,8 +2,8 @@ import { defaultHandler, defaultResponder } from "@documenso/lib/server"; import prisma from "@documenso/prisma"; import { NextApiRequest, NextApiResponse } from "next"; import { getUserFromToken } from "@documenso/lib/server"; -import formidable, { Files } from "formidable"; -import { getToken } from "next-auth/jwt"; +import formidable from "formidable"; +import { getDocumentsForUserFromToken } from "@documenso/lib/query"; export const config = { api: { @@ -49,17 +49,7 @@ async function getHandler(req: NextApiRequest, res: NextApiResponse) { let user = await getUserFromToken(req, res); if (!user) return; - const documents = await prisma.document.findMany({ - where: { - userId: user?.id, - }, - select: { - id: true, - title: true, - status: true, - Recipient: true, - }, - }); + const documents = await getDocumentsForUserFromToken({ req: req, res: res }); return res.status(200).json(documents); } diff --git a/apps/web/pages/dashboard.tsx b/apps/web/pages/dashboard.tsx index ae3b842d4..d83cea8d6 100644 --- a/apps/web/pages/dashboard.tsx +++ b/apps/web/pages/dashboard.tsx @@ -1,8 +1,6 @@ -import { useSession } from "next-auth/react"; import Head from "next/head"; -import { ReactElement, useEffect, useState } from "react"; +import { ReactElement } from "react"; import Layout from "../components/layout"; -import Settings from "../components/settings"; import Link from "next/link"; import type { NextPageWithLayout } from "./_app"; import { @@ -13,20 +11,16 @@ import { SunIcon, XCircleIcon, } from "@heroicons/react/24/outline"; -import { FormProvider, useForm } from "react-hook-form"; -import Router from "next/router"; -import { NEXT_PUBLIC_WEBAPP_URL } from "@documenso/lib"; -import toast from "react-hot-toast"; import { uploadDocument } from "@documenso/features"; import prisma from "@documenso/prisma"; import { ReadStatus, SendStatus, - SigningStatus, DocumentStatus, Document as PrismaDocument, } from "@prisma/client"; import { getUserFromToken } from "@documenso/lib/server"; +import { getDocumentsForUserFromToken } from "@documenso/lib/query"; type FormValues = { document: File; @@ -160,11 +154,9 @@ export async function getServerSideProps(context: any) { // todo optimize querys // todo no intersection groups - const documents: PrismaDocument[] = await prisma.document.findMany({ - where: { - userId: user.id, - }, - }); + const documents: PrismaDocument[] = await getDocumentsForUserFromToken( + context + ); const drafts: PrismaDocument[] = documents.filter( (d) => d.status === DocumentStatus.DRAFT diff --git a/apps/web/pages/documents.tsx b/apps/web/pages/documents.tsx index 6b5a9eacb..6e4d7062b 100644 --- a/apps/web/pages/documents.tsx +++ b/apps/web/pages/documents.tsx @@ -1,5 +1,4 @@ -import { useSession } from "next-auth/react"; -import { ReactElement, useEffect, useState } from "react"; +import { ReactElement, useState } from "react"; import Layout from "../components/layout"; import type { NextPageWithLayout } from "./_app"; import Head from "next/head"; @@ -15,15 +14,12 @@ import { useRouter } from "next/router"; import { uploadDocument } from "@documenso/features"; import { DocumentStatus } from "@prisma/client"; import { Tooltip as ReactTooltip } from "react-tooltip"; +import { getDocumentsForUserFromToken } from "@documenso/lib/query"; -const DocumentsPage: NextPageWithLayout = (req, res) => { +const DocumentsPage: NextPageWithLayout = (props: any) => { const router = useRouter(); - const [documents = [], setDocuments] = useState([]); - const [loading, setLoading] = useState(true); - - useEffect(() => { - getDocuments(); - }, []); + const [documents = [], setDocuments] = useState(props.documents); + const [loading, setLoading] = useState(false); const getDocuments = async () => { if (!documents.length) setLoading(true); @@ -279,6 +275,14 @@ const DocumentsPage: NextPageWithLayout = (req, res) => { ); }; +export async function getServerSideProps(context: any) { + return { + props: { + documents: await getDocumentsForUserFromToken(context), + }, + }; +} + function formatDocumentStatus(status: DocumentStatus) { switch (status) { case DocumentStatus.DRAFT: diff --git a/packages/lib/query/getDocumentsForUserFromToken.ts b/packages/lib/query/getDocumentsForUserFromToken.ts new file mode 100644 index 000000000..213fad5d3 --- /dev/null +++ b/packages/lib/query/getDocumentsForUserFromToken.ts @@ -0,0 +1,21 @@ +import { getUserFromToken } from "@documenso/lib/server"; +import prisma from "@documenso/prisma"; +import { Document as PrismaDocument } from "@prisma/client"; + +export const getDocumentsForUserFromToken = async ( + ssrContext: any +): Promise => { + const user = await getUserFromToken(ssrContext.req, ssrContext.res); + if (!user) return Promise.reject("Invalid user or token.s"); + + const documents: PrismaDocument[] = await prisma.document.findMany({ + where: { + userId: user.id, + }, + include: { + Recipient: true, + }, + }); + + return documents; +}; diff --git a/packages/lib/query/index.ts b/packages/lib/query/index.ts new file mode 100644 index 000000000..1d628bd96 --- /dev/null +++ b/packages/lib/query/index.ts @@ -0,0 +1 @@ +export { getDocumentsForUserFromToken } from "./getDocumentsForUserFromToken";