|
import React, { useState } from 'react' |
|
|
|
import { Link } from 'react-router-dom' |
|
import PropTypes from 'prop-types'; |
|
import { NavLink, Text, ThemeIcon } from '@mantine/core' |
|
import { GearIcon, HomeIcon, PlayIcon } from '@radix-ui/react-icons' |
|
|
|
const NavbarLinks = () => { |
|
const [active, setActive] = useState(null); |
|
const links = linksList.map((link, index) => <NavbarLink key={index} label={link.label} icon={link.icon} to={link.to} index={index} active={active} setActive={setActive} />) |
|
return ( |
|
<div>{links}</div> |
|
) |
|
} |
|
|
|
const NavbarLink = ({ label, icon, to, index, active, setActive }) => { |
|
return ( |
|
<NavLink |
|
sx={(theme) => ({ |
|
width: '100%', |
|
padding: theme.spacing.xs, |
|
// borderRadius: theme.radius.sm, |
|
color: theme.colorScheme === 'dark' ? theme.colors.dark[0] : theme.black, |
|
|
|
'&:hover': { |
|
backgroundColor: |
|
theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.gray[0], |
|
}, |
|
})} |
|
active={active === index} |
|
onClick={() => setActive(index)} |
|
component={Link} |
|
to={to} |
|
icon={ |
|
<ThemeIcon variant="filled" color={active === index ? 'gray' : 'lime'}> |
|
{icon} |
|
</ThemeIcon> |
|
} |
|
label={ |
|
<Text size="sm">{label}</Text> |
|
} |
|
color='lime' |
|
variant='filled' |
|
> |
|
</NavLink> |
|
) |
|
} |
|
|
|
NavbarLink.propTypes = { |
|
label: PropTypes.string, |
|
icon: PropTypes.object, |
|
to: PropTypes.string, |
|
index: PropTypes.number, |
|
active: PropTypes.number, |
|
setActive: PropTypes.func |
|
} |
|
|
|
const linksList = [ |
|
{ label: 'Home', icon: <HomeIcon />, to: "/home" }, |
|
{ label: 'Play Chess', icon: <PlayIcon />, to: "/play" }, |
|
{ label: 'Settings', icon: <GearIcon />, to: "/settings" }, |
|
] |
|
|
|
export default NavbarLinks |