'use client' import type { INavSelectorProps } from './nav-selector' import * as React from 'react' import { useState } from 'react' import { useStore as useAppStore } from '@/app/components/app/store' import { ArrowNarrowLeft } from '@/app/components/base/icons/src/vender/line/arrows' import Link from '@/next/link' import { useSelectedLayoutSegment } from '@/next/navigation' import { cn } from '@/utils/classnames' import NavSelector from './nav-selector' 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, navigationItems, createText, onCreate, onLoadMore, isLoadingMore, 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 (
{ // Don't clear state if opening in new tab/window if (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0) return setAppDetail() }} className={cn('flex h-7 cursor-pointer items-center radius-lg px-2.5', 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)} >
{ (hovered && curNav) ? : isActivated ? activeIcon : icon }
{text}
{ curNav && isActivated && ( <>
/
) }
) } export default Nav