/* * @Author: ZhaoYing * @Date: 2026-02-03 16:27:22 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-02-11 11:52:32 */ /** * API Key Configuration Modal * Allows configuring rate limits and daily usage limits for API keys */ import { forwardRef, useImperativeHandle, useState } from 'react'; import { Form, Slider, Flex } from 'antd'; import { useTranslation } from 'react-i18next'; import type { ApiKeyConfigModalRef } from '../types' import RbModal from '@/components/RbModal' import { updateApiKey } from '@/api/apiKey'; import type { ApiKey } from '@/views/ApiKeyManagement/types' /** * Component props */ interface ApiKeyConfigModalProps { /** Callback to refresh API key list */ refresh: () => void; } /** * Modal for configuring API key limits */const ApiKeyConfigModal = forwardRef(({ refresh }, ref) => { const { t } = useTranslation(); const [visible, setVisible] = useState(false); const [form] = Form.useForm(); const [loading, setLoading] = useState(false) const values = Form.useWatch([], form) const [editVo, setEditVo] = useState(null) /** Close modal and reset state */ const handleClose = () => { form.resetFields(); setLoading(false) setEditVo(null) setVisible(false); }; /** Open modal with API key data */ const handleOpen = (apiKey: ApiKey) => { setVisible(true); setEditVo(apiKey) form.setFieldsValue({ daily_request_limit: apiKey.daily_request_limit, rate_limit: apiKey.rate_limit }); }; /** Save API key configuration */ const handleSave = () => { if (!editVo?.id) return form.validateFields() .then((values) => { updateApiKey(editVo.id, { ...editVo, ...values }) handleClose() setTimeout(() => { refresh() }, 50) }) } /** Expose methods to parent component */ useImperativeHandle(ref, () => ({ handleOpen, handleClose })); return (
{/* QPS limit (requests per second) */} <>
{t(`application.qpsLimit`)}({t('application.qpsLimitTip')})
{t('application.qpsLimitDesc')}
1 {t('application.currentValue')}: {values?.rate_limit} {t('application.qpsLimitUnit')}
{/* Daily usage limit */} <>
{t(`application.dailyUsageLimit`)}
{t('application.dailyUsageLimitDesc')}
100 {t('application.currentValue')}: {values?.daily_request_limit} {t('application.dailyUsageLimitUnit')}
); }); export default ApiKeyConfigModal;