import React, { useState } from "react"; import moment from "moment"; import { getDateDifferenceInDays } from "../../utils/dateUtils"; import { useNavigate } from "react-router-dom"; import { useProjectDetails } from "../../hooks/useProjects"; import ManageProjectInfo from "./ManageProjectInfo"; import ProjectRepository from "../../repositories/ProjectRepository"; import { cacheData, getCachedData } from "../../slices/apiDataManager"; import showToast from "../../services/toastService"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import {MANAGE_PROJECT} from "../../utils/constants"; import { getProjectStatusColor,getProjectStatusName } from "../../utils/projectStatus"; const ProjectCard = ({ 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(updatedProject); 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 && (
)}
{projectInfo.name}
Client: {projectInfo.contactPerson}

Start Date: {projectInfo.startDate ? moment(projectInfo.startDate).format("DD-MMM-YYYY") : "NA"}

Deadline: {projectInfo.endDate ? moment(projectInfo.endDate).format("DD-MMM-YYYY") : "NA"}

{projectInfo.projectAddress}

{getProjectStatusName(projectInfo.projectStatusId)}

{" "} {getDateDifferenceInDays(projectInfo.endDate, Date()) >= 0 && ( {projectInfo.endDate && getDateDifferenceInDays(projectInfo.endDate, Date())}{" "} Days left )} {getDateDifferenceInDays(projectInfo.endDate, Date()) < 0 && ( {projectInfo.endDate && getDateDifferenceInDays(projectInfo.endDate, Date())}{" "} Days overdue )}
Task: {projectInfo.completedWork} / {projectInfo.plannedWork} {Math.floor( getProgressInNumber( projectInfo.plannedWork, projectInfo.completedWork ) ) || 0}{" "} % Completed
{/*
*/}
{projectInfo?.teamSize} Members
{" "} 15
); }; export default ProjectCard;