diff --git a/maternal-web/app/(auth)/register/page.tsx b/maternal-web/app/(auth)/register/page.tsx index e404312..09bd92a 100644 --- a/maternal-web/app/(auth)/register/page.tsx +++ b/maternal-web/app/(auth)/register/page.tsx @@ -25,7 +25,8 @@ import Link from 'next/link'; import { useTheme } from '@mui/material/styles'; import apiClient from '@/lib/api/client'; -const registerSchema = z.object({ +// Create a function to generate schema dynamically based on requireInviteCode +const createRegisterSchema = (requireInviteCode: boolean) => z.object({ name: z.string().min(2, 'Name must be at least 2 characters'), email: z.string().email('Invalid email address'), password: z.string() @@ -34,7 +35,9 @@ const registerSchema = z.object({ .regex(/[a-z]/, 'Password must contain at least one lowercase letter') .regex(/[0-9]/, 'Password must contain at least one number'), confirmPassword: z.string(), - inviteCode: z.string().optional(), + inviteCode: requireInviteCode + ? z.string().min(1, 'Invite code is required') + : z.string().optional(), dateOfBirth: z.string().min(1, 'Date of birth is required'), parentalEmail: z.string().email('Invalid email address').optional().or(z.literal('')), agreeToTerms: z.boolean().refine(val => val === true, { @@ -70,7 +73,7 @@ const registerSchema = z.object({ path: ['dateOfBirth'], }); -type RegisterFormData = z.infer; +type RegisterFormData = z.infer>; export default function RegisterPage() { const theme = useTheme(); @@ -89,8 +92,10 @@ export default function RegisterPage() { handleSubmit, watch, formState: { errors }, + setValue, + trigger, } = useForm({ - resolver: zodResolver(registerSchema), + resolver: zodResolver(createRegisterSchema(requireInviteCode)), defaultValues: { agreeToTerms: false, agreeToPrivacy: false, @@ -146,6 +151,13 @@ export default function RegisterPage() { const onSubmit = async (data: RegisterFormData) => { setError(null); + + // Validate invite code if required + if (requireInviteCode && (!data.inviteCode || data.inviteCode.trim() === '')) { + setError('Invite code is required to register'); + return; + } + setIsLoading(true); try {