42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
import { z } from "zod";
|
|
|
|
export const userFormSchema = z.object({
|
|
username: z.string().min(1, "Username is required").min(3, "Username must be at least 3 characters"),
|
|
email: z.string().email("Invalid email address"),
|
|
firstName: z.string().min(1, "First name is required"),
|
|
lastName: z.string().min(1, "Last name is required"),
|
|
password: z.string().min(6, "Password must be at least 6 characters"),
|
|
confirmPassword: z.string().min(6, "Confirm password must be at least 6 characters"),
|
|
}).refine((data) => data.password === data.confirmPassword, {
|
|
message: "Passwords don't match",
|
|
path: ["confirmPassword"],
|
|
});
|
|
|
|
export const userEditFormSchema = z.object({
|
|
username: z.string().min(1, "Username is required").min(3, "Username must be at least 3 characters"),
|
|
email: z.string().email("Invalid email address"),
|
|
firstName: z.string().min(1, "First name is required"),
|
|
lastName: z.string().min(1, "Last name is required"),
|
|
password: z.string().optional(),
|
|
confirmPassword: z.string().optional(),
|
|
}).refine((data) => {
|
|
if (data.password && data.password.length > 0) {
|
|
return data.password.length >= 6;
|
|
}
|
|
return true;
|
|
}, {
|
|
message: "Password must be at least 6 characters",
|
|
path: ["password"],
|
|
}).refine((data) => {
|
|
if (data.password && data.password.length > 0) {
|
|
return data.password === data.confirmPassword;
|
|
}
|
|
return true;
|
|
}, {
|
|
message: "Passwords don't match",
|
|
path: ["confirmPassword"],
|
|
});
|
|
|
|
export type UserForm = z.infer<typeof userFormSchema>;
|
|
export type UserEditForm = z.infer<typeof userEditFormSchema>;
|