diff --git a/src/layouts/DashboardLayout/Aside.tsx b/src/layouts/DashboardLayout/Aside.tsx index fdd80c5..49f3116 100644 --- a/src/layouts/DashboardLayout/Aside.tsx +++ b/src/layouts/DashboardLayout/Aside.tsx @@ -1,31 +1,62 @@ -import { useState } from "react"; -import { Link, useLocation } from "react-router-dom"; -import Logo from "../../assets/icons/logo.svg"; -import { Icons } from "../../components"; +import { useState, useEffect } from 'react'; +import { Link, useLocation } from 'react-router-dom'; +import Logo from '../../assets/icons/logo.svg'; +import { Icons } from '../../components'; type Props = { asideDisplay?: () => void; - logoutUser: () => void + logoutUser: () => void; }; export default function Aside({ asideDisplay, logoutUser }: Props) { const { pathname } = useLocation(); const [openNestedLink, setOpenNestedLink] = useState<{ name: string | null }>( - { name: "" } + { name: '' } ); const handleOpenNestedLink = (e: any) => { if (!e || !e.target) { - return setOpenNestedLink({ name: "" }); + return setOpenNestedLink({ name: '' }); } if (openNestedLink.name && openNestedLink.name == e.target.name) { - setOpenNestedLink({ name: "" }); + setOpenNestedLink({ name: '' }); } else { setOpenNestedLink({ name: e.target.name }); } }; + // Track user activity + useEffect(() => { + let timeout: number; + + const resetTimeout = () => { + clearTimeout(timeout); + timeout = window.setTimeout(() => { + // Logout user after 7 minutes of inactivity + logoutUser(); + }, 7 * 60 * 1000); // 7 minutes in milliseconds + }; + + const handleUserActivity = () => { + resetTimeout(); + }; + + // Attach event listeners to track user activity + document.addEventListener('mousemove', handleUserActivity); + document.addEventListener('keypress', handleUserActivity); + + // Initialize timeout + resetTimeout(); + + // Clear timeout and remove event listeners on component unmount + return () => { + clearTimeout(timeout); + document.removeEventListener('mousemove', handleUserActivity); + document.removeEventListener('keypress', handleUserActivity); + }; + }, [logoutUser]); + return (
For more enquiries and support @@ -131,7 +161,6 @@ export default function Aside({ asideDisplay, logoutUser }: Props) { Email: fcmbloan@support.com