mirror of
https://github.com/hanzoai/sign.git
synced 2026-10-21 01:21:51 +00:00
Emails, the signing page's title, the sealed PDF's reason, the sign-in refusal and the dialogs still said Hanzo Sign. The catalogs change with the strings, message for message, so every translation keeps its id.
131 lines
4.5 KiB
TypeScript
131 lines
4.5 KiB
TypeScript
import { msg } from '@lingui/core/macro';
|
|
import { useLingui } from '@lingui/react';
|
|
import { Trans } from '@lingui/react/macro';
|
|
import type { RecipientRole } from '@prisma/client';
|
|
import { OrganisationType } from '@prisma/client';
|
|
|
|
import { RECIPIENT_ROLES_DESCRIPTION } from '@hanzo/esign-lib/constants/recipient-roles';
|
|
|
|
import { Body, Container, Head, Hr, Html, Img, Link, Preview, Section, Text } from '../components';
|
|
import { useBranding } from '../providers/branding';
|
|
import { TemplateCustomMessageBody } from '../template-components/template-custom-message-body';
|
|
import type { TemplateDocumentInviteProps } from '../template-components/template-document-invite';
|
|
import { TemplateDocumentInvite } from '../template-components/template-document-invite';
|
|
import { TemplateFooter } from '../template-components/template-footer';
|
|
|
|
export type DocumentInviteEmailTemplateProps = Partial<TemplateDocumentInviteProps> & {
|
|
customBody?: string;
|
|
role: RecipientRole;
|
|
selfSigner?: boolean;
|
|
teamName?: string;
|
|
teamEmail?: string;
|
|
includeSenderDetails?: boolean;
|
|
organisationType?: OrganisationType;
|
|
};
|
|
|
|
export const DocumentInviteEmailTemplate = ({
|
|
inviterName = 'Lucas Smith',
|
|
inviterEmail = '[email protected]',
|
|
documentName = 'Open Source Pledge.pdf',
|
|
signDocumentLink = 'https://esign.hanzo.ai',
|
|
assetBaseUrl = 'http://localhost:3002',
|
|
customBody,
|
|
role,
|
|
selfSigner = false,
|
|
teamName = '',
|
|
includeSenderDetails,
|
|
organisationType,
|
|
}: DocumentInviteEmailTemplateProps) => {
|
|
const { _ } = useLingui();
|
|
const branding = useBranding();
|
|
|
|
const action = _(RECIPIENT_ROLES_DESCRIPTION[role].actionVerb).toLowerCase();
|
|
|
|
let previewText = msg`${inviterName} has invited you to ${action} ${documentName}`;
|
|
|
|
if (organisationType === OrganisationType.ORGANISATION) {
|
|
previewText = includeSenderDetails
|
|
? msg`${inviterName} on behalf of "${teamName}" has invited you to ${action} ${documentName}`
|
|
: msg`${teamName} has invited you to ${action} ${documentName}`;
|
|
}
|
|
|
|
if (selfSigner) {
|
|
previewText = msg`Please ${action} your document ${documentName}`;
|
|
}
|
|
|
|
const getAssetUrl = (path: string) => {
|
|
return new URL(path, assetBaseUrl).toString();
|
|
};
|
|
|
|
return (
|
|
<Html>
|
|
<Head />
|
|
<Preview>{_(previewText)}</Preview>
|
|
|
|
<Body className="mx-auto my-auto bg-white font-sans">
|
|
<Section>
|
|
<Container className="mx-auto mb-2 mt-8 max-w-xl rounded-lg border border-solid border-slate-200 p-4 backdrop-blur-sm">
|
|
<Section>
|
|
{branding.brandingEnabled && branding.brandingLogo ? (
|
|
<Img src={branding.brandingLogo} alt="Branding Logo" className="mb-4 h-6" />
|
|
) : (
|
|
<Img
|
|
src={getAssetUrl('/static/logo.png')}
|
|
alt="Hanzo eSign Logo"
|
|
className="mb-4 h-6"
|
|
/>
|
|
)}
|
|
|
|
<TemplateDocumentInvite
|
|
inviterName={inviterName}
|
|
inviterEmail={inviterEmail}
|
|
documentName={documentName}
|
|
signDocumentLink={signDocumentLink}
|
|
assetBaseUrl={assetBaseUrl}
|
|
role={role}
|
|
selfSigner={selfSigner}
|
|
organisationType={organisationType}
|
|
teamName={teamName}
|
|
includeSenderDetails={includeSenderDetails}
|
|
/>
|
|
</Section>
|
|
</Container>
|
|
|
|
<Container className="mx-auto mt-12 max-w-xl">
|
|
<Section>
|
|
{organisationType === OrganisationType.PERSONAL && (
|
|
<Text className="my-4 text-base font-semibold">
|
|
<Trans>
|
|
{inviterName}{' '}
|
|
<Link className="font-normal text-slate-400" href="mailto:{inviterEmail}">
|
|
({inviterEmail})
|
|
</Link>
|
|
</Trans>
|
|
</Text>
|
|
)}
|
|
|
|
<Text className="mt-2 text-base text-slate-400">
|
|
{customBody ? (
|
|
<TemplateCustomMessageBody text={customBody} />
|
|
) : (
|
|
<Trans>
|
|
{inviterName} has invited you to {action} the document "{documentName}".
|
|
</Trans>
|
|
)}
|
|
</Text>
|
|
</Section>
|
|
</Container>
|
|
|
|
<Hr className="mx-auto mt-12 max-w-xl" />
|
|
|
|
<Container className="mx-auto max-w-xl">
|
|
<TemplateFooter />
|
|
</Container>
|
|
</Section>
|
|
</Body>
|
|
</Html>
|
|
);
|
|
};
|
|
|
|
export default DocumentInviteEmailTemplate;
|