285 lines
9.2 KiB
JavaScript

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 DleleteActivity from "./DleleteActivity";
import ConfirmModal from "../../common/ConfirmModal";
import ProjectRepository from '../../../repositories/ProjectRepository'
import {useProjectDetails} from '../../../hooks/useProjects'
import showToast from "../../../services/toastService";
import {cacheData} 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 dispatch = useDispatch()
const {projects_Details} = useProjectDetails(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 );
console.log(workItem)
const handleSubmit = async() => {
setLoadingDelete(true);
try
{
const updatedProject = { ...projects_Details };
const response = await ProjectRepository.deleteProjectTask( workItem.workItemId );
debugger
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
),
};
console.log(newProject)
cacheData("projectInfo", {
projectId: newProject.id,
data: newProject,
});
dispatch( refreshData( true ) );
setLoadingDelete(false)
showToast("Activity Updated Successfully","success")
} catch ( error )
{
setLoadingDelete(false)
const message =
error.response?.data?.message ||
error.message ||
"An unexpected error occurred";
showToast( message, "error" );
console.log(error)
}
};
return (
<>
{isModalOpen && (
<div
className={`modal fade ${isModalOpen ? "show" : ""}`}
tabIndex="-1"
role="dialog"
style={{ display: isModalOpen ? "block" : "none" }}
aria-hidden={!isModalOpen}
>
<AssignRoleModel assignData={assigndata} onClose={closeModal} />
</div>
)}
{showModal && <div
className={`modal fade ${showModal ? "show" : ""}`}
tabIndex="-1"
role="dialog"
style={{ display: showModal ? "block" : "none" }}
aria-hidden={!showModal}
>
<EditActivityModal
workItem={workItem}
workArea={forWorkArea}
building={forBuilding}
floor={forFloor}
onClose={closeModal1}
/>
</div>}
{showModal2 && <div
className={`modal fade ${showModal2 ? "show" : ""}`}
tabIndex="-1"
role="dialog"
style={{ display: showModal2 ? "block" : "none" }}
aria-hidden='false'
>
{/* <DleleteActivity
workItem={workItem}
workArea={forWorkArea}
building={forBuilding}
floor={forFloor}
onClose={closeModalDelete}
/> */}
<ConfirmModal type={"delete"} message={"Are you sure you want delete"} onSubmit={ handleSubmit} onClose={closeModalDelete} loading={loadingDelete}/>
</div> }
<tr>
<td className="text-start table-cell-small">
<i className="bx bx-right-arrow-alt"></i>
<span className="fw-light">
{hasWorkItem
? NewWorkItem?.workItem?.activityMaster?.activityName ||
workItem.activityMaster?.activityName
: "NA"}
</span>
</td>
{/* for mobile view */}
<td className="text-center d-sm-none d-sm-table-cell">
{hasWorkItem
? NewWorkItem?.workItem?.completedWork ?? workItem?.completedWork ?? "NA"
: "NA"}/{" "}
{hasWorkItem
? NewWorkItem?.workItem?.plannedWork || workItem?.plannedWork
: "NA"}
</td>
{/* for greather than mobile view ************* */}
<td className="text-center d-none d-md-table-cell">
{hasWorkItem
? NewWorkItem?.workItem?.plannedWork ?? workItem?.plannedWork ?? "NA"
: "NA"}
</td>
<td className="text-center d-none d-md-table-cell">
{hasWorkItem
? NewWorkItem?.workItem?.completedWork ?? workItem?.completedWork ?? "NA"
: "NA"}
</td>
<td className="text-center" style={{ width: "15%" }}>
<div className="progress p-0">
<div
className="progress-bar"
role="progressbar"
style={{
width: getProgress(
NewWorkItem?.workItem?.plannedWork || workItem?.plannedWork,
NewWorkItem?.workItem?.completedWork ||
workItem?.completedWork
),
height: "5px",
}}
aria-valuenow={NewWorkItem?.workItem?.completedWor}
aria-valuemin="0"
aria-valuemax={
hasWorkItem
? NewWorkItem?.workItem?.plannedWork || workItem?.plannedWork
: 0
}
></div>
</div>
</td>
<td className="d-md-table-cell">
<div className="dropdown">
{!projectId && ManageTasks && (
<button
aria-label="Modify"
type="button"
className="btn p-0"
data-bs-toggle="modal"
data-bs-target="#project-modal"
onClick={openModal}
>
<span className="badge badge-md bg-label-primary me-1">
Assign
</span>
</button>
)}
{ ManageInfra && (
<>
<button
aria-label="Modify"
type="button"
className="btn p-0 dropdown-toggle hide-arrow"
onClick={showModal1}
>
<i
className="bx bxs-edit me-2 text-primary"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Edit Activity"
data-bs-original-title="Edit Activity"
></i>
</button>
<button
aria-label="Delete"
type="button"
className="btn p-0 dropdown-toggle hide-arrow"
onClick={showModalDelete}
>
<i
className="bx bx-trash me-1 text-danger"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Delete Activity"
data-bs-original-title="Delete Activity"
></i>
</button>
</>
)}
</div>
</td>
</tr>
</>
);
};
export default WorkItem;