import { z } from 'zod'; export const stepOneSignupValidationSchema = z .object({ email: z .string({ required_error: 'Email tidak boleh kosong', invalid_type_error: 'Email harus berupa string', }) .min(1, 'Email tidak boleh kosong') .email('Email harus valid'), fullname: z .string({ required_error: 'Nama tidak boleh kosong', invalid_type_error: 'Nama harus berupa string', }) .min(1, 'Nama tidak boleh kosong') .max(50, 'Nama tidak boleh lebih dari 50 karakter'), password: z .string({ required_error: 'Password tidak boleh kosong', invalid_type_error: 'Password harus berupa string', }) .min(8, 'Password harus minimal 8 karakter') .max(50, 'Password tidak boleh lebih dari 50 karakter') .regex( /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*\W).+$/, 'Password harus mengandung setidaknya satu huruf kapital, satu huruf kecil, satu angka, dan satu karakter spesial' ), confirm_password: z .string({ required_error: 'Konfirmasi password tidak boleh kosong', }) .min(8, 'Konfirmasi password harus minimal 8 karakter') .max(50, 'Konfirmasi password tidak boleh lebih dari 50 karakter'), phone_number: z .string({ required_error: 'Nomor telepon tidak boleh kosong', invalid_type_error: 'Nomor telepon harus berupa string', }) .min(10, 'Nomor telepon tidak boleh kurang dari 10 karakter') .max(15, 'Nomor telepon tidak boleh lebih dari 15 karakter') .regex(/^\d+$/, 'Nomor telepon hanya boleh berisi angka'), }) .refine((data) => data.password === data.confirm_password, { message: 'Password dan Konfirmasi Password harus sama', path: ['confirm_password'], }); export const stepTwoSignupValidationSchema = z.object({ token: z.string(), }); export const signupValidationSchema = stepOneSignupValidationSchema.and( stepTwoSignupValidationSchema ); export type SignupValidationSchema = z.infer;