diff --git a/src/middleware/AuthRoute.jsx b/src/middleware/AuthRoute.jsx index b2d6c15..0a78f96 100644 --- a/src/middleware/AuthRoute.jsx +++ b/src/middleware/AuthRoute.jsx @@ -9,233 +9,261 @@ import { updateUserDetails } from "../store/UserDetails"; import { updateJobs } from "../store/jobLists"; import { updateNotifications } from "../store/notifications"; import { updateUserJobList } from "../store/userJobList"; +import { recentActivitiesData } from "../store/RecentActivitiesData"; const AuthRoute = ({ redirectPath = "/login", children }) => { - const apiCall = useMemo(() => new usersService(), []); - const dispatch = useDispatch(); - const [lastActivityTime, setLastActivityTime] = useState(Date.now()); - const [isLogin, setIsLogin] = useState({ loading: true, status: false }); - const [loadProfileDetails, setLoadProfileDetails] = useState([]); - const navigate = useNavigate(); + const apiCall = useMemo(() => new usersService(), []); + const dispatch = useDispatch(); + const [lastActivityTime, setLastActivityTime] = useState(Date.now()); + const [isLogin, setIsLogin] = useState({ loading: true, status: false }); + const [loadProfileDetails, setLoadProfileDetails] = useState([]); + const navigate = useNavigate(); - const { jobListTable } = useSelector((state) => state.tableReload); + const { jobListTable } = useSelector((state) => state.tableReload); - const { - userDetails: { username, uid }, - } = useSelector((state) => state?.userDetails); // CHECKS IF USER Details are avaliable, to determine if user is active + const { + userDetails: { username, uid }, + } = useSelector((state) => state?.userDetails); // CHECKS IF USER Details are avaliable, to determine if user is active - let loggedIn = username && uid ? true : false; // variable to determine if user is logged in + let loggedIn = username && uid ? true : false; // variable to determine if user is logged in - useEffect(() => { - //Removing Data stored at localStorage after session expires - const expireSession = () => { - localStorage.removeItem("uid"); - localStorage.removeItem("member_id"); - localStorage.removeItem("session_token"); - navigate("/login", { replace: true }); // redirects user to login page after session expires - }; + useEffect(() => { + //Removing Data stored at localStorage after session expires + const expireSession = () => { + localStorage.removeItem("uid"); + localStorage.removeItem("member_id"); + localStorage.removeItem("session_token"); + navigate("/login", { replace: true }); // redirects user to login page after session expires + }; - const checkInactivity = setInterval(() => { - let { account_type } = loadProfileDetails; - if (account_type === "FAMILY") { - if ( - Date.now() - lastActivityTime > - process.env.REACT_APP_SESSION_EXPIRE_MINUTES_FAMILY - ) { - expireSession(); - } - } else { - if ( - Date.now() - lastActivityTime > - process.env.REACT_APP_SESSION_EXPIRE_MINUTES - ) { - expireSession(); - } - } - }, process.env.REACT_APP_SESSION_EXPIRE_CHECKER); // Checks for inactivity every minute - - // cleaning up listeners - return () => { - clearInterval(checkInactivity); - }; - }, [lastActivityTime, navigate]); - - // 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 (!loggedIn) { - 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; + const checkInactivity = setInterval(() => { + let { account_type } = loadProfileDetails; + if (account_type === "FAMILY") { + if ( + Date.now() - lastActivityTime > + process.env.REACT_APP_SESSION_EXPIRE_MINUTES_FAMILY + ) { + expireSession(); + } + } else { + if ( + Date.now() - lastActivityTime > + process.env.REACT_APP_SESSION_EXPIRE_MINUTES + ) { + expireSession(); + } } - setLoadProfileDetails(res.data); - dispatch(updateUserDetails({ ...res.data, loggedIn: true })); - setIsLogin({ loading: false, status: true }); - }) - .catch((error) => { - setIsLogin({ loading: false, status: false }); - }); - }; - loadProfile(); - } - }, []); + }, process.env.REACT_APP_SESSION_EXPIRE_CHECKER); // Checks for inactivity every minute - // const filterNotifications = (notifications, filterType) => { - // const currentDate = new Date(); - // if (filterType === "today") { - // return notifications?.filter((notification) => { - // const notificationDate = new Date(notification?.date); - // console.log(notificationDate) - // // return ( - // // notificationDate.getDate() === currentDate.getDate() && - // // notificationDate.getMonth() === currentDate.getMonth() && - // // notificationDate.getFullYear() === currentDate.getFullYear() - // // ); - // }); - // } else if (filterType === "days") { - // const sevenDaysAgo = new Date(currentDate); - // sevenDaysAgo.setDate(currentDate.getDate() - 7); - // return notifications?.filter((notification) => { - // const notificationDate = new Date(notification?.date); - // return notificationDate >= sevenDaysAgo; - // }); - // } else { - // return notifications; - // } - // }; + // cleaning up listeners + return () => { + clearInterval(checkInactivity); + }; + }, [lastActivityTime, navigate]); - useEffect(() => { - if (!loggedIn) { - const getNotifications = () => { - // function to load user notification - dispatch(updateNotifications({ loading: true })); - apiCall - .getMyNotifications() - .then((res) => { - if (res.data.internal_return < 0) { - dispatch(updateNotifications({ loading: false })); - return; - } - setLoadProfileDetails(res.data); + // Reset last activity time on user input + const resetTime = useCallback(() => { + setLastActivityTime(Date.now()); + }, []); - const _raw = res.data?.result_list; + useEffect(() => { + window.addEventListener("mousemove", resetTime); + window.addEventListener("keydown", resetTime); - //Sort the notifications in ascending order based on the API time - const _sorted = _raw?.sort((a, b) => { - const timeA = new Date(a?.date)?.getTime(); - const timeB = new Date(b?.date)?.getTime(); - return timeA - timeB; - }); + return () => { + window.removeEventListener("mousemove", resetTime); + window.removeEventListener("keydown", resetTime); + }; + }, [resetTime]); - // header component - const _header = _sorted?.slice(0, 5); - // Notification Layout - const _today = _sorted?.slice(0, 7); - - const _days = () => { - const sevenDaysAgo = new Date(); - sevenDaysAgo.setDate(new Date() - 7); - return _sorted?.filter((notification) => { - const notificationDate = new Date( - formattedDate(notification?.date) - ); - return notificationDate >= sevenDaysAgo; - }); + useEffect(() => { + if (!loggedIn) { + 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; + } + setLoadProfileDetails(res.data); + dispatch(updateUserDetails({ ...res.data, loggedIn: true })); + setIsLogin({ loading: false, status: true }); + }) + .catch((error) => { + setIsLogin({ loading: false, status: false }); + }); }; - - // Dispatch all notifications, sorted, and recent based on their filter type - dispatch( - updateNotifications({ - loading: false, - data: { - raw: _raw, - today: _today, - // days: _days(), - sort: _sorted, - header: _header, - }, - }) - ); - }) - .catch((error) => { - dispatch(updateNotifications({ loading: false })); - }); - }; - getNotifications(); - } - }, []); - - useEffect(() => { - const getMyJobList = async () => { - dispatch(updateUserJobList({ loading: true, data: [] })); - try { - const res = await apiCall.getMyJobList(); - // setMyJobList({loading: false, data:res.data}) - // setMyJobList(res.data); - dispatch(updateUserJobList({ loading: false, data: res.data })); - } catch (error) { - dispatch(updateUserJobList({ loading: false, data: [] })); - // setMyJobList({loading: false, data:[]}) - console.log("Error getting mode"); - } - }; - getMyJobList(); - }, [jobListTable]); - - 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]); - - //FUNCTION TO GET COMMON HEAD DATA - useEffect(() => { - apiCall - .getHeroJBanners() - .then((res) => { - if (res.data.internal_return < 0) { - return; + loadProfile(); } - dispatch(commonHeadBanner(res.data)); - }) - .catch((error) => { - console.log("ERROR ", error); - }); - }, []); + }, []); - return isLogin.loading && !loggedIn ? ( - - ) : !isLogin.status && !loggedIn ? ( - - ) : ( - children || - ); + // const filterNotifications = (notifications, filterType) => { + // const currentDate = new Date(); + // if (filterType === "today") { + // return notifications?.filter((notification) => { + // const notificationDate = new Date(notification?.date); + // console.log(notificationDate) + // // return ( + // // notificationDate.getDate() === currentDate.getDate() && + // // notificationDate.getMonth() === currentDate.getMonth() && + // // notificationDate.getFullYear() === currentDate.getFullYear() + // // ); + // }); + // } else if (filterType === "days") { + // const sevenDaysAgo = new Date(currentDate); + // sevenDaysAgo.setDate(currentDate.getDate() - 7); + // return notifications?.filter((notification) => { + // const notificationDate = new Date(notification?.date); + // return notificationDate >= sevenDaysAgo; + // }); + // } else { + // return notifications; + // } + // }; + + useEffect(() => { + if (!loggedIn) { + const getNotifications = () => { + // function to load user notification + dispatch(updateNotifications({ loading: true })); + apiCall + .getMyNotifications() + .then((res) => { + if (res.data.internal_return < 0) { + dispatch(updateNotifications({ loading: false })); + return; + } + setLoadProfileDetails(res.data); + + const _raw = res.data?.result_list; + + //Sort the notifications in ascending order based on the API time + const _sorted = _raw?.sort((a, b) => { + const timeA = new Date(a?.date)?.getTime(); + const timeB = new Date(b?.date)?.getTime(); + return timeA - timeB; + }); + + // header component + const _header = _sorted?.slice(0, 5); + // Notification Layout + const _today = _sorted?.slice(0, 7); + + const _days = () => { + const sevenDaysAgo = new Date(); + sevenDaysAgo.setDate(new Date() - 7); + return _sorted?.filter((notification) => { + const notificationDate = new Date( + formattedDate(notification?.date) + ); + return notificationDate >= sevenDaysAgo; + }); + }; + + // Dispatch all notifications, sorted, and recent based on their filter type + dispatch( + updateNotifications({ + loading: false, + data: { + raw: _raw, + today: _today, + // days: _days(), + sort: _sorted, + header: _header, + }, + }) + ); + }) + .catch((error) => { + dispatch(updateNotifications({ loading: false })); + }); + }; + getNotifications(); + } + }, []); + + useEffect(() => { + const getMyJobList = async () => { + dispatch(updateUserJobList({ loading: true, data: [] })); + try { + const res = await apiCall.getMyJobList(); + // setMyJobList({loading: false, data:res.data}) + // setMyJobList(res.data); + dispatch(updateUserJobList({ loading: false, data: res.data })); + } catch (error) { + dispatch(updateUserJobList({ loading: false, data: [] })); + // setMyJobList({loading: false, data:[]}) + console.log("Error getting mode"); + } + }; + getMyJobList(); + }, [jobListTable]); + + 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]); + + //FUNCTION TO GET COMMON HEAD DATA + useEffect(()=>{ + apiCall.getHeroJBanners().then((res) => { + if (res.data.internal_return < 0) { + return; + } + dispatch(commonHeadBanner(res.data)); + }) + .catch((error) => { + console.log('ERROR ', error) + }); + },[]) +// + //FUNCTION TO GET COMMON HEAD DATA + useEffect(()=>{ + apiCall.getRecentActivitiedData().then((res) => { + // debugger; + if (res.data?.internal_return < 0) { + return; + } + dispatch(recentActivitiesData(res.data)); + }) + .catch((error) => { + console.log('ERROR ', error) + }); + },[]) + + // useEffect(() => { + // apiCall + // .getHeroJBanners() + // .then((res) => { + // if (res.data.internal_return < 0) { + // return; + // } + // dispatch(commonHeadBanner(res.data)); + // }) + // .catch((error) => { + // console.log("ERROR ", error); + // }); + // }, []); + // + + return isLogin.loading && !loggedIn ? ( + + ) : !isLogin.status && !loggedIn ? ( + + ) : ( + children || + ); }; export default AuthRoute; diff --git a/src/services/UsersService.js b/src/services/UsersService.js index 261567e..f88e682 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -147,6 +147,16 @@ class usersService { return this.postAuxEnd("/homebanners", postData); } + getRecentActivitiedData() { + var postData = { + uuid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + page: 0, + limit: 100, + }; + return this.postAuxEnd("/dashrecent", postData); + } getGetPendingJobs() { var postData = { uuid: localStorage.getItem("uid"), diff --git a/src/store/RecentActivitiesData.js b/src/store/RecentActivitiesData.js new file mode 100644 index 0000000..e69a3ab --- /dev/null +++ b/src/store/RecentActivitiesData.js @@ -0,0 +1,20 @@ +import { createSlice } from "@reduxjs/toolkit"; + +const initialState = { + recentActivitiesData: {} +}; + +export const recentActivitiesDataSlice = createSlice({ + name: "recentActivitiesData", + initialState, + reducers: { + recentActivitiesData: (state,action) => { + state.recentActivitiesData = {...action.payload} + }, + }, +}); + +// Action creators are generated for each case reducer function +export const { recentActivitiesData } = recentActivitiesDataSlice.actions; + +export default recentActivitiesDataSlice.reducer; \ No newline at end of file