import React, { useState } from "react"; import { agentApiService } from "@/modules/agent/api/agent.api.service"; import { FiKey, FiPlus, FiTrash2, FiCopy, FiCheck, FiX } from "react-icons/fi"; interface RegistrationTokenForm { label: string; } interface RegistrationResult { label: string; token: string; } export const RegistrationTokenPage: React.FC = () => { const [tokens, setTokens] = useState([ { label: "" }, ]); const [results, setResults] = useState([]); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); const [successMessage, setSuccessMessage] = useState(null); const [copiedIndex, setCopiedIndex] = useState(null); const handleTokenChange = (index: number, label: string) => { const newTokens = [...tokens]; newTokens[index] = { label }; setTokens(newTokens); }; const handleAddToken = () => { setTokens([...tokens, { label: "" }]); }; const handleRemoveToken = (index: number) => { const newTokens = tokens.filter((_, i) => i !== index); setTokens(newTokens); }; const handleCopyToken = async (token: string, index: number) => { await navigator.clipboard.writeText(token); setCopiedIndex(index); setTimeout(() => setCopiedIndex(null), 2000); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); // Валидация const validTokens = tokens.filter((t) => t.label.trim()); if (validTokens.length === 0) { setError("Введите хотя бы одну метку для токена"); return; } setIsSubmitting(true); setError(null); setSuccessMessage(null); setResults([]); try { const createdTokens: RegistrationResult[] = []; for (const tokenData of validTokens) { const response = await agentApiService.createRegistrationToken({ label: tokenData.label, }); // API возвращает объект с токеном const token = response.token || Object.values(response)[0] as string; createdTokens.push({ label: tokenData.label, token, }); } setResults(createdTokens); setSuccessMessage( `Успешно создано ${createdTokens.length} токен(ов)` ); setTokens([{ label: "" }]); } catch (err) { setError( err instanceof Error ? err.message : "Ошибка при создании токенов" ); } finally { setIsSubmitting(false); } }; const inputStyle: React.CSSProperties = { width: "100%", padding: "10px 12px", border: "1px solid var(--border)", borderRadius: "8px", backgroundColor: "var(--input-bg)", color: "var(--text-primary)", fontSize: "14px", transition: "border-color 0.2s, box-shadow 0.2s", }; const labelStyle: React.CSSProperties = { display: "block", marginBottom: "8px", color: "var(--text-secondary)", fontSize: "14px", fontWeight: 500, }; return (
{/* Header */}

Регистрация токенов для агентов

Создайте токены для регистрации новых агентов

{/* Token Forms */}
{tokens.map((token, index) => (
{/* Header */}

Токен #{index + 1}

{tokens.length > 1 && ( )}
{/* Label Input */}
handleTokenChange(index, e.target.value)} required style={inputStyle} onFocus={(e) => { e.currentTarget.style.borderColor = "var(--border-focus)"; e.currentTarget.style.boxShadow = `0 0 0 3px var(--border-focus)30`; }} onBlur={(e) => { e.currentTarget.style.borderColor = "var(--border)"; e.currentTarget.style.boxShadow = "none"; }} placeholder="agent-production-1" />
))}
{/* Add Token Button */} {/* Messages */} {successMessage && (
{successMessage}
)} {error && (
{error}
)} {/* Submit Button */} {/* Results */} {results.length > 0 && (

Созданные токены

{results.map((result, index) => (
{result.label}
{result.token}
))}
)}
); };