/* * @Author: ZhaoYing * @Date: 2026-02-03 16:49:55 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-02-03 16:49:55 */ /** * Multi-Key Configuration Modal * Modal for managing multiple API keys for a single model * Allows adding and removing API keys */ import { forwardRef, useImperativeHandle, useState } from 'react'; import { Form, Input, App, Button } from 'antd'; import { useTranslation } from 'react-i18next'; import type { ModelListItem, MultiKeyForm, MultiKeyConfigModalRef, MultiKeyConfigModalProps } from '../types'; import RbModal from '@/components/RbModal' import { addModelApiKey, deleteModelApiKey, getModelInfo } from '@/api/models' /** * Multi-key configuration modal component */ const MultiKeyConfigModal = forwardRef(({ refresh }, ref) => { const { t } = useTranslation(); const { message } = App.useApp(); const [visible, setVisible] = useState(false); const [model, setModel] = useState({} as ModelListItem); const [form] = Form.useForm(); const [loading, setLoading] = useState(false) /** Close modal and refresh parent */ const handleClose = () => { setModel({} as ModelListItem); refresh?.() form.resetFields(); setLoading(false) setVisible(false); }; /** Open modal with model data */ const handleOpen = (vo: ModelListItem) => { setVisible(true); getData(vo) }; /** Fetch model information */ const getData = (vo: ModelListItem) => { if (!vo.id) return getModelInfo(vo?.id) .then(res => { setModel(res as ModelListItem) }) } /** Add new API key */ const handleSave = () => { form .validateFields() .then((values) => { setLoading(true) addModelApiKey(model.id, { ...values, model_config_id: model.id, model_name: model.name, provider: model.provider, }).then(() => { message.success(t('common.saveSuccess')) form.resetFields(); getData(model) }) .finally(() => { setLoading(false) }); }) .catch((err) => { console.log('err', err) }); } /** Delete API key */ const handleDelete = (api_key_id: string) => { deleteModelApiKey(api_key_id) .then(() => { message.success(t('common.deleteSuccess')) getData(model) }) } /** Expose methods to parent component */ useImperativeHandle(ref, () => ({ handleOpen, })); return ( {model.api_keys && model.api_keys.length > 0 && (
{model.api_keys.map((key) => (
{key.api_key}
{key.api_base}
))}
)}
); }); export default MultiKeyConfigModal;