From d831d08aafe840cadeb16309f692b33e11d2b78a Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Sat, 15 Nov 2025 15:32:32 +0530 Subject: [PATCH] Adding validation in Contact number and adding trim functioanlity. --- .../ServiceProject/ManageServiceProject.jsx | 35 +++++++++++----- .../ServiceProject/ServiceProjectSchema.jsx | 40 +++++++++++++++---- src/components/common/DatePicker.jsx | 2 +- 3 files changed, 57 insertions(+), 20 deletions(-) diff --git a/src/components/ServiceProject/ManageServiceProject.jsx b/src/components/ServiceProject/ManageServiceProject.jsx index 4af1e741..e085c291 100644 --- a/src/components/ServiceProject/ManageServiceProject.jsx +++ b/src/components/ServiceProject/ManageServiceProject.jsx @@ -59,7 +59,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => { const onSubmit = (formData) => { if (serviceProjectId) { - let existingServiceIds = projectdata?.services?.map((s) => s.id) || []; + let existingServiceIds = projectdata?.services?.map((s) => s.id) || []; const oldServices = projectdata.services.map((service) => ({ serviceId: service.id, @@ -110,10 +110,10 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
-
{serviceProjectId ? "Update Project":"Create Project"}
+
{serviceProjectId ? "Update Project" : "Create Project"}
-
+
@@ -150,6 +150,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => { type="text" className="form-control form-control-sm" {...register("name")} + placeholder="Enter Project Name.." /> {errors?.name && ( {errors.name.message} @@ -163,6 +164,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => { type="text" className="form-control form-control-sm" {...register("shortName")} + placeholder="Enter Project Short Name.." /> {errors?.shortName && ( {errors.shortName.message} @@ -194,11 +196,11 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => { valueKey="id" label="Select Service" /> - {errors?.services && ( + {errors?.services && ( {errors.services.message} )}
- +
{ + e.target.value = e.target.value.replace(/[^0-9]/g, ""); + }} /> {errors?.contactPhone && ( {errors.contactPhone.message} @@ -244,7 +256,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
@@ -258,9 +270,10 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => { className="form-control" // maxLength={maxAddressLength} {...register("address")} - // onChange={(e) => { - // setAddressLength(e.target.value.length); - // }} + placeholder="Enter Project Address.." + // onChange={(e) => { + // setAddressLength(e.target.value.length); + // }} />
@@ -290,8 +303,8 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => { {isPending || isUpdating ? "Please wait..." : serviceProjectId - ? "Update" - : "Submit"} + ? "Update" + : "Submit"}
diff --git a/src/components/ServiceProject/ServiceProjectSchema.jsx b/src/components/ServiceProject/ServiceProjectSchema.jsx index 9c7f0ae6..7f3228d4 100644 --- a/src/components/ServiceProject/ServiceProjectSchema.jsx +++ b/src/components/ServiceProject/ServiceProjectSchema.jsx @@ -3,21 +3,45 @@ import { PROJECT_STATUS } from "../../utils/constants"; //#region Service Project export const projectSchema = z.object({ - name: z.string().min(1, "Name is required"), - shortName: z.string().min(1, "Short name is required"), - clientId: z.string().min(1, { message: "Client is required" }), + name: z + .string() + .trim() + .min(1, "Name is required"), + + shortName: z + .string() + .trim() + .min(1, "Short name is required"), + + clientId: z.string().trim().min(1, { message: "Client is required" }), + services: z .array(z.string()) .min(1, { message: "At least one service required" }), - address: z.string().min(1, "Address is required"), - assignedDate: z.string().min(1, { message: "Date is required" }), - statusId: z.string().min(1, "Status is required"), - contactName: z.string().min(1, "Contact name is required"), + + address: z.string().trim().min(1, "Address is required"), + + assignedDate: z.string().trim().min(1, { message: "Date is required" }), + + statusId: z.string().trim().min(1, "Status is required"), + + contactName: z + .string() + .trim() + .min(1, "Contact name is required") + .regex(/^[A-Za-z\s]+$/, "Contact name can contain only letters"), + contactPhone: z .string() + .trim() + .regex(/^\d+$/, "Phone number must contain only digits") .min(7, "Invalid phone number") .max(15, "Phone number too long"), - contactEmail: z.string().email("Invalid email address"), + + contactEmail: z + .string() + .trim() + .email("Invalid email address"), }); export const defaultProjectValues = { diff --git a/src/components/common/DatePicker.jsx b/src/components/common/DatePicker.jsx index d48b0258..74d1cc8f 100644 --- a/src/components/common/DatePicker.jsx +++ b/src/components/common/DatePicker.jsx @@ -51,7 +51,7 @@ const DatePicker = ({
{