import { ReactElement, useEffect, useState } from "react"; import Layout from "../components/layout"; import type { NextPageWithLayout } from "./_app"; import Head from "next/head"; import { ArrowDownTrayIcon, CheckBadgeIcon, CheckIcon, DocumentPlusIcon, EnvelopeIcon, FunnelIcon, PencilSquareIcon, PlusIcon, TrashIcon, } from "@heroicons/react/24/outline"; import { useRouter } from "next/router"; import { uploadDocument } from "@documenso/features"; import { DocumentStatus } from "@prisma/client"; import { Tooltip as ReactTooltip } from "react-tooltip"; import { Button, IconButton, SelectBox } from "@documenso/ui"; import { NextPageContext } from "next"; import { deleteDocument, getDocuments } from "@documenso/lib/api"; const DocumentsPage: NextPageWithLayout = (props: any) => { const router = useRouter(); const [documents, setDocuments]: any[] = useState([]); const [filteredDocuments, setFilteredDocuments] = useState([]); const [loading, setLoading] = useState(true); const statusFilters = [ { label: "All", value: "ALL" }, { label: "Draft", value: "DRAFT" }, { label: "Waiting for others", value: "PENDING" }, { label: "Completed", value: "COMPLETED" }, ]; const createdFilter = [ { label: "All Time", value: -1 }, { label: "Last 24 hours", value: 1 }, { label: "Last 7 days", value: 7 }, { label: "Last 30 days", value: 30 }, { label: "Last 3 months", value: 90 }, { label: "Last 12 months", value: 366 }, ]; const [selectedStatusFilter, setSelectedStatusFilter] = useState( statusFilters[0] ); const [selectedCreatedFilter, setSelectedCreatedFilter] = useState( createdFilter[0] ); const loadDocuments = async () => { if (!documents.length) setLoading(true); getDocuments().then((res: any) => { res.json().then((j: any) => { setDocuments(j); setLoading(false); }); }); }; useEffect(() => { loadDocuments().finally(() => { setSelectedStatusFilter( statusFilters.filter( (status) => status.value === props.filter.toUpperCase() )[0] ); }); }, []); useEffect(() => { setFilteredDocuments(filterDocumentes(documents)); }, [documents, selectedStatusFilter, selectedCreatedFilter]); function showDocument(documentId: number) { router.push(`/documents/${documentId}/recipients`); } function filterDocumentes(documents: []): any { let filteredDocuments = documents.filter( (d: any) => d.status === selectedStatusFilter.value || selectedStatusFilter.value === "ALL" ); filteredDocuments = filteredDocuments.filter((document: any) => wasXDaysAgoOrLess(new Date(document.created), selectedCreatedFilter.value) ); return filteredDocuments; } function wasXDaysAgoOrLess(documentDate: Date, lastXDays: number): boolean { if (lastXDays < 0) return true; const millisecondsInDay = 24 * 60 * 60 * 1000; // Number of milliseconds in a day 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 ); console.log(diffInDays); // Check if the difference is letss or equal to lastXDays return diffInDays <= lastXDays; } return ( <>
| Title | Recipients | Status | Created | Delete |
|---|---|---|---|---|
| {document.title || "#" + document.id} |
{document.Recipient.map((item: any) => (
{item.sendStatus === "NOT_SENT" ? (
{item.name
? item.name + " <" + item.email + ">"
: item.email}
) : (
""
)}
{item.sendStatus === "SENT" &&
item.readStatus !== "OPENED" ? (
))}
{document.Recipient.length === 0 ? "-" : null}
|
{formatDocumentStatus(document.status)}
{document.Recipient.filter( (r: any) => r.signingStatus === "SIGNED" ).length || 0} /{document.Recipient.length || 0} |
{new Date(document.created).toLocaleDateString()} |
|
Get started by creating a new document.