From e5f73452b325d41ca60fc2aaea3a62e032dc3004 Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Fri, 9 Aug 2024 11:06:17 +1000 Subject: [PATCH] fix: support dynamic external ids for direct templates (#1274) Adds support for an `externalId` query param to be passed when linking a user to a direct template. This external id will then be stored on the document upon signing completion. --- .../src/app/(recipient)/d/[token]/direct-template.tsx | 10 +++++++++- .../template/create-document-from-direct-template.ts | 3 +++ packages/trpc/server/template-router/router.ts | 2 ++ packages/trpc/server/template-router/schema.ts | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/(recipient)/d/[token]/direct-template.tsx b/apps/web/src/app/(recipient)/d/[token]/direct-template.tsx index 14878dbdd..f35ae1e94 100644 --- a/apps/web/src/app/(recipient)/d/[token]/direct-template.tsx +++ b/apps/web/src/app/(recipient)/d/[token]/direct-template.tsx @@ -2,7 +2,7 @@ import { useState } from 'react'; -import { useRouter } from 'next/navigation'; +import { useRouter, useSearchParams } from 'next/navigation'; import { RECIPIENT_ROLES_DESCRIPTION } from '@documenso/lib/constants/recipient-roles'; import type { Field } from '@documenso/prisma/client'; @@ -39,6 +39,7 @@ export const DirectTemplatePageView = ({ directTemplateToken, }: TemplatesDirectPageViewProps) => { const router = useRouter(); + const searchParams = useSearchParams(); const { toast } = useToast(); @@ -82,8 +83,15 @@ export const DirectTemplatePageView = ({ const onSignDirectTemplateSubmit = async (fields: DirectTemplateLocalField[]) => { try { + let directTemplateExternalId = searchParams?.get('externalId') || undefined; + + if (directTemplateExternalId) { + directTemplateExternalId = decodeURIComponent(directTemplateExternalId); + } + const token = await createDocumentFromDirectTemplate({ directTemplateToken, + directTemplateExternalId, directRecipientName: fullName, directRecipientEmail: recipient.email, templateUpdatedAt: template.updatedAt, diff --git a/packages/lib/server-only/template/create-document-from-direct-template.ts b/packages/lib/server-only/template/create-document-from-direct-template.ts index e7f119dfa..8ec4e9f1c 100644 --- a/packages/lib/server-only/template/create-document-from-direct-template.ts +++ b/packages/lib/server-only/template/create-document-from-direct-template.ts @@ -44,6 +44,7 @@ export type CreateDocumentFromDirectTemplateOptions = { directRecipientName?: string; directRecipientEmail: string; directTemplateToken: string; + directTemplateExternalId?: string; signedFieldValues: TSignFieldWithTokenMutationSchema[]; templateUpdatedAt: Date; requestMetadata: RequestMetadata; @@ -63,6 +64,7 @@ export const createDocumentFromDirectTemplate = async ({ directRecipientName: initialDirectRecipientName, directRecipientEmail, directTemplateToken, + directTemplateExternalId, signedFieldValues, templateUpdatedAt, requestMetadata, @@ -227,6 +229,7 @@ export const createDocumentFromDirectTemplate = async ({ title: template.title, createdAt: initialRequestTime, status: DocumentStatus.PENDING, + externalId: directTemplateExternalId, documentDataId: documentData.id, authOptions: createDocumentAuthOptions({ globalAccessAuth: templateAuthOptions.globalAccessAuth, diff --git a/packages/trpc/server/template-router/router.ts b/packages/trpc/server/template-router/router.ts index 2f2567d63..8513d52df 100644 --- a/packages/trpc/server/template-router/router.ts +++ b/packages/trpc/server/template-router/router.ts @@ -66,6 +66,7 @@ export const templateRouter = router({ directRecipientName, directRecipientEmail, directTemplateToken, + directTemplateExternalId, signedFieldValues, templateUpdatedAt, } = input; @@ -76,6 +77,7 @@ export const templateRouter = router({ directRecipientName, directRecipientEmail, directTemplateToken, + directTemplateExternalId, signedFieldValues, templateUpdatedAt, user: ctx.user diff --git a/packages/trpc/server/template-router/schema.ts b/packages/trpc/server/template-router/schema.ts index 671cc50fd..2d98f83d0 100644 --- a/packages/trpc/server/template-router/schema.ts +++ b/packages/trpc/server/template-router/schema.ts @@ -20,6 +20,7 @@ export const ZCreateDocumentFromDirectTemplateMutationSchema = z.object({ directRecipientName: z.string().optional(), directRecipientEmail: z.string().email(), directTemplateToken: z.string().min(1), + directTemplateExternalId: z.string().optional(), signedFieldValues: z.array(ZSignFieldWithTokenMutationSchema), templateUpdatedAt: z.date(), });