diff --git a/public/locale/en.json b/public/locale/en.json index 681df2269f0..49cdd0b6aad 100644 --- a/public/locale/en.json +++ b/public/locale/en.json @@ -1616,7 +1616,6 @@ "phone_number": "Phone Number", "phone_number_at_current_facility": "Phone Number of Contact person at current Facility", "phone_number_min_error": "Phone number must be at least 10 characters long", - "phone_number_must_be_10_digits": "Phone number must be a 10-digit mobile number", "phone_number_not_found": "Phone number not found", "phone_number_validation_error": "Entered phone number is not valid", "phone_number_verified": "Phone Number Verified", diff --git a/src/Utils/validators.ts b/src/Utils/validators.ts index 8fc37b39f55..9a9d453b8a8 100644 --- a/src/Utils/validators.ts +++ b/src/Utils/validators.ts @@ -2,7 +2,7 @@ import { t } from "i18next"; import { isValidPhoneNumber } from "react-phone-number-input"; import { z } from "zod"; -export default { +export default () => ({ phoneNumber: { optional: z .string() @@ -10,9 +10,13 @@ export default { .refine((val) => !val || isValidPhoneNumber(val), { message: t("phone_number_validation_error"), }), - required: z.string().refine((val) => isValidPhoneNumber(val), { - message: t("phone_number_validation_error"), - }), + + required: z + .string() + .min(1, { message: t("field_required") }) + .refine((val) => isValidPhoneNumber(val), { + message: t("phone_number_validation_error"), + }), }, coordinates: { @@ -20,9 +24,10 @@ export default { .number() .min(-90, t("invalid_latitude")) .max(90, t("invalid_latitude")), + longitude: z .number() .min(-180, t("invalid_longitude")) .max(180, t("invalid_longitude")), }, -}; +}); diff --git a/src/components/Facility/FacilityForm.tsx b/src/components/Facility/FacilityForm.tsx index b0fed2348eb..a712b879f57 100644 --- a/src/components/Facility/FacilityForm.tsx +++ b/src/components/Facility/FacilityForm.tsx @@ -66,9 +66,9 @@ export default function FacilityForm({ pincode: z.string().refine(validatePincode, t("invalid_pincode")), geo_organization: z.string().min(1, t("field_required")), address: z.string().min(1, t("address_is_required")), - phone_number: validators.phoneNumber.required, - latitude: validators.coordinates.latitude.optional(), - longitude: validators.coordinates.longitude.optional(), + phone_number: validators().phoneNumber.required, + latitude: validators().coordinates.latitude.optional(), + longitude: validators().coordinates.longitude.optional(), is_public: z.boolean().default(false), }); diff --git a/src/components/Patient/PatientRegistration.tsx b/src/components/Patient/PatientRegistration.tsx index 14b062f38f1..8557b4fab89 100644 --- a/src/components/Patient/PatientRegistration.tsx +++ b/src/components/Patient/PatientRegistration.tsx @@ -87,9 +87,9 @@ export default function PatientRegistration( z .object({ name: z.string().nonempty(t("name_is_required")), - phone_number: validators.phoneNumber.required, + phone_number: validators().phoneNumber.required, same_phone_number: z.boolean(), - emergency_phone_number: validators.phoneNumber.required, + emergency_phone_number: validators().phoneNumber.required, gender: z.enum(GENDERS, { required_error: t("gender_is_required") }), blood_group: z.enum(BLOOD_GROUPS, { required_error: t("blood_group_is_required"), @@ -120,7 +120,10 @@ export default function PatientRegistration( .min(100000, t("pincode_must_be_6_digits")) .max(999999, t("pincode_must_be_6_digits")), nationality: z.string().nonempty(t("nationality_is_required")), - geo_organization: z.string().uuid().optional(), + geo_organization: z + .string() + .uuid({ message: t("geo_organization_is_required") }) + .optional(), }) .refine( (data) => (data.age_or_dob === "dob" ? !!data.date_of_birth : true), @@ -552,7 +555,7 @@ export default function PatientRegistration( "age", e.target.value ? Number(e.target.value) - : (undefined as unknown as number), // intentionally setting to undefined, when the value is empty to avoid 0 in the input field + : (null as unknown as number), ) } data-cy="age-input" @@ -561,10 +564,16 @@ export default function PatientRegistration( {form.getValues("age") && ( -
- {t("year_of_birth")}:{" "} - {new Date().getFullYear() - - Number(form.getValues("age"))} +
+ {Number(form.getValues("age")) <= 0 ? ( + Invalid age + ) : ( + + {t("year_of_birth")}:{" "} + {new Date().getFullYear() - + Number(form.getValues("age"))} + + )}
)} diff --git a/src/components/Resource/ResourceCreate.tsx b/src/components/Resource/ResourceCreate.tsx index 5f43b06ebc3..49b1d3b98a7 100644 --- a/src/components/Resource/ResourceCreate.tsx +++ b/src/components/Resource/ResourceCreate.tsx @@ -76,7 +76,7 @@ export default function ResourceCreate(props: ResourceProps) { referring_facility_contact_name: z .string() .min(1, { message: t("field_required") }), - referring_facility_contact_number: validators.phoneNumber.required, + referring_facility_contact_number: validators().phoneNumber.required, priority: z.number().default(1), }); diff --git a/src/components/Users/UserForm.tsx b/src/components/Users/UserForm.tsx index 2b8c9797194..76010214af9 100644 --- a/src/components/Users/UserForm.tsx +++ b/src/components/Users/UserForm.tsx @@ -90,7 +90,7 @@ export default function UserForm({ first_name: z.string().min(1, t("field_required")), last_name: z.string().min(1, t("field_required")), email: z.string().email(t("invalid_email_address")), - phone_number: validators.phoneNumber.required, + phone_number: validators().phoneNumber.required, gender: z.enum(GENDERS, { required_error: t("gender_is_required") }), /* TODO: Userbase doesn't currently support these, neither does BE but we will probably need these */