Merge pull request #13 from ElTimuro/DOC-90-signpage

Doc 90 signpage
This commit is contained in:
Timur Ercan
2023-02-21 11:50:56 +01:00
committed by GitHub
7 changed files with 50 additions and 23 deletions

View File

@ -1,10 +1,7 @@
import { ResizableBox, ResizeCallbackData } from "react-resizable"; import React, { useState } from "react";
import React, { SyntheticEvent, useEffect, useState } from "react";
import Draggable from "react-draggable"; import Draggable from "react-draggable";
import { CircleStackIcon, TrashIcon } from "@heroicons/react/24/solid";
import Logo from "../logo"; import Logo from "../logo";
import { IconButton } from "@documenso/ui"; import { IconButton } from "@documenso/ui";
import toast from "react-hot-toast";
import { XCircleIcon } from "@heroicons/react/20/solid"; import { XCircleIcon } from "@heroicons/react/20/solid";
const stc = require("string-to-color"); const stc = require("string-to-color");
@ -20,6 +17,7 @@ type FieldPropsType = {
}; };
onPositionChanged: any; onPositionChanged: any;
onDelete: any; onDelete: any;
hidden: boolean;
}; };
export default function EditableField(props: FieldPropsType) { export default function EditableField(props: FieldPropsType) {
@ -52,6 +50,7 @@ export default function EditableField(props: FieldPropsType) {
cancel="strong" cancel="strong"
> >
<div <div
hidden={props.hidden}
ref={nodeRef} ref={nodeRef}
className="cursor-move opacity-80 p-2 m-auto w-auto flex-row-reverse text-lg font-bold text-center absolute top-0 left-0 select-none" className="cursor-move opacity-80 p-2 m-auto w-auto flex-row-reverse text-lg font-bold text-center absolute top-0 left-0 select-none"
style={{ style={{

View File

@ -37,7 +37,6 @@ export default function PDFEditor(props: any) {
function onDeleteHandler(id: any) { function onDeleteHandler(id: any) {
const field = fields.find((e) => e.id == id); const field = fields.find((e) => e.id == id);
const fieldIndex = fields.map((item) => item.id).indexOf(id); const fieldIndex = fields.map((item) => item.id).indexOf(id);
console.log(fieldIndex);
if (fieldIndex > -1) { if (fieldIndex > -1) {
const fieldWithoutRemoved = [...fields]; const fieldWithoutRemoved = [...fields];
const removedField = fieldWithoutRemoved.splice(fieldIndex, 1); const removedField = fieldWithoutRemoved.splice(fieldIndex, 1);

View File

@ -71,6 +71,7 @@ export default function PDFViewer(props) {
></ReadOnlyField> ></ReadOnlyField>
) : ( ) : (
<EditableField <EditableField
hidden={item.Signature}
key={item.id} key={item.id}
field={item} field={item}
className="absolute" className="absolute"

View File

@ -3,22 +3,20 @@ import Layout from "../components/layout";
import type { NextPageWithLayout } from "./_app"; import type { NextPageWithLayout } from "./_app";
import Head from "next/head"; import Head from "next/head";
import { import {
ArrowDownTrayIcon,
CheckBadgeIcon, CheckBadgeIcon,
CheckIcon, CheckIcon,
DocumentPlusIcon, DocumentPlusIcon,
EnvelopeIcon, EnvelopeIcon,
EyeIcon, PencilSquareIcon,
PlusIcon, PlusIcon,
SunIcon,
TrashIcon, TrashIcon,
} from "@heroicons/react/24/outline"; } from "@heroicons/react/24/outline";
import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { uploadDocument } from "@documenso/features"; import { uploadDocument } from "@documenso/features";
import { DocumentStatus } from "@prisma/client"; import { DocumentStatus } from "@prisma/client";
import { Tooltip as ReactTooltip } from "react-tooltip"; import { Tooltip as ReactTooltip } from "react-tooltip";
import { getDocumentsForUserFromToken } from "@documenso/lib/query"; import { Button, IconButton } from "@documenso/ui";
import { Button } from "@documenso/ui";
const DocumentsPage: NextPageWithLayout = (props: any) => { const DocumentsPage: NextPageWithLayout = (props: any) => {
const router = useRouter(); const router = useRouter();
@ -44,7 +42,7 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
}, []); }, []);
function showDocument(documentId: number) { function showDocument(documentId: number) {
router.push(`/documents/${documentId}`); router.push(`/documents/${documentId}/recipients`);
} }
return ( return (
@ -227,11 +225,33 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
</p> </p>
</td> </td>
<td className="relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-6"> <td className="relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-6">
<Link href={"/documents/" + document.id}> <div>
<TrashIcon <IconButton
className="flex-shrink-0 -ml-1 mr-3 h-6 w-6 inline text-neon" icon={PencilSquareIcon}
aria-hidden="true" className="mr-2"
onClick={(event) => { onClick={(event: any) => {
event.preventDefault();
event.stopPropagation();
router.push("/documents/" + document.id);
}}
>
Edit
</IconButton>
<IconButton
icon={ArrowDownTrayIcon}
className="mr-2"
onClick={(event: any) => {
event.preventDefault();
event.stopPropagation();
router.push("/api/documents/" + document.id);
}}
download
>
Download
</IconButton>
<IconButton
icon={TrashIcon}
onClick={(event: any) => {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
if ( if (
@ -259,9 +279,9 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
}); });
} }
}} }}
/> ></IconButton>
<span className="sr-only">, {document.name}</span> <span className="sr-only">, {document.name}</span>
</Link> </div>
</td> </td>
</tr> </tr>
))} ))}

View File

@ -9,7 +9,6 @@ import { DocumentStatus } from "@prisma/client";
import { import {
InformationCircleIcon, InformationCircleIcon,
PaperAirplaneIcon, PaperAirplaneIcon,
UserPlusIcon,
UsersIcon, UsersIcon,
} from "@heroicons/react/24/outline"; } from "@heroicons/react/24/outline";
import { getDocument } from "@documenso/lib/query"; import { getDocument } from "@documenso/lib/query";
@ -126,7 +125,7 @@ export async function getServerSideProps(context: any) {
return { return {
props: { props: {
document: document, document: JSON.parse(JSON.stringify(document)),
}, },
}; };
} catch (error) { } catch (error) {

View File

@ -4,6 +4,7 @@ import Layout from "../../../components/layout";
import { NextPageWithLayout } from "../../_app"; import { NextPageWithLayout } from "../../_app";
import { classNames, NEXT_PUBLIC_WEBAPP_URL } from "@documenso/lib"; import { classNames, NEXT_PUBLIC_WEBAPP_URL } from "@documenso/lib";
import { import {
ArrowDownTrayIcon,
CheckBadgeIcon, CheckBadgeIcon,
CheckIcon, CheckIcon,
EnvelopeIcon, EnvelopeIcon,
@ -63,13 +64,21 @@ const RecipientsPage: NextPageWithLayout = (props: any) => {
</h2> </h2>
</div> </div>
<div className="mt-4 flex flex-shrink-0 md:mt-0 md:ml-4"> <div className="mt-4 flex flex-shrink-0 md:mt-0 md:ml-4">
<Button
icon={ArrowDownTrayIcon}
color="secondary"
className="mr-2"
href={"/api/documents/" + props.document.id}
>
Download
</Button>
<Button <Button
icon={PencilSquareIcon} icon={PencilSquareIcon}
color="secondary" color="secondary"
className="mr-2" className="mr-2"
href={breadcrumbItems[1].href} href={breadcrumbItems[1].href}
> >
Customize Document Edit Document
</Button> </Button>
<Button <Button
className="min-w-[125px]" className="min-w-[125px]"
@ -431,7 +440,7 @@ export async function getServerSideProps(context: any) {
return { return {
props: { props: {
document: document, document: JSON.parse(JSON.stringify(document)),
}, },
}; };
} }

View File

@ -19,7 +19,7 @@ export const getDocument = async (
}, },
include: { include: {
Recipient: true, Recipient: true,
Field: { include: { Recipient: true } }, Field: { include: { Recipient: true, Signature: true } },
}, },
}); });