import React, { useEffect, useState } from "react"; import WorkItem from "./WorkItem"; import { useProjectDetails, useProjectTasks } from "../../../hooks/useProjects"; import { cacheData } from "../../../slices/apiDataManager"; import { useDispatch, useSelector } from "react-redux"; import { refreshData } from "../../../slices/localVariablesSlice"; import ProjectRepository from "../../../repositories/ProjectRepository"; import showToast from "../../../services/toastService"; import { useHasUserPermission } from "../../../hooks/useHasUserPermission"; import { ASSIGN_REPORT_TASK, MANAGE_PROJECT_INFRA, MANAGE_TASK, } from "../../../utils/constants"; import { useParams } from "react-router-dom"; import ProgressBar from "../../common/ProgressBar"; const WorkArea = ({ workArea, floor, forBuilding }) => { const selectedProject = useSelector((store) => store.localVariables.projectId); const { projects_Details, loading } = useProjectDetails(selectedProject); const [IsExpandedArea, setIsExpandedArea] = useState(false); const dispatch = useDispatch(); const [Project, setProject] = useState(); const { projectId } = useParams(); const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA); const ManageAndAssignTak = useHasUserPermission(ASSIGN_REPORT_TASK); const { ProjectTaskList, isLoading } = useProjectTasks(workArea.id, IsExpandedArea); const [workAreaStatus, setWorkAreaStatus] = useState({ completed: 0, planned: 100, }); useEffect(() => { setProject(projects_Details); }, [projects_Details]); useEffect(() => { const totalCompleted = ProjectTaskList?.reduce( (sum, i) => sum + (i?.workItem?.completedWork || 0), 0 ); const totalPlanned = ProjectTaskList?.reduce( (sum, i) => sum + (i?.workItem?.plannedWork || 0), 0 ); setWorkAreaStatus({ completed: totalCompleted, planned: totalPlanned }); }, [ProjectTaskList]); const HanldeDeleteActivity = async (workItemId) => { try { const updatedProject = { ...Project.data }; await ProjectRepository.deleteProjectTask(workItemId); const newProject = { ...updatedProject, buildings: updatedProject?.buildings.map((building) => ({ ...building, floors: building?.floors.map((floor) => ({ ...floor, workAreas: floor.workAreas.map((wa) => wa.id === workArea.id ? { ...wa, workItems: wa.workItems.filter( (item) => String(item?.workItem?.id ?? item?.id) !== String(workItemId) ), } : wa ), })), })), }; cacheData("projectInfo", { projectId: newProject.id, data: newProject, }); dispatch(refreshData(true)); showToast("Activity Deleted Successfully", "success"); } catch (error) { const message = error.response?.data?.message || error.message || "An error occurred"; showToast(message, "error"); } }; useEffect(() => { const collapseElement = document.getElementById(`collapse-${workArea.id}`); const handleShown = () => setIsExpandedArea(true); const handleHidden = () => setIsExpandedArea(false); collapseElement?.addEventListener("shown.bs.collapse", handleShown); collapseElement?.addEventListener("hidden.bs.collapse", handleHidden); return () => { collapseElement?.removeEventListener("shown.bs.collapse", handleShown); collapseElement?.removeEventListener("hidden.bs.collapse", handleHidden); }; }, [workArea.id]); return (

{isLoading ? (
Loading activities...
) : ProjectTaskList?.length > 0 ? ( {(ManageInfra || (!projectId && ManageAndAssignTak)) && ( )} {ProjectTaskList.map((workItem) => ( ))}
Activity Status Category Completed/Planned Today's Planned Progress Actions
) : (
No activities available for this work area.
)}
); }; export default WorkArea;