From 01ce4c92b64c87b49485b7b518c3380851ca62dd Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Sat, 2 Aug 2025 16:43:57 +0530 Subject: [PATCH 1/5] revert changed from July_4W --- src/components/Project/AssignTask.jsx | 796 +++++++++++--------------- 1 file changed, 331 insertions(+), 465 deletions(-) diff --git a/src/components/Project/AssignTask.jsx b/src/components/Project/AssignTask.jsx index 0836cbd2..67194ac6 100644 --- a/src/components/Project/AssignTask.jsx +++ b/src/components/Project/AssignTask.jsx @@ -16,6 +16,7 @@ import { useCreateTask } from "../../hooks/useTasks"; const AssignTask = ({ assignData, onClose, setAssigned }) => { const maxPlanned = assignData?.workItem?.plannedWork - assignData?.workItem?.completedWork; + const schema = z.object({ selectedEmployees: z .array(z.string()) @@ -48,9 +49,6 @@ const AssignTask = ({ assignData, onClose, setAssigned }) => { const infoRef = useRef(null); const infoRef1 = useRef(null); - // State for search term - const [searchTerm, setSearchTerm] = useState(""); - useEffect(() => { if (typeof bootstrap !== "undefined") { if (infoRef.current) { @@ -83,13 +81,9 @@ const AssignTask = ({ assignData, onClose, setAssigned }) => { recallEmployeeData, } = useEmployeesAllOrByProjectId(false, selectedProject, false); const dispatch = useDispatch(); - const { loading } = useMaster(); - const { data: jobRoleData } = useMaster(); + const { data: jobRoleData, loading } = useMaster(); - // Changed to an array to hold multiple selected roles - const [selectedRoles, setSelectedRoles] = useState(["all"]); - // Changed to an array to hold multiple selected roles - // const [selectedRoles, setSelectedRoles] = useState(["all"]); + const [selectedRole, setSelectedRole] = useState("all"); const [displayedSelection, setDisplayedSelection] = useState(""); const { handleSubmit, @@ -127,79 +121,20 @@ const AssignTask = ({ assignData, onClose, setAssigned }) => { useEffect(() => { dispatch(changeMaster("Job Role")); - // Initial state should reflect "All Roles" selected - setSelectedRoles(["all"]); + + return () => setSelectedRole("all"); }, [dispatch]); - // Modified handleRoleChange to handle multiple selections - const handleRoleChange = (event, roleId) => { - // If 'all' is selected, clear other selections - if (roleId === "all") { - setSelectedRoles(["all"]); - } else { - setSelectedRoles((prevSelectedRoles) => { - // If "all" was previously selected, remove it - const newRoles = prevSelectedRoles.filter((role) => role !== "all"); - if (newRoles.includes(roleId)) { - // If role is already selected, unselect it - return newRoles.filter((id) => id !== roleId); - } else { - // If role is not selected, add it - return [...newRoles, roleId]; - } - }); - } + const handleRoleChange = (event) => { + setSelectedRole(event.target.value); }; - useEffect(() => { - // Update displayedSelection based on selectedRoles - if (selectedRoles.includes("all")) { - setDisplayedSelection("All Roles"); - } else if (selectedRoles.length > 0) { - const selectedRoleNames = selectedRoles.map(roleId => { - const role = jobRoleData?.find(r => String(r.id) === roleId); - return role ? role.name : ''; - }).filter(Boolean); // Filter out empty strings for roles not found - setDisplayedSelection(selectedRoleNames.join(', ')); - } else { - setDisplayedSelection("Select Roles"); - } - }, [selectedRoles, jobRoleData]); - - - const handleSearchChange = (event) => { - setSearchTerm(event.target.value); - }; - - // Filter employees first by role, then by search term AND job role name - const filteredEmployees = employees?.filter((emp) => { - const matchesRole = - selectedRoles.includes("all") || selectedRoles.includes(String(emp.jobRoleId)); - // Convert both first and last names and job role name to lowercase for case-insensitive matching - const fullName = `${emp.firstName} ${emp.lastName}`.toLowerCase(); - - const jobRoleName = jobRoleData?.find((role) => role.id === emp.jobRoleId)?.name?.toLowerCase() || ""; - - const searchLower = searchTerm.toLowerCase(); - // Check if the full name OR job role name includes the search term - const matchesSearch = fullName.includes(searchLower) || jobRoleName.includes(searchLower); - return matchesRole && matchesSearch; - }); - - // Determine unique job role IDs from the filtered employees (for dropdown options) - const uniqueJobRoleIdsInFilteredEmployees = new Set( - employees?.map(emp => emp.jobRoleId).filter(Boolean) - ); - - // Filter jobRoleData to only include roles present in the uniqueJobRoleIdsInFilteredEmployees - const jobRolesForDropdown = jobRoleData?.filter(role => - uniqueJobRoleIdsInFilteredEmployees.has(role.id) - ); - - // Calculate the count of selected roles for display - const selectedRolesCount = selectedRoles.includes("all") - ? 0 // "All Roles" doesn't contribute to a specific count - : selectedRoles.length; + const filteredEmployees = + selectedRole === "all" + ? employees + : employees?.filter( + (emp) => String(emp.jobRoleId || "") === selectedRole + ); const onSubmit = (data) => { const selectedEmployeeIds = data.selectedEmployees; @@ -224,339 +159,226 @@ const AssignTask = ({ assignData, onClose, setAssigned }) => { reset(); onClose(); }; - return ( -
-

Assign Task

-
-
-

- - Work Location : {/* Changed font-bold to fw-bold */} - {[ - assignData?.building?.buildingName, - assignData?.floor?.floorName, - assignData?.workArea?.areaName, - assignData?.workItem?.activityMaster?.activityName, - ] - .filter(Boolean) // Filter out any undefined/null values - .map((item, index, array) => ( - - {item} - {index < array.length - 1 && ( - - )} - - ))} - -

- -
-
-
-
-
-
- Select Team -
- - - {/* Badge */} - {selectedRolesCount > 0 && ( - - {selectedRolesCount} - +
+

Assign Task

+
+
+

+ + Work Location : + {[ + assignData?.building?.buildingName, + assignData?.floor?.floorName, + assignData?.workArea?.areaName, + assignData?.workItem?.activityMaster?.activityName, + ] + .filter(Boolean) // Filter out any undefined/null values + .map((item, index, array) => ( + + {item} + {index < array.length - 1 && ( + )} + + ))} + +

- {/* Dropdown Menu - Corrected: Removed duplicate ul block */} -
    -
  • {/* Changed key="all" to a unique key if possible, or keep it if "all" is a unique identifier */} -
    - handleRoleChange(e, e.target.value)} - /> - -
    -
  • - - {jobRolesForDropdown?.map((role) => ( -
  • -
    - handleRoleChange(e, e.target.value)} - /> - -
    -
  • - ))} -
-
- -
-
-
-
-
- {selectedRoles?.length > 0 && ( -
- {employeeLoading ? ( -
-

Loading employees...

-
- ) : filteredEmployees?.length > 0 ? ( - filteredEmployees.map((emp) => { - const jobRole = jobRoleData?.find( - (role) => role?.id === emp?.jobRoleId - ); - - return ( -
+
+
+ -
- {watch("selectedEmployees")?.length > 0 && ( -
-
- {watch("selectedEmployees")?.map((empId) => { - const emp = employees.find((emp) => emp.id === empId); - return ( - emp && ( - - {emp.firstName} {emp.lastName} - {/* Changed p tag to button for semantic correctness and accessibility */} +
    +
  • - - ) - ); - })} -
-
- )} -
- - {!loading && errors.selectedEmployees && ( -
-

{errors.selectedEmployees.message}

{" "} -
- )} - -
-
-
- -
-
+
- {/* Target for Today input and validation */} -
-
-
+ +
- Target for Today  - : - -
-
- ( -
- - + {watch("selectedEmployees")?.length > 0 && ( +
+
+ {watch("selectedEmployees")?.map((empId) => { + const emp = employees.find((emp) => emp.id === empId); + return ( + emp && ( + + {emp.firstName} {emp.lastName} +

{ + const updatedSelected = watch( + "selectedEmployees" + ).filter((id) => id !== empId); + setValue( + "selectedEmployees", + updatedSelected + ); + trigger("selectedEmployees"); + }} + > + +

+
+ ) + ); + })} +
+
+ )} +
+ + {!loading && errors.selectedEmployees && ( +
+

{errors.selectedEmployees.message}

{" "} +
+ )} + +
+
+
+ + {/* Target for Today input and validation */} +
+
+ +
+
+ ( +
+ + + { + assignData?.workItem?.workItem?.activityMaster + ?.unitOfMeasurement + } + +
+
+ +
+
+
+ )} + /> +
+ + {errors.plannedTask && ( +
+ {errors.plannedTask.message}
)} + + {isHelpVisible && ( +
+ {/* Add your help content here */} +

+ Enter the target value for today's task. +

+
+ )} +
+ + + ( +