diff --git a/src/components/Employee/ManageEmployee.jsx b/src/components/Employee/ManageEmployee.jsx index 191e96f6..a153e517 100644 --- a/src/components/Employee/ManageEmployee.jsx +++ b/src/components/Employee/ManageEmployee.jsx @@ -13,7 +13,7 @@ import { useEmployeeProfile } from "../../hooks/useEmployees"; import { clearCacheKey, getCachedData } from "../../slices/apiDataManager"; import {clearApiCacheKey} from "../../slices/apiCacheSlice"; -const mobileNumberRegex = /^(?:\d{10}|\d{3}[-\s]?\d{3}[-\s]?\d{4})$/; +const mobileNumberRegex = /^[7-9]\d{9}$/; const ManageEmployee = () => { const dispatch = useDispatch(); @@ -41,9 +41,17 @@ const ManageEmployee = () => { Email: z.string().optional(), CurrentAddress: z .string() - .min(1, { message: "Current Address is required" }), - BirthDate: z.string().min(1, { message: "Birth Date is required" }), - JoiningDate: z.string().min(1, { message: "Joining Date is required" }), + .min(1, { message: "Current Address is required" }).max(150, { message: "Address cannot exceed 150 characters" }), + BirthDate: z.string().min(1, { message: "Birth Date is required" }).refine((date, ctx) => { + return new Date(date) <= new Date(); + }, { + message: "Birth date cannot be in the future", + }), + JoiningDate: z.string().min(1, { message: "Joining Date is required" }).refine((date, ctx) => { + return new Date(date) <= new Date(); + }, { + message: "Joining date cannot be in the future", + }), EmergencyPhoneNumber: z .string() .min(1, { message: "Phone Number is required" }) @@ -52,7 +60,7 @@ const ManageEmployee = () => { .string() .min(1, { message: "Emergency Contact Person is required" }), AadharNumber: z.string() - .regex(/^\d{12}$/, "Aadhar card must be exactly 12 digits long") // Regex to ensure only 12 digits + .regex(/^\d{12}$/, "Aadhar card must be exactly 12 digits long") .nonempty("Aadhar card is required"), Gender: z .string() @@ -60,61 +68,22 @@ const ManageEmployee = () => { .refine((val) => val !== "Select Gender", { message: "Please select a gender", }), - PanNumber: z.string().optional(), + PanNumber: z + .string() + .optional() + .refine((val) => !val || /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(val), { + message: "Invalid PAN number", + }), PeramnentAddress: z .string() - .min(1, { message: "Permanent Address is required" }), + .min(1, { message: "Permanent Address is required" }).max(150, { message: "Address cannot exceed 150 characters" }), PhoneNumber: z .string() .min(1, { message: "Phone Number is required" }) .regex(mobileNumberRegex, { message: "Invalid phone number " }), JobRoleId: z.string().min(1, { message: "Role is required" }), - // Documents: z - // .array(z.unknown()) - // // .optional() - // .default([]) - // .refine((value) => value.length > 0, { - // message: "Documents is required", - // }) - // .refine((value) => { - // return value.every((file) => file.size <= 5000000); //this required if want - // }, "Each file must be less than 5MB") - // .refine((value) => { - // if (!value || value.length === 0) return true; - // return value.every((file) => - // ["application/pdf", "application/msword", "image/jpeg", "image/png"].includes(file.type) - // ); - // }, "Only PDF, Word, and image files are allowed"), - // Photo: z - // .unknown() - // .default(null) - - // .refine((value) => value !== undefined && value !== null, { - // message: "Photo is required", - // }) - // .refine((value) => value?.size <= 5000000, { //this required if want - // message: "The file must be less than 5MB", //size - // }) - // .refine((value) => { - // if (!value || value.length === 0) return true; - // return value && ["image/jpeg", "image/png", "image/jpg"].includes(value?.type); - // }, { message: "Only JPEG and PNG images are allowed" }), }) - .superRefine((data, ctx) => { - if (!data.AadharNumber && !data.PanNumber) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: "Either Aadhar Number or Pan Number is required.", - path: ["AadharNumber"], // Add error to AadharNumber - }); - - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: "Either Aadhar Number or Pan Number is required.", - path: ["PanNumber"], // Add error to PanNumber - }); - } - }); + const { register, @@ -142,8 +111,6 @@ const ManageEmployee = () => { PeramnentAddress: currentEmployee?.peramnentAddress || "", PhoneNumber: currentEmployee?.phoneNumber || "", JobRoleId: currentEmployee?.jobRoleId || "", - // Documents: currentEmployee?.documents || [], - // Photo: currentEmployee?.photo || null }, }); @@ -175,13 +142,11 @@ const ManageEmployee = () => { EmployeeRepository.manageEmployee(formDataToSend) .then( ( response ) => { - showToast("Employee details updated successfully.", "success" ); clearCacheKey("employeeListByProject") - clearCacheKey("allEmployeeList") - navigation("/employees"); - + clearCacheKey( "allEmployeeList" ) setLoading(false); + navigation("/employees"); }) .catch((error) => { showToast(error.message, "error"); @@ -218,12 +183,9 @@ const ManageEmployee = () => { PeramnentAddress: currentEmployee.peramnentAddress || "", PhoneNumber: currentEmployee.phoneNumber || "", JobRoleId: currentEmployee.jobRoleId?.toString() || "", - // Documents: currentEmployee.documents || [], - // Photo: currentEmployee.photo || null, } : {} // Empty object resets the form ); - // if(currentEmployee && currentEmployee.email) setDisabledEmail(true) }, [currentEmployee, reset]); return ( @@ -235,12 +197,11 @@ const ManageEmployee = () => {