import React, { useState, useEffect } from 'react'; import { Accordion, AccordionTab } from 'primereact/accordion'; import { useRouter } from 'next/router'; import { useSession, signOut } from 'next-auth/react'; import { Button } from 'primereact/button'; import 'primeicons/primeicons.css'; import styles from "./sidebar.module.css"; const Sidebar = () => { const [isExpanded, setIsExpanded] = useState(true); const router = useRouter(); // Helper function to determine if the path matches the current route const isActive = (path) => { return router.asPath === path; }; const { data: session } = useSession(); useEffect(() => { // Notify parent component about sidebar state change if (typeof window !== 'undefined') { window.dispatchEvent(new CustomEvent('sidebarToggle', { detail: { isExpanded } })); } }, [isExpanded]); const toggleSidebar = () => { setIsExpanded(!isExpanded); }; return (
{isExpanded ? (
router.push('/')} className={`w-full flex flex-row items-center cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/') ? 'bg-gray-700' : ''}`}>

Home

({ className: `hover:bg-gray-700 rounded-lg ${isActive('/content') || router.pathname === '/content' ? 'bg-gray-700' : ''} ${styles['p-accordion-header-link']}` }), content: styles['p-accordion-content'], header: 'text-lg' }} header={'Content'}>
router.push('/content?tag=all')} className={`w-full cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/content?tag=all') ? 'bg-gray-700' : ''}`}>

All

router.push('/content?tag=courses')} className={`w-full cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/content?tag=courses') ? 'bg-gray-700' : ''}`}>

Courses

router.push('/content?tag=workshops')} className={`w-full cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/content?tag=workshops') ? 'bg-gray-700' : ''}`}>

Workshops

router.push('/content?tag=resources')} className={`w-full cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/content?tag=resources') ? 'bg-gray-700' : ''}`}>

Resources

router.push('/create')} className={`w-full flex flex-row items-center cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/create') ? 'bg-gray-700' : ''}`}>

Create

session ? router.push('/profile?tab=subscribe') : router.push('/auth/signin')} className={`w-full flex flex-row items-center cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/profile?tab=subscribe') ? 'bg-gray-700' : ''}`}>

Subscribe

({ className: `hover:bg-gray-700 rounded-lg ${isActive('/feed') ? 'bg-gray-700' : ''} ${styles['p-accordion-header-link']}` }), content: styles['p-accordion-content'], header: 'text-lg' }} header={"Community"}>
router.push('/feed?channel=global')} className={`w-full cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/feed?channel=global') ? 'bg-gray-700' : ''}`}>

global

router.push('/feed?channel=nostr')} className={`w-full cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/feed?channel=nostr') ? 'bg-gray-700' : ''}`}>

nostr

router.push('/feed?channel=discord')} className={`w-full cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/feed?channel=discord') ? 'bg-gray-700' : ''}`}>

discord

router.push('/feed?channel=stackernews')} className={`w-full cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/feed?channel=stackernews') ? 'bg-gray-700' : ''}`}>

stackernews

) : ( // Collapsed sidebar content (icons only)
router.push('/')} /> router.push('/content')} /> router.push('/create')} /> session ? router.push('/profile?tab=subscribe') : router.push('/auth/signin')} /> router.push('/feed')} />
)}
{isExpanded ? (
router.push('/profile?tab=settings')} className={`w-full flex flex-row items-center cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/profile?tab=settings') ? 'bg-gray-700' : ''}`}>

Settings

session ? signOut() : router.push('/auth/signin')} className={`w-full flex flex-row items-center cursor-pointer py-2 my-2 hover:bg-gray-700 rounded-lg ${isActive('/auth/signin') ? 'bg-gray-700' : ''}`}>

{session ? 'Logout' : 'Login'}

{/* todo sidebar expand / contract */} {/*

{isExpanded ? 'close' : 'open'}

*/} {/* todo: have to add this extra button to push the sidebar to the right space but it doesnt seem to cause any negative side effects? */}

Logout

) : (
router.push('/profile?tab=settings')} /> session ? signOut() : router.push('/auth/signin')} /> session ? signOut() : router.push('/auth/signin')} />
)}
); }; export default Sidebar;