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 = () => {
{employee ? "Update Employee" : "Create Employee"}
- {/*
navigation( "/employees" )}>Back
*/} - + navigation("/employees")}> Back
{!currentEmployee && empLoading && ( @@ -310,8 +271,6 @@ const ManageEmployee = () => {
Email
- - {/*
*/} { id="AadharNumber" placeholder="AADHAR Number" /> - {errors.root?.AadharNumber && ( + {errors.AadharNumber && (
- {errors.AadharNumber.root?.message} + {errors.AadharNumber.message}
)}
@@ -566,67 +525,9 @@ const ManageEmployee = () => { id="PanNumber" placeholder="PAN Number" /> - {/* {errors.PanNumber &&
{errors.PanNumber.message}
} */} + {errors.PanNumber &&
{errors.PanNumber.message}
}
- {(errors.AadharNumber || errors.PanNumber ) && ( -
- {errors.AadharNumber?.message ||errors.PanNumber?.message - } -
- )}
- {/*
-
-
Upload Photo
- ( - { - field.onChange(e.target.files[0]); - }} - /> - )} - /> - {errors.Photo &&
{errors.Photo.message}
} -
-
*/} - {/*
-
-
Upload Documents
- - ( - { - - field.onChange(Array.from(e.target.files)); - }} - /> - )} - /> - -
- {getValues("Documents") && Array.from(getValues("Documents")).map((item, index) => ( - - {item.name} - - ))} -
- {errors.Documents &&
{errors.Documents.message}
} - -
-
*/} {employeeId && (
diff --git a/src/pages/Activities/AttendancePage.jsx b/src/pages/Activities/AttendancePage.jsx index 1dcade10..0ad01038 100644 --- a/src/pages/Activities/AttendancePage.jsx +++ b/src/pages/Activities/AttendancePage.jsx @@ -60,13 +60,11 @@ const AttendancePage = () => modalElement.style.display = 'none'; document.body.classList.remove('modal-open'); document.querySelector('.modal-backdrop').remove(); - } - + } }; - const handleSubmit = ( formData ) =>{ - + const handleSubmit = ( formData ) =>{ dispatch( markCurrentAttendance( formData ) ).then( ( action ) => { const updatedAttendance = attendances.map(item => diff --git a/src/pages/master/MasterPage.jsx b/src/pages/master/MasterPage.jsx index 5c8fb951..4fc83aba 100644 --- a/src/pages/master/MasterPage.jsx +++ b/src/pages/master/MasterPage.jsx @@ -17,7 +17,6 @@ const MasterPage = () => { const [searchTerm, setSearchTerm] = useState(''); const [ filteredResults, setFilteredResults ] = useState( [] ); const hasMasterPermission = useHasUserPermission( MANAGE_MASTER ) - console.log(hasMasterPermission) const dispatch = useDispatch(); const selectedMaster = useSelector((store)=>store.localVariables.selectedMaster) diff --git a/src/pages/master/MasterTable.jsx b/src/pages/master/MasterTable.jsx index bbdc15bc..be575e5e 100644 --- a/src/pages/master/MasterTable.jsx +++ b/src/pages/master/MasterTable.jsx @@ -44,7 +44,6 @@ const MasterTable = ( {data, columns, loading, handleModalData} ) => > - { selectedMaster} Name {selectedMaster } Description @@ -73,12 +72,9 @@ const MasterTable = ( {data, columns, loading, handleModalData} ) => ) : ( item[col.key] !== undefined && item[col.key] !== null ? item[col.key] : " --- " )} - - - + ))} - {/* className={` ${hasUserPermission('660131a4-788c-4739-a082-cbbf7879cbf2') ? "":"d-none"}`}> */}