From 28202cc9e051b9fb09e685473841f107bdea38dd Mon Sep 17 00:00:00 2001 From: martmull Date: Fri, 14 Jun 2024 12:36:24 +0200 Subject: [PATCH] Fix workspaceLogo in invite-email (#5865) ## Fixes wrong image url in email ![image](https://github.com/twentyhq/twenty/assets/29927851/5fb1524b-874d-4723-8450-0284382bbeb3) ## Done - duplicates and adapt `getImageAbsoluteURIOrBase64` from `twenty-front` in `twenty-email` - send `SERVER_URL` to email builder --- .../src/emails/send-invite-link.email.tsx | 6 +++++- .../src/utils/getImageAbsoluteURIOrBase64.ts | 16 ++++++++++++++++ .../workspace/services/workspace.service.ts | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 packages/twenty-emails/src/utils/getImageAbsoluteURIOrBase64.ts diff --git a/packages/twenty-emails/src/emails/send-invite-link.email.tsx b/packages/twenty-emails/src/emails/send-invite-link.email.tsx index 3fefac277..36e712acf 100644 --- a/packages/twenty-emails/src/emails/send-invite-link.email.tsx +++ b/packages/twenty-emails/src/emails/send-invite-link.email.tsx @@ -9,6 +9,7 @@ import { MainText } from 'src/components/MainText'; import { Title } from 'src/components/Title'; import { WhatIsTwenty } from 'src/components/WhatIsTwenty'; import { capitalize } from 'src/utils/capitalize'; +import { getImageAbsoluteURIOrBase64 } from 'src/utils/getImageAbsoluteURIOrBase64'; type SendInviteLinkEmailProps = { link: string; @@ -17,13 +18,16 @@ type SendInviteLinkEmailProps = { email: string; firstName: string; }; + serverUrl?: string; }; export const SendInviteLinkEmail = ({ link, workspace, sender, + serverUrl, }: SendInviteLinkEmailProps) => { + const workspaceLogo = getImageAbsoluteURIOrBase64(workspace.logo, serverUrl); return ( @@ -34,7 +38,7 @@ export const SendInviteLinkEmail = ({ <br /> </MainText> <HighlightedContainer> - {workspace.logo && <Img src={workspace.logo} width={40} height={40} />} + {workspaceLogo && <Img src={workspaceLogo} width={40} height={40} />} {workspace.name && <HighlightedText value={workspace.name} />} <CallToAction href={link} value="Accept invite" /> </HighlightedContainer> diff --git a/packages/twenty-emails/src/utils/getImageAbsoluteURIOrBase64.ts b/packages/twenty-emails/src/utils/getImageAbsoluteURIOrBase64.ts new file mode 100644 index 000000000..cab930f76 --- /dev/null +++ b/packages/twenty-emails/src/utils/getImageAbsoluteURIOrBase64.ts @@ -0,0 +1,16 @@ +export const getImageAbsoluteURIOrBase64 = ( + imageUrl?: string | null, + serverUrl?: string, +) => { + if (!imageUrl) { + return null; + } + + if (imageUrl?.startsWith('data:') || imageUrl?.startsWith('https:')) { + return imageUrl; + } + + return serverUrl?.endsWith('/') + ? `${serverUrl.substring(0, serverUrl.length - 1)}/files/${imageUrl}` + : `${serverUrl || ''}/files/${imageUrl}`; +}; diff --git a/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts b/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts index 6cc47b087..ebee58874 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts @@ -119,6 +119,7 @@ export class WorkspaceService extends TypeOrmQueryService<Workspace> { link: inviteLink, workspace: { name: workspace.displayName, logo: workspace.logo }, sender: { email: sender.email, firstName: sender.firstName }, + serverUrl: this.environmentService.get('SERVER_URL'), }; const emailTemplate = SendInviteLinkEmail(emailData); const html = render(emailTemplate, {