/** * Authentication Form Schemas * Frontend form schemas that extend API request schemas with UI-specific fields */ import { z } from 'zod'; import { loginRequestSchema, signupRequestSchema, passwordResetRequestSchema, passwordResetSchema, setPasswordRequestSchema, changePasswordRequestSchema, linkWhmcsRequestSchema, } from '../api/requests'; import { passwordSchema } from '../shared/primitives'; // ===================================================== // FORM SCHEMAS (Extend API schemas with UI fields) // ===================================================== export const loginFormSchema = loginRequestSchema.extend({ rememberMe: z.boolean().optional().default(false), }); export const signupFormSchema = signupRequestSchema.extend({ confirmPassword: passwordSchema, acceptTerms: z.boolean().refine(val => val === true, 'You must accept the terms and conditions'), marketingConsent: z.boolean().optional().default(false), }).refine(data => data.password === data.confirmPassword, { message: "Passwords don't match", path: ["confirmPassword"], }); export const passwordResetRequestFormSchema = passwordResetRequestSchema; export const passwordResetFormSchema = passwordResetSchema.extend({ confirmPassword: passwordSchema, }).refine(data => data.password === data.confirmPassword, { message: "Passwords don't match", path: ["confirmPassword"], }); export const setPasswordFormSchema = setPasswordRequestSchema.extend({ confirmPassword: passwordSchema, }).refine(data => data.password === data.confirmPassword, { message: "Passwords don't match", path: ["confirmPassword"], }); export const changePasswordFormSchema = changePasswordRequestSchema.extend({ confirmNewPassword: passwordSchema, }).refine(data => data.newPassword === data.confirmNewPassword, { message: "New passwords don't match", path: ["confirmNewPassword"], }); export const linkWhmcsFormSchema = linkWhmcsRequestSchema; // ===================================================== // FORM TO API TRANSFORMATIONS // ===================================================== export const loginFormToRequest = (formData: LoginFormData): LoginRequestData => { const { rememberMe, ...requestData } = formData; return requestData; }; export const signupFormToRequest = (formData: SignupFormData): SignupRequestData => { const { confirmPassword, acceptTerms, marketingConsent, ...requestData } = formData; return requestData; }; export const passwordResetFormToRequest = (formData: PasswordResetFormData): PasswordResetData => { const { confirmPassword, ...requestData } = formData; return requestData; }; export const setPasswordFormToRequest = (formData: SetPasswordFormData): SetPasswordRequestData => { const { confirmPassword, ...requestData } = formData; return requestData; }; export const changePasswordFormToRequest = (formData: ChangePasswordFormData): ChangePasswordRequestData => { const { confirmNewPassword, ...requestData } = formData; return requestData; }; // ===================================================== // TYPE EXPORTS // ===================================================== // Import API types import type { LoginRequestInput as LoginRequestData, SignupRequestInput as SignupRequestData, PasswordResetRequestInput as PasswordResetRequestData, PasswordResetInput as PasswordResetData, SetPasswordRequestInput as SetPasswordRequestData, ChangePasswordRequestInput as ChangePasswordRequestData, LinkWhmcsRequestInput as LinkWhmcsRequestData, } from '../api/requests'; // Export form types export type LoginFormData = z.infer; export type SignupFormData = z.infer; export type PasswordResetRequestFormData = z.infer; export type PasswordResetFormData = z.infer; export type SetPasswordFormData = z.infer; export type ChangePasswordFormData = z.infer; export type LinkWhmcsFormData = z.infer; // Re-export API types for convenience export type { LoginRequestData, SignupRequestData, PasswordResetRequestData, PasswordResetData, SetPasswordRequestData, ChangePasswordRequestData, LinkWhmcsRequestData, };