diff --git a/apps/marketing/src/app/(marketing)/single-player-mode/page.tsx b/apps/marketing/src/app/(marketing)/single-player-mode/page.tsx index 02e9cff63..0b977d01b 100644 --- a/apps/marketing/src/app/(marketing)/single-player-mode/page.tsx +++ b/apps/marketing/src/app/(marketing)/single-player-mode/page.tsx @@ -6,6 +6,7 @@ import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useAnalytics } from '@documenso/lib/client-only/hooks/use-analytics'; +import { putFile } from '@documenso/lib/universal/upload/put-file'; import { Field, Prisma, Recipient } from '@documenso/prisma/client'; import { Card, CardContent } from '@documenso/ui/primitives/card'; import { DocumentDropzone } from '@documenso/ui/primitives/document-dropzone'; @@ -31,7 +32,7 @@ export default function SinglePlayerModePage() { const { toast } = useToast(); - const [uploadedFile, setUploadedFile] = useState<{ name: string; file: string } | null>(); + const [uploadedFile, setUploadedFile] = useState<{ file: File; fileBase64: string } | null>(); const [step, setStep] = useState('fields'); const [fields, setFields] = useState([]); @@ -97,7 +98,7 @@ export default function SinglePlayerModePage() { }; /** - * Create, sign and send the document. + * Upload, create, sign and send the document. */ const onSignSubmit = async (data: TAddSignatureFormSchema) => { if (!uploadedFile) { @@ -105,9 +106,14 @@ export default function SinglePlayerModePage() { } try { + const putFileData = await putFile(uploadedFile.file); + const documentToken = await createSinglePlayerDocument({ - document: uploadedFile.file, - documentName: uploadedFile.name, + documentData: { + type: putFileData.type, + data: putFileData.data, + }, + documentName: uploadedFile.file.name, signer: data, fields: fields.map((field) => ({ page: field.page, @@ -152,8 +158,8 @@ export default function SinglePlayerModePage() { const base64String = Buffer.from(arrayBuffer).toString('base64'); setUploadedFile({ - name: file.name, - file: `data:application/pdf;base64,${base64String}`, + file, + fileBase64: `data:application/pdf;base64,${base64String}`, }); analytics.capture('Marketing: SPM - Document uploaded'); @@ -189,7 +195,7 @@ export default function SinglePlayerModePage() { {uploadedFile ? ( - + ) : ( diff --git a/apps/marketing/src/components/(marketing)/single-player-mode/create-single-player-document.action.ts b/apps/marketing/src/components/(marketing)/single-player-mode/create-single-player-document.action.ts index b0a667d5f..d691abb95 100644 --- a/apps/marketing/src/components/(marketing)/single-player-mode/create-single-player-document.action.ts +++ b/apps/marketing/src/components/(marketing)/single-player-mode/create-single-player-document.action.ts @@ -13,6 +13,7 @@ import { render } from '@documenso/email/render'; import { DocumentSelfSignedEmailTemplate } from '@documenso/email/templates/document-self-signed'; import { FROM_ADDRESS, FROM_NAME, SERVICE_USER_EMAIL } from '@documenso/lib/constants/email'; import { insertFieldInPDF } from '@documenso/lib/server-only/pdf/insert-field-in-pdf'; +import { getFile } from '@documenso/lib/universal/upload/get-file'; import { prisma } from '@documenso/prisma'; import { DocumentDataType, @@ -25,7 +26,10 @@ import { } from '@documenso/prisma/client'; const ZCreateSinglePlayerDocumentSchema = z.object({ - document: z.string(), + documentData: z.object({ + data: z.string(), + type: z.nativeEnum(DocumentDataType), + }), documentName: z.string(), signer: z.object({ email: z.string().email().min(1), @@ -54,7 +58,13 @@ export type TCreateSinglePlayerDocumentSchema = z.infer => { - const { signer, fields, document, documentName } = ZCreateSinglePlayerDocumentSchema.parse(value); + const { signer, fields, documentData, documentName } = + ZCreateSinglePlayerDocumentSchema.parse(value); + + const document = await getFile({ + data: documentData.data, + type: documentData.type, + }); const doc = await PDFDocument.load(document); const createdAt = new Date();