123 lines
4.2 KiB
TypeScript
123 lines
4.2 KiB
TypeScript
/**
|
|
* 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,
|
|
};
|