import React, { useEffect, useState } from "react"; import moment from "moment"; import { formatNumber, getDateDifferenceInDays } from "../../utils/dateUtils"; import { useNavigate } from "react-router-dom"; import { useProjectDetails, useUpdateProject } 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"; import GlobalModel from "../common/GlobalModel"; import { useDispatch } from "react-redux"; import { setProjectId } from "../../slices/localVariablesSlice"; const ProjectCard = ({ projectData, recall }) => { const [projectInfo, setProjectInfo] = useState(projectData); const { projects_Details, loading, error, refetch } = useProjectDetails( projectInfo?.id, false ); const [showModal, setShowModal] = useState(false); const dispatch = useDispatch() const navigate = useNavigate(); const ManageProject = useHasUserPermission(MANAGE_PROJECT); const { mutate: updateProject, isPending, isSuccess, isError, } = useUpdateProject({ onSuccessCallback: () => { setShowModal(false); }, }) useEffect(() => { setProjectInfo(projectData); }, [projectData]) const handleShow = async () => { try { const { data } = await refetch(); setShowModal(true); } catch (err) { 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 = () => { dispatch(setProjectId(projectInfo.id)) navigate(`/projects/details`); }; const handleViewActivities = () => { dispatch(setProjectId(projectInfo.id)) navigate(`/activities/records?project=${projectInfo.id}`); }; const handleFormSubmit = (updatedProject) => { if (projectInfo?.id) { updateProject({ projectId: projectInfo.id, updatedData: updatedProject, }); } }; return ( <> {showModal && projects_Details && ( )}
{projectInfo.shortName ? projectInfo.shortName : projectInfo.name}
{projectInfo.shortName ? projectInfo.name : ""}

Contact Person:{" "} {projectInfo.contactPerson ? projectInfo.contactPerson : "NA"}

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: {formatNumber(projectInfo.completedWork)} / {formatNumber(projectInfo.plannedWork)} {Math.floor( getProgressInNumber( projectInfo.plannedWork, projectInfo.completedWork ) ) || 0}{" "} % Completed
{/*
*/}
{projectInfo?.teamSize} Members
{" "} 15
); }; export default ProjectCard;