import { CheckCircleOutlined, CloseCircleOutlined } from '@ant-design/icons' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { Alert, Button, Card, Form, Input, Space, Spin, Typography } from 'antd' import { useState } from 'react' import { useNavigate } from 'react-router-dom' import llmApi from '../../api/llm' import settingsApi from '../../api/settings' const { Title, Text } = Typography const API_KEY = 'deepseek_api_key' export default function Settings() { const navigate = useNavigate() const queryClient = useQueryClient() const [checkResult, setCheckResult] = useState<{ ok: boolean; message: string } | null>(null) const { data: setting, isLoading } = useQuery({ queryKey: ['settings', API_KEY], queryFn: () => settingsApi.get(API_KEY), }) const saveMutation = useMutation({ mutationFn: (value: string) => settingsApi.update(API_KEY, value || null), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['settings', API_KEY] }) setCheckResult(null) }, }) const checkMutation = useMutation({ mutationFn: () => llmApi.check(), onSuccess: (data) => setCheckResult(data), }) const handleSave = (values: { api_key: string }) => { saveMutation.mutate(values.api_key) } if (isLoading) { return (
) } return (
Настройки Введите API ключ DeepSeek для активации AI-функций при создании и редактировании тестов. Ключ хранится только на сервере.
{saveMutation.isSuccess && ( )} {checkResult && ( ) : ( ) } showIcon style={{ marginTop: 16 }} closable onClose={() => setCheckResult(null)} /> )}
) }