From 101565e4ae59500d02e723814c549c9690c23ef6 Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Wed, 30 Apr 2025 17:20:59 +0530 Subject: [PATCH] add required validation for plannedTask using Zod schema --- src/components/Project/AssignRole.jsx | 491 ++++++++++++++------------ 1 file changed, 262 insertions(+), 229 deletions(-) diff --git a/src/components/Project/AssignRole.jsx b/src/components/Project/AssignRole.jsx index 46de8044..9f2a8e19 100644 --- a/src/components/Project/AssignRole.jsx +++ b/src/components/Project/AssignRole.jsx @@ -17,6 +17,16 @@ const schema = z.object({ .array(z.number()) .min(1, { message: "At least one employee must be selected" }), description: z.string().min(1, { message: "description required" }), + plannedTask: z.preprocess( + (val) => parseInt(val, 10), + z + .number({ + required_error: "Planned task is required", + invalid_type_error: "Planned task must be a number", + }) + .int() + .positive({ message: "Planned task must be a positive number" }) + ), }); const AssignRoleModel = ({ assignData, onClose }) => { @@ -45,6 +55,7 @@ const AssignRoleModel = ({ assignData, onClose }) => { defaultValues: { selectedEmployees: [], description: "", + plannedTask: "", }, resolver: (data) => { const validation = schema.safeParse(data); @@ -53,20 +64,16 @@ const AssignRoleModel = ({ assignData, onClose }) => { }, }); - const handleRoleChange = ( event ) => - { - reset() - setSelectedEmployees( [] ) + const handleRoleChange = (event) => { + reset(); + setSelectedEmployees([]); setSelectedRole(event.target.value); }; const filteredEmployees = selectedRole === "all" ? employees - : employees.filter((emp) => - String(emp.jobRoleId || "") === selectedRole - ); - + : employees.filter((emp) => String(emp.jobRoleId || "") === selectedRole); const handleEmployeeSelection = (employeeId, field) => { setSelectedEmployees((prevSelected) => { @@ -92,17 +99,18 @@ const AssignRoleModel = ({ assignData, onClose }) => { const onSubmit = async (data) => { const formattedData = { taskTeam: data.selectedEmployees, - plannedTask: parseInt(plannedTask, 10), + plannedTask: data.plannedTask, description: data.description, assignmentDate: new Date().toISOString(), workItemId: assignData?.workItem?.workItem.id, }; try { let response = await TasksRepository.assignTask(formattedData); - showToast( "Task Successfully Assigend", "success" ); - setSelectedEmployees([]) + showToast("Task Successfully Assigend", "success"); + setSelectedEmployees([]); + reset(); - onClose(); + onClose(); } catch (error) { showToast("something wrong", "error"); } @@ -113,7 +121,7 @@ const AssignRoleModel = ({ assignData, onClose }) => { }, [dispatch]); return ( -
@@ -125,234 +133,259 @@ const AssignRoleModel = ({ assignData, onClose }) => { onClick={onClose} aria-label="Close" > -
-
-

- {[ - assignData?.building?.name, - assignData?.floor?.floorName, - assignData?.workArea?.areaName, - assignData?.workItem?.workItem?.activityMaster?.activityName, - ] - .filter(Boolean) - .map((item, index, array) => ( - - {item} - {index < array.length - 1 && ( - - )} - - ))} -

+
+
+

+ {[ + assignData?.building?.name, + assignData?.floor?.floorName, + assignData?.workArea?.areaName, + assignData?.workItem?.workItem?.activityMaster?.activityName, + ] + .filter(Boolean) + .map((item, index, array) => ( + + {item} + {index < array.length - 1 && ( + + )} + + ))} +

-
-
-
-
Select Role
-
- -
-
-
-
-
Employee
-
- {( filteredEmployees?.length === 0 && employees ) &&
No employees found
} - -
-
- {selectedRole !== "" && ( -
-
-
- {filteredEmployees?.map((emp) => { - const jobRole = jobRoleData?.find( - (role) => role?.id === emp?.jobRoleId - ); - - return ( -
-
-
- ( - { - handleEmployeeSelection(emp.id, field); - }} - /> - )} - /> -
-

- {emp.firstName} {emp.lastName} -

- - {loading && ( -

- )} - {data && - !loading && - (jobRole ? jobRole.name : "Unknown Role")} -
-
-
-
-
- ); - })} + +
+
+
Select Role
+
+ +
-
- )} -
-
- - {selectedEmployees.length > 0 && ( -
-
- {selectedEmployees.map((empId) => { - const emp = employees.find((emp) => emp.id === empId); - return ( - - {emp.firstName} {emp.lastName} -

{ - removeEmployee(empId); - setValue( - "selectedEmployees", - selectedEmployees.filter((id) => id !== empId) - ); - }} - > - -

-
- ); - })} +
+
Employee
-
- )} -
-
- + {filteredEmployees?.length === 0 && employees && ( +
No employees found
+ )} +
+
+ {selectedRole !== "" && ( +
+
+
+ {filteredEmployees?.map((emp) => { + const jobRole = jobRoleData?.find( + (role) => role?.id === emp?.jobRoleId + ); -
-
-
+
+
+ )} +
+
+ {selectedEmployees.length > 0 && ( +
+
+ {selectedEmployees.map((empId) => { + const emp = employees.find( + (emp) => emp.id === empId + ); + return ( + + {emp.firstName} {emp.lastName} +

{ + removeEmployee(empId); + setValue( + "selectedEmployees", + selectedEmployees.filter( + (id) => id !== empId + ) + ); + }} + > + +

+
+ ); + })} +
+
+ )} +
+
+ +
+
+ + +
+
+ + ( + + )} + /> +
+ {errors.plannedTask && ( +
{errors.plannedTask}
+ )} +
+ + {errors.selectedEmployees && ( +
+

{errors.selectedEmployees[0]}

+
+ )} + + - -
-
- - setPlannedTask(e.target.value)} - id="defaultFormControlInput" - aria-describedby="defaultFormControlHelp" + ( +