From b5f8fd514777f755e8b1f3b99a6f71e40d7ee8ae Mon Sep 17 00:00:00 2001 From: Maternus Kuang Date: Mon, 2 Mar 2026 17:50:47 +1300 Subject: [PATCH 1/3] Fixed a bug where users inputed 000 during signup would not be able to signup --- src/lib/zod/schema/signupInput.ts | 45 ++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/lib/zod/schema/signupInput.ts b/src/lib/zod/schema/signupInput.ts index 5b4e7b7..ff7f4fd 100644 --- a/src/lib/zod/schema/signupInput.ts +++ b/src/lib/zod/schema/signupInput.ts @@ -1,25 +1,44 @@ -import { z } from "zod"; +import { z } from 'zod'; export const signupSchema = z.object({ timestamp: z.date(), - firstName: z.string().min(1, "First name is required").max(50, "First name must be less than 50 characters"), - lastName: z.string().min(1, "Last name is required").max(50, "Last name must be less than 50 characters"), - gender: z.enum(["male", "female", "other", "prefer not to say"], { + firstName: z + .string() + .min(1, 'First name is required') + .max(50, 'First name must be less than 50 characters'), + lastName: z + .string() + .min(1, 'Last name is required') + .max(50, 'Last name must be less than 50 characters'), + gender: z.enum(['male', 'female', 'other', 'prefer not to say'], { // This is done so that the error message shown when an option is not selected is more user-friendly // instead of the default "Invalid enum value". This is because the placeholder option is not a valid enum value, // but i still want to show it as an option in the select dropdown to explain what the field is for. // If a label is added above the select dropdown, then this can be removed. - errorMap: () => ({ message: "Please select a valid gender option" }), + errorMap: () => ({ message: 'Please select a valid gender option' }), }), - email: z.string().email("Invalid email address"), - studentID: z.string().regex(/^\d{9}$/, "Student ID must be a 9-digit number").optional().or(z.literal("")), - upi: z.string().regex(/^[a-z]{3,4}\d{3}$/, "UPI must be 3 or 4 lowercase letters followed by 3 digits").optional().or(z.literal("")), - yearOfStudy: z.enum(["1st Year", "2nd Year", "3rd Year", "4th Year+"], { - errorMap: () => ({ message: "Please select a valid year of study" }), + email: z.string().email('Invalid email address'), + studentID: z + .string() + .regex(/^\d{9}$/, 'Student ID must be a 9-digit number') + .optional() + .or(z.literal('')), + upi: z + .string() + .regex(/^[a-z]{3,4}\d{3}$/, 'UPI must be 3 or 4 lowercase letters followed by 3 digits') + .optional() + .or(z.literal('')) + .or(z.literal('000')), + yearOfStudy: z.enum(['1st Year', '2nd Year', '3rd Year', '4th Year+'], { + errorMap: () => ({ message: 'Please select a valid year of study' }), }), - ethnicity: z.string().min(1, "Ethnicity is required"), + ethnicity: z.string().min(1, 'Ethnicity is required'), convincedByCommitteeMember: z.string().optional(), - membershipCardNumber: z.string().regex(/^\d+$/, "Membership card number must be an integer").optional().or(z.literal("")), + membershipCardNumber: z + .string() + .regex(/^\d+$/, 'Membership card number must be an integer') + .optional() + .or(z.literal('')), membershipPayment: z.string().optional(), paymentScreenshotLink: z.string().optional(), referrerName: z.string().optional(), @@ -27,4 +46,4 @@ export const signupSchema = z.object({ token: z.string().optional(), }); -export type SignupInput = z.infer; \ No newline at end of file +export type SignupInput = z.infer; From 0f2971ee5427bb5d53fe876fda1be33605afc1ba Mon Sep 17 00:00:00 2001 From: Maternus Kuang Date: Mon, 2 Mar 2026 18:59:34 +1300 Subject: [PATCH 2/3] Various changes --- src/app/(frontend)/signup/_components/SignupForm.tsx | 11 +++++++---- src/components/ui/FormInput.tsx | 9 ++++++--- src/lib/zod/schema/signupInput.ts | 6 ++---- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/app/(frontend)/signup/_components/SignupForm.tsx b/src/app/(frontend)/signup/_components/SignupForm.tsx index a2e977f..e43035a 100644 --- a/src/app/(frontend)/signup/_components/SignupForm.tsx +++ b/src/app/(frontend)/signup/_components/SignupForm.tsx @@ -132,7 +132,10 @@ export default function SignupForm({ email, token }: SignupFormProps) { placeholder="Enter Here" {...register('email')} error={errors.email} - className={"w-full placeholder:text-gray " + (!!email ? 'bg-primary-grey-light' : '')} + className={ + 'w-full placeholder:text-gray ' + + (!!email ? 'bg-primary-grey-light' : '') + } required={true} readOnly={!!email} /> @@ -152,13 +155,13 @@ export default function SignupForm({ email, token }: SignupFormProps) { required={true} /> diff --git a/src/components/ui/FormInput.tsx b/src/components/ui/FormInput.tsx index 2c6ad3d..1eee4cc 100644 --- a/src/components/ui/FormInput.tsx +++ b/src/components/ui/FormInput.tsx @@ -15,7 +15,10 @@ interface FormInputProps extends InputHTMLAttributes { } const FormInput = forwardRef( - ({ label, placeholder, error, className, tooltip, showTooltip, required, textarea, ...rest }, ref) => { + ( + { label, placeholder, error, className, tooltip, showTooltip, required, textarea, ...rest }, + ref, + ) => { const [isHovered, setIsHovered] = useState(false); return (
@@ -77,8 +80,8 @@ const FormInput = forwardRef {error?.message} diff --git a/src/lib/zod/schema/signupInput.ts b/src/lib/zod/schema/signupInput.ts index ff7f4fd..96c302e 100644 --- a/src/lib/zod/schema/signupInput.ts +++ b/src/lib/zod/schema/signupInput.ts @@ -25,10 +25,8 @@ export const signupSchema = z.object({ .or(z.literal('')), upi: z .string() - .regex(/^[a-z]{3,4}\d{3}$/, 'UPI must be 3 or 4 lowercase letters followed by 3 digits') - .optional() - .or(z.literal('')) - .or(z.literal('000')), + .regex(/^([a-z]{3,4}\d{3,4})?$/, 'UPI/AUT Network must be 3-4 letters + 3-4 digits') + .optional(), yearOfStudy: z.enum(['1st Year', '2nd Year', '3rd Year', '4th Year+'], { errorMap: () => ({ message: 'Please select a valid year of study' }), }), From 3ee3fadc0710600ff093ea47c6327fe44b11b5aa Mon Sep 17 00:00:00 2001 From: Maternus Kuang Date: Mon, 2 Mar 2026 19:16:23 +1300 Subject: [PATCH 3/3] Various bug fixes for UOA/AUT and also made it optional, fixed error message where it overflows into the bottom input box --- src/app/(frontend)/signup/_components/SignupForm.tsx | 4 ++-- src/components/ui/FormInput.tsx | 4 ++-- src/components/ui/FormSelect.tsx | 4 ++-- src/lib/zod/schema/signupInput.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/(frontend)/signup/_components/SignupForm.tsx b/src/app/(frontend)/signup/_components/SignupForm.tsx index e43035a..a14bd17 100644 --- a/src/app/(frontend)/signup/_components/SignupForm.tsx +++ b/src/app/(frontend)/signup/_components/SignupForm.tsx @@ -139,7 +139,7 @@ export default function SignupForm({ email, token }: SignupFormProps) { required={true} readOnly={!!email} /> -
+
{error?.message} diff --git a/src/components/ui/FormSelect.tsx b/src/components/ui/FormSelect.tsx index 2fe4d24..b53279f 100644 --- a/src/components/ui/FormSelect.tsx +++ b/src/components/ui/FormSelect.tsx @@ -79,8 +79,8 @@ const FormSelect = forwardRef(

{error?.message} diff --git a/src/lib/zod/schema/signupInput.ts b/src/lib/zod/schema/signupInput.ts index 96c302e..1a3bd65 100644 --- a/src/lib/zod/schema/signupInput.ts +++ b/src/lib/zod/schema/signupInput.ts @@ -25,10 +25,10 @@ export const signupSchema = z.object({ .or(z.literal('')), upi: z .string() - .regex(/^([a-z]{3,4}\d{3,4})?$/, 'UPI/AUT Network must be 3-4 letters + 3-4 digits') + .regex(/^([A-Za-z]{3,4}\d{3,4})?$/, 'UPI/AUT Network must be 3-4 letters + 3-4 digits') .optional(), yearOfStudy: z.enum(['1st Year', '2nd Year', '3rd Year', '4th Year+'], { - errorMap: () => ({ message: 'Please select a valid year of study' }), + errorMap: () => ({ message: 'Please select year of study' }), }), ethnicity: z.string().min(1, 'Ethnicity is required'), convincedByCommitteeMember: z.string().optional(),