import React, { useState, useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import { changeMaster } from "../../slices/localVariablesSlice"; import useMaster from "../../hooks/masterHook/useMaster"; import { employee } from "../../data/masters"; import { useForm, Controller } from "react-hook-form"; import { z } from "zod"; import { getCachedData } from "../../slices/apiDataManager"; import { useModal } from "../../ModalContext"; import { useProjects } from "../../hooks/useProjects"; import { useEmployeesAllOrByProjectId } from "../../hooks/useEmployees"; import { TasksRepository } from "../../repositories/ProjectRepository"; import showToast from "../../services/toastService"; const schema = z.object({ selectedEmployees: z .array(z.number()) .min(1, { message: "At least one employee must be selected" }), description: z.string().min(1, { message: "description required" }), }); const AssignRoleModel = ({ assignData, onClose }) => { const [plannedTask, setPlannedTask] = useState(); const { openModal, closeModal } = useModal(); const selectedProject = useSelector( (store) => store.localVariables.projectId ); const { employees } = useEmployeesAllOrByProjectId(selectedProject); const dispatch = useDispatch(); const { data, loading } = useMaster(); const jobRoleData = getCachedData("Job Role"); const [selectedRole, setSelectedRole] = useState("all"); const [selectedEmployees, setSelectedEmployees] = useState([]); const { handleSubmit, control, setValue, watch, formState: { errors },reset } = useForm({ defaultValues: { selectedEmployees: [], description:"" }, resolver: (data) => { const validation = schema.safeParse(data); if (validation.success) return { values: data, errors: {} }; return { values: {}, errors: validation.error.formErrors.fieldErrors }; }, }); const handleRoleChange = (event) => { setSelectedRole(event.plannedTask.value); }; const filteredEmployees = selectedRole === "all" ? employees : employees.filter((emp) => emp.JobRoleId.toString() === selectedRole); // not need currently for this fun const handleEmployeeSelection = (employeeId, field) => { setSelectedEmployees((prevSelected) => { let updatedSelection; if (!prevSelected.includes(employeeId)) { updatedSelection = [...prevSelected, employeeId]; } else { updatedSelection = prevSelected.filter((id) => id !== employeeId); } field.onChange(updatedSelection); return updatedSelection; }); }; const removeEmployee = (employeeId) => { setSelectedEmployees((prevSelected) => { const updatedSelection = prevSelected.filter((id) => id !== employeeId); setValue("selectedEmployees", updatedSelection); // Ensure form state is updated return updatedSelection; }); }; const onSubmit = async(data) => { const formattedData = { taskTeam: data.selectedEmployees, plannedTask: parseInt( plannedTask, 10 ), description: data.description, assignmentDate: new Date().toISOString(), workItemId:assignData?.workItem?.workItem.id }; try { let response = await TasksRepository.assignTask( formattedData ); showToast( "Task Successfully Assigend", "success" ) reset() onClose() } catch ( error ) { showToast("something wrong","error") } }; useEffect(()=>{ dispatch(changeMaster("Job Role")) return ()=> setSelectedRole("all") },[dispatch]) return ( <>
{[ assignData?.building?.name, assignData?.floor?.floorName, assignData?.workArea?.areaName, assignData?.workItem?.workItem?.activityMaster?.activityName, ].map((item, index, array) => (
{item} {/* Arrow between items */} {index < array.length - 1 && (
)}
))}
Select Role
Employee
{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")}
); })}
)} {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) ); }} >

); })}
)}
setPlannedTask(e.target.value)} id="defaultFormControlInput" aria-describedby="defaultFormControlHelp" />
{errors.selectedEmployees && (

{errors.selectedEmployees[0]}

)} (