Compare commits
2 Commits
v1.3.1-rc.
...
v1.3.2-rc.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4909eee401 | ||
|
|
e8c2ca8890 |
@@ -0,0 +1,39 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { useState } from 'react';
|
||||||
|
|
||||||
|
import { FileSearch } from 'lucide-react';
|
||||||
|
|
||||||
|
import type { DocumentData } from '@documenso/prisma/client';
|
||||||
|
import DocumentDialog from '@documenso/ui/components/document/document-dialog';
|
||||||
|
import type { ButtonProps } from '@documenso/ui/primitives/button';
|
||||||
|
import { Button } from '@documenso/ui/primitives/button';
|
||||||
|
|
||||||
|
export type DocumentPreviewButtonProps = {
|
||||||
|
className?: string;
|
||||||
|
documentData: DocumentData;
|
||||||
|
} & ButtonProps;
|
||||||
|
|
||||||
|
export const DocumentPreviewButton = ({
|
||||||
|
className,
|
||||||
|
documentData,
|
||||||
|
...props
|
||||||
|
}: DocumentPreviewButtonProps) => {
|
||||||
|
const [showDialog, setShowDialog] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
className={className}
|
||||||
|
variant="outline"
|
||||||
|
onClick={() => setShowDialog((visible) => !visible)}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<FileSearch className="mr-2 h-5 w-5" strokeWidth={1.7} />
|
||||||
|
View Document
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<DocumentDialog documentData={documentData} open={showDialog} onOpenChange={setShowDialog} />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
17
apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx
Normal file
17
apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import { RefreshOnFocus } from '~/components/(dashboard)/refresh-on-focus/refresh-on-focus';
|
||||||
|
|
||||||
|
export type SigningLayoutProps = {
|
||||||
|
children: React.ReactNode;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function SigningLayout({ children }: SigningLayoutProps) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{children}
|
||||||
|
|
||||||
|
<RefreshOnFocus />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -17,6 +17,8 @@ import { SigningCard3D } from '@documenso/ui/components/signing-card';
|
|||||||
|
|
||||||
import { truncateTitle } from '~/helpers/truncate-title';
|
import { truncateTitle } from '~/helpers/truncate-title';
|
||||||
|
|
||||||
|
import { DocumentPreviewButton } from './document-preview-button';
|
||||||
|
|
||||||
export type CompletedSigningPageProps = {
|
export type CompletedSigningPageProps = {
|
||||||
params: {
|
params: {
|
||||||
token?: string;
|
token?: string;
|
||||||
@@ -117,12 +119,20 @@ export default async function CompletedSigningPage({
|
|||||||
<div className="mt-8 flex w-full max-w-sm items-center justify-center gap-4">
|
<div className="mt-8 flex w-full max-w-sm items-center justify-center gap-4">
|
||||||
<DocumentShareButton documentId={document.id} token={recipient.token} />
|
<DocumentShareButton documentId={document.id} token={recipient.token} />
|
||||||
|
|
||||||
<DocumentDownloadButton
|
{document.status === DocumentStatus.COMPLETED ? (
|
||||||
className="flex-1"
|
<DocumentDownloadButton
|
||||||
fileName={document.title}
|
className="flex-1"
|
||||||
documentData={documentData}
|
fileName={document.title}
|
||||||
disabled={document.status !== DocumentStatus.COMPLETED}
|
documentData={documentData}
|
||||||
/>
|
disabled={document.status !== DocumentStatus.COMPLETED}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<DocumentPreviewButton
|
||||||
|
className="flex-1"
|
||||||
|
title="Signatures will appear once the document has been completed"
|
||||||
|
documentData={documentData}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{isLoggedIn ? (
|
{isLoggedIn ? (
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
import { DocumentWithRecipient } from '@documenso/prisma/types/document-with-recipient';
|
import type { DocumentWithRecipient } from '@documenso/prisma/types/document-with-recipient';
|
||||||
|
|
||||||
export interface GetDocumentAndSenderByTokenOptions {
|
export interface GetDocumentAndSenderByTokenOptions {
|
||||||
token: string;
|
token: string;
|
||||||
@@ -58,7 +58,11 @@ export const getDocumentAndRecipientByToken = async ({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
Recipient: true,
|
Recipient: {
|
||||||
|
where: {
|
||||||
|
token,
|
||||||
|
},
|
||||||
|
},
|
||||||
documentData: true,
|
documentData: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
import { DocumentStatus } from '@documenso/prisma/client';
|
import { DocumentStatus } from '@documenso/prisma/client';
|
||||||
|
|
||||||
|
import { maskRecipientTokensForDocument } from '../../utils/mask-recipient-tokens-for-document';
|
||||||
|
|
||||||
export type SearchDocumentsWithKeywordOptions = {
|
export type SearchDocumentsWithKeywordOptions = {
|
||||||
query: string;
|
query: string;
|
||||||
userId: number;
|
userId: number;
|
||||||
@@ -77,5 +79,12 @@ export const searchDocumentsWithKeyword = async ({
|
|||||||
take: limit,
|
take: limit,
|
||||||
});
|
});
|
||||||
|
|
||||||
return documents;
|
const maskedDocuments = documents.map((document) =>
|
||||||
|
maskRecipientTokensForDocument({
|
||||||
|
document,
|
||||||
|
user,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
return maskedDocuments;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { useState } from 'react';
|
|||||||
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
||||||
import { X } from 'lucide-react';
|
import { X } from 'lucide-react';
|
||||||
|
|
||||||
import { DocumentData } from '@documenso/prisma/client';
|
import type { DocumentData } from '@documenso/prisma/client';
|
||||||
|
|
||||||
import { cn } from '../../lib/utils';
|
import { cn } from '../../lib/utils';
|
||||||
import { Dialog, DialogOverlay, DialogPortal } from '../../primitives/dialog';
|
import { Dialog, DialogOverlay, DialogPortal } from '../../primitives/dialog';
|
||||||
|
|||||||
Reference in New Issue
Block a user