mirror of
https://github.com/documenso/documenso.git
synced 2026-07-06 02:55:00 +10:00
d93b2a70a7
Upgrade the `@react-email/render` package to handle suspense during renders. We could have just swapped to `renderAsync` for the 0.0.x version of the package but it's better to upgrade as part of this change. CI has been run locally and emails have been verified to work and render as expected in our local mail trap.
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
import type { I18n } from '@lingui/core';
|
|
import { I18nProvider } from '@lingui/react';
|
|
import * as ReactEmail from '@react-email/render';
|
|
|
|
import config from '@documenso/tailwind-config';
|
|
|
|
import { Tailwind } from './components';
|
|
import { BrandingProvider, type BrandingSettings } from './providers/branding';
|
|
|
|
export type RenderOptions = ReactEmail.Options & {
|
|
branding?: BrandingSettings;
|
|
i18n?: I18n;
|
|
};
|
|
|
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
const colors = (config.theme?.extend?.colors || {}) as Record<string, string>;
|
|
|
|
export const render = async (element: React.ReactNode, options?: RenderOptions) => {
|
|
const { branding, ...otherOptions } = options ?? {};
|
|
|
|
return ReactEmail.render(
|
|
<BrandingProvider branding={branding}>
|
|
<Tailwind
|
|
config={{
|
|
theme: {
|
|
extend: {
|
|
colors,
|
|
},
|
|
},
|
|
}}
|
|
>
|
|
{element}
|
|
</Tailwind>
|
|
</BrandingProvider>,
|
|
otherOptions,
|
|
);
|
|
};
|
|
|
|
export const renderWithI18N = async (element: React.ReactNode, options?: RenderOptions) => {
|
|
const { branding, i18n, ...otherOptions } = options ?? {};
|
|
|
|
if (!i18n) {
|
|
throw new Error('i18n is required');
|
|
}
|
|
|
|
return ReactEmail.render(
|
|
<I18nProvider i18n={i18n}>
|
|
<BrandingProvider branding={branding}>
|
|
<Tailwind
|
|
config={{
|
|
theme: {
|
|
extend: {
|
|
colors,
|
|
},
|
|
},
|
|
}}
|
|
>
|
|
{element}
|
|
</Tailwind>
|
|
</BrandingProvider>
|
|
</I18nProvider>,
|
|
otherOptions,
|
|
);
|
|
};
|