import React, { useState, useEffect } from "react"; import ProjectCard from "../../components/Project/ProjectCard"; import ManageProjectInfo from "../../components/Project/ManageProjectInfo"; import Breadcrumb from "../../components/common/Breadcrumb"; import ProjectRepository from "../../repositories/ProjectRepository"; import { useProjects } from "../../hooks/useProjects"; import { useDispatch } from "react-redux"; import showToast from "../../services/toastService"; import { getCachedData, cacheData} from "../../slices/apiDataManager"; import {useHasUserPermission} from "../../hooks/useHasUserPermission" import { useProfile } from "../../hooks/useProfile"; import {MANAGE_PROJECT} from "../../utils/constants"; const ProjectList = () => { const {profile: loginUser} = useProfile(); const [showModal, setShowModal] = useState(false); const {projects, loading, error, refetch} = useProjects(); const [refresh, setRefresh] = useState(false); const [ projectList, setProjectList ] = useState( [] ); const HasManageProjectPermission = useHasUserPermission( MANAGE_PROJECT ) const[HasManageProject,setHasManageProject] = useState(HasManageProjectPermission) const dispatch = useDispatch(); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage] = useState(6); const handleShow = () => setShowModal(true); const handleClose = () => setShowModal( false ); useEffect(() => { setProjectList( projects ) }, [ projects, loginUser?.projects, loading ] ); useEffect(() => { if (loginUser) { setHasManageProject(HasManageProjectPermission); } else { setHasManageProject(false); } }, [loginUser, HasManageProjectPermission]); const handleSubmitForm = (newProject) => { ProjectRepository.manageProject(newProject) .then( ( response ) => { const cachedProjects_list = getCachedData( "projectslist" ) || []; const updated_Projects_list = [ ...cachedProjects_list, response.data ]; cacheData("projectslist", updated_Projects_list); setProjectList((prevProjectList) => [...prevProjectList, response.data]); showToast("Project Created successfully.", "success"); setShowModal(false) }) .catch((error) => { closeModal(); showToast(error.message, "error"); }); }; const handleReFresh = () => { if (!projects || projects.length === 0) { refetch(); } setRefresh((prev) => !prev); }; const indexOfLastItem = currentPage * itemsPerPage; const indexOfFirstItem = indexOfLastItem - itemsPerPage; const currentItems = Array.isArray(projectList) ? projectList.slice(indexOfFirstItem, indexOfLastItem) : []; const paginate = (pageNumber) => setCurrentPage(pageNumber); const totalPages = Array.isArray(projectList) ? Math.ceil(projectList.length / itemsPerPage) : 0; return ( <>
There was an error loading the projects. Please try again.
)} {(!projects || projects.length === 0 || projectList.length == 0) && !loading && error && (Loading...
} {currentItems && currentItems.sort((a, b) => b.id - a.id).map((item) => (