| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | import type { FC } from 'react'import { useTranslation } from 'react-i18next'import type {  DefaultModel,  Model,  ModelItem,} from '../declarations'import {  useLanguage,  useUpdateModelList,  useUpdateModelProviders,} from '../hooks'import ModelIcon from '../model-icon'import ModelName from '../model-name'import {  ConfigurationMethodEnum,  MODEL_STATUS_TEXT,  ModelStatusEnum,} from '../declarations'import { Check } from '@/app/components/base/icons/src/vender/line/general'import { useModalContext } from '@/context/modal-context'import { useProviderContext } from '@/context/provider-context'import Tooltip from '@/app/components/base/tooltip'type PopupItemProps = {  defaultModel?: DefaultModel  model: Model  onSelect: (provider: string, model: ModelItem) => void}const PopupItem: FC<PopupItemProps> = ({  defaultModel,  model,  onSelect,}) => {  const { t } = useTranslation()  const language = useLanguage()  const { setShowModelModal } = useModalContext()  const { modelProviders } = useProviderContext()  const updateModelList = useUpdateModelList()  const updateModelProviders = useUpdateModelProviders()  const currentProvider = modelProviders.find(provider => provider.provider === model.provider)!  const handleSelect = (provider: string, modelItem: ModelItem) => {    if (modelItem.status !== ModelStatusEnum.active)      return    onSelect(provider, modelItem)  }  const handleOpenModelModal = () => {    setShowModelModal({      payload: {        currentProvider,        currentConfigurationMethod: ConfigurationMethodEnum.predefinedModel,      },      onSaveCallback: () => {        updateModelProviders()        const modelType = model.models[0].model_type        if (modelType)          updateModelList(modelType)      },    })  }  return (    <div className='mb-1'>      <div className='flex items-center px-3 h-[22px] text-xs font-medium text-gray-500'>        {model.label[language] || model.label.en_US}      </div>      {        model.models.map(modelItem => (          <Tooltip            key={modelItem.model}            popupContent={modelItem.status !== ModelStatusEnum.active ? MODEL_STATUS_TEXT[modelItem.status][language] : undefined}            position='right'          >            <div              key={modelItem.model}              className={`                group relative flex items-center px-3 py-1.5 h-8 rounded-lg                ${modelItem.status === ModelStatusEnum.active ? 'cursor-pointer hover:bg-gray-50' : 'cursor-not-allowed hover:bg-gray-50/60'}              `}              onClick={() => handleSelect(model.provider, modelItem)}            >              <ModelIcon                className={`                  shrink-0 mr-2 w-4 h-4                  ${modelItem.status !== ModelStatusEnum.active && 'opacity-60'}                `}                provider={model}                modelName={modelItem.model}              />              <ModelName                className={`                  grow text-sm font-normal text-gray-900                  ${modelItem.status !== ModelStatusEnum.active && 'opacity-60'}                `}                modelItem={modelItem}                showMode                showFeatures              />              {                defaultModel?.model === modelItem.model && defaultModel.provider === currentProvider.provider && (                  <Check className='shrink-0 w-4 h-4 text-primary-600' />                )              }              {                modelItem.status === ModelStatusEnum.noConfigure && (                  <div                    className='hidden group-hover:block text-xs font-medium text-primary-600 cursor-pointer'                    onClick={handleOpenModelModal}                  >                    {t('common.operation.add').toLocaleUpperCase()}                  </div>                )              }            </div>          </Tooltip>        ))      }    </div>  )}export default PopupItem
 |