import React, { useEffect, useState } from "react"; import WorkItem from "./WorkItem"; import { useProjectDetails } from "../../../hooks/useProjects"; import { cacheData, getCachedData } from "../../../slices/apiDataManager"; import { useDispatch } 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"; const WorkArea = ({ workArea, floor, forBuilding }) => { const [workItems, setWorkItems] = useState([]); const dispatch = useDispatch(); const [ Project, setProject ] = useState(); const {projectId} = useParams(); const ManageTasks = useHasUserPermission(MANAGE_TASK); const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA); const ManageAndAssignTak = useHasUserPermission( ASSIGN_REPORT_TASK ); useEffect(() => { const project = getCachedData("projectInfo"); setProject(project); if (!project || !forBuilding?.id || !floor?.id || !workArea?.id) return; const building = project.buildings?.find((b) => b.id === forBuilding.id); const floors = building?.floors?.find((f) => f.id === floor.id); const workAreas = floor?.workAreas?.find((wa) => wa.id === workArea.id); setWorkItems(workAreas?.workItems || []); }, [workArea, floor, floor]); const HanldeDeleteActivity = async (workItemId) => { try { const updatedProject = { ...Project.data }; const response = await ProjectRepository.deleteProjectTask(workItemId); const newProject = { ...updatedProject, buildings: updatedProject?.buildings.map((building) => building?.id === building?.id ? { ...building, floors: building?.floors?.map((floor) => floor.id === floor?.id ? { ...floor, workAreas: floor.workAreas.map((workArea) => workArea.id === workArea?.id ? { ...workArea, workItems: workArea.workItems.filter( (item) => String(item?.workItem?.id ?? item?.id) !== String(workItemId) ), } : workArea ), } : floor ), } : building ), }; 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 unexpected error occurred"; showToast(message, "error"); } }; useEffect(() => { const toggleButtons = document.querySelectorAll(".accordion-button"); toggleButtons.forEach((btn) => { const icon = btn.querySelector(".toggle-icon"); btn.addEventListener("click", () => { setTimeout(() => { if (btn.classList.contains("collapsed")) { icon.classList.remove("bx-minus-circle"); icon.classList.add("bx-plus-circle"); } else { icon.classList.remove("bx-plus-circle"); icon.classList.add("bx-minus-circle"); } }, 300); // allow Bootstrap collapse to complete }); }); return () => { toggleButtons.forEach((btn) => { btn.removeEventListener("click", () => {}); }); }; }, []); return (
{/* Accordion Header */}

{/* Accordion Body */} {workItems && workItems.length > 0 && (
{( ManageInfra || ( !projectId && ManageAndAssignTak ) ) && ( )} {workArea.workItems.map((workItem) => ( ))}
Activity Status Category Completed/Planned Today's Planned Progress Actions
)}
); }; export default WorkArea;