From 21164859cf5d23004db786d8f94917ca8d1d91e2 Mon Sep 17 00:00:00 2001 From: scarqin Date: Wed, 25 Dec 2024 10:14:07 +0800 Subject: [PATCH] feat: template modal --- .../keySettings/components/ApiKeyModal.tsx | 160 ++++++++++++++++++ .../keySettings/components/EditKeyModal.tsx | 67 -------- .../core/src/pages/keySettings/index.tsx | 58 ++++--- 3 files changed, 199 insertions(+), 86 deletions(-) create mode 100644 frontend/packages/core/src/pages/keySettings/components/ApiKeyModal.tsx delete mode 100644 frontend/packages/core/src/pages/keySettings/components/EditKeyModal.tsx diff --git a/frontend/packages/core/src/pages/keySettings/components/ApiKeyModal.tsx b/frontend/packages/core/src/pages/keySettings/components/ApiKeyModal.tsx new file mode 100644 index 00000000..5234326e --- /dev/null +++ b/frontend/packages/core/src/pages/keySettings/components/ApiKeyModal.tsx @@ -0,0 +1,160 @@ +import { $t } from '@common/locales' +import { DatePicker, Form, Input, Modal, Switch, theme, Typography } from 'antd' +import dayjs from 'dayjs' +import React, { useEffect, useState } from 'react' + +interface ApiKeyModalProps { + visible: boolean + onCancel: () => void + onSave: (values: any) => void + vendorName: string + mode: 'add' | 'edit' + initialValues?: { + keyName?: string + apiKey?: any + expirationDate?: string + enabled?: boolean + } + defaultKeyNumber?: number +} + +const { TextArea } = Input +const { Text } = Typography + +const ApiKeyModal: React.FC = ({ + visible, + onCancel, + onSave, + vendorName, + mode, + initialValues, + defaultKeyNumber = 1 +}) => { + const [form] = Form.useForm() + const { token } = theme.useToken() + const [neverExpire, setNeverExpire] = useState(true) + + useEffect(() => { + if (visible) { + if (mode === 'add') { + form.setFieldsValue({ + keyName: `KEY${defaultKeyNumber}`, + neverExpire: true, + expirationDate: dayjs().add(7, 'days'), + apiKey: { + openai_api_base: 'API Base', + openai_api_key: 'API Key' + } + }) + } else if (initialValues) { + form.setFieldsValue({ + keyName: initialValues.keyName, + apiKey: initialValues.apiKey, + expirationDate: initialValues.expirationDate ? dayjs(initialValues.expirationDate) : undefined, + enabled: initialValues.enabled, + neverExpire: !initialValues.expirationDate + }) + setNeverExpire(!initialValues.expirationDate) + } + } + }, [visible, mode, initialValues, defaultKeyNumber, form]) + + const handleOk = async () => { + try { + const values = await form.validateFields() + onSave({ + ...values, + expirationDate: neverExpire ? null : values.expirationDate.format('YYYY-MM-DD HH:mm:ss') + }) + } catch (error) { + console.error('Validation failed:', error) + } + } + + const handleNeverExpireChange = (checked: boolean) => { + setNeverExpire(checked) + if (!checked) { + form.setFieldsValue({ + expirationDate: dayjs().add(7, 'days') + }) + } + } + + return ( + +
+ + + + + + {$t('* API KEY')} + {mode === 'add' && ( + + {$t('Get API KEY from OpenAI')} + + )} + + } + rules={[{ required: true, message: $t('Please input the API key') }]} + > + {mode === 'add' ? ( +