Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 6x 6x 6x | import React from "react";
import { render } from "@react-email/components";
import type { ParseKeys } from "i18next";
import { createI18nContext } from "~app/utils/i18n";
import { BaseUrlContext } from "~web/email/components";
import type { UnauthorizedContext } from "~web/handlers/context";
import { getBackendModule, getLanguageFromRequest } from "~web/utils/i18n";
import { ConfirmEmailEmail } from "./confirm-email-email";
import { ResetPasswordEmail } from "./reset-password-email";
const generateEmail = async (
element: React.ReactElement,
titlePath: ParseKeys<"email">,
{ reqHeaders, baseUrl }: Pick<UnauthorizedContext, "reqHeaders" | "baseUrl">,
) => {
const language = getLanguageFromRequest(reqHeaders);
const i18nContext = createI18nContext({
getLanguage: () => language,
beforeInit: (instance) => instance.use(getBackendModule()),
});
await i18nContext.initialize({ language });
await i18nContext.loadNamespaces("email");
return {
subject: i18nContext.getNamespacedTranslation("email")(titlePath),
body: await render(
<i18nContext.Provider>
<BaseUrlContext value={baseUrl}>{element}</BaseUrlContext>
</i18nContext.Provider>,
{ pretty: true },
),
};
};
export const generateResetPasswordEmail = async (
token: string,
ctx: Parameters<typeof generateEmail>[2],
) =>
generateEmail(
<ResetPasswordEmail token={token} />,
"subjects.resetPassword",
ctx,
);
export const generateConfirmEmailEmail = async (
token: string,
ctx: Parameters<typeof generateEmail>[2],
) =>
generateEmail(
<ConfirmEmailEmail token={token} />,
"subjects.confirmEmail",
ctx,
);
|