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"} ), pannedTask: z.number() .refine(value => value > 0, { message: "pannedTask should be greater than zero" }) .refine(value => value !== undefined, { message: "pannedTask is required" }), }) const AssignRoleModel = ( {assignData,onClose}) => { 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 } } = 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); 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 ); console.log( response ) showToast( "Task Successfully Assigend", "success" ) closeModal() } catch ( error ) { showToast("something wrong","error") } }; console.log(assignData?.workItem?.workItem) 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)); }} >

); })}
)} {errors.selectedEmployees && (

{errors.selectedEmployees[0]}

)}
( )} /> {errors.pannedTask && (

{errors.pannedTask.message}

)}
(