updated projectList comp. immediately update rights

This commit is contained in:
PramodMahajan14 2025-03-26 13:02:49 +05:30
parent a3ab1ad105
commit 8e455e96b4
5 changed files with 80 additions and 75 deletions

View File

@ -18,8 +18,7 @@ const formatDate = (date) => {
}; };
const ManageProjectInfo = ( {project,handleSubmitForm, onClose} ) => const ManageProjectInfo = ( {project,handleSubmitForm, onClose} ) =>
{ {
debugger
const [CurrentProject,setCurrentProject] = useState() const [CurrentProject,setCurrentProject] = useState()
const [ isloading, setLoading ] = useState( false ) const [ isloading, setLoading ] = useState( false )
@ -82,11 +81,7 @@ const ManageProjectInfo = ( {project,handleSubmitForm, onClose} ) =>
setLoading( true ) setLoading( true )
handleSubmitForm( updatedProject ) handleSubmitForm( updatedProject )
}; };
useEffect( () =>
{
return ()=>setLoading(false)
} )

View File

@ -1,40 +1,46 @@
import {useState,useEffect} from "react"; import {useState,useEffect} from "react";
import AuthRepository from "../repositories/AuthRepository"; import AuthRepository from "../repositories/AuthRepository";
import {cacheProfileData, getCachedProfileData} from "../slices/apiDataManager"; 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 [profile, setProfile] = useState(null);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [error, setError] = useState(""); 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( () => { useEffect( () => {
const fetchData = async () => { if (!loggedUser )
const profile_cache = getCachedProfileData() {
fetchData()
// if (!profile_cache) { } else
setLoading(true) {
AuthRepository.profile() setProfile(loggedUser)
.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()
},[]) },[])
return { profile,loading,error} return { profile,loading,error}

View File

@ -25,7 +25,9 @@ const LoginPage = () => {
})); }));
}; };
const handleSubmit = async (e) => { const handleSubmit = async ( e ) =>
{
e.preventDefault(); e.preventDefault();
setLoading(true); setLoading(true);
@ -37,7 +39,7 @@ const LoginPage = () => {
const response = await AuthRepository.login(data); const response = await AuthRepository.login(data);
localStorage.setItem("jwtToken", response.data.token); localStorage.setItem("jwtToken", response.data.token);
localStorage.setItem("refreshToken", response.data.refreshToken); localStorage.setItem( "refreshToken", response.data.refreshToken );
setLoading(false); setLoading(false);
navigate("/dashboard"); navigate("/dashboard");
} catch (err) { } catch (err) {

View File

@ -4,9 +4,7 @@ import { Link, NavLink, useNavigate } from "react-router-dom";
import Avatar from "../../components/common/Avatar"; import Avatar from "../../components/common/Avatar";
import Breadcrumb from "../../components/common/Breadcrumb"; import Breadcrumb from "../../components/common/Breadcrumb";
import ManageEmp from "../../components/Employee/ManageRole"; import ManageEmp from "../../components/Employee/ManageRole";
import {useEmployeesAllOrByProjectId,useAllEmployees} from "../../hooks/useEmployees"; import {useEmployeesAllOrByProjectId} from "../../hooks/useEmployees";
import {useDispatch, useSelector} from "react-redux";
import {setProjectId} from "../../slices/localVariablesSlice";
import { useProjects } from "../../hooks/useProjects"; import { useProjects } from "../../hooks/useProjects";
import { useProfile } from "../../hooks/useProfile"; import { useProfile } from "../../hooks/useProfile";
import {hasUserPermission} from "../../utils/authUtils"; import {hasUserPermission} from "../../utils/authUtils";
@ -17,11 +15,10 @@ const EmployeeList = () =>
const {profile:loginUser}= useProfile() const {profile:loginUser}= useProfile()
const [selectedProject, setSelectedProject] = useState(""); const [selectedProject, setSelectedProject] = useState("");
const [ projectsList, setProjectsList ] = useState( [] );
const {projects, loading: projectLoading} = useProjects() const {projects, loading: projectLoading} = useProjects()
const {employees, loading,setLoading, error} = useEmployeesAllOrByProjectId( selectedProject ); const {employees, loading,setLoading, error} = useEmployeesAllOrByProjectId( selectedProject );
const dispatch = useDispatch() const [ projectsList, setProjectsList ] = useState(projects || [] );
const [employeeList,setEmployeeList] = useState([]) const [employeeList,setEmployeeList] = useState([])
const [modelConfig, setModelConfig] = useState(); const [modelConfig, setModelConfig] = useState();
@ -48,19 +45,18 @@ const EmployeeList = () =>
setFilteredData(results); setFilteredData(results);
}; };
useEffect(() => { // useEffect(() => {
if ( loginUser && projects ) // if ( loginUser && projects )
{ // {
const filteredProjects = projects.filter((project) => // const filteredProjects = projects.filter((project) =>
loginUser?.projects?.map(Number).includes(project.id) // loginUser?.projects?.map(Number).includes(project.id)
); // );
setProjectsList(filteredProjects); // setProjectsList(filteredProjects);
} // }
}, [ loginUser, projects ] ); // }, [ loginUser, projects ] );
useEffect(() => { useEffect(() => {
setCurrentPage( 1 ) setCurrentPage( 1 )
@ -72,8 +68,7 @@ const EmployeeList = () =>
}, [loading, employees, selectedProject]); }, [loading, employees, selectedProject]);
const displayData = searchText ? filteredData :employeeList const displayData = searchText ? filteredData : employeeList
const indexOfLastItem = currentPage * itemsPerPage; const indexOfLastItem = currentPage * itemsPerPage;
const indexOfFirstItem = indexOfLastItem - itemsPerPage; const indexOfFirstItem = indexOfLastItem - itemsPerPage;
@ -160,7 +155,7 @@ const EmployeeList = () =>
) : ( ) : (
<> <>
<option value="">All Employees</option> <option value="">All Employees</option>
{Array.isArray(projectsList) && projectsList.map((item) => ( {Array.isArray(projects) && projects.map((item) => (
<option key={item.id} value={item.id}> <option key={item.id} value={item.id}>
{item.name} {item.name}
</option> </option>

View File

@ -5,24 +5,22 @@ import Breadcrumb from "../../components/common/Breadcrumb";
import ProjectRepository from "../../repositories/ProjectRepository"; import ProjectRepository from "../../repositories/ProjectRepository";
import { useProjects } from "../../hooks/useProjects"; import { useProjects } from "../../hooks/useProjects";
import { useDispatch } from "react-redux"; import { useDispatch } from "react-redux";
import { changeMaster } from "../../slices/localVariablesSlice";
import showToast from "../../services/toastService"; import showToast from "../../services/toastService";
import { import { getCachedData, cacheData} from "../../slices/apiDataManager";
getCachedData, cacheData
} from "../../slices/apiDataManager";
import {useHasUserPermission} from "../../hooks/useHasUserPermission" import {useHasUserPermission} from "../../hooks/useHasUserPermission"
import { useProfile } from "../../hooks/useProfile"; import { useProfile } from "../../hooks/useProfile";
import {MANAGE_PROJECT} from "../../utils/constants"; import {MANAGE_PROJECT} from "../../utils/constants";
const ProjectList = () => const ProjectList = () =>
{ {
const {profile: loginUser} = useProfile(); const {profile: loginUser} = useProfile();
const [showModal, setShowModal] = useState(false); const [showModal, setShowModal] = useState(false);
const {projects, loading, error, refetch} = useProjects();
const HasManageProjectPermission = useHasUserPermission(MANAGE_PROJECT)
const { projects, loading, error, refetch } = useProjects();
const [refresh, setRefresh] = useState(false); 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 dispatch = useDispatch();
const [currentPage, setCurrentPage] = useState(1); const [currentPage, setCurrentPage] = useState(1);
const [itemsPerPage] = useState(5); const [itemsPerPage] = useState(5);
@ -34,22 +32,31 @@ const ProjectList = () =>
useEffect(() => { useEffect(() => {
if (projects && projects.length > 0) { setProjectList( projects )
setProjectList(
projects?.filter((project) => }, [ projects, loginUser?.projects, loading ] );
loginUser?.projects?.map(Number).includes(project.id)
) useEffect(() => {
); if (loginUser) {
} setHasManageProject(HasManageProjectPermission);
}, [projects, loginUser?.projects, loading]); } else {
setHasManageProject(false); }
}, [loginUser, HasManageProjectPermission]);
const handleSubmitForm = (newProject) => { const handleSubmitForm = (newProject) => {
ProjectRepository.manageProject(newProject) ProjectRepository.manageProject(newProject)
.then((response) => { .then( ( response ) =>
const cachedProjects_list = getCachedData("projectslist") || []; {
const updated_Projects_list = [...cachedProjects_list, response];
const cachedProjects_list = getCachedData( "projectslist" ) || [];
const updated_Projects_list = [ ...cachedProjects_list, response.data ];
cacheData("projectslist", updated_Projects_list); cacheData("projectslist", updated_Projects_list);
setProjectList(updated_Projects_list); setProjectList((prevProjectList) => [...prevProjectList, response.data]);
showToast("Project Created successfully.", "success"); showToast("Project Created successfully.", "success");
setShowModal(false) setShowModal(false)
}) })
@ -112,7 +119,7 @@ const ProjectList = () =>
<button <button
type="button" type="button"
className={`btn btn-sm btn-primary ${ className={`btn btn-sm btn-primary ${
HasManageProjectPermission HasManageProject
? "" ? ""
: "d-none" : "d-none"
}`} }`}
@ -197,7 +204,7 @@ const ProjectList = () =>
</li> </li>
</ul> </ul>
</nav> </nav>
)} )}
</div> </div>
</> </>
); );