diff --git a/apps/infoalloggi/emails/VerificaEmail.tsx b/apps/infoalloggi/emails/VerificaEmail.tsx index 5d46b40..96d6d68 100644 --- a/apps/infoalloggi/emails/VerificaEmail.tsx +++ b/apps/infoalloggi/emails/VerificaEmail.tsx @@ -1,18 +1,20 @@ import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import z from "zod"; import { env } from "~/env"; import Base from "./base"; -export type VerificaEmail_NewMail = { - mailType: "verificaEmail"; - props: VerificaEmailProps; -}; -type VerificaEmailProps = { - token: string; - userId: string; - redirect?: string; -}; +export const VerificaEmailMailTag = "verificaEmail"; +export const VerificaEmailPropsSchema = z.object({ + token: z.string(), + userId: z.string(), + redirect: z.string().optional(), +}); -const VerificaEmail = ({ token, userId, redirect }: VerificaEmailProps) => { +const VerificaEmail = ({ + token, + userId, + redirect, +}: z.infer) => { return ( <> diff --git a/apps/infoalloggi/emails/avviso-interruzione.tsx b/apps/infoalloggi/emails/avviso-interruzione.tsx index 10cd6eb..4b7f1c3 100644 --- a/apps/infoalloggi/emails/avviso-interruzione.tsx +++ b/apps/infoalloggi/emails/avviso-interruzione.tsx @@ -1,8 +1,7 @@ import { Heading, Link, Row, Section, Text } from "@react-email/components"; import Base from "./base"; -export type AvvisoInterruzione_NewMail = { - mailType: "avvisoInterruzione"; -}; + +export const AvvisoInterruzioneMailTag = "avvisoInterruzione"; const AvvisoInterruzione = () => { return ( diff --git a/apps/infoalloggi/emails/contatto.tsx b/apps/infoalloggi/emails/contatto.tsx index 0e098e5..cadb134 100644 --- a/apps/infoalloggi/emails/contatto.tsx +++ b/apps/infoalloggi/emails/contatto.tsx @@ -1,25 +1,24 @@ import { Heading, Row, Section, Text } from "@react-email/components"; +import z from "zod"; import Base from "./base"; -export type ContattoAdmin_NewMail = { - mailType: "contattoAdminEmail"; - props: ContattoAdminEmailProps; -}; +export const ContattoAdminMailTag = "contattoAdminEmail"; + +export const ContattoAdminEmailPropsSchema = z.object({ + nome: z.string(), + cognome: z.string(), + email: z.email(), + telefono: z.string(), + messaggio: z.string(), +}); -type ContattoAdminEmailProps = { - nome: string; - cognome: string; - email: string; - telefono: string; - messaggio: string; -}; const ContattoAdminEmail = ({ nome, cognome, email, telefono, messaggio, -}: ContattoAdminEmailProps) => { +}: z.infer) => { return ( <> diff --git a/apps/infoalloggi/emails/contatto_annuncio.tsx b/apps/infoalloggi/emails/contatto_annuncio.tsx index 20469ac..8273a75 100644 --- a/apps/infoalloggi/emails/contatto_annuncio.tsx +++ b/apps/infoalloggi/emails/contatto_annuncio.tsx @@ -1,26 +1,25 @@ import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import z from "zod"; import { env } from "~/env"; import Base from "./base"; -export type ContattoAnnuncio_NewMail = { - mailType: "contattoAnnuncioEmail"; - props: ContattoAnnuncioEmailProps; -}; +export const ContattoAnnuncioMailTag = "contattoAnnuncioEmail"; + +export const ContattoAnnuncioPropsSchema = z.object({ + nome: z.string(), + codice: z.string(), + email: z.email(), + telefono: z.string(), + messaggio: z.string(), +}); -type ContattoAnnuncioEmailProps = { - nome: string; - codice: string; - email: string; - telefono: string; - messaggio: string; -}; const ContattoAnnuncioEmail = ({ nome, codice, email, telefono, messaggio, -}: ContattoAnnuncioEmailProps) => { +}: z.infer) => { return ( <> diff --git a/apps/infoalloggi/emails/email-interessato.tsx b/apps/infoalloggi/emails/email-interessato.tsx index a8260e2..f993362 100644 --- a/apps/infoalloggi/emails/email-interessato.tsx +++ b/apps/infoalloggi/emails/email-interessato.tsx @@ -1,16 +1,15 @@ import { Heading, Row, Section, Text } from "@react-email/components"; +import z from "zod"; import Base from "./base"; -export type ContattoInteressato_NewMail = { - mailType: "emailContattoInteressato"; - props: EmailContattoInteressatoProps; -}; -type EmailContattoInteressatoProps = { - nome_cognome: string; - nome_cognome_utente: string; - telefono: string; - indirizzo: string | null; - sesso: string | null; -}; + +export const ContattoInteressatoMailTag = "emailContattoInteressato"; +export const ContattoInteressatoPropsSchema = z.object({ + nome_cognome: z.string(), + nome_cognome_utente: z.string(), + telefono: z.string(), + indirizzo: z.string().nullable(), + sesso: z.enum(["M", "F"]).nullable(), +}); const EmailContattoInteressato = ({ nome_cognome, @@ -18,7 +17,7 @@ const EmailContattoInteressato = ({ telefono, indirizzo, sesso, -}: EmailContattoInteressatoProps) => { +}: z.infer) => { return ( <> diff --git a/apps/infoalloggi/emails/gereric-email.tsx b/apps/infoalloggi/emails/gereric-email.tsx index 6185b13..68693d3 100644 --- a/apps/infoalloggi/emails/gereric-email.tsx +++ b/apps/infoalloggi/emails/gereric-email.tsx @@ -1,27 +1,33 @@ import { Button, Heading, Row, Section, Text } from "@react-email/components"; import type { ReactNode } from "react"; +import z from "zod"; import Base from "./base"; -export type Generic_NewMail = { - mailType: "generic"; - props: GenericProps; -}; -type Corpo = { - testo?: undefined; - corpo: ReactNode; -}; -type Testo = { - testo: string; - corpo?: undefined; -}; -type GenericProps = { - title: string; - noreply?: boolean; - link?: { - href: string; - label?: string; - }; -} & (Corpo | Testo); +export const GenericMailTag = "generic"; + +const props_base = z.object({ + title: z.string(), + noreply: z.boolean().optional(), + link: z + .object({ + href: z.string(), + label: z.string().optional(), + }) + .optional(), +}); + +const props_content = z.union([ + z.object({ + corpo: z.custom(), + testo: z.undefined().optional(), + }), + z.object({ + testo: z.string(), + corpo: z.undefined().optional(), + }), +]); + +export const GenericPropsSchema = props_base.and(props_content); const Generic = ({ title, @@ -29,7 +35,7 @@ const Generic = ({ testo, corpo, link = undefined, -}: GenericProps) => { +}: z.infer) => { return ( <> diff --git a/apps/infoalloggi/emails/interruzione.tsx b/apps/infoalloggi/emails/interruzione.tsx index b0c9a96..eb48942 100644 --- a/apps/infoalloggi/emails/interruzione.tsx +++ b/apps/infoalloggi/emails/interruzione.tsx @@ -1,8 +1,7 @@ import { Heading, Row, Section, Text } from "@react-email/components"; import Base from "./base"; -export type Interruzione_NewMail = { - mailType: "interruzione"; -}; + +export const InterruzioneMailTag = "interruzione"; const Interruzione = () => { return ( diff --git a/apps/infoalloggi/emails/invito.tsx b/apps/infoalloggi/emails/invito.tsx index 6de708c..4200503 100644 --- a/apps/infoalloggi/emails/invito.tsx +++ b/apps/infoalloggi/emails/invito.tsx @@ -1,23 +1,21 @@ import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import z from "zod"; import Base from "./base"; -export type Invito_NewMail = { - mailType: "invito"; - props: InvitoProps; -}; -type InvitoProps = { - nome: string; - //email: string; - //password: string; - inviteUrl: string; -}; +export const InvitoMailTag = "invito"; +export const InvitoPropsSchema = z.object({ + nome: z.string(), + //email: z.email(), + //password: z.string(), + inviteUrl: z.url(), +}); const Invito = ({ nome, inviteUrl, //email, //password -}: InvitoProps) => { +}: z.infer) => { return ( <> diff --git a/apps/infoalloggi/emails/pagamento-conferma.tsx b/apps/infoalloggi/emails/pagamento-conferma.tsx index 318eae9..4122a57 100644 --- a/apps/infoalloggi/emails/pagamento-conferma.tsx +++ b/apps/infoalloggi/emails/pagamento-conferma.tsx @@ -1,8 +1,7 @@ import { Heading, Row, Section, Text } from "@react-email/components"; import Base from "./base"; -export type PagamentoConferma_NewMail = { - mailType: "pagamentoConferma"; -}; + +export const PagamentoConfermaMailTag = "pagamentoConferma"; const PagamentoConferma = () => { return ( diff --git a/apps/infoalloggi/emails/pagamento-errore.tsx b/apps/infoalloggi/emails/pagamento-errore.tsx index 825137b..fc9a916 100644 --- a/apps/infoalloggi/emails/pagamento-errore.tsx +++ b/apps/infoalloggi/emails/pagamento-errore.tsx @@ -1,9 +1,8 @@ import { Button, Heading, Row, Section, Text } from "@react-email/components"; import { env } from "~/env"; import Base from "./base"; -export type PagamentoErrore_NewMail = { - mailType: "pagamentoErrore"; -}; + +export const PagamentoErroreMailTag = "pagamentoErrore"; const PagamentoErrore = () => { return ( diff --git a/apps/infoalloggi/emails/pagamento-ricezione.tsx b/apps/infoalloggi/emails/pagamento-ricezione.tsx index 280d274..a8ed5d7 100644 --- a/apps/infoalloggi/emails/pagamento-ricezione.tsx +++ b/apps/infoalloggi/emails/pagamento-ricezione.tsx @@ -1,9 +1,8 @@ import { Button, Heading, Row, Section, Text } from "@react-email/components"; import { env } from "~/env"; import Base from "./base"; -export type PagamentoRicezione_NewMail = { - mailType: "pagamentoRicezione"; -}; + +export const PagamentoRicezioneMailTag = "pagamentoRicezione"; const PagamentoRicezione = () => { return ( diff --git a/apps/infoalloggi/emails/pw-reset-link.tsx b/apps/infoalloggi/emails/pw-reset-link.tsx index df91a0e..69e76bb 100644 --- a/apps/infoalloggi/emails/pw-reset-link.tsx +++ b/apps/infoalloggi/emails/pw-reset-link.tsx @@ -1,14 +1,14 @@ import { Button, Heading, Row, Section, Text } from "@react-email/components"; +import z from "zod"; import Base from "./base"; -export type PwResetLink_NewMail = { - mailType: "pwResetLink"; - props: PwResetLinkProps; -}; -type PwResetLinkProps = { - resetlink: string; -}; -const PwResetLink = ({ resetlink }: PwResetLinkProps) => { +export const PwResetLinkMailTag = "pwResetLink"; + +export const PwResetLinkPropsSchema = z.object({ + resetlink: z.string(), +}); + +const PwResetLink = ({ resetlink }: z.infer) => { return ( <> diff --git a/apps/infoalloggi/emails/recesso.tsx b/apps/infoalloggi/emails/recesso.tsx index b079647..e60dcfe 100644 --- a/apps/infoalloggi/emails/recesso.tsx +++ b/apps/infoalloggi/emails/recesso.tsx @@ -1,8 +1,7 @@ import { Heading, Row, Section, Text } from "@react-email/components"; import Base from "./base"; -export type Recesso_NewMail = { - mailType: "recesso"; -}; + +export const RecessoMailTag = "recesso"; const Recesso = () => { return ( diff --git a/apps/infoalloggi/emails/registrazione-avvenuta.tsx b/apps/infoalloggi/emails/registrazione-avvenuta.tsx index 1e5ffeb..4c0810b 100644 --- a/apps/infoalloggi/emails/registrazione-avvenuta.tsx +++ b/apps/infoalloggi/emails/registrazione-avvenuta.tsx @@ -1,10 +1,8 @@ import { Button, Heading, Row, Section, Text } from "@react-email/components"; import { env } from "~/env"; import Base from "./base"; -export type RegistrazioneAvvenuta_NewMail = { - mailType: "registrazioneAvvenuta"; -}; +export const RegistrazioneAvvenutaMailTag = "registrazioneAvvenuta"; const RegistrazioneAvvenuta = () => { return ( diff --git a/apps/infoalloggi/emails/scheda-annuncio.tsx b/apps/infoalloggi/emails/scheda-annuncio.tsx index 7ed5f4c..18381ac 100644 --- a/apps/infoalloggi/emails/scheda-annuncio.tsx +++ b/apps/infoalloggi/emails/scheda-annuncio.tsx @@ -1,20 +1,18 @@ import { Heading, Row, Section, Text } from "@react-email/components"; +import z from "zod"; import Base from "./base"; -export type SchedaContatto_NewMail = { - mailType: "emailSchedaContatto"; - props: EmailSchedaContattoProps; -}; -type EmailSchedaContattoProps = { - nominativo: string; - telefono: string; - indirizzo: string; -}; +export const SchedaContattoMailTag = "emailSchedaContatto"; +export const SchedaContattoPropsSchema = z.object({ + nominativo: z.string(), + telefono: z.string(), + indirizzo: z.string(), +}); const EmailSchedaContatto = ({ nominativo, telefono, indirizzo, -}: EmailSchedaContattoProps) => { +}: z.infer) => { return ( <> diff --git a/apps/infoalloggi/emails/servizio-attivato.tsx b/apps/infoalloggi/emails/servizio-attivato.tsx index 7953b50..f198e69 100644 --- a/apps/infoalloggi/emails/servizio-attivato.tsx +++ b/apps/infoalloggi/emails/servizio-attivato.tsx @@ -1,8 +1,7 @@ import { Heading, Row, Section, Text } from "@react-email/components"; import Base from "./base"; -export type ServizioAttivato_NewMail = { - mailType: "servizioAttivato"; -}; + +export const ServizioAttivatoMailTag = "servizioAttivato"; const ServizioAttivato = () => { return ( diff --git a/apps/infoalloggi/src/components/area-riservata/comunicazioni.tsx b/apps/infoalloggi/src/components/area-riservata/comunicazioni.tsx index e44fbfb..e654642 100644 --- a/apps/infoalloggi/src/components/area-riservata/comunicazioni.tsx +++ b/apps/infoalloggi/src/components/area-riservata/comunicazioni.tsx @@ -38,7 +38,8 @@ export const EmailAccordion = ({ const iframeHeight = mobile ? 600 : 500; return ( -
+
+

Email inviate:

import('@hookform/devtools').then((module) => module.DevTool), + { ssr: false } +); + +*/ + const Form = FormProvider; type FormFieldContextValue< @@ -171,12 +181,12 @@ const FormMessage = React.forwardRef< FormMessage.displayName = "FormMessage"; export { - useFormField, Form, - FormItem, - FormLabel, FormControl, FormDescription, - FormMessage, FormField, + FormItem, + FormLabel, + FormMessage, + useFormField, }; diff --git a/apps/infoalloggi/src/components/ui/textarea.tsx b/apps/infoalloggi/src/components/ui/textarea.tsx index 8fae588..c7ad96d 100644 --- a/apps/infoalloggi/src/components/ui/textarea.tsx +++ b/apps/infoalloggi/src/components/ui/textarea.tsx @@ -6,7 +6,7 @@ function Textarea({ className, ...props }: React.ComponentProps<"textarea">) { return (