import React, { useState, useEffect } from "react"; import moment from "moment"; import { useProjects } from "../../hooks/useProjects"; import { getProjectStatusName, getProjectStatusColor, } from "../../utils/projectStatus"; import ProgressBar from "../../components/common/ProgressBar"; import { useNavigate } from "react-router-dom"; import ManageProject from "../../components/Project/ManageProject"; import ProjectRepository from "../../repositories/ProjectRepository"; import { MANAGE_PROJECT } from "../../utils/constants"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import ManageProjectInfo from "../../components/Project/ManageProjectInfo"; import showToast from "../../services/toastService"; import { getCachedData, cacheData } from "../../slices/apiDataManager"; const ProjectListView = ({ projectData }) => { const [projectInfo, setProjectInfo] = useState(projectData); const [projectDetails, setProjectDetails] = useState(null); const [showModal, setShowModal] = useState(false); const navigate = useNavigate(); const ManageProject = useHasUserPermission(MANAGE_PROJECT); const handleShow = async () => { try { const response = await ProjectRepository.getProjectByprojectId( projectInfo.id ); setProjectDetails(response.data); setShowModal(true); } catch (error) { showToast("Failed to load project details", "error"); } }; const getProgress = (planned, completed) => { return (completed * 100) / planned + "%"; }; const getProgressInNumber = (planned, completed) => { return (completed * 100) / planned; }; const handleClose = () => setShowModal(false); const handleViewProject = () => { navigate(`/projects/${projectData.id}`); }; const handleFormSubmit = (updatedProject) => { if (projectInfo?.id) { ProjectRepository.updateProject(projectInfo.id, updatedProject) .then((response) => { const updatedProjectData = { ...projectInfo, ...response.data, building: projectDetails?.building, }; setProjectInfo(updatedProjectData); if (getCachedData(`projectinfo-${projectInfo.id}`)) { cacheData(`projectinfo-${projectInfo.id}`, updatedProjectData); } const projects_list = getCachedData("projectslist"); if (projects_list) { const updatedProjectsList = projects_list.map((project) => project.id === projectInfo.id ? { ...project, ...response.data, // tenant: project.tenant } : project ); cacheData("projectslist", updatedProjectsList); } showToast("Project updated successfully.", "success"); setShowModal(false); }) .catch((error) => { showToast(error.message, "error"); }); } }; return ( <> {showModal && projectDetails && (
)} navigate(`/projects/${projectInfo.id}`)} > {projectInfo.name} {projectInfo.contactPerson} {projectInfo.startDate ? moment(projectInfo.startDate).format("DD-MMM-YYYY") : "NA"} {projectInfo.endDate ? moment(projectInfo.endDate).format("DD-MMM-YYYY") : "NA"} {projectInfo.plannedWork}

{getProjectStatusName(projectInfo.projectStatusId)}

); }; export default ProjectListView;