Adding inactivity handler

This commit is contained in:
hz
2025-05-13 07:24:54 -07:00
parent 39d3ff9918
commit 643b525d1b
2 changed files with 46 additions and 30 deletions
+7 -15
View File
@@ -1,6 +1,7 @@
import React from "react"; import React from "react";
import { Navigate, useNavigate } from "react-router-dom"; import { Navigate, useNavigate } from "react-router-dom";
import PageWrapper from "./PageWrapper"; import PageWrapper from "./PageWrapper";
import useIdleTimer from "../hooks/useIdleTimer";
const ProtectedRoute = ({ children }) => { const ProtectedRoute = ({ children }) => {
const token = localStorage.getItem("token"); const token = localStorage.getItem("token");
@@ -11,24 +12,16 @@ const ProtectedRoute = ({ children }) => {
navigate("/login"); navigate("/login");
}; };
if (!token) { useIdleTimer(() => {
return <Navigate to="/login" />; if (token) {
handleLogout();
} }
}, 60000); // 1 minute
if (!token) return <Navigate to="/login" />;
return ( return (
<PageWrapper> <PageWrapper>
<div
style={{
height: "100vh",
margin: 0,
padding: 0,
display: "flex",
alignItems: "center",
justifyContent: "center",
backgroundColor: "#242424",
position: "relative",
}}
>
<button <button
onClick={handleLogout} onClick={handleLogout}
style={{ style={{
@@ -46,7 +39,6 @@ const ProtectedRoute = ({ children }) => {
Logout Logout
</button> </button>
{children} {children}
</div>
</PageWrapper> </PageWrapper>
); );
}; };
+24
View File
@@ -0,0 +1,24 @@
import { useEffect, useRef } from "react";
const useIdleTimer = (onIdle, timeout = 60000) => {
const timerRef = useRef(null);
const resetTimer = () => {
clearTimeout(timerRef.current);
timerRef.current = setTimeout(onIdle, timeout);
};
useEffect(() => {
const events = ["mousemove", "keydown", "mousedown", "touchstart"];
events.forEach(e => window.addEventListener(e, resetTimer));
resetTimer(); // initialize timer
return () => {
clearTimeout(timerRef.current);
events.forEach(e => window.removeEventListener(e, resetTimer));
};
}, []);
};
export default useIdleTimer;