import { z } from 'zod'; export const registerSchema = z .object({ name: z.string().min(1, { message: 'Nama harus diisi' }), email: z .string() .min(1, { message: 'Email harus diisi' }) .email({ message: 'Email harus menggunakan format example@mail.com' }), password: z.string().min(6, { message: 'Password minimal 6 karakter' }), phone: z .string() .min(1, { message: 'Nomor telepon harus diisi' }) .refine((val) => /^\d{10,12}$/.test(val), { message: 'Format nomor telepon tidak valid, contoh: 081234567890', }), type_acc: z.string().optional(), nama_wajib_pajak: z.string().optional(), alamat_bisnis: z.string().optional(), alamat_wajib_pajak: z.string().optional(), parent_id: z.string().optional(), is_pkp: z.string(), is_terdaftar: z.string(), sppkp_document: z.string().optional(), npwp_document: z.string().optional(), industry_id: z.string().optional(), email_partner: z.string().optional(), business_name: z.string().optional(), company_type_id: z.string().optional(), isChekBox: z.string().optional(), npwp: z .string() .optional() .refine((val) => !val || /^\d{15,16}$/.test(val), { message: 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.', }), sppkp: z.string().optional(), }) .superRefine((data, ctx) => { if (data.type_acc === 'business') { if (data.is_terdaftar === 'false') { if (data.is_pkp === 'true') { const requiredFields: { field: keyof typeof data; message: string; }[] = [ { field: 'business_name', message: 'Nama perusahaan harus diisi' }, { field: 'alamat_bisnis', message: 'Alamat perusahaan harus diisi', }, // { field: 'alamat_wajib_pajak', message: 'Alamat wajib pajak harus diisi' }, { field: 'company_type_id', message: 'Badan usaha wajib dipilih' }, { field: 'industry_id', message: 'Jenis usaha harus dipilih' }, { field: 'sppkp_document', message: 'Document harus diisi' }, { field: 'npwp_document', message: 'Document harus diisi' }, { field: 'npwp', message: 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.', }, { field: 'nama_wajib_pajak', message: 'Nama wajib pajak harus diisi', }, ]; requiredFields.forEach(({ field, message }) => { if (!data[field]) { ctx.addIssue({ code: 'custom', path: [field], message, }); } }); if ( !data.email_partner || !z.string().email().safeParse(data.email_partner).success ) { ctx.addIssue({ code: 'custom', path: ['email_partner'], message: 'Email partner harus diisi dengan format example@mail.com', }); } if (data.isChekBox === 'false') { if (!data.alamat_wajib_pajak) { ctx.addIssue({ code: 'custom', path: ['alamat_wajib_pajak'], message: 'Alamat wajib pajak harus diisi', }); } } } else { if (!data.business_name) { ctx.addIssue({ code: 'custom', path: ['business_name'], message: 'Nama perusahaan harus diisi', }); } if (!data.alamat_bisnis) { ctx.addIssue({ code: 'custom', path: ['alamat_bisnis'], message: 'Alamat perusahaan harus diisi', }); } if (!data.company_type_id) { ctx.addIssue({ code: 'custom', path: ['company_type_id'], message: 'Badan usaha wajib dipilih', }); } if (!data.industry_id) { ctx.addIssue({ code: 'custom', path: ['industry_id'], message: 'Jenis usaha harus dipilih', }); } if (data.npwp && !/^\d{15,16}$/.test(data.npwp)) { ctx.addIssue({ code: 'custom', path: ['npwp'], message: 'Format NPWP tidak valid, NPWP harus terdiri dari 15-16 digit angka.', }); } } } else { if (data.is_pkp === 'true') { if (!data.business_name) { ctx.addIssue({ code: 'custom', path: ['business_name'], message: 'Nama perusahaan harus diisi', }); } } else { if (!data.business_name) { ctx.addIssue({ code: 'custom', path: ['business_name'], message: 'Nama perusahaan harus diisi', }); } } } // Remove this unconditional issue addition to prevent blocking form submission // ctx.addIssue({ // code: 'custom', // path: ['business_name'], // message: 'Nama perusahaan harus diisi', // }); } else { } });