webapp/src/components/Nav/Header/Link.tsx

35 lines
1.1 KiB
TypeScript
Raw Normal View History

2023-09-25 06:13:47 +00:00
import styles from './Header.module.scss'
import { router, ROUTES, useRouter } from '../../../stores/router'
import { clsx } from 'clsx'
import { ConditionalWrapper } from '../../_shared/ConditionalWrapper'
import { getPagePath } from '@nanostores/router'
type Props = {
onMouseOver: (event?: MouseEvent, time?: number) => void
onMouseOut: (event?: MouseEvent, time?: number) => void
routeName?: keyof typeof ROUTES
body: string
active?: boolean
}
export const Link = (props: Props) => {
const { page } = useRouter()
const isSelected = page().route === props.routeName
return (
<li classList={{ 'view-switcher__item--selected': isSelected }}>
<ConditionalWrapper
condition={!isSelected && Boolean(props.routeName)}
wrapper={(children) => <a href={getPagePath(router, props.routeName)}>{children}</a>}
>
<span
class={clsx('cursorPointer', { [styles.mainNavigationItemActive]: props.active })}
onMouseOver={props.onMouseOver}
onMouseOut={props.onMouseOut}
>
{props.body}
</span>
</ConditionalWrapper>
</li>
)
}