From c027c4779ee77edbef413e0478ebfc94302d273d Mon Sep 17 00:00:00 2001 From: Maximilian Kaske Date: Fri, 3 Jan 2025 14:20:12 +0100 Subject: [PATCH] chore: add react-email templates --- .../status-page/[domain]/subscribe/route.ts | 2 + .../src/schema/status_reports/validation.ts | 1 + packages/emails/emails/_components/footer.tsx | 20 +++ packages/emails/emails/_components/layout.tsx | 28 +++ packages/emails/emails/_components/styles.ts | 42 +++++ packages/emails/emails/alert.tsx | 28 +-- packages/emails/emails/followup.tsx | 1 + packages/emails/emails/monitor-alert.tsx | 162 ++++++++++++++++++ packages/emails/emails/page-subscription.tsx | 70 ++++++++ packages/emails/emails/status-report.tsx | 119 +++++++++++++ packages/emails/emails/subscribe.tsx | 25 ++- packages/emails/emails/team-invitation.tsx | 61 +++++++ packages/emails/emails/welcome.tsx | 1 + packages/emails/src/client.tsx | 112 ++++++++++++ packages/emails/src/index.ts | 3 +- 15 files changed, 653 insertions(+), 22 deletions(-) create mode 100644 packages/emails/emails/_components/footer.tsx create mode 100644 packages/emails/emails/_components/layout.tsx create mode 100644 packages/emails/emails/_components/styles.ts create mode 100644 packages/emails/emails/monitor-alert.tsx create mode 100644 packages/emails/emails/page-subscription.tsx create mode 100644 packages/emails/emails/status-report.tsx create mode 100644 packages/emails/emails/team-invitation.tsx diff --git a/apps/web/src/app/status-page/[domain]/subscribe/route.ts b/apps/web/src/app/status-page/[domain]/subscribe/route.ts index 05af15259..bf551d766 100644 --- a/apps/web/src/app/status-page/[domain]/subscribe/route.ts +++ b/apps/web/src/app/status-page/[domain]/subscribe/route.ts @@ -5,6 +5,8 @@ import { db } from "@openstatus/db/src/db"; import { page, pageSubscriber } from "@openstatus/db/src/schema"; import { SubscribeEmail, sendEmail } from "@openstatus/emails"; +// TODO: use trpc route + export async function POST( req: Request, props: { params: Promise<{ domain: string }> }, diff --git a/packages/db/src/schema/status_reports/validation.ts b/packages/db/src/schema/status_reports/validation.ts index 048bcc5fb..4fd6325cb 100644 --- a/packages/db/src/schema/status_reports/validation.ts +++ b/packages/db/src/schema/status_reports/validation.ts @@ -52,3 +52,4 @@ export type InsertStatusReportUpdate = z.infer< typeof insertStatusReportUpdateSchema >; export type StatusReportUpdate = z.infer; +export type StatusReportStatus = z.infer; diff --git a/packages/emails/emails/_components/footer.tsx b/packages/emails/emails/_components/footer.tsx new file mode 100644 index 000000000..46b5b511d --- /dev/null +++ b/packages/emails/emails/_components/footer.tsx @@ -0,0 +1,20 @@ +import { Link, Section, Text } from "@react-email/components"; +import { styles } from "./styles"; + +export function Footer() { + return ( +
+ + + Home Page + {" "} + ・{" "} + + Contact Support + + + + OpenStatus ・ 122 Rue Amelot ・ 75011 Paris, France +
+ ); +} diff --git a/packages/emails/emails/_components/layout.tsx b/packages/emails/emails/_components/layout.tsx new file mode 100644 index 000000000..7c978e871 --- /dev/null +++ b/packages/emails/emails/_components/layout.tsx @@ -0,0 +1,28 @@ +import { Container, Img, Link, Section } from "@react-email/components"; +import { Footer } from "./footer"; +import { styles } from "./styles"; + +interface LayoutProps { + children?: React.ReactNode; + img?: { + src: string; + alt: string; + }; +} + +const defaultImg = { + src: "https://openstatus.dev/assets/logos/OpenStatus.png", + alt: "OpenStatus", +}; + +export function Layout({ children, img = defaultImg }: LayoutProps) { + return ( + + + {img.alt} + +
{children}
+