import { create } from 'zustand'; import { RegisterProps } from '~/types/auth'; import { registerSchema } from '~/validations/auth'; import { boolean, ZodError } from 'zod'; type State = { form: RegisterProps; errors: { [key in keyof RegisterProps]?: string; }; isCheckedTNC: boolean; isOpenTNC: boolean; isValidCaptcha: boolean; }; type Action = { updateForm: (name: string, value: string) => void; updateValidCaptcha: (value: boolean) => void; toggleCheckTNC: () => void; openTNC: () => void; closeTNC: () => void; validate: () => void; resetForm: () => void; }; export const useRegisterStore = create((set, get) => ({ form: { company_type_id: '', business_name: '', name: '', nama_wajib_pajak : '', email: '', email_partner: '', password: '', phone: '', sppkp_document: '', npwp_document: '', industry_id: '', npwp: '', sppkp: '', is_pkp: '', type_acc:'', is_terdaftar:'', alamat_bisnis:'', alamat_wajib_pajak:'', }, updateForm: (name, value) => set((state) => ({ form: { ...state.form, [name]: value } })), errors: {}, validate: () => { try { registerSchema.parse(get().form); set({ errors: {} }); } catch (error) { if (error instanceof ZodError) { const errors: State['errors'] = {}; error.errors.forEach( (e) => (errors[e.path[0] as keyof RegisterProps] = e.message) ); set({ errors }); } } }, isCheckedTNC: false, toggleCheckTNC: () => set((state) => ({ isCheckedTNC: !state.isCheckedTNC })), isOpenTNC: false, openTNC: () => set(() => ({ isOpenTNC: true })), closeTNC: () => set(() => ({ isOpenTNC: false })), isValidCaptcha: false, updateValidCaptcha: (value) => set(() => ({ isValidCaptcha: value })), resetForm: () => set({ form: { company_type_id: '', business_name: '', name: '', nama_wajib_pajak : '', email: '', email_partner: '', password: '', phone: '', sppkp_document: '', npwp_document: '', industry_id: '', npwp: '', sppkp: '', is_pkp: '', type_acc:'', is_terdaftar:'', alamat_bisnis:'', alamat_wajib_pajak:'', }, }), }));