123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 'use client'
- import React, { useRef } from 'react'
- import { useRouter } from 'next/navigation'
- import { useHover } from 'ahooks'
- import s from './style.module.css'
- import cn from '@/utils/classnames'
- import ItemOperation from '@/app/components/explore/item-operation'
- import AppIcon from '@/app/components/base/app-icon'
- import type { AppIconType } from '@/types/app'
- export type IAppNavItemProps = {
- isMobile: boolean
- name: string
- id: string
- icon_type: AppIconType | null
- icon: string
- icon_background: string
- icon_url: string
- isSelected: boolean
- isPinned: boolean
- togglePin: () => void
- uninstallable: boolean
- onDelete: (id: string) => void
- }
- export default function AppNavItem({
- isMobile,
- name,
- id,
- icon_type,
- icon,
- icon_background,
- icon_url,
- isSelected,
- isPinned,
- togglePin,
- uninstallable,
- onDelete,
- }: IAppNavItemProps) {
- const router = useRouter()
- const url = `/explore/installed/${id}`
- const ref = useRef(null)
- const isHovering = useHover(ref)
- return (
- <div
- ref={ref}
- key={id}
- className={cn(
- s.item,
- isSelected ? s.active : 'hover:bg-gray-200',
- 'flex h-8 items-center justify-between mobile:justify-center px-2 mobile:px-1 rounded-lg text-sm font-normal',
- )}
- onClick={() => {
- router.push(url) // use Link causes popup item always trigger jump. Can not be solved by e.stopPropagation().
- }}
- >
- {isMobile && <AppIcon size='tiny' iconType={icon_type} icon={icon} background={icon_background} imageUrl={icon_url} />}
- {!isMobile && (
- <>
- <div className='flex items-center space-x-2 w-0 grow'>
- <AppIcon size='tiny' iconType={icon_type} icon={icon} background={icon_background} imageUrl={icon_url} />
- <div className='overflow-hidden text-ellipsis whitespace-nowrap' title={name}>{name}</div>
- </div>
- <div className='shrink-0 h-6' onClick={e => e.stopPropagation()}>
- <ItemOperation
- isPinned={isPinned}
- isItemHovering={isHovering}
- togglePin={togglePin}
- isShowDelete={!uninstallable && !isSelected}
- onDelete={() => onDelete(id)}
- />
- </div>
- </>
- )}
- </div>
- )
- }
|