refactor: infer types from zod validation

This commit is contained in:
Christel Westerberg
2024-04-29 09:53:54 +02:00
parent 00f30811cf
commit 49b7aa89f8
18 changed files with 418 additions and 217 deletions

View File

@@ -1,9 +1,10 @@
import { Lang } from "@/constants/languages"
import { serverClient } from "@/lib/trpc/server"
import { getValueFromContactConfig } from "@/utils/contactConfig"
import styles from "./contactRow.module.css"
import { Lang } from "@/constants/languages"
import type { ContactFields } from "@/types/requests/contactConfig"
export default async function ContactRow({
@@ -16,6 +17,11 @@ export default async function ContactRow({
})
const val = getValueFromContactConfig(contact.contact_field, data)
if (!val) {
return null
}
return (
<div className={styles.container}>
<h4 className={styles.title}>{contact.display_text}</h4>

View File

@@ -1,20 +1,28 @@
import { _ } from "@/lib/translation"
import Title from "@/components/Title"
import ContactRow from "./ContactRow"
import styles from "./contact.module.css"
import { JoinLoyaltyContactTypenameEnum } from "@/types/requests/loyaltyPage"
import type { ContactProps } from "@/types/components/loyalty/sidebar"
import { JoinLoyaltyContactTypenameEnum } from "@/types/requests/loyaltyPage"
export default async function Contact({ contactBlock }: ContactProps) {
return (
<div className={styles.contactContainer}>
<Title level="h5">Contact us</Title>
<Title level="h5">{_("Contact us")}</Title>
<section>
{contactBlock.map(({ contact, __typename }) => {
{contactBlock.map(({ contact, __typename }, i) => {
switch (__typename) {
case JoinLoyaltyContactTypenameEnum.LoyaltyPageSidebarJoinLoyaltyContactBlockContactContact:
return <ContactRow contact={contact} />
return (
<ContactRow
key={`${contact.display_text}-i`}
contact={contact}
/>
)
default:
return null
}

View File

@@ -9,13 +9,9 @@ import Contact from "./Contact"
import styles from "./joinLoyalty.module.css"
import type { JoinLoyaltyContact } from "@/types/requests/loyaltyPage"
import type { JoinLoyaltyContactProps } from "@/types/components/loyalty/sidebar"
export default function JoinLoyaltyContact({
block,
}: {
block: JoinLoyaltyContact["join_loyalty_contact"]
}) {
export default function JoinLoyaltyContact({ block }: JoinLoyaltyContactProps) {
return (
<div className={styles.container}>
<div className={styles.wrapper}>