From 8e455e96b48d8cbf80db3046bb5f28ff03a344ec Mon Sep 17 00:00:00 2001 From: PramodMahajan14 Date: Wed, 26 Mar 2025 13:02:49 +0530 Subject: [PATCH] updated projectList comp. immediately update rights --- src/components/Project/ManageProjectInfo.jsx | 9 +--- src/hooks/useProfile.js | 56 +++++++++++--------- src/pages/authentication/LoginPage.jsx | 6 ++- src/pages/employee/EmployeeList.jsx | 33 +++++------- src/pages/project/ProjectList.jsx | 51 ++++++++++-------- 5 files changed, 80 insertions(+), 75 deletions(-) diff --git a/src/components/Project/ManageProjectInfo.jsx b/src/components/Project/ManageProjectInfo.jsx index cafb9925..c257a4f9 100644 --- a/src/components/Project/ManageProjectInfo.jsx +++ b/src/components/Project/ManageProjectInfo.jsx @@ -18,8 +18,7 @@ const formatDate = (date) => { }; const ManageProjectInfo = ( {project,handleSubmitForm, onClose} ) => { - debugger - + const [CurrentProject,setCurrentProject] = useState() const [ isloading, setLoading ] = useState( false ) @@ -82,11 +81,7 @@ const ManageProjectInfo = ( {project,handleSubmitForm, onClose} ) => setLoading( true ) handleSubmitForm( updatedProject ) }; - - useEffect( () => - { - return ()=>setLoading(false) - } ) + diff --git a/src/hooks/useProfile.js b/src/hooks/useProfile.js index 1e3bfcf2..1c663e0d 100644 --- a/src/hooks/useProfile.js +++ b/src/hooks/useProfile.js @@ -1,40 +1,46 @@ import {useState,useEffect} from "react"; import AuthRepository from "../repositories/AuthRepository"; import {cacheProfileData, getCachedProfileData} from "../slices/apiDataManager"; +import {useSelector} from "react-redux"; -export const useProfile =()=>{ +export const useProfile = () => +{ + const loggedUser = useSelector((store)=>store.globalVariables.loginUser) + const [profile, setProfile] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); - + const fetchData = async () => + { + try + { + setLoading( true ) + let response = await AuthRepository.profile(); + setProfile( response ) + cacheProfileData( response ) + setLoading( false ); + + } catch ( error ) + { + setLoading( false ) + console.error( error ); + setError( "Failed to fetch data." ); + }; + } useEffect( () => { - - const fetchData = async () => { - const profile_cache = getCachedProfileData() - - // if (!profile_cache) { - setLoading(true) - AuthRepository.profile() - .then((response) => { - setProfile(response) - cacheProfileData(response) - setLoading(false); - }) - .catch((error) => { - setLoading(false) - console.error(error); - setError("Failed to fetch data."); - }); - - // } else { - // setProfile(profile_cache); - // } - }; - fetchData() + + if (!loggedUser ) + { + fetchData() + } else + { + setProfile(loggedUser) + } + },[]) return { profile,loading,error} diff --git a/src/pages/authentication/LoginPage.jsx b/src/pages/authentication/LoginPage.jsx index 204f8f9f..65623b1a 100644 --- a/src/pages/authentication/LoginPage.jsx +++ b/src/pages/authentication/LoginPage.jsx @@ -25,7 +25,9 @@ const LoginPage = () => { })); }; - const handleSubmit = async (e) => { + const handleSubmit = async ( e ) => + { + e.preventDefault(); setLoading(true); @@ -37,7 +39,7 @@ const LoginPage = () => { const response = await AuthRepository.login(data); localStorage.setItem("jwtToken", response.data.token); - localStorage.setItem("refreshToken", response.data.refreshToken); + localStorage.setItem( "refreshToken", response.data.refreshToken ); setLoading(false); navigate("/dashboard"); } catch (err) { diff --git a/src/pages/employee/EmployeeList.jsx b/src/pages/employee/EmployeeList.jsx index 04afe1a3..c0f03eb2 100644 --- a/src/pages/employee/EmployeeList.jsx +++ b/src/pages/employee/EmployeeList.jsx @@ -4,9 +4,7 @@ import { Link, NavLink, useNavigate } from "react-router-dom"; import Avatar from "../../components/common/Avatar"; import Breadcrumb from "../../components/common/Breadcrumb"; import ManageEmp from "../../components/Employee/ManageRole"; -import {useEmployeesAllOrByProjectId,useAllEmployees} from "../../hooks/useEmployees"; -import {useDispatch, useSelector} from "react-redux"; -import {setProjectId} from "../../slices/localVariablesSlice"; +import {useEmployeesAllOrByProjectId} from "../../hooks/useEmployees"; import { useProjects } from "../../hooks/useProjects"; import { useProfile } from "../../hooks/useProfile"; import {hasUserPermission} from "../../utils/authUtils"; @@ -17,11 +15,10 @@ const EmployeeList = () => const {profile:loginUser}= useProfile() const [selectedProject, setSelectedProject] = useState(""); - const [ projectsList, setProjectsList ] = useState( [] ); const {projects, loading: projectLoading} = useProjects() const {employees, loading,setLoading, error} = useEmployeesAllOrByProjectId( selectedProject ); - const dispatch = useDispatch() + const [ projectsList, setProjectsList ] = useState(projects || [] ); const [employeeList,setEmployeeList] = useState([]) const [modelConfig, setModelConfig] = useState(); @@ -48,19 +45,18 @@ const EmployeeList = () => setFilteredData(results); }; - useEffect(() => { - if ( loginUser && projects ) - { - const filteredProjects = projects.filter((project) => - loginUser?.projects?.map(Number).includes(project.id) - ); - setProjectsList(filteredProjects); - } - }, [ loginUser, projects ] ); - - + // useEffect(() => { + // if ( loginUser && projects ) + // { + // const filteredProjects = projects.filter((project) => + // loginUser?.projects?.map(Number).includes(project.id) + // ); + // setProjectsList(filteredProjects); + // } + // }, [ loginUser, projects ] ); + useEffect(() => { setCurrentPage( 1 ) @@ -72,8 +68,7 @@ const EmployeeList = () => }, [loading, employees, selectedProject]); - const displayData = searchText ? filteredData :employeeList - + const displayData = searchText ? filteredData : employeeList const indexOfLastItem = currentPage * itemsPerPage; const indexOfFirstItem = indexOfLastItem - itemsPerPage; @@ -160,7 +155,7 @@ const EmployeeList = () => ) : ( <> - {Array.isArray(projectsList) && projectsList.map((item) => ( + {Array.isArray(projects) && projects.map((item) => ( diff --git a/src/pages/project/ProjectList.jsx b/src/pages/project/ProjectList.jsx index b252f193..6971c310 100644 --- a/src/pages/project/ProjectList.jsx +++ b/src/pages/project/ProjectList.jsx @@ -5,24 +5,22 @@ import Breadcrumb from "../../components/common/Breadcrumb"; import ProjectRepository from "../../repositories/ProjectRepository"; import { useProjects } from "../../hooks/useProjects"; import { useDispatch } from "react-redux"; -import { changeMaster } from "../../slices/localVariablesSlice"; import showToast from "../../services/toastService"; -import { - getCachedData, cacheData -} from "../../slices/apiDataManager"; +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 HasManageProjectPermission = useHasUserPermission(MANAGE_PROJECT) - const { projects, loading, error, refetch } = useProjects(); + const {projects, loading, error, refetch} = useProjects(); const [refresh, setRefresh] = useState(false); - const [projectList, setProjectList] = useState([]); + 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(5); @@ -34,22 +32,31 @@ const ProjectList = () => useEffect(() => { - if (projects && projects.length > 0) { - setProjectList( - projects?.filter((project) => - loginUser?.projects?.map(Number).includes(project.id) - ) - ); - } - }, [projects, loginUser?.projects, loading]); + 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]; + .then( ( response ) => + { + + const cachedProjects_list = getCachedData( "projectslist" ) || []; + + const updated_Projects_list = [ ...cachedProjects_list, response.data ]; + cacheData("projectslist", updated_Projects_list); - setProjectList(updated_Projects_list); + setProjectList((prevProjectList) => [...prevProjectList, response.data]); + showToast("Project Created successfully.", "success"); setShowModal(false) }) @@ -112,7 +119,7 @@ const ProjectList = () =>