Files
twenty_crm/packages/twenty-emails/src/components/BaseEmail.tsx
Nabhag Motivaras 7eec64b6e0 have footer on emails (#11300)
# ISSUE 

- Closes #9622

---------

Co-authored-by: Félix Malfait <felix@twenty.com>
2025-04-03 14:26:19 +02:00

105 lines
3.9 KiB
TypeScript

import { i18n, Messages } from '@lingui/core';
import { I18nProvider } from '@lingui/react';
import { Container, Html } from '@react-email/components';
import { BaseHead } from 'src/components/BaseHead';
import { Footer } from 'src/components/Footer';
import { Logo } from 'src/components/Logo';
import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations';
import { messages as afMessages } from '../locales/generated/af-ZA';
import { messages as arMessages } from '../locales/generated/ar-SA';
import { messages as caMessages } from '../locales/generated/ca-ES';
import { messages as csMessages } from '../locales/generated/cs-CZ';
import { messages as daMessages } from '../locales/generated/da-DK';
import { messages as deMessages } from '../locales/generated/de-DE';
import { messages as elMessages } from '../locales/generated/el-GR';
import { messages as enMessages } from '../locales/generated/en';
import { messages as esMessages } from '../locales/generated/es-ES';
import { messages as fiMessages } from '../locales/generated/fi-FI';
import { messages as frMessages } from '../locales/generated/fr-FR';
import { messages as heMessages } from '../locales/generated/he-IL';
import { messages as huMessages } from '../locales/generated/hu-HU';
import { messages as itMessages } from '../locales/generated/it-IT';
import { messages as jaMessages } from '../locales/generated/ja-JP';
import { messages as koMessages } from '../locales/generated/ko-KR';
import { messages as nlMessages } from '../locales/generated/nl-NL';
import { messages as noMessages } from '../locales/generated/no-NO';
import { messages as plMessages } from '../locales/generated/pl-PL';
import { messages as pseudoEnMessages } from '../locales/generated/pseudo-en';
import { messages as ptBRMessages } from '../locales/generated/pt-BR';
import { messages as ptPTMessages } from '../locales/generated/pt-PT';
import { messages as roMessages } from '../locales/generated/ro-RO';
import { messages as ruMessages } from '../locales/generated/ru-RU';
import { messages as srMessages } from '../locales/generated/sr-Cyrl';
import { messages as svMessages } from '../locales/generated/sv-SE';
import { messages as trMessages } from '../locales/generated/tr-TR';
import { messages as ukMessages } from '../locales/generated/uk-UA';
import { messages as viMessages } from '../locales/generated/vi-VN';
import { messages as zhHansMessages } from '../locales/generated/zh-CN';
import { messages as zhHantMessages } from '../locales/generated/zh-TW';
type BaseEmailProps = {
children: JSX.Element | JSX.Element[] | string;
width?: number;
locale: keyof typeof APP_LOCALES;
};
const messages: Record<keyof typeof APP_LOCALES, Messages> = {
en: enMessages,
'pseudo-en': pseudoEnMessages,
'af-ZA': afMessages,
'ar-SA': arMessages,
'ca-ES': caMessages,
'cs-CZ': csMessages,
'da-DK': daMessages,
'de-DE': deMessages,
'el-GR': elMessages,
'es-ES': esMessages,
'fi-FI': fiMessages,
'fr-FR': frMessages,
'he-IL': heMessages,
'hu-HU': huMessages,
'it-IT': itMessages,
'ja-JP': jaMessages,
'ko-KR': koMessages,
'nl-NL': nlMessages,
'no-NO': noMessages,
'pl-PL': plMessages,
'pt-BR': ptBRMessages,
'pt-PT': ptPTMessages,
'ro-RO': roMessages,
'ru-RU': ruMessages,
'sr-Cyrl': srMessages,
'sv-SE': svMessages,
'tr-TR': trMessages,
'uk-UA': ukMessages,
'vi-VN': viMessages,
'zh-CN': zhHansMessages,
'zh-TW': zhHantMessages,
};
(Object.entries(messages) as [keyof typeof APP_LOCALES, any][]).forEach(
([locale, message]) => {
i18n.load(locale, message);
},
);
i18n.activate(SOURCE_LOCALE);
export const BaseEmail = ({ children, width, locale }: BaseEmailProps) => {
i18n.activate(locale);
return (
<I18nProvider i18n={i18n}>
<Html lang={locale}>
<BaseHead />
<Container width={width || 290}>
<Logo />
{children}
<Footer />
</Container>
</Html>
</I18nProvider>
);
};