diff --git a/packages/email/emails/auth/forgot-password-email.tsx b/packages/email/emails/auth/forgot-password-email.tsx index c20a74fbad..4494410c0c 100644 --- a/packages/email/emails/auth/forgot-password-email.tsx +++ b/packages/email/emails/auth/forgot-password-email.tsx @@ -1,12 +1,11 @@ import { Container, Heading, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailButton } from "../../src/components/email-button"; import { EmailFooter } from "../../src/components/email-footer"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface ForgotPasswordEmailProps { readonly verifyLink: string; readonly t?: TFunction; diff --git a/packages/email/emails/auth/new-email-verification.tsx b/packages/email/emails/auth/new-email-verification.tsx index 7ede78cda5..1d4fd1d72a 100644 --- a/packages/email/emails/auth/new-email-verification.tsx +++ b/packages/email/emails/auth/new-email-verification.tsx @@ -1,12 +1,11 @@ import { Container, Heading, Link, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailButton } from "../../src/components/email-button"; import { EmailFooter } from "../../src/components/email-footer"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface NewEmailVerificationProps { readonly verifyLink: string; readonly t?: TFunction; @@ -24,7 +23,7 @@ export function NewEmailVerification({ {t("emails.verification_security_notice")} {t("emails.verification_email_click_on_this_link")} - + {verifyLink} {t("emails.verification_email_link_valid_for_24_hours")} diff --git a/packages/email/emails/auth/password-reset-notify-email.tsx b/packages/email/emails/auth/password-reset-notify-email.tsx index 94e335df74..02a073c83d 100644 --- a/packages/email/emails/auth/password-reset-notify-email.tsx +++ b/packages/email/emails/auth/password-reset-notify-email.tsx @@ -1,11 +1,10 @@ import { Container, Heading, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailFooter } from "../../src/components/email-footer"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface PasswordResetNotifyEmailProps { readonly t?: TFunction; } diff --git a/packages/email/emails/auth/verification-email.tsx b/packages/email/emails/auth/verification-email.tsx index 12e1d066bb..12ce05144a 100644 --- a/packages/email/emails/auth/verification-email.tsx +++ b/packages/email/emails/auth/verification-email.tsx @@ -1,12 +1,11 @@ import { Container, Heading, Link, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailButton } from "../../src/components/email-button"; import { EmailFooter } from "../../src/components/email-footer"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface VerificationEmailProps { readonly verifyLink: string; readonly verificationRequestLink: string; @@ -25,7 +24,7 @@ export function VerificationEmail({ {t("emails.verification_email_text")} {t("emails.verification_email_click_on_this_link")} - + {verifyLink} {t("emails.verification_email_link_valid_for_24_hours")} diff --git a/packages/email/emails/general/email-customization-preview-email.tsx b/packages/email/emails/general/email-customization-preview-email.tsx index 2aa2a59ef4..682a79029d 100644 --- a/packages/email/emails/general/email-customization-preview-email.tsx +++ b/packages/email/emails/general/email-customization-preview-email.tsx @@ -1,10 +1,9 @@ import { Container, Heading, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface EmailCustomizationPreviewEmailProps { readonly userName: string; readonly logoUrl?: string; diff --git a/packages/email/emails/invite/invite-accepted-email.tsx b/packages/email/emails/invite/invite-accepted-email.tsx index e5263ecac6..daa42b2954 100644 --- a/packages/email/emails/invite/invite-accepted-email.tsx +++ b/packages/email/emails/invite/invite-accepted-email.tsx @@ -1,11 +1,10 @@ import { Container, Heading, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailFooter } from "../../src/components/email-footer"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface InviteAcceptedEmailProps { readonly inviterName: string; readonly inviteeName: string; diff --git a/packages/email/emails/invite/invite-email.tsx b/packages/email/emails/invite/invite-email.tsx index 98d2918299..69562a4f58 100644 --- a/packages/email/emails/invite/invite-email.tsx +++ b/packages/email/emails/invite/invite-email.tsx @@ -1,12 +1,11 @@ import { Container, Heading, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailButton } from "../../src/components/email-button"; import { EmailFooter } from "../../src/components/email-footer"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface InviteEmailProps { readonly inviteeName: string; readonly inviterName: string; diff --git a/packages/email/emails/survey/embed-survey-preview-email.tsx b/packages/email/emails/survey/embed-survey-preview-email.tsx index 5fed6d1c38..900053f6f0 100644 --- a/packages/email/emails/survey/embed-survey-preview-email.tsx +++ b/packages/email/emails/survey/embed-survey-preview-email.tsx @@ -1,10 +1,9 @@ import { Container, Heading, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface EmbedSurveyPreviewEmailProps { readonly html: string; readonly environmentId: string; diff --git a/packages/email/emails/survey/follow-up-email.tsx b/packages/email/emails/survey/follow-up-email.tsx index e961651e2a..571902c0d5 100644 --- a/packages/email/emails/survey/follow-up-email.tsx +++ b/packages/email/emails/survey/follow-up-email.tsx @@ -1,12 +1,11 @@ import { Column, Hr, Row, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailTemplate } from "../../src/components/email-template"; import { renderEmailResponseValue } from "../../src/lib/email-utils"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; import { ProcessedHiddenField, ProcessedResponseElement, ProcessedVariable } from "../../src/types/follow-up"; -type TFunction = (key: string, replacements?: Record) => string; - export interface FollowUpEmailProps { readonly body: string; // Already processed HTML with recall tags replaced readonly responseData?: ProcessedResponseElement[]; // Already mapped elements @@ -56,7 +55,7 @@ export function FollowUpEmail({ ? `${t("emails.number_variable")}: ${variable.name}` : `${t("emails.text_variable")}: ${variable.name}`} - + {variable.value} @@ -69,7 +68,7 @@ export function FollowUpEmail({ {t("emails.hidden_field")}: {hiddenField.id} - + {hiddenField.value} diff --git a/packages/email/emails/survey/link-survey-email.tsx b/packages/email/emails/survey/link-survey-email.tsx index 8f9a61c810..3d78041aef 100644 --- a/packages/email/emails/survey/link-survey-email.tsx +++ b/packages/email/emails/survey/link-survey-email.tsx @@ -1,12 +1,11 @@ import { Container, Heading, Text } from "@react-email/components"; +import { TFunction } from "@/src/types/translations"; import { EmailButton } from "../../src/components/email-button"; import { EmailFooter } from "../../src/components/email-footer"; import { EmailTemplate } from "../../src/components/email-template"; import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; -type TFunction = (key: string, replacements?: Record) => string; - interface LinkSurveyEmailProps { readonly surveyName: string; readonly surveyLink: string; diff --git a/packages/email/emails/survey/response-finished-email.tsx b/packages/email/emails/survey/response-finished-email.tsx index 1558c60737..f3a09b27ef 100644 --- a/packages/email/emails/survey/response-finished-email.tsx +++ b/packages/email/emails/survey/response-finished-email.tsx @@ -4,6 +4,7 @@ import type { TOrganization } from "@formbricks/types/organizations"; import type { TResponse } from "@formbricks/types/responses"; import { TSurveyElementTypeEnum } from "@formbricks/types/surveys/elements"; import type { TSurvey } from "@formbricks/types/surveys/types"; +import { TFunction } from "@/src/types/translations"; import { EmailButton } from "../../src/components/email-button"; import { EmailTemplate } from "../../src/components/email-template"; import { renderEmailResponseValue } from "../../src/lib/email-utils"; @@ -11,8 +12,6 @@ import { exampleData } from "../../src/lib/example-data"; import { t as mockT } from "../../src/lib/mock-translate"; import { ProcessedResponseElement } from "../../src/types/follow-up"; -type TFunction = (key: string, replacements?: Record) => string; - export interface ResponseFinishedEmailProps { readonly survey: TSurvey; readonly responseCount: number; diff --git a/packages/email/src/components/email-footer.tsx b/packages/email/src/components/email-footer.tsx index f83c0ddc3e..7a28c2044d 100644 --- a/packages/email/src/components/email-footer.tsx +++ b/packages/email/src/components/email-footer.tsx @@ -1,6 +1,5 @@ import { Text } from "@react-email/components"; - -type TFunction = (key: string, replacements?: Record) => string; +import { TFunction } from "../types/translations"; export function EmailFooter({ t }: { t: TFunction }): React.JSX.Element { return ( diff --git a/packages/email/src/components/email-template.tsx b/packages/email/src/components/email-template.tsx index 010b6f9e71..40cbf8ea57 100644 --- a/packages/email/src/components/email-template.tsx +++ b/packages/email/src/components/email-template.tsx @@ -1,6 +1,5 @@ import { Body, Container, Html, Img, Link, Section, Tailwind } from "@react-email/components"; - -type TFunction = (key: string, replacements?: Record) => string; +import { TFunction } from "../types/translations"; const fbLogoUrl = "https://app.formbricks.com/logo-transparent.png"; const logoLink = "https://formbricks.com?utm_source=email_header&utm_medium=email"; diff --git a/packages/email/src/lib/email-utils.tsx b/packages/email/src/lib/email-utils.tsx index 4dc8533f4b..639e478c7b 100644 --- a/packages/email/src/lib/email-utils.tsx +++ b/packages/email/src/lib/email-utils.tsx @@ -1,8 +1,7 @@ import { Column, Container, Img, Link, Row, Text } from "@react-email/components"; import { FileIcon } from "lucide-react"; import { TSurveyElementTypeEnum } from "@formbricks/types/surveys/elements"; - -type TFunction = (key: string, replacements?: Record) => string; +import { TFunction } from "../types/translations"; // Simplified version - just get the filename from URL const getOriginalFileNameFromUrl = (url: string): string => { @@ -77,6 +76,6 @@ export const renderEmailResponseValue = ( ); default: - return {response as string}; + return {response as string}; } }; diff --git a/packages/email/src/lib/render.ts b/packages/email/src/lib/render.ts index 117cd3f5ad..f1db3ef2d5 100644 --- a/packages/email/src/lib/render.ts +++ b/packages/email/src/lib/render.ts @@ -13,8 +13,7 @@ import { ResponseFinishedEmail, ResponseFinishedEmailProps, } from "../../emails/survey/response-finished-email"; - -type TFunction = (key: string, replacements?: Record) => string; +import { TFunction } from "../types/translations"; export async function renderVerificationEmail(props: { verifyLink: string; diff --git a/packages/email/src/types/translations.ts b/packages/email/src/types/translations.ts new file mode 100644 index 0000000000..1245d38c2a --- /dev/null +++ b/packages/email/src/types/translations.ts @@ -0,0 +1 @@ +export type TFunction = (key: string, replacements?: Record) => string;