feat: implement address component and models

master
Katja Lutz 2 years ago
parent e11c8449b9
commit c669e7fd0c

@ -0,0 +1,60 @@
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<typeof addressSchema>;
export const createAddress = (data: Partial<AddressData> = {}): 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) => (
<>
<div>{props.address.name}</div>
<div>{getLine1(props.address)}</div>
<div>{getLine2(props.address)}</div>
</>
);
export default Address;
Loading…
Cancel
Save