From 4f13b70ed8b82ee11173a12830f30e7b4fbb161d Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Wed, 30 Apr 2025 16:03:48 +0530 Subject: [PATCH 1/2] handle modal visibility with React state instead of Bootstrap --- .../Project/Infrastructure/WorkItem.jsx | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/components/Project/Infrastructure/WorkItem.jsx b/src/components/Project/Infrastructure/WorkItem.jsx index ae279024..ab85c28d 100644 --- a/src/components/Project/Infrastructure/WorkItem.jsx +++ b/src/components/Project/Infrastructure/WorkItem.jsx @@ -2,7 +2,6 @@ import React, { useState, useEffect } from "react"; import { useModal } from "../../../ModalContext"; import AssignRoleModel from "../AssignRole"; import { useParams } from "react-router-dom"; -import GlobalModel from "../../common/GlobalModel"; const WorkItem = ({ workItem, forBuilding, forFloor, forWorkArea }) => { const { projectId } = useParams(); @@ -22,7 +21,7 @@ const WorkItem = ({ workItem, forBuilding, forFloor, forWorkArea }) => { useEffect(() => { setNewWorkItem(workItem); - }, [workItem]); // This hook will run whenever the workItem prop changes + }, [workItem]); let assigndata = { building: forBuilding, @@ -33,22 +32,24 @@ const WorkItem = ({ workItem, forBuilding, forFloor, forWorkArea }) => { const hasWorkItem = NewWorkItem && NewWorkItem; useEffect(() => { - const tooltipTriggerList = Array.from(document.querySelectorAll('[data-bs-toggle="tooltip"]')); + const tooltipTriggerList = Array.from( + document.querySelectorAll('[data-bs-toggle="tooltip"]') + ); tooltipTriggerList.forEach((el) => new bootstrap.Tooltip(el)); }, []); - return ( <> - - + + @@ -75,7 +76,6 @@ const WorkItem = ({ workItem, forBuilding, forFloor, forWorkArea }) => { {NewWorkItem?.workItem?.completedWork} - {/* ************************************************ */}
{ >
- {/* for greather than mobile view */}
{!projectId && ( @@ -134,14 +133,16 @@ const WorkItem = ({ workItem, forBuilding, forFloor, forWorkArea }) => { type="button" className="btn p-0 dropdown-toggle hide-arrow" > - + data-bs-original-title="Delete Activity" + >
- {/* for mobile view */}
{ {" "} - Delete + Delete - {!projectId && ( - {" "} - Assign - )} + {!projectId && ( + + {" "} + Assign + + )}
-- 2.43.0 From d262244358906c54d85f8fd56010ddadd08be4ae Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Wed, 30 Apr 2025 16:08:44 +0530 Subject: [PATCH 2/2] Safe jobRoleId filter in AssignRoleModel and ensure onClose works in form submit --- src/components/Project/AssignRole.jsx | 50 ++++++++++++++++++--------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/components/Project/AssignRole.jsx b/src/components/Project/AssignRole.jsx index be557dd4..46de8044 100644 --- a/src/components/Project/AssignRole.jsx +++ b/src/components/Project/AssignRole.jsx @@ -53,16 +53,21 @@ const AssignRoleModel = ({ assignData, onClose }) => { }, }); - const handleRoleChange = (event) => { - setSelectedRole(event.plannedTask.value); + const handleRoleChange = ( event ) => + { + reset() + setSelectedEmployees( [] ) + setSelectedRole(event.target.value); }; const filteredEmployees = selectedRole === "all" ? employees - : employees.filter((emp) => emp.JobRoleId.toString() === selectedRole); + : employees.filter((emp) => + String(emp.jobRoleId || "") === selectedRole + ); + - // not need currently for this fun const handleEmployeeSelection = (employeeId, field) => { setSelectedEmployees((prevSelected) => { let updatedSelection; @@ -97,8 +102,7 @@ const AssignRoleModel = ({ assignData, onClose }) => { showToast( "Task Successfully Assigend", "success" ); setSelectedEmployees([]) reset(); - closeModal() - + onClose(); } catch (error) { showToast("something wrong", "error"); } @@ -109,7 +113,18 @@ const AssignRoleModel = ({ assignData, onClose }) => { }, [dispatch]); return ( - <> +
+
+
+

@@ -161,16 +176,17 @@ const AssignRoleModel = ({ assignData, onClose }) => {

Employee
- + {( filteredEmployees?.length === 0 && employees ) &&
No employees found
} +
{selectedRole !== "" && (
-
- {filteredEmployees.map((emp) => { +
+ {filteredEmployees?.map((emp) => { const jobRole = jobRoleData?.find( - (role) => role.id === emp.jobRoleId + (role) => role?.id === emp?.jobRoleId ); return ( @@ -188,9 +204,9 @@ const AssignRoleModel = ({ assignData, onClose }) => { {...field} className="form-check-input mx-2" type="checkbox" - id={`employee-${emp.id}`} + id={`employee-${emp?.id}`} value={emp.id} - checked={field.value.includes(emp.id)} // Ensure the checkbox reflects the current form state + checked={field.value.includes(emp.id)} onChange={() => { handleEmployeeSelection(emp.id, field); }} @@ -326,15 +342,17 @@ const AssignRoleModel = ({ assignData, onClose }) => { className="btn btn-sm btn-label-secondary" data-bs-dismiss="modal" aria-label="Close" - onClick={closeModal} + onClick={onClose} > Cancel
-
- +
+
+
+
); }; export default AssignRoleModel; -- 2.43.0