Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 82x 129x 62x 372x | 'use client'
import React from 'react'
import { sidebarElements } from '../../../../content/sidebar'
import { useAppSelector } from '../../../store/hooks'
import { SidebarButtonState } from '../../../types/sidebar'
import { NavbarLogo } from '../NavbarLogo/NavbarLogo'
import { SidebarButton } from './SidebarButton/SidebarButton'
export type SidebarProps = {
/** Path of the current page. */
path: string
}
/**
* Sidebar component for navigation
*/
export const Sidebar: React.FC<SidebarProps> = ({ path }) => {
const progressKeys = useAppSelector((state) => state.lastWill.data.progressKeys)
return (
<div datacy={'sidebar'} className="sticky top-0 hidden h-auto w-80 min-w-[20rem] bg-yellow-400 sm:hidden lg:block">
{/* Logo */}
<div datacy="sidebar-logo" className="px-6 pb-10 pt-[19px]">
<NavbarLogo />
</div>
{/* Nav Elements */}
<div className="flex flex-col">
{sidebarElements.map((element) => (
<SidebarButton
datacy={`sidebar-button-${element.page}`}
key={element.page}
type={element.page}
title={element.title}
description={element.description}
state={
path.includes(element.page) // button is active if url contains the page name
? SidebarButtonState.ACTIVE
: progressKeys.includes(element.page)
? SidebarButtonState.DEFAULT // button is default if page was visited yet
: SidebarButtonState.DISABLED // button is disabled if page was not visited yet
}
/>
))}
</div>
</div>
)
}
|