import React, { useState, useEffect } from "react"; import AssignRoleModel from "../AssignRole"; import { useParams } from "react-router-dom"; import EditActivityModal from "./EditActivityModal"; import { useHasUserPermission } from "../../../hooks/useHasUserPermission"; import { MANAGE_PROJECT_INFRA, MANAGE_TASK } from "../../../utils/constants"; import ConfirmModal from "../../common/ConfirmModal"; import ProjectRepository from "../../../repositories/ProjectRepository"; import { useProjectDetails } from "../../../hooks/useProjects"; import showToast from "../../../services/toastService"; import { cacheData, getCachedData } from "../../../slices/apiDataManager"; import { useDispatch } from "react-redux"; import { refreshData } from "../../../slices/localVariablesSlice"; const WorkItem = ({ workItem, forBuilding, forFloor, forWorkArea }) => { const { projectId } = useParams(); const [itemName, setItemName] = useState(""); const [NewWorkItem, setNewWorkItem] = useState(); const [isModalOpen, setIsModalOpen] = useState(false); const [showModal, setShowModal] = useState(false); const [showModal2, setShowModal2] = useState(false); const ManageTasks = useHasUserPermission(MANAGE_TASK); const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA); const [loadingDelete, setLoadingDelete] = useState(false); const project = getCachedData("projectInfo"); const dispatch = useDispatch(); const { projects_Details } = useProjectDetails( projectId || project?.projectId ); const openModal = () => setIsModalOpen(true); const closeModal = () => setIsModalOpen(false); const getProgress = (planned, completed) => { return (completed * 100) / planned + "%"; }; const handleAssignTask = () => { setItemName(""); }; useEffect(() => { setNewWorkItem(workItem); }, [workItem]); let assigndata = { building: forBuilding, floor: forFloor, workArea: forWorkArea, workItem, }; const hasWorkItem = NewWorkItem && NewWorkItem; useEffect(() => { const tooltipTriggerList = Array.from( document.querySelectorAll('[data-bs-toggle="tooltip"]') ); tooltipTriggerList.forEach((el) => new bootstrap.Tooltip(el)); }, []); const showModal1 = () => setShowModal(true); const closeModal1 = () => setShowModal(false); const showModalDelete = () => setShowModal2(true); const closeModalDelete = () => setShowModal2(false); const handleSubmit = async () => { setLoadingDelete(true); try { const updatedProject = { ...projects_Details }; const response = await ProjectRepository.deleteProjectTask( workItem.workItemId || workItem.id); const newProject = { ...updatedProject, buildings: updatedProject.buildings.map((building) => building.id === forBuilding?.id ? { ...building, floors: building.floors.map((floor) => floor.id === forFloor?.id ? { ...floor, workAreas: floor.workAreas.map((workArea) => workArea.id === forWorkArea?.id ? { ...workArea, workItems: workArea.workItems.filter( (item) => String(item?.workItem?.id ?? item?.id) !== String(workItem.workItemId) ), } : workArea ), } : floor ), } : building ), }; cacheData("projectInfo", { projectId: newProject.id, data: newProject, }); dispatch(refreshData(true)); closeModalDelete(); setLoadingDelete(false); showToast("Activity Deleted Successfully", "success"); } catch (error) { setLoadingDelete(false); closeModalDelete(); const message = error.response?.data?.message || error.message || "An unexpected error occurred"; showToast(message, "error"); } }; const PlannedWork = NewWorkItem?.workItem?.plannedWork || workItem?.plannedWork; const CompletedWork = NewWorkItem?.workItem?.completedWork ?? workItem?.completedWork; return ( <> {isModalOpen && (
)} {showModal && (
)} {showModal2 && (
)} {hasWorkItem ? NewWorkItem?.workItem?.activityMaster?.activityName || workItem.activityMaster?.activityName : "NA"} {/* for mobile view */} {hasWorkItem ? NewWorkItem?.workItem?.completedWork ?? workItem?.completedWork ?? "NA" : "NA"} /{" "} {hasWorkItem ? NewWorkItem?.workItem?.plannedWork || workItem?.plannedWork : "NA"} {/* for greather than mobile view ************* */} {hasWorkItem ? NewWorkItem?.workItem?.plannedWork ?? workItem?.plannedWork ?? "NA" : "NA"} {hasWorkItem ? NewWorkItem?.workItem?.completedWork ?? workItem?.completedWork ?? "NA" : "NA"}
{/* Reserve space for Assign button */}
{(!projectId && ManageTasks) && (PlannedWork !== CompletedWork) ? ( ) : ( // Hidden placeholder to preserve layout Assign )}
{/* Edit and Delete buttons */} {ManageInfra && ( <> )}
); }; export default WorkItem;