import { useState, useEffect } from 'react'; import { Link, useLocation } from 'react-router-dom'; import Logo from '../../assets/icons/logo.svg'; import { Icons } from '../../components'; import { contactDetails } from '../../utils/data'; type Props = { asideDisplay?: () => void; logoutUser: () => void; }; export default function Aside({ asideDisplay, logoutUser }: Props) { const { pathname } = useLocation(); const [openNestedLink, setOpenNestedLink] = useState<{ name: string | null }>( { name: '' } ); const handleOpenNestedLink = (e: any) => { if (!e || !e.target) { return setOpenNestedLink({ name: '' }); } if (openNestedLink.name && openNestedLink.name == e.target.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 (
Logo
{asideLinks.map((link, index) => { if (link.nestedLink?.length) { let allNestedLinks = link.nestedLink.map((item) => item.link); return (
{link.nestedLink.map((nextLink, index) => ( { asideDisplay && asideDisplay(); }} key={index} to={nextLink.link ? nextLink.link : '#'} className={`w-full my-1 flex items-center gap-2 py-2 pl-5 text-base font-medium ${ pathname == nextLink.link ? ' text-[#5C2684]' : 'text-[#585858]' }`} > {nextLink.name} ))}
); } else { return ( { asideDisplay && asideDisplay(); }} key={index} to={link.link ? link.link : '#'} className={`w-full my-4 flex items-center gap-2 py-2 pl-5 rounded-lg text-base font-medium ${ pathname == link.link ? 'text-[#5C2684]' : 'text-[#585858]' }`} > {link.name} ); } })}

For more enquiries and support

{/*

Call: 09099000000

Email: fcmbloan@support.com

*/} {contactDetails.map(({ name, value }) => (

{name}: {value}

))}
); } type AsideLinksType = { name: string; link?: string; icon: string; nestedLink?: { name: string; link: string; icon: string; }[]; }[]; const asideLinks: AsideLinksType = [ { name: 'Dashboard', link: '/dashboard/home', icon: 'dash-icon', nestedLink: [], }, { name: 'Your Profile', link: '/dashboard/profile', icon: 'dash-icon', nestedLink: [], }, { name: 'Employment Details', link: '/dashboard/verification', icon: 'dash-icon', nestedLink: [], }, { name: 'Reference Details', link: "/dashboard/reference", icon: 'dash-icon', nestedLink: [], }, { name: 'Agreements', link: '/dashboard/legals', icon: 'dash-icon', nestedLink: [], }, // {name: 'Nested Link', icon: 'home', nestedLink:[ // {name: 'Link 2', link: '/dashboard/not-found', icon: 'legals'}, // {name: 'Link 1', link: '/dashboard/not-found', icon: 'home'} // ] // }, ];