feat: seperate text for email when document is being sent from team

This commit is contained in:
Ephraim Atta-Duncan
2024-07-12 17:32:57 +00:00
committed by Mythie
parent 7a1341eb74
commit 7562a68cca
4 changed files with 97 additions and 3 deletions

View File

@ -12,6 +12,8 @@ export interface TemplateDocumentInviteProps {
assetBaseUrl: string;
role: RecipientRole;
selfSigner: boolean;
isTeamInvite: boolean;
teamName?: string;
}
export const TemplateDocumentInvite = ({
@ -21,6 +23,8 @@ export const TemplateDocumentInvite = ({
assetBaseUrl,
role,
selfSigner,
isTeamInvite,
teamName,
}: TemplateDocumentInviteProps) => {
const { actionVerb, progressiveVerb } = RECIPIENT_ROLES_DESCRIPTION[role];
@ -36,6 +40,12 @@ export const TemplateDocumentInvite = ({
<br />
{`"${documentName}"`}
</>
) : isTeamInvite ? (
<>
{`${inviterName} on behalf of ${teamName} has invited you to ${actionVerb.toLowerCase()}`}
<br />
{`"${documentName}"`}
</>
) : (
<>
{`${inviterName} has invited you to ${actionVerb.toLowerCase()}`}

View File

@ -23,6 +23,9 @@ export type DocumentInviteEmailTemplateProps = Partial<TemplateDocumentInvitePro
customBody?: string;
role: RecipientRole;
selfSigner?: boolean;
isTeamInvite?: boolean;
teamName?: string;
teamEmail?: string;
};
export const DocumentInviteEmailTemplate = ({
@ -34,11 +37,15 @@ export const DocumentInviteEmailTemplate = ({
customBody,
role,
selfSigner = false,
isTeamInvite = false,
teamName,
}: DocumentInviteEmailTemplateProps) => {
const action = RECIPIENT_ROLES_DESCRIPTION[role].actionVerb.toLowerCase();
const previewText = selfSigner
? `Please ${action} your document ${documentName}`
: isTeamInvite
? `${inviterName} on behalf of ${teamName} has invited you to ${action} ${documentName}`
: `${inviterName} has invited you to ${action} ${documentName}`;
const getAssetUrl = (path: string) => {
@ -76,6 +83,8 @@ export const DocumentInviteEmailTemplate = ({
assetBaseUrl={assetBaseUrl}
role={role}
selfSigner={selfSigner}
isTeamInvite={isTeamInvite}
teamName={teamName}
/>
</Section>
</Container>

View File

@ -58,6 +58,12 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = {
},
include: {
documentMeta: true,
team: {
select: {
teamEmail: true,
name: true,
},
},
},
}),
prisma.recipient.findFirstOrThrow({
@ -67,7 +73,7 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = {
}),
]);
const { documentMeta } = document;
const { documentMeta, team } = document;
if (recipient.role === RecipientRole.CC) {
return;
@ -75,6 +81,7 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = {
const customEmail = document?.documentMeta;
const isDirectTemplate = document.source === DocumentSource.TEMPLATE_DIRECT_LINK;
const isTeamDocument = document.teamId !== null;
const recipientEmailType = RECIPIENT_ROLE_TO_EMAIL_TYPE[recipient.role];
@ -96,6 +103,11 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = {
emailSubject = `Please ${recipientActionVerb} this document created by your direct template`;
}
if (isTeamDocument && team) {
emailSubject = `${team.name} invited you to ${recipientActionVerb} a document`;
emailMessage = `${user.name} on behalf of ${team.name} has invited you to ${recipientActionVerb} the document "${document.title}".`;
}
const customEmailTemplate = {
'signer.name': name,
'signer.email': email,
@ -108,12 +120,15 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = {
const template = createElement(DocumentInviteEmailTemplate, {
documentName: document.title,
inviterName: user.name || undefined,
inviterEmail: user.email,
inviterEmail: isTeamDocument ? team?.teamEmail?.email || user.email : user.email,
assetBaseUrl,
signDocumentLink,
customBody: renderCustomEmailTemplate(emailMessage, customEmailTemplate),
role: recipient.role,
selfSigner,
isTeamInvite: isTeamDocument,
teamName: team?.name,
teamEmail: team?.teamEmail?.email,
});
await io.runTask('send-signing-email', async () => {

View File

@ -4,7 +4,7 @@ import path from 'node:path';
import { hashSync } from '@documenso/lib/server-only/auth/hash';
import { prisma } from '..';
import { DocumentDataType, DocumentSource, Role } from '../client';
import { DocumentDataType, DocumentSource, Role, TeamMemberRole } from '../client';
export const seedDatabase = async () => {
const examplePdf = fs
@ -67,4 +67,64 @@ export const seedDatabase = async () => {
},
},
});
const testUsers = [
'test@documenso.com',
'test2@documenso.com',
'test3@documenso.com',
'test4@documenso.com',
];
const createdUsers = [];
for (const email of testUsers) {
const testUser = await prisma.user.upsert({
where: {
email: email,
},
create: {
name: 'Test User',
email: email,
emailVerified: new Date(),
password: hashSync('password'),
roles: [Role.USER],
},
update: {},
});
createdUsers.push(testUser);
}
const team1 = await prisma.team.create({
data: {
name: 'Team 1',
url: 'team1',
ownerUserId: createdUsers[0].id,
},
});
const team2 = await prisma.team.create({
data: {
name: 'Team 2',
url: 'team2',
ownerUserId: createdUsers[1].id,
},
});
for (const team of [team1, team2]) {
await prisma.teamMember.createMany({
data: [
{
teamId: team.id,
userId: createdUsers[1].id,
role: TeamMemberRole.MEMBER,
},
{
teamId: team.id,
userId: createdUsers[2].id,
role: TeamMemberRole.MEMBER,
},
],
});
}
};