Spaces:
Build error
Build error
'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 | |