| 'use client' | |
| import React, { useState } from 'react' | |
| import Link from 'next/link' | |
| import { useSelectedLayoutSegment } from 'next/navigation' | |
| import type { INavSelectorProps } from './nav-selector' | |
| import NavSelector from './nav-selector' | |
| import classNames from '@/utils/classnames' | |
| import { ArrowNarrowLeft } from '@/app/components/base/icons/src/vender/line/arrows' | |
| import { useStore as useAppStore } from '@/app/components/app/store' | |
| type INavProps = { | |
| icon: React.ReactNode | |
| activeIcon?: React.ReactNode | |
| text: string | |
| activeSegment: string | string[] | |
| link: string | |
| isApp: boolean | |
| } & INavSelectorProps | |
| const Nav = ({ | |
| icon, | |
| activeIcon, | |
| text, | |
| activeSegment, | |
| link, | |
| curNav, | |
| navs, | |
| createText, | |
| onCreate, | |
| onLoadmore, | |
| isApp, | |
| }: INavProps) => { | |
| const setAppDetail = useAppStore(state => state.setAppDetail) | |
| const [hovered, setHovered] = useState(false) | |
| const segment = useSelectedLayoutSegment() | |
| const isActivated = Array.isArray(activeSegment) ? activeSegment.includes(segment!) : segment === activeSegment | |
| return ( | |
| <div className={` | |
| flex items-center h-8 mr-0 sm:mr-3 px-0.5 rounded-xl text-sm shrink-0 font-medium | |
| ${isActivated && 'bg-components-main-nav-nav-button-bg-active shadow-md font-semibold'} | |
| ${!curNav && !isActivated && 'hover:bg-components-main-nav-nav-button-bg-hover'} | |
| `}> | |
| <Link href={link}> | |
| <div | |
| onClick={() => setAppDetail()} | |
| className={classNames(` | |
| flex items-center h-7 px-2.5 cursor-pointer rounded-[10px] | |
| ${isActivated ? 'text-components-main-nav-nav-button-text-active' : 'text-components-main-nav-nav-button-text'} | |
| ${curNav && isActivated && 'hover:bg-components-main-nav-nav-button-bg-active-hover'} | |
| `)} | |
| onMouseEnter={() => setHovered(true)} | |
| onMouseLeave={() => setHovered(false)} | |
| > | |
| <div className='mr-2'> | |
| { | |
| (hovered && curNav) | |
| ? <ArrowNarrowLeft className='w-4 h-4' /> | |
| : isActivated | |
| ? activeIcon | |
| : icon | |
| } | |
| </div> | |
| {text} | |
| </div> | |
| </Link> | |
| { | |
| curNav && isActivated && ( | |
| <> | |
| <div className='font-light text-gray-300 '>/</div> | |
| <NavSelector | |
| isApp={isApp} | |
| curNav={curNav} | |
| navs={navs} | |
| createText={createText} | |
| onCreate={onCreate} | |
| onLoadmore={onLoadmore} | |
| /> | |
| </> | |
| ) | |
| } | |
| </div> | |
| ) | |
| } | |
| export default Nav | |