123 lines
4.2 KiB
TypeScript
Raw Normal View History

/**
* 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<typeof loginFormSchema>;
export type SignupFormData = z.infer<typeof signupFormSchema>;
export type PasswordResetRequestFormData = z.infer<typeof passwordResetRequestFormSchema>;
export type PasswordResetFormData = z.infer<typeof passwordResetFormSchema>;
export type SetPasswordFormData = z.infer<typeof setPasswordFormSchema>;
export type ChangePasswordFormData = z.infer<typeof changePasswordFormSchema>;
export type LinkWhmcsFormData = z.infer<typeof linkWhmcsFormSchema>;
// Re-export API types for convenience
export type {
LoginRequestData,
SignupRequestData,
PasswordResetRequestData,
PasswordResetData,
SetPasswordRequestData,
ChangePasswordRequestData,
LinkWhmcsRequestData,
};