have footer on emails (#11300)

# ISSUE 

- Closes #9622

---------

Co-authored-by: Félix Malfait <felix@twenty.com>
This commit is contained in:
Nabhag Motivaras
2025-04-03 17:56:19 +05:30
committed by GitHub
parent cfae440a02
commit 7eec64b6e0
96 changed files with 9359 additions and 2120 deletions

View File

@ -4,21 +4,21 @@ import { InjectRepository } from '@nestjs/typeorm';
import crypto from 'crypto';
import { render } from '@react-email/render';
import { Repository } from 'typeorm';
import { SendApprovedAccessDomainValidation } from 'twenty-emails';
import { APP_LOCALES } from 'twenty-shared/translations';
import { Repository } from 'typeorm';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { User } from 'src/engine/core-modules/user/user.entity';
import { EmailService } from 'src/engine/core-modules/email/email.service';
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service';
import { ApprovedAccessDomain as ApprovedAccessDomainEntity } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.entity';
import { approvedAccessDomainValidator } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.validate';
import {
ApprovedAccessDomainException,
ApprovedAccessDomainExceptionCode,
} from 'src/engine/core-modules/approved-access-domain/approved-access-domain.exception';
import { approvedAccessDomainValidator } from 'src/engine/core-modules/approved-access-domain/approved-access-domain.validate';
import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service';
import { EmailService } from 'src/engine/core-modules/email/email.service';
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
import { User } from 'src/engine/core-modules/user/user.entity';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { isWorkDomain } from 'src/utils/is-work-email';
@Injectable()
@ -73,8 +73,8 @@ export class ApprovedAccessDomainService {
serverUrl: this.environmentService.get('SERVER_URL'),
locale: 'en' as keyof typeof APP_LOCALES,
});
const html = render(emailTemplate);
const text = render(emailTemplate, {
const html = await render(emailTemplate);
const text = await render(emailTemplate, {
plainText: true,
});

View File

@ -9,9 +9,9 @@ import { render } from '@react-email/render';
import { addMilliseconds } from 'date-fns';
import ms from 'ms';
import { PasswordUpdateNotifyEmail } from 'twenty-emails';
import { Repository } from 'typeorm';
import { APP_LOCALES } from 'twenty-shared/translations';
import { isDefined } from 'twenty-shared/utils';
import { Repository } from 'typeorm';
import { NodeEnvironment } from 'src/engine/core-modules/environment/interfaces/node-environment.interface';
@ -442,8 +442,8 @@ export class AuthService {
locale,
});
const html = render(emailTemplate, { pretty: true });
const text = render(emailTemplate, { plainText: true });
const html = await render(emailTemplate, { pretty: true });
const text = await render(emailTemplate, { plainText: true });
i18n.activate(locale);

View File

@ -9,8 +9,8 @@ import { render } from '@react-email/render';
import { addMilliseconds, differenceInMilliseconds } from 'date-fns';
import ms from 'ms';
import { PasswordResetLinkEmail } from 'twenty-emails';
import { IsNull, MoreThan, Repository } from 'typeorm';
import { APP_LOCALES } from 'twenty-shared/translations';
import { IsNull, MoreThan, Repository } from 'typeorm';
import {
AppToken,
@ -158,8 +158,8 @@ export class ResetPasswordService {
const emailTemplate = PasswordResetLinkEmail(emailData);
const html = render(emailTemplate, { pretty: true });
const text = render(emailTemplate, { plainText: true });
const html = await render(emailTemplate, { pretty: true });
const text = await render(emailTemplate, { plainText: true });
i18n.activate(locale);

View File

@ -7,8 +7,8 @@ import { render } from '@react-email/render';
import { addMilliseconds, differenceInMilliseconds } from 'date-fns';
import ms from 'ms';
import { SendEmailVerificationLinkEmail } from 'twenty-emails';
import { Repository } from 'typeorm';
import { APP_LOCALES } from 'twenty-shared/translations';
import { Repository } from 'typeorm';
import {
AppToken,
@ -71,9 +71,8 @@ export class EmailVerificationService {
const emailTemplate = SendEmailVerificationLinkEmail(emailData);
const html = render(emailTemplate);
const text = render(emailTemplate, {
const html = await render(emailTemplate);
const text = await render(emailTemplate, {
plainText: true,
});

View File

@ -9,8 +9,8 @@ import { render } from '@react-email/render';
import { addMilliseconds } from 'date-fns';
import ms from 'ms';
import { SendInviteLinkEmail } from 'twenty-emails';
import { IsNull, Repository } from 'typeorm';
import { APP_LOCALES } from 'twenty-shared/translations';
import { IsNull, Repository } from 'typeorm';
import {
AppToken,
@ -305,8 +305,8 @@ export class WorkspaceInvitationService {
};
const emailTemplate = SendInviteLinkEmail(emailData);
const html = render(emailTemplate);
const text = render(emailTemplate, {
const html = await render(emailTemplate);
const text = await render(emailTemplate, {
plainText: true,
});

View File

@ -121,8 +121,8 @@ export class CleanerWorkspaceService {
locale: workspaceMember.locale,
};
const emailTemplate = WarnSuspendedWorkspaceEmail(emailData);
const html = render(emailTemplate, { pretty: true });
const text = render(emailTemplate, { plainText: true });
const html = await render(emailTemplate, { pretty: true });
const text = await render(emailTemplate, { plainText: true });
i18n.activate(workspaceMember.locale);
@ -197,8 +197,8 @@ export class CleanerWorkspaceService {
locale: workspaceMember.locale,
};
const emailTemplate = CleanSuspendedWorkspaceEmail(emailData);
const html = render(emailTemplate, { pretty: true });
const text = render(emailTemplate, { plainText: true });
const html = await render(emailTemplate, { pretty: true });
const text = await render(emailTemplate, { plainText: true });
this.emailService.send({
to: workspaceMember.userEmail,