import { type FC, useRef } from "react"; import { useTranslation } from 'react-i18next'; import { Flex, Button, Space, App } from 'antd' import type { SubModelModalRef, ModelList } from './types' import SubModelModal from './SubModelModal' import Empty from '@/components/Empty' import Tag from '@/components/Tag' interface ModelImplementProps { type?: string; value?: any; onChange?: (value: any) => void; } const ModelImplement: FC = ({ type, value, onChange }) => { const { t } = useTranslation(); const { modal, message } = App.useApp(); const subModelModalRef = useRef(null) const handleAdd = () => { if (!type || type.trim() === '') { message.warning(t('common.selectPlaceholder', { title: t('modelNew.type') })) return } subModelModalRef.current?.handleOpen() } const handleDelete = (vo: any) => { modal.confirm({ title: t('common.confirmDeleteDesc', { name: [vo.model_name, vo.api_key].join(' / ') }), content: t('application.apiKeyDeleteContent'), okText: t('common.delete'), cancelText: t('common.cancel'), okType: 'danger', onOk: () => { onChange?.(value?.filter((item: any) => item.id !== vo.id)) } }) } const handleRefresh = (list: ModelList[]) => { const existingModels = value || []; let updatedModels = [...existingModels]; const provider = list[0].provider updatedModels = updatedModels.filter(item => item.provider !== provider) updatedModels = [...updatedModels, ...list] onChange?.([...updatedModels]); } const groupedByProvider: Record = (value || []).reduce((acc: Record, item: ModelList) => { const provider = item.provider || 'unknown'; if (!acc[provider]) acc[provider] = []; acc[provider].push(item); return acc; }, {} as Record); return (
{t('modelNew.modelImplement')}
{!value || value.length === 0 ? : value.map((item: any) => { return (
{item.model_name}
handleDelete(item)} >
{item.api_key}
{t(`modelNew.${item.provider}`)}
) })}
) } export default ModelImplement