@@ -287,19 +244,19 @@ export default function Sidebar({ sidebar, action, logoutModalHandler }) {
-
(navData.isActive ? "active" : ""),
- sidebar ? "justify-start space-x-3.5" : "justify-center")
- }`}
+ to="/myjobs"
+ className={`nav-item flex items-center ${
+ ((navData) => (navData.isActive ? "active" : ""),
+ sidebar ? "justify-start space-x-3.5" : "justify-center")
+ }`}
>
List
@@ -307,41 +264,41 @@ export default function Sidebar({ sidebar, action, logoutModalHandler }) {
-
(navData.isActive ? "active" : ""),
- sidebar ? "justify-start space-x-3.5" : "justify-center")
- }`}
+ to="/my-active-jobs"
+ className={`nav-item flex items-center ${
+ ((navData) => (navData.isActive ? "active" : ""),
+ sidebar ? "justify-start space-x-3.5" : "justify-center")
+ }`}
>
- Pending
+ Pending
-
(navData.isActive ? "active" : ""),
- sidebar ? "justify-start space-x-3.5" : "justify-center")
- }`}
+ to="/my-active-jobs"
+ className={`nav-item flex items-center ${
+ ((navData) => (navData.isActive ? "active" : ""),
+ sidebar ? "justify-start space-x-3.5" : "justify-center")
+ }`}
>
- Active
+ Active
@@ -453,3 +410,33 @@ export default function Sidebar({ sidebar, action, logoutModalHandler }) {
);
}
+
+const ListItem = ({ sidebar, route, title, bubble }) => {
+ return (
+
+ (navData.isActive ? "active" : ""),
+ sidebar ? "justify-start space-x-3.5" : "justify-center")
+ }`}
+ >
+
+
+
+
+ {title && title}
+ {bubble && (
+
+ {bubble}
+
+ )}
+
+
+
+ );
+};
diff --git a/src/middleware/AuthRoute.jsx b/src/middleware/AuthRoute.jsx
index 7629db3..ba160ec 100644
--- a/src/middleware/AuthRoute.jsx
+++ b/src/middleware/AuthRoute.jsx
@@ -1,84 +1,102 @@
-import { useEffect, useState, useCallback } from "react";
+import { useEffect, useState, useCallback, useMemo } from "react";
import { Navigate, Outlet, useLocation, useNavigate } from "react-router-dom";
-import usersService from '../services/UsersService'
-import LoadingSpinner from '../components/Spinners/LoadingSpinner'
-import WrenchBoard from "../assets/images/wrenchboard.png"
+import usersService from "../services/UsersService";
+import LoadingSpinner from "../components/Spinners/LoadingSpinner";
import { useDispatch, useSelector } from "react-redux";
-import {updateUserDetails} from '../store/UserDetails'
-
+import { updateUserDetails } from "../store/UserDetails";
+import { updateJobs } from "../store/jobLists";
const AuthRoute = ({ redirectPath = "/login", children }) => {
- const apiCall = new usersService()
-
- const dispatch = useDispatch()
-
+ const apiCall = useMemo(() => new usersService(), []);
+ const dispatch = useDispatch();
const [lastActivityTime, setLastActivityTime] = useState(Date.now());
- let [isLogin, setIsLogin] = useState({loading: true, status: false})
-
+ const [isLogin, setIsLogin] = useState({ loading: true, status: false });
const navigate = useNavigate();
-
- //Removing Data stored at localStorage after session expires
- const expireSession = () => {
- localStorage.removeItem('session_token');
- localStorage.removeItem('member_id');
- localStorage.removeItem('uid');
- localStorage.removeItem('session');
- navigate("/login", { replace: true }); // redirects user to login page after session expires
- };
-
- // Reset last activity time on user input
- const resetTime = () => {
- setLastActivityTime(Date.now());
- }
- window.addEventListener('mousemove', resetTime)
- window.addEventListener('keydown', resetTime)
-
- const loadProfile = ()=>{ // function to load user profile
- setIsLogin({loading: true, status: false})
- apiCall.loadProfile().then((res)=>{
- if(res.data.internal_return < 0){
- setIsLogin({loading: false, status: false})
- return
- }
- dispatch(updateUserDetails(res.data))
- setIsLogin({loading: false, status: true})
- }).catch(error =>{
- setIsLogin({loading: false, status: false})
- })
- }
useEffect(() => {
- if(!isLogin.status){
- loadProfile() // LOADS USER PROFILE DETAILS AND CALLS DISPATCH UPDATEUSERDETAILS TO UPDATE USERDETAILS SLICE IN STORE
- }
+ //Removing Data stored at localStorage after session expires
+ const expireSession = () => {
+ localStorage.clear();
+ navigate("/login", { replace: true }); // redirects user to login page after session expires
+ };
const checkInactivity = setInterval(() => {
- if (Date.now() - lastActivityTime > process.env.REACT_APP_SESSION_EXPIRE_MINUTES) {
- expireSession()
+ if (
+ Date.now() - lastActivityTime >
+ process.env.REACT_APP_SESSION_EXPIRE_MINUTES
+ ) {
+ expireSession();
}
- }, process.env.REACT_APP_SESSION_EXPIRE_CHECKER) // Checks for inactivity every minute
+ }, process.env.REACT_APP_SESSION_EXPIRE_CHECKER); // Checks for inactivity every minute
// cleaning up listeners
return () => {
- clearInterval(checkInactivity)
- window.removeEventListener('mousemove', resetTime)
- window.removeEventListener('keydown', resetTime)
- }
- }, [lastActivityTime])
+ clearInterval(checkInactivity);
+ };
+ }, [lastActivityTime, navigate]);
- return (
- isLogin.loading ?
-
- // Stills needs fixing
- //
- //

- //
- :
- !isLogin.status ?
-
- :
- (children ||
)
- )
+ // Reset last activity time on user input
+ const resetTime = useCallback(() => {
+ setLastActivityTime(Date.now());
+ }, []);
+
+ useEffect(() => {
+ window.addEventListener("mousemove", resetTime);
+ window.addEventListener("keydown", resetTime);
+
+ return () => {
+ window.removeEventListener("mousemove", resetTime);
+ window.removeEventListener("keydown", resetTime);
+ };
+ }, [resetTime]);
+
+ useEffect(() => {
+ if (!isLogin.status) {
+ const loadProfile = () => {
+ // function to load user profile
+ setIsLogin({ loading: true, status: false });
+ apiCall
+ .loadProfile()
+ .then((res) => {
+ if (res.data.internal_return < 0) {
+ setIsLogin({ loading: false, status: false });
+ return;
+ }
+ dispatch(updateUserDetails(res.data));
+ setIsLogin({ loading: false, status: true });
+ })
+ .catch((error) => {
+ setIsLogin({ loading: false, status: false });
+ });
+ };
+ loadProfile();
+ }
+ }, []);
+
+ useEffect(() => {
+ // Getting market data
+ const getMarketActiveJobList = async () => {
+ try {
+ const res = await apiCall.getActiveJobList();
+ dispatch(updateJobs(res.data));
+ } catch (error) {
+ console.log("Error getting mode");
+ }
+ };
+ getMarketActiveJobList();
+ }, [apiCall, dispatch]);
+
+ return isLogin.loading ? (
+
+ ) : // Stills needs fixing
+ //
+ //

+ //
+ !isLogin.status ? (
+
+ ) : (
+ children ||
+ );
};
-export default AuthRoute;
\ No newline at end of file
+export default AuthRoute;
diff --git a/src/store/jobLists.js b/src/store/jobLists.js
new file mode 100644
index 0000000..6c07347
--- /dev/null
+++ b/src/store/jobLists.js
@@ -0,0 +1,19 @@
+import { createSlice } from "@reduxjs/toolkit";
+
+const initialState = {
+ jobLists: {}
+};
+
+export const jobSlice = createSlice({
+ name: "jobLists",
+ initialState,
+ reducers: {
+ updateJobs: (state, payload) => {
+ state.jobLists = { ...payload.payload };
+ },
+ },
+});
+
+export const { updateJobs } = jobSlice.actions;
+
+export default jobSlice.reducer;
diff --git a/src/store/store.js b/src/store/store.js
index deefd7d..07fbf4f 100644
--- a/src/store/store.js
+++ b/src/store/store.js
@@ -2,10 +2,12 @@ import { configureStore } from "@reduxjs/toolkit";
import drawerReducer from "./drawer";
import userDetailReducer from "./UserDetails";
+import jobReducer from "./jobLists";
export default configureStore({
reducer: {
drawer: drawerReducer,
userDetails: userDetailReducer,
+ jobLists: jobReducer
},
});
\ No newline at end of file
diff --git a/src/views/MarketPlacePage.jsx b/src/views/MarketPlacePage.jsx
index 90a6793..5bac891 100644
--- a/src/views/MarketPlacePage.jsx
+++ b/src/views/MarketPlacePage.jsx
@@ -1,29 +1,9 @@
-import React, {useState, useEffect} from 'react'
import MarketPlace from "../components/MarketPlace";
-import usersService from "../services/UsersService";
export default function MarketPlacePage() {
- // const userApi = new usersService();
- // const activeJobList = userApi.getActiveJobList();
- // console.log("activeJobList->",activeJobList);
-
- const [marketActiveJobList, setMarketActiveJobList] = useState([]);
- const api = new usersService();
-
- const getMarketActiveJobList = async () => {
- try {
- const res = await api.getActiveJobList();
- setMarketActiveJobList(res.data);
- } catch (error) {
- console.log("Error getting mode");
- }
- };
- useEffect(() => {
- getMarketActiveJobList();
- }, []);
return (
<>
-
+
>
);
}