diff --git a/src/pages/project/ProjectList.jsx b/src/pages/project/ProjectList.jsx index a21a09a0..def125ce 100644 --- a/src/pages/project/ProjectList.jsx +++ b/src/pages/project/ProjectList.jsx @@ -110,12 +110,14 @@ const ProjectList = () => { indexOfFirstItem, indexOfLastItem ); - const totalPages = Math.ceil( filteredProjects.length / itemsPerPage ); - - useEffect(() => { - const tooltipTriggerList = Array.from(document.querySelectorAll('[data-bs-toggle="tooltip"]')); - tooltipTriggerList.forEach((el) => new bootstrap.Tooltip(el)); - }, []); + const totalPages = Math.ceil(filteredProjects.length / itemsPerPage); + + useEffect(() => { + const tooltipTriggerList = Array.from( + document.querySelectorAll('[data-bs-toggle="tooltip"]') + ); + tooltipTriggerList.forEach((el) => new bootstrap.Tooltip(el)); + }, []); return ( <> @@ -162,8 +164,12 @@ const ProjectList = () => { className={`btn btn-sm ${ listView ? "btn-primary" : "btn-outline-primary" }`} - onClick={() => setListView( true )} - data-bs-toggle="tooltip" data-bs-offset="0,8" data-bs-placement="top" data-bs-custom-class="tooltip" title="List View" + onClick={() => setListView(true)} + data-bs-toggle="tooltip" + data-bs-offset="0,8" + data-bs-placement="top" + data-bs-custom-class="tooltip" + title="List View" > @@ -173,8 +179,12 @@ const ProjectList = () => { className={`btn btn-sm ${ !listView ? "btn-primary" : "btn-outline-primary" }`} - onClick={() => setListView( false )} - data-bs-toggle="tooltip" data-bs-offset="0,8" data-bs-placement="top" data-bs-custom-class="tooltip" title="Card View" + onClick={() => setListView(false)} + data-bs-toggle="tooltip" + data-bs-offset="0,8" + data-bs-placement="top" + data-bs-custom-class="tooltip" + title="Card View" > @@ -202,10 +212,75 @@ const ProjectList = () => {
{listView ? ( - +
+ + + + + + + + + + + + + + + {currentItems.length === 0 ? ( + + + + ) : ( + currentItems.map((project) => ( + + )) + )} + +
+ Project Name + Project MangerSTART DATEDEADLINETaskProgress +
+ +
    + {[ + { id: 1, label: "Active" }, + { id: 2, label: "On Hold" }, + { id: 3, label: "Inactive" }, + { id: 4, label: "Completed" }, + ].map(({ id, label }) => ( +
  • +
    + handleStatusChange(id)} + /> + +
    +
  • + ))} +
+
+
+ Action +
+ No projects found +
+
) : ( currentItems.map((project) => ( diff --git a/src/pages/project/ProjectListView.jsx b/src/pages/project/ProjectListView.jsx index 6de16f01..428291f6 100644 --- a/src/pages/project/ProjectListView.jsx +++ b/src/pages/project/ProjectListView.jsx @@ -1,55 +1,31 @@ import React, { useState, useEffect } from "react"; import moment from "moment"; -import {useProjects} from "../../hooks/useProjects"; -import { getProjectStatusName,getProjectStatusColor } from "../../utils/projectStatus"; +import { useProjects } from "../../hooks/useProjects"; +import { + getProjectStatusName, + getProjectStatusColor, +} from "../../utils/projectStatus"; import ProgressBar from "../../components/common/ProgressBar"; -import {useNavigate} from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import ManageProject from "../../components/Project/ManageProject"; import ProjectRepository from "../../repositories/ProjectRepository"; -import {MANAGE_PROJECT} from "../../utils/constants"; +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"; +import { getCachedData, cacheData } from "../../slices/apiDataManager"; -const ProjectListView = ( {projectsData, onStatusFilterChange} ) =>{ - const [ projectDetails, setProjectDetails ] = useState( null ); - const[projectInfo,setProjectInfo] = useState(null) +const ProjectListView = ({ projectData }) => { + const [projectInfo, setProjectInfo] = useState(projectData); + const [projectDetails, setProjectDetails] = useState(null); const [showModal, setShowModal] = useState(false); - const projects = Array.isArray(projectsData) ? projectsData : []; + const navigate = useNavigate(); + const ManageProject = useHasUserPermission(MANAGE_PROJECT); - const [ selectedStatuses, setSelectedStatuses ] = useState( [ 1, 2, 3, 4 ] ); - const navigate = useNavigate() - - const handleStatusChange = (statusId) => { - const updated = selectedStatuses.includes(statusId) - ? selectedStatuses.filter((id) => id !== statusId) - : [...selectedStatuses, statusId]; - - setSelectedStatuses(updated); - onStatusFilterChange(updated); - }; - - useEffect(() => { - onStatusFilterChange(selectedStatuses); - }, []); - - const getProgress = (planned, completed) => { - return (completed * 100) / planned + "%"; - }; - const getProgressInNumber = (planned, completed) => { - return (completed * 100) / planned; - }; - const filteredProjects = projects.filter((project) => - selectedStatuses.includes(project.projectStatusId) - ); - - const handleShow = async ( project) => - { - setProjectInfo(project) + const handleShow = async () => { try { const response = await ProjectRepository.getProjectByprojectId( - project.id + projectInfo.id ); setProjectDetails(response.data); setShowModal(true); @@ -57,8 +33,22 @@ const ProjectListView = ( {projectsData, onStatusFilterChange} ) =>{ 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 handleFormSubmit = (updatedProject,projectInfo) => { + + + const handleViewProject = () => { + navigate(`/projects/${projectData.id}`); + }; + + const handleFormSubmit = (updatedProject) => { if (projectInfo?.id) { ProjectRepository.updateProject(projectInfo.id, updatedProject) .then((response) => { @@ -68,7 +58,7 @@ const ProjectListView = ( {projectsData, onStatusFilterChange} ) =>{ building: projectDetails?.building, }; - setProjectInfo(updatedProject); + setProjectInfo( updatedProjectData ); if (getCachedData(`projectinfo-${projectInfo.id}`)) { cacheData(`projectinfo-${projectInfo.id}`, updatedProjectData); @@ -84,7 +74,6 @@ const ProjectListView = ( {projectsData, onStatusFilterChange} ) =>{ cacheData("projectslist", updatedProjectsList); } showToast("Project updated successfully.", "success"); - setShowModal(false); }) .catch((error) => { @@ -92,10 +81,9 @@ const ProjectListView = ( {projectsData, onStatusFilterChange} ) =>{ }); } }; - - return (<> - - {showModal && projectDetails && ( + return ( + <> + {showModal && projectDetails && (
{ />
)} -
- - - - - - - - - - + + + + + + + + + + - - - - {filteredProjects.length === 0 ? ( - - - - ) : ( - filteredProjects.map((project) => ( - - - - - - - - - - - - - )) - )} - -
- Project Name - Project MangerSTART DATEDEADLINETaskProgress -
+ +
+ 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)} + +

+
+
+ +
- -
Action
- No projects found -
- navigate(`/projects/${project.id}`)}>{project.name} - {project.contactPerson} - - {project.startDate - ? moment(project.startDate).format("DD-MMM-YYYY") - : "NA"} - - - {project.endDate - ? moment(project.endDate).format("DD-MMM-YYYY") - : "NA"} - {project.plannedWork} - - -

- - {getProjectStatusName(project.projectStatusId)} - -

-
-
- - -
-
-
- + +
  • + + + Modify + +
  • +
  • + navigate(`/activities/records?project=${projectInfo.id}`) + } + > + + + Activities + +
  • + +
    + + + ); };