Back to home
diff --git a/apps/web/pages/_app.tsx b/apps/web/pages/_app.tsx
index d9a50d762..80253bde5 100644
--- a/apps/web/pages/_app.tsx
+++ b/apps/web/pages/_app.tsx
@@ -1,13 +1,14 @@
-import "../styles/tailwind.css";
+import { ReactElement, ReactNode } from "react";
+import { NextPage } from "next";
+import type { AppProps } from "next/app";
import "../../../node_modules/placeholder-loading/src/scss/placeholder-loading.scss";
import "../../../node_modules/react-resizable/css/styles.css";
-import "react-tooltip/dist/react-tooltip.css";
-import { ReactElement, ReactNode } from "react";
-import type { AppProps } from "next/app";
-import { NextPage } from "next";
+import "../styles/tailwind.css";
import { SessionProvider } from "next-auth/react";
-export { coloredConsole } from "@documenso/lib";
import { Toaster } from "react-hot-toast";
+import "react-tooltip/dist/react-tooltip.css";
+
+export { coloredConsole } from "@documenso/lib";
export type NextPageWithLayout
= NextPage
& {
getLayout?: (page: ReactElement) => ReactNode;
@@ -17,10 +18,7 @@ type AppPropsWithLayout = AppProps & {
Component: NextPageWithLayout;
};
-export default function App({
- Component,
- pageProps: { session, ...pageProps },
-}: AppPropsWithLayout) {
+export default function App({ Component, pageProps: { session, ...pageProps } }: AppPropsWithLayout) {
const getLayout = Component.getLayout || ((page: any) => page);
return (
diff --git a/apps/web/pages/_document.jsx b/apps/web/pages/_document.jsx
index 4baf290c4..0058cd7bb 100644
--- a/apps/web/pages/_document.jsx
+++ b/apps/web/pages/_document.jsx
@@ -5,10 +5,7 @@ export default function Document(props) {
let pageProps = props.__NEXT_DATA__?.props?.pageProps;
return (
-
+
diff --git a/apps/web/pages/api/auth/[...nextauth].ts b/apps/web/pages/api/auth/[...nextauth].ts
index 16c98a352..b03575dd1 100644
--- a/apps/web/pages/api/auth/[...nextauth].ts
+++ b/apps/web/pages/api/auth/[...nextauth].ts
@@ -1,9 +1,9 @@
-import NextAuth, { Session } from "next-auth";
-import GitHubProvider from "next-auth/providers/github";
-import CredentialsProvider from "next-auth/providers/credentials";
import { ErrorCode } from "@documenso/lib/auth";
-import prisma from "@documenso/prisma";
import { verifyPassword } from "@documenso/lib/auth";
+import prisma from "@documenso/prisma";
+import NextAuth, { Session } from "next-auth";
+import CredentialsProvider from "next-auth/providers/credentials";
+import GitHubProvider from "next-auth/providers/github";
export default NextAuth({
secret: process.env.AUTH_SECRET,
@@ -27,8 +27,7 @@ export default NextAuth({
password: {
label: "Password",
type: "password",
- placeholder:
- "Select a password. Here is some inspiration: https://xkcd.com/936/",
+ placeholder: "Select a password. Here is some inspiration: https://xkcd.com/936/",
},
},
async authorize(credentials: any) {
@@ -57,10 +56,7 @@ export default NextAuth({
throw new Error(ErrorCode.UserMissingPassword);
}
- const isCorrectPassword = await verifyPassword(
- credentials.password,
- user.password
- );
+ const isCorrectPassword = await verifyPassword(credentials.password, user.password);
if (!isCorrectPassword) {
throw new Error(ErrorCode.IncorrectPassword);
diff --git a/apps/web/pages/api/auth/signup.ts b/apps/web/pages/api/auth/signup.ts
index 933747e3a..b82bf5ea2 100644
--- a/apps/web/pages/api/auth/signup.ts
+++ b/apps/web/pages/api/auth/signup.ts
@@ -1,9 +1,8 @@
-import { IdentityProvider } from "@prisma/client";
import { NextApiRequest, NextApiResponse } from "next";
-
-import prisma from "@documenso/prisma";
import { hashPassword } from "@documenso/lib/auth";
import { defaultHandler, defaultResponder } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
+import { IdentityProvider } from "@prisma/client";
async function postHandler(req: NextApiRequest, res: NextApiResponse) {
const { email, password, source } = req.body;
diff --git a/apps/web/pages/api/documents/[id].ts b/apps/web/pages/api/documents/[id].ts
index 500061921..93e976f5f 100644
--- a/apps/web/pages/api/documents/[id].ts
+++ b/apps/web/pages/api/documents/[id].ts
@@ -1,13 +1,9 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
-import { Document as PrismaDocument } from "@prisma/client";
import { getDocument } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
import { addDigitalSignature } from "@documenso/signing/addDigitalSignature";
+import { Document as PrismaDocument } from "@prisma/client";
async function getHandler(req: NextApiRequest, res: NextApiResponse) {
const { id: documentId } = req.query;
@@ -46,8 +42,7 @@ async function getHandler(req: NextApiRequest, res: NextApiResponse) {
document = await getDocument(+documentId, req, res);
}
- if (!document)
- res.status(404).end(`No document with id ${documentId} found.`);
+ if (!document) res.status(404).end(`No document with id ${documentId} found.`);
const signaturesCount = await prisma.signature.count({
where: {
@@ -61,18 +56,13 @@ async function getHandler(req: NextApiRequest, res: NextApiResponse) {
// No need to add a signature, if no one signed yet.
if (signaturesCount > 0) {
- signedDocumentAsBase64 = await addDigitalSignature(
- document?.document || ""
- );
+ signedDocumentAsBase64 = await addDigitalSignature(document?.document || "");
}
const buffer: Buffer = Buffer.from(signedDocumentAsBase64, "base64");
res.setHeader("Content-Type", "application/pdf");
res.setHeader("Content-Length", buffer.length);
- res.setHeader(
- "Content-Disposition",
- `attachment; filename=${document?.title}`
- );
+ res.setHeader("Content-Disposition", `attachment; filename=${document?.title}`);
return res.status(200).send(buffer);
}
diff --git a/apps/web/pages/api/documents/[id]/fields/[fid].ts b/apps/web/pages/api/documents/[id]/fields/[fid].ts
index 4f55a4d56..b847a379e 100644
--- a/apps/web/pages/api/documents/[id]/fields/[fid].ts
+++ b/apps/web/pages/api/documents/[id]/fields/[fid].ts
@@ -1,13 +1,9 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
-import short from "short-uuid";
-import { Document as PrismaDocument, FieldType } from "@prisma/client";
import { getDocument } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
+import { FieldType, Document as PrismaDocument } from "@prisma/client";
+import short from "short-uuid";
async function deleteHandler(req: NextApiRequest, res: NextApiResponse) {
const user = await getUserFromToken(req, res);
diff --git a/apps/web/pages/api/documents/[id]/fields/index.ts b/apps/web/pages/api/documents/[id]/fields/index.ts
index 861b4c672..5d2743b16 100644
--- a/apps/web/pages/api/documents/[id]/fields/index.ts
+++ b/apps/web/pages/api/documents/[id]/fields/index.ts
@@ -1,12 +1,8 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
-import { Document as PrismaDocument, FieldType } from "@prisma/client";
import { getDocument } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
+import { FieldType, Document as PrismaDocument } from "@prisma/client";
async function getHandler(req: NextApiRequest, res: NextApiResponse) {
const user = await getUserFromToken(req, res);
@@ -61,18 +57,14 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
});
if (!recipient || recipient?.documentId !== +documentId)
- return res
- .status(401)
- .send("Recipient does not have access to this document.");
+ return res.status(401).send("Recipient does not have access to this document.");
}
if (user) {
const document: PrismaDocument = await getDocument(+documentId, req, res);
// todo entity ownerships checks
if (document.userId !== user.id) {
- return res
- .status(401)
- .send("User does not have access to this document.");
+ return res.status(401).send("User does not have access to this document.");
}
}
diff --git a/apps/web/pages/api/documents/[id]/recipients/[rid].ts b/apps/web/pages/api/documents/[id]/recipients/[rid].ts
index 9b21708b2..dab82d077 100644
--- a/apps/web/pages/api/documents/[id]/recipients/[rid].ts
+++ b/apps/web/pages/api/documents/[id]/recipients/[rid].ts
@@ -1,13 +1,9 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
-import short from "short-uuid";
-import { Document as PrismaDocument } from "@prisma/client";
import { getDocument } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
+import { Document as PrismaDocument } from "@prisma/client";
+import short from "short-uuid";
async function deleteHandler(req: NextApiRequest, res: NextApiResponse) {
const user = await getUserFromToken(req, res);
diff --git a/apps/web/pages/api/documents/[id]/recipients/index.ts b/apps/web/pages/api/documents/[id]/recipients/index.ts
index f2243e7aa..0fa29549a 100644
--- a/apps/web/pages/api/documents/[id]/recipients/index.ts
+++ b/apps/web/pages/api/documents/[id]/recipients/index.ts
@@ -1,13 +1,9 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
-import short from "short-uuid";
-import { Document as PrismaDocument } from "@prisma/client";
import { getDocument } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
+import { Document as PrismaDocument } from "@prisma/client";
+import short from "short-uuid";
async function postHandler(req: NextApiRequest, res: NextApiResponse) {
const user = await getUserFromToken(req, res);
diff --git a/apps/web/pages/api/documents/[id]/send.ts b/apps/web/pages/api/documents/[id]/send.ts
index b5902c8ed..302e75001 100644
--- a/apps/web/pages/api/documents/[id]/send.ts
+++ b/apps/web/pages/api/documents/[id]/send.ts
@@ -1,12 +1,8 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
import { sendSigningRequest } from "@documenso/lib/mail";
import { getDocument } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
import { Document as PrismaDocument, SendStatus } from "@prisma/client";
async function postHandler(req: NextApiRequest, res: NextApiResponse) {
@@ -23,8 +19,7 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
const document: PrismaDocument = await getDocument(+documentId, req, res);
- if (!document)
- res.status(404).end(`No document with id ${documentId} found.`);
+ if (!document) res.status(404).end(`No document with id ${documentId} found.`);
let recipientCondition: any = {
documentId: +documentId,
diff --git a/apps/web/pages/api/documents/[id]/sign.ts b/apps/web/pages/api/documents/[id]/sign.ts
index e4d22487d..ef68e1a78 100644
--- a/apps/web/pages/api/documents/[id]/sign.ts
+++ b/apps/web/pages/api/documents/[id]/sign.ts
@@ -1,11 +1,11 @@
-import { defaultHandler, defaultResponder } from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
-import { SigningStatus, DocumentStatus } from "@prisma/client";
-import { getDocument } from "@documenso/lib/query";
-import { Document as PrismaDocument, FieldType } from "@prisma/client";
-import { insertImageInPDF, insertTextInPDF } from "@documenso/pdf";
import { sendSigningDoneMail } from "@documenso/lib/mail";
+import { getDocument } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder } from "@documenso/lib/server";
+import { insertImageInPDF, insertTextInPDF } from "@documenso/pdf";
+import prisma from "@documenso/prisma";
+import { DocumentStatus, SigningStatus } from "@prisma/client";
+import { FieldType, Document as PrismaDocument } from "@prisma/client";
async function postHandler(req: NextApiRequest, res: NextApiResponse) {
const { token: recipientToken } = req.query;
@@ -115,10 +115,7 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
},
data: {
document: documentWithInserts,
- status:
- unsignedRecipients.length > 0
- ? DocumentStatus.PENDING
- : DocumentStatus.COMPLETED,
+ status: unsignedRecipients.length > 0 ? DocumentStatus.PENDING : DocumentStatus.COMPLETED,
},
});
@@ -129,8 +126,7 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
});
document.document = documentWithInserts;
- if (documentOwner)
- await sendSigningDoneMail(recipient, document, documentOwner);
+ if (documentOwner) await sendSigningDoneMail(recipient, document, documentOwner);
}
return res.status(200).end();
@@ -139,9 +135,7 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
if (signedField?.Signature?.signatureImageAsBase64) {
documentWithInserts = await insertImageInPDF(
documentWithInserts,
- signedField.Signature
- ? signedField.Signature?.signatureImageAsBase64
- : "",
+ signedField.Signature ? signedField.Signature?.signatureImageAsBase64 : "",
signedField.positionX,
signedField.positionY,
signedField.page
@@ -169,12 +163,8 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
create: {
recipientId: recipient.id,
fieldId: signature.fieldId,
- signatureImageAsBase64: signature.signatureImage
- ? signature.signatureImage
- : null,
- typedSignature: signature.typedSignature
- ? signature.typedSignature
- : null,
+ signatureImageAsBase64: signature.signatureImage ? signature.signatureImage : null,
+ typedSignature: signature.typedSignature ? signature.typedSignature : null,
},
});
}
diff --git a/apps/web/pages/api/documents/index.ts b/apps/web/pages/api/documents/index.ts
index 5ff092d5d..2b5d96b32 100644
--- a/apps/web/pages/api/documents/index.ts
+++ b/apps/web/pages/api/documents/index.ts
@@ -1,9 +1,9 @@
-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 from "formidable";
import { getDocumentsForUserFromToken } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder } from "@documenso/lib/server";
+import { getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
+import formidable from "formidable";
export const config = {
api: {
diff --git a/apps/web/pages/api/health.ts b/apps/web/pages/api/health.ts
index 16432b87d..ac444c77f 100644
--- a/apps/web/pages/api/health.ts
+++ b/apps/web/pages/api/health.ts
@@ -1,5 +1,4 @@
import type { NextApiRequest, NextApiResponse } from "next";
-
import { defaultHandler, defaultResponder } from "@documenso/lib/server";
import prisma from "@documenso/prisma";
diff --git a/apps/web/pages/api/test-sign/[id].ts b/apps/web/pages/api/test-sign/[id].ts
index 55774fa05..4d1305525 100644
--- a/apps/web/pages/api/test-sign/[id].ts
+++ b/apps/web/pages/api/test-sign/[id].ts
@@ -1,13 +1,9 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
-import { Document as PrismaDocument } from "@prisma/client";
import { getDocument } from "@documenso/lib/query";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
import { addDigitalSignature } from "@documenso/signing/addDigitalSignature";
+import { Document as PrismaDocument } from "@prisma/client";
// todo remove before launch
@@ -17,10 +13,7 @@ async function getHandler(req: NextApiRequest, res: NextApiResponse) {
const signedDocument = await addDigitalSignature(document.document);
res.setHeader("Content-Type", "application/pdf");
res.setHeader("Content-Length", signedDocument.length);
- res.setHeader(
- "Content-Disposition",
- `attachment; filename=${document.title}`
- );
+ res.setHeader("Content-Disposition", `attachment; filename=${document.title}`);
return res.status(200).send(signedDocument);
}
diff --git a/apps/web/pages/api/users/index.ts b/apps/web/pages/api/users/index.ts
index 338243c04..654555a62 100644
--- a/apps/web/pages/api/users/index.ts
+++ b/apps/web/pages/api/users/index.ts
@@ -1,11 +1,6 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
-
import type { NextApiRequest, NextApiResponse } from "next";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
async function postHandler(req: NextApiRequest, res: NextApiResponse) {
const { method, body } = req;
diff --git a/apps/web/pages/api/users/me.ts b/apps/web/pages/api/users/me.ts
index e55c06ff7..7efce411d 100644
--- a/apps/web/pages/api/users/me.ts
+++ b/apps/web/pages/api/users/me.ts
@@ -1,11 +1,6 @@
-import {
- defaultHandler,
- defaultResponder,
- getUserFromToken,
-} from "@documenso/lib/server";
-import prisma from "@documenso/prisma";
-
import type { NextApiRequest, NextApiResponse } from "next";
+import { defaultHandler, defaultResponder, getUserFromToken } from "@documenso/lib/server";
+import prisma from "@documenso/prisma";
async function getHandler(req: NextApiRequest, res: NextApiResponse) {
const user = await getUserFromToken(req, res);
diff --git a/apps/web/pages/dashboard.tsx b/apps/web/pages/dashboard.tsx
index 54666b95e..6561873fd 100644
--- a/apps/web/pages/dashboard.tsx
+++ b/apps/web/pages/dashboard.tsx
@@ -1,7 +1,10 @@
-import Head from "next/head";
import { ReactElement } from "react";
-import Layout from "../components/layout";
+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,
@@ -9,15 +12,7 @@ import {
ExclamationTriangleIcon,
UsersIcon,
} from "@heroicons/react/24/outline";
-import { uploadDocument } from "@documenso/features";
-import {
- DocumentStatus,
- SendStatus,
- SigningStatus,
- Document as PrismaDocument,
-} from "@prisma/client";
-import { getUserFromToken } from "@documenso/lib/server";
-import { getDocumentsForUserFromToken } from "@documenso/lib/query";
+import { DocumentStatus, Document as PrismaDocument, SendStatus, SigningStatus } from "@prisma/client";
import { truncate } from "fs";
import { Tooltip as ReactTooltip } from "react-tooltip";
@@ -55,19 +50,16 @@ const DashboardPage: NextPageWithLayout = (props: any) => {
-
- Dashboard
-
+ Dashboard
-
+
{stats.map((item) => (
-
-
+
+
+ className="text-neon mr-3 inline h-5 w-5 flex-shrink-0 sm:h-6 sm:w-6"
+ aria-hidden="true">
{item.name}
@@ -92,25 +84,20 @@ const DashboardPage: NextPageWithLayout = (props: any) => {
onClick={() => {
document?.getElementById("fileUploadHelper")?.click();
}}
- className="relative block w-full p-12 text-center border-2 border-gray-300 border-dashed rounded-lg cursor-pointer hover:border-neon focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
- >
+ className="hover:border-neon 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-hidden="true">
-
+
Add a new PDF document.
@@ -147,9 +134,7 @@ export async function getServerSideProps(context: any) {
const documents: any[] = await getDocumentsForUserFromToken(context);
- const drafts: PrismaDocument[] = documents.filter(
- (d) => d.status === DocumentStatus.DRAFT
- );
+ const drafts: PrismaDocument[] = documents.filter((d) => d.status === DocumentStatus.DRAFT);
const waiting: any[] = documents.filter(
(e) =>
@@ -158,9 +143,7 @@ export async function getServerSideProps(context: any) {
e.Recipient.some((r: any) => r.signingStatus === SigningStatus.NOT_SIGNED)
);
- const completed: PrismaDocument[] = documents.filter(
- (d) => d.status === DocumentStatus.COMPLETED
- );
+ const completed: PrismaDocument[] = documents.filter((d) => d.status === DocumentStatus.COMPLETED);
return {
props: {
diff --git a/apps/web/pages/documents.tsx b/apps/web/pages/documents.tsx
index a9cd23690..4ad740b3f 100644
--- a/apps/web/pages/documents.tsx
+++ b/apps/web/pages/documents.tsx
@@ -1,7 +1,12 @@
import { ReactElement, useEffect, useState } from "react";
+import { NextPageContext } from "next";
+import Head from "next/head";
+import { useRouter } from "next/router";
+import { uploadDocument } from "@documenso/features";
+import { deleteDocument, getDocuments } from "@documenso/lib/api";
+import { Button, IconButton, SelectBox } from "@documenso/ui";
import Layout from "../components/layout";
import type { NextPageWithLayout } from "./_app";
-import Head from "next/head";
import {
ArrowDownTrayIcon,
CheckBadgeIcon,
@@ -13,12 +18,7 @@ import {
PlusIcon,
TrashIcon,
} from "@heroicons/react/24/outline";
-import { useRouter } from "next/router";
-import { uploadDocument } from "@documenso/features";
import { DocumentStatus } from "@prisma/client";
-import { Button, IconButton, SelectBox } from "@documenso/ui";
-import { NextPageContext } from "next";
-import { deleteDocument, getDocuments } from "@documenso/lib/api";
import { Tooltip as ReactTooltip } from "react-tooltip";
const DocumentsPage: NextPageWithLayout = (props: any) => {
@@ -42,12 +42,8 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
{ label: "Last 12 months", value: 366 },
];
- const [selectedStatusFilter, setSelectedStatusFilter] = useState(
- statusFilters[0]
- );
- const [selectedCreatedFilter, setSelectedCreatedFilter] = useState(
- createdFilter[0]
- );
+ const [selectedStatusFilter, setSelectedStatusFilter] = useState(statusFilters[0]);
+ const [selectedCreatedFilter, setSelectedCreatedFilter] = useState(createdFilter[0]);
const loadDocuments = async () => {
if (!documents.length) setLoading(true);
@@ -62,9 +58,7 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
useEffect(() => {
loadDocuments().finally(() => {
setSelectedStatusFilter(
- statusFilters.filter(
- (status) => status.value === props.filter.toUpperCase()
- )[0]
+ statusFilters.filter((status) => status.value === props.filter.toUpperCase())[0]
);
});
}, []);
@@ -79,9 +73,7 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
function filterDocumentes(documents: []): any {
let filteredDocuments = documents.filter(
- (d: any) =>
- d.status === selectedStatusFilter.value ||
- selectedStatusFilter.value === "ALL"
+ (d: any) => d.status === selectedStatusFilter.value || selectedStatusFilter.value === "ALL"
);
filteredDocuments = filteredDocuments.filter((document: any) =>
@@ -98,9 +90,7 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
const today: Date = new Date(); // Today's date
// Calculate the difference between the two dates in days
- const diffInDays = Math.floor(
- (today.getTime() - documentDate.getTime()) / millisecondsInDay
- );
+ const diffInDays = Math.floor((today.getTime() - documentDate.getTime()) / millisecondsInDay);
console.log(diffInDays);
@@ -114,12 +104,10 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
Documents | Documenso
-
+
-
- Documents
-
+ Documents
@@ -127,27 +115,24 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
icon={DocumentPlusIcon}
onClick={() => {
document?.getElementById("fileUploadHelper")?.click();
- }}
- >
+ }}>
Add Document
-
- {filteredDocuments.length != 1
- ? filteredDocuments.length + " Documents"
- : "1 Document"}
+
+ {filteredDocuments.length != 1 ? filteredDocuments.length + " Documents" : "1 Document"}
{
-
+
+ hidden={!documents.length || loading}>
-
+
Title
-
+
Recipients
-
+
Status
-
+
Created
-
+
Delete
@@ -220,9 +186,8 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
{filteredDocuments.map((document: any, index: number) => (
showDocument(document.id)}
- >
+ className="cursor-pointer hover:bg-gray-100"
+ onClick={(event) => showDocument(document.id)}>
{document.title || "#" + document.id}
@@ -232,43 +197,32 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
{item.sendStatus === "NOT_SENT" ? (
- {item.name
- ? item.name + " <" + item.email + ">"
- : item.email}
+ className="inline-block flex-shrink-0 rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800">
+ {item.name ? item.name + " <" + item.email + ">" : item.email}
) : (
""
)}
- {item.sendStatus === "SENT" &&
- item.readStatus !== "OPENED" ? (
+ {item.sendStatus === "SENT" && item.readStatus !== "OPENED" ? (
-
- {item.name
- ? item.name + " <" + item.email + ">"
- : item.email}
+ className="inline-block flex-shrink-0 rounded-full bg-yellow-200 px-2 py-0.5 text-xs font-medium text-green-800">
+
+ {item.name ? item.name + " <" + item.email + ">" : item.email}
) : (
""
)}
- {item.readStatus === "OPENED" &&
- item.signingStatus === "NOT_SIGNED" ? (
+ {item.readStatus === "OPENED" && item.signingStatus === "NOT_SIGNED" ? (
-
-
- {item.name
- ? item.name + " <" + item.email + ">"
- : item.email}
+ className="inline-block flex-shrink-0 rounded-full bg-yellow-200 px-2 py-0.5 text-xs font-medium text-green-800">
+
+
+ {item.name ? item.name + " <" + item.email + ">" : item.email}
) : (
@@ -277,8 +231,7 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
{item.signingStatus === "SIGNED" ? (
- {" "}
- {item.email}
+ {item.email}
) : (
@@ -307,9 +260,8 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
{formatDocumentStatus(document.status)}
- {document.Recipient.filter(
- (r: any) => r.signingStatus === "SIGNED"
- ).length || 0}
+ {document.Recipient.filter((r: any) => r.signingStatus === "SIGNED").length ||
+ 0}
/{document.Recipient.length || 0}
@@ -342,30 +294,20 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
onClick={(event: any) => {
event.preventDefault();
event.stopPropagation();
- if (
- confirm(
- "Are you sure you want to delete this document"
- )
- ) {
+ if (confirm("Are you sure you want to delete this document")) {
const documentsWithoutIndex = [...documents];
- const removedItem: any =
- documentsWithoutIndex.splice(index, 1);
+ const removedItem: any = documentsWithoutIndex.splice(index, 1);
setDocuments(documentsWithoutIndex);
deleteDocument(document.id)
.catch((err) => {
- documentsWithoutIndex.splice(
- index,
- 0,
- removedItem
- );
+ documentsWithoutIndex.splice(index, 0, removedItem);
setDocuments(documentsWithoutIndex);
})
.then(() => {
loadDocuments();
});
}
- }}
- >
+ }}>
, {document.name}
@@ -374,29 +316,21 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
-
0}
- className="mx-auto w-fit mt-12 p-3"
- >
-
Nothing
- here. Maybe try a different filter.
+
0} className="mx-auto mt-12 w-fit p-3">
+ Nothing here. Maybe try a different
+ filter.
-
0 || loading}
- >
+
0 || loading}>
+ aria-hidden="true">
{
No documents
-
- Get started by adding a document. Any PDF will do.
-
+
Get started by adding a document. Any PDF will do.
{
document?.getElementById("fileUploadHelper")?.click();
- }}
- >
+ }}>
Add Document
{
/>
-
+
>
);
};
diff --git a/apps/web/pages/documents/[id]/index.tsx b/apps/web/pages/documents/[id]/index.tsx
index 3076fc632..5402aadfc 100644
--- a/apps/web/pages/documents/[id]/index.tsx
+++ b/apps/web/pages/documents/[id]/index.tsx
@@ -1,20 +1,16 @@
import { ReactElement } from "react";
-import Layout from "../../../components/layout";
-import { NextPageWithLayout } from "../../_app";
+import Link from "next/link";
import { useRouter } from "next/router";
import { NEXT_PUBLIC_WEBAPP_URL } from "@documenso/lib";
-import { getUserFromToken } from "@documenso/lib/server";
-import Link from "next/link";
-import { DocumentStatus } from "@prisma/client";
-import {
- InformationCircleIcon,
- PaperAirplaneIcon,
- UsersIcon,
-} from "@heroicons/react/24/outline";
import { getDocument } from "@documenso/lib/query";
-import { Document as PrismaDocument } from "@prisma/client";
-import { Button, Breadcrumb } from "@documenso/ui";
+import { getUserFromToken } from "@documenso/lib/server";
+import { Breadcrumb, Button } from "@documenso/ui";
import PDFEditor from "../../../components/editor/pdf-editor";
+import Layout from "../../../components/layout";
+import { NextPageWithLayout } from "../../_app";
+import { InformationCircleIcon, PaperAirplaneIcon, UsersIcon } from "@heroicons/react/24/outline";
+import { DocumentStatus } from "@prisma/client";
+import { Document as PrismaDocument } from "@prisma/client";
const DocumentsDetailPage: NextPageWithLayout = (props: any) => {
const router = useRouter();
@@ -32,8 +28,7 @@ const DocumentsDetailPage: NextPageWithLayout = (props: any) => {
},
{
title: props.document.title,
- href:
- NEXT_PUBLIC_WEBAPP_URL + "/documents/" + props.document.id,
+ href: NEXT_PUBLIC_WEBAPP_URL + "/documents/" + props.document.id,
},
]}
/>
@@ -45,10 +40,7 @@ const DocumentsDetailPage: NextPageWithLayout = (props: any) => {
-
+
{props?.document?.Recipient?.length} Recipients
@@ -67,21 +59,11 @@ const DocumentsDetailPage: NextPageWithLayout = (props: any) => {
{
- if (
- confirm(
- `Send document out to ${props?.document?.Recipient?.length} recipients?`
- )
- ) {
+ if (confirm(`Send document out to ${props?.document?.Recipient?.length} recipients?`)) {
}
- }}
- >
+ }}>
Prepare to Send
@@ -120,11 +102,7 @@ export async function getServerSideProps(context: any) {
const { id: documentId } = context.query;
try {
- const document: PrismaDocument = await getDocument(
- +documentId,
- context.req,
- context.res
- );
+ const document: PrismaDocument = await getDocument(+documentId, context.req, context.res);
return {
props: {
diff --git a/apps/web/pages/documents/[id]/recipients.tsx b/apps/web/pages/documents/[id]/recipients.tsx
index 4164e4367..6b7af6a56 100644
--- a/apps/web/pages/documents/[id]/recipients.tsx
+++ b/apps/web/pages/documents/[id]/recipients.tsx
@@ -1,25 +1,24 @@
-import Head from "next/head";
import { ReactElement, useRef, useState } from "react";
+import Head from "next/head";
+import { NEXT_PUBLIC_WEBAPP_URL, classNames } from "@documenso/lib";
+import { createOrUpdateRecipient, deleteRecipient, sendSigningRequests } from "@documenso/lib/api";
+import { getDocument } from "@documenso/lib/query";
+import { getUserFromToken } from "@documenso/lib/server";
+import { Breadcrumb, Button, Dialog, IconButton } from "@documenso/ui";
import Layout from "../../../components/layout";
import { NextPageWithLayout } from "../../_app";
-import { classNames, NEXT_PUBLIC_WEBAPP_URL } from "@documenso/lib";
import {
ArrowDownTrayIcon,
CheckBadgeIcon,
CheckIcon,
+ EnvelopeIcon,
PaperAirplaneIcon,
PencilSquareIcon,
TrashIcon,
UserPlusIcon,
- EnvelopeIcon,
XMarkIcon,
} from "@heroicons/react/24/outline";
-import { getUserFromToken } from "@documenso/lib/server";
-import { getDocument } from "@documenso/lib/query";
-import { Document as PrismaDocument, DocumentStatus } from "@prisma/client";
-import { Breadcrumb, Button, Dialog, IconButton } from "@documenso/ui";
-import { createOrUpdateRecipient, deleteRecipient, sendSigningRequests } from "@documenso/lib/api";
-
+import { DocumentStatus, Document as PrismaDocument } from "@prisma/client";
import { FormProvider, useFieldArray, useForm, useWatch } from "react-hook-form";
export type FormValues = {
@@ -71,23 +70,22 @@ const RecipientsPage: NextPageWithLayout = (props: any) => {
{title}
-
+
-
+
{props.document.title}
-
+
+ href={"/api/documents/" + props.document.id}>
Download
{
disabled={props.document.status === DocumentStatus.COMPLETED}
color={props.document.status === DocumentStatus.COMPLETED ? "primary" : "secondary"}
className="mr-2"
- href={breadcrumbItems[1].href}
- >
+ href={breadcrumbItems[1].href}>
Edit Document
{
}}
disabled={
(formValues.length || 0) === 0 ||
- !formValues.some(
- (r: any) => r.email && !hasEmailError(r) && r.sendStatus === "NOT_SENT"
- ) ||
+ !formValues.some((r: any) => r.email && !hasEmailError(r) && r.sendStatus === "NOT_SENT") ||
loading
- }
- >
+ }>
Send
-
-
+
+
Signers
-
- The people who will sign the document.
-
+
The people who will sign the document.