46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
import { z } from "zod";
|
|
|
|
import { handlePhoneVal, justLetters, justOneWord, postalCode } from "..";
|
|
|
|
import * as M from "../messages";
|
|
|
|
const checkoutObjVal = {
|
|
name: z
|
|
.string({ required_error: M.requiredMessage })
|
|
.regex(justOneWord, M.nameMessage),
|
|
surname: z
|
|
.string({ required_error: M.requiredMessage })
|
|
.regex(justOneWord, M.nameMessage),
|
|
address: z.string({ required_error: M.requiredMessage }),
|
|
postalCode,
|
|
city: z
|
|
.string({ required_error: M.requiredMessage })
|
|
.min(2, M.onlyMinimumTwoCharacters)
|
|
.regex(justLetters, M.onlyTextMessage),
|
|
province: z.string({ required_error: M.requiredMessage }),
|
|
phone: z
|
|
.string({ required_error: M.requiredMessage })
|
|
.refine(handlePhoneVal, M.phoneMessage),
|
|
senderName: z.string().regex(justOneWord, M.nameMessage),
|
|
senderCifNif: z
|
|
.string()
|
|
.length(9, "El código postal debe tener 9 caracteres numéricos válidos"),
|
|
senderEmail: z.string().email(M.emailMessage),
|
|
senderPhone: z.string().refine(handlePhoneVal, M.phoneMessage),
|
|
senderNotes: z.string(),
|
|
paymentMethod: z.enum(["credit", "stripe"], {
|
|
required_error: "Seleccione uno de los métodos de pago",
|
|
}),
|
|
terms: z.boolean().refine((val) => {
|
|
return val === true;
|
|
}, "Acepte las condiciones antes de continuar con la compra"),
|
|
};
|
|
|
|
export const checkoutSchema = z.object(checkoutObjVal).partial({
|
|
senderName: true,
|
|
senderCifNif: true,
|
|
senderEmail: true,
|
|
senderPhone: true,
|
|
senderNotes: true,
|
|
});
|