import React, { useState, useEffect } from "react"; import AssignTask from "../AssignTask"; import { useParams } from "react-router-dom"; import EditActivityModal from "./EditActivityModal"; import { useHasUserPermission } from "../../../hooks/useHasUserPermission"; import { ASSIGN_REPORT_TASK, MANAGE_PROJECT_INFRA, MANAGE_TASK, } from "../../../utils/constants"; import ConfirmModal from "../../common/ConfirmModal"; import ProjectRepository from "../../../repositories/ProjectRepository"; import { useDeleteProjectTask, useProjectDetails } from "../../../hooks/useProjects"; import showToast from "../../../services/toastService"; import { cacheData, clearCacheKey, getCachedData, } from "../../../slices/apiDataManager"; import { refreshData } from "../../../slices/localVariablesSlice"; import GlobalModel from "../../common/GlobalModel"; import {useDeleteMasterItem} from "../../../hooks/masterHook/useMaster"; const WorkItem = ({ workItem, forBuilding, forFloor, forWorkArea, deleteHandleTask, }) => { 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 ManageAndAssignTak = useHasUserPermission(ASSIGN_REPORT_TASK); const [loadingDelete, setLoadingDelete] = useState(false); const project = getCachedData("projectInfo"); const openModal = () => setIsModalOpen(true); const closeModal = () => setIsModalOpen( false ); const showModalDelete = () => setShowModal2(true); const closeModalDelete = () => setShowModal2(false); const getProgress = (planned, completed) => { return (completed * 100) / planned + "%"; }; const {mutate:DeleteTask,isPending } = useDeleteProjectTask(() => { closeModalDelete?.(); }); const handleAssignTask = () => { setItemName(""); }; useEffect(() => { setNewWorkItem(workItem); }, [workItem]); const refreshWorkItem = (plannedTask) =>{ if (workItem) { const updated = { ...workItem, todaysAssigned: (workItem.todaysAssigned || 0) + plannedTask, }; setNewWorkItem(updated); } } 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 handleSubmit = async () => { let WorkItemId = workItem.workItemId || workItem.id; DeleteTask({workItemId:WorkItemId,workAreaId:forWorkArea?.id}) }; const PlannedWork = NewWorkItem?.workItem?.plannedWork || workItem?.plannedWork; const CompletedWork = NewWorkItem?.workItem?.completedWork ?? workItem?.completedWork; return ( <> {isModalOpen && ( )} {showModal && ( setShowModal(false)}> setShowModal(false)} /> )} {showModal2 && (
)} {/* Activity Name - always visible */} {hasWorkItem ? NewWorkItem?.workItem?.activityMaster?.activityName || workItem.activityMaster?.activityName : "NA"} {/* Status - visible only on small screens */} {hasWorkItem ? NewWorkItem?.workItem?.completedWork ?? workItem?.completedWork ?? "NA" : "NA"} /{" "} {hasWorkItem ? NewWorkItem?.workItem?.plannedWork || workItem?.plannedWork : "NA"} {hasWorkItem ? NewWorkItem?.workItem?.workCategoryMaster?.name || workItem.workCategoryMaster?.name || "NA" : "NA"} {hasWorkItem ? `${ NewWorkItem?.workItem?.completedWork ?? workItem?.completedWork ?? "0" }/${ NewWorkItem?.workItem?.plannedWork ?? workItem?.plannedWork ?? "0" }` : "NA"} {hasWorkItem ? `${ NewWorkItem?.todaysAssigned ?? workItem?.todaysAssigned ?? "0" }` : "NA"}
{(ManageInfra || (!projectId && ManageAndAssignTak && PlannedWork !== CompletedWork)) && ( {/* Desktop (md and up): inline icons */}
{!projectId && ManageAndAssignTak && PlannedWork !== CompletedWork && ( )} {ManageInfra && ( <> setShowModal(true)} role="button" > )}
{/* Mobile (sm only): dropdown with icons */}
)} ); }; export default WorkItem;