1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 'use client'
- import type { FC } from 'react'
- import React, { useState } from 'react'
- import { useContext } from 'use-context-selector'
- import cn from 'classnames'
- import { useTranslation } from 'react-i18next'
- import type { Collection, Tool } from '../types'
- import Button from '../../base/button'
- import { CollectionType } from '../types'
- import TooltipPlus from '../../base/tooltip-plus'
- import I18n from '@/context/i18n'
- import SettingBuiltInTool from '@/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool'
- import { getModelRuntimeSupported } from '@/utils/language'
- type Props = {
- collection: Collection
- icon: JSX.Element
- payload: Tool
- isInToolsPage: boolean
- isToolNumMax: boolean
- added?: boolean
- onAdd?: (payload: Tool) => void
- }
- const Item: FC<Props> = ({
- collection,
- icon,
- payload,
- isInToolsPage,
- isToolNumMax,
- added,
- onAdd,
- }) => {
- const { t } = useTranslation()
- const { locale } = useContext(I18n)
- const language = getModelRuntimeSupported(locale)
- const isBuiltIn = collection.type === CollectionType.builtIn
- const canShowDetail = !isBuiltIn || (isBuiltIn && isInToolsPage)
- const [showDetail, setShowDetail] = useState(false)
- const addBtn = <Button className='shrink-0 flex items-center h-7 !px-3 !text-xs !font-medium !text-gray-700' disabled={added || !collection.is_team_authorization} onClick={() => onAdd?.(payload)}>{t(`common.operation.${added ? 'added' : 'add'}`)}</Button>
- return (
- <>
- <div
- className={cn(canShowDetail && 'cursor-pointer', 'flex justify-between items-start p-4 rounded-xl border border-gray-200 bg-gray-50 shadow-xs')}
- onClick={() => canShowDetail && setShowDetail(true)}
- >
- <div className='flex items-start w-full'>
- {icon}
- <div className='ml-3 w-0 grow'>
- <div className={cn('text-base font-semibold text-gray-900 truncate')}>{payload.label[language]}</div>
- <div className={cn('leading-[18px] text-[13px] font-normal text-gray-500')}>
- {payload.description[language]}
- </div>
- </div>
- </div>
- <div className='shrink-0'>
- {!isToolNumMax && onAdd && (
- !collection.is_team_authorization
- ? <TooltipPlus popupContent={t('tools.auth.unauthorized')}>
- {addBtn}
- </TooltipPlus>
- : addBtn
- )}
- </div>
- </div>
- {showDetail && isBuiltIn && (
- <SettingBuiltInTool
- collection={collection}
- toolName={payload.name}
- readonly
- onHide={() => {
- setShowDetail(false)
- }}
- />
- )}
- </>
- )
- }
- export default React.memo(Item)
|