import { Component } from "solid-js"; import z, { Infer } from "myzod"; export const addressSchema = z.object({ type: z.literals("S", "K").optional(), name: z.string(), line1: z.string().optional(), line2: z.string().optional(), city: z.string().optional(), zip: z.number().optional(), country: z.string(), }); export type AddressData = Infer; export const createAddress = (data: Partial = {}): AddressData => { return { name: "", line1: "", line2: "", city: "", zip: undefined, country: "CH", ...data, }; }; export const isStructuredAddress = (address: AddressData) => { if (address.type) { return address.type === "S"; } return address.city || address.zip != null; }; export const getLine1 = (address: AddressData) => { if (isStructuredAddress(address)) { return `${address.line1 || ""} ${address.line2 || ""}`; } return address.line1; }; export const getLine2 = (address: AddressData) => { if (isStructuredAddress(address)) { return `${address.zip || ""} ${address.city || ""}`; } return address.line2; }; const Address: Component<{ address: AddressData }> = (props) => ( <>
{props.address.name}
{getLine1(props.address)}
{getLine2(props.address)}
); export default Address;