import React, { useState, useEffect } from 'react'; import { styled } from '@mui/system'; import { TextField, Button, Switch, FormControlLabel, Box, Typography, Tabs, Tab } from '@mui/material'; import { sendProxyConfig, getProxyConfig, testProxyConfig } from '../../api/proxy'; import { useGlobalInfoStore } from '../../context/globalInfo'; const FormContainer = styled(Box)({ display: 'flex', flexDirection: 'column', gap: '16px', marginLeft: '30px' }); const FormControl = styled(Box)({ marginBottom: '16px', }); const ProxyForm: React.FC = () => { const [proxyConfig, setProxyConfig] = useState({ server_url: '', username: '', password: '', }); const [requiresAuth, setRequiresAuth] = useState(false); const [errors, setErrors] = useState({ server_url: '', username: '', password: '', }); const [tabIndex, setTabIndex] = useState(0); const [isProxyConfigured, setIsProxyConfigured] = useState(false); const { notify } = useGlobalInfoStore(); const validateForm = () => { let valid = true; let errorMessages = { server_url: '', username: '', password: '' }; if (!proxyConfig.server_url) { errorMessages.server_url = 'Server URL is required'; valid = false; } if (requiresAuth) { if (!proxyConfig.username) { errorMessages.username = 'Username is required for authenticated proxies'; valid = false; } if (!proxyConfig.password) { errorMessages.password = 'Password is required for authenticated proxies'; valid = false; } } setErrors(errorMessages); return valid; }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setProxyConfig({ ...proxyConfig, [name]: value }); }; const handleAuthToggle = (e: React.ChangeEvent) => { setRequiresAuth(e.target.checked); if (!e.target.checked) { setProxyConfig({ ...proxyConfig, username: '', password: '' }); setErrors({ ...errors, username: '', password: '' }); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) { return; } await sendProxyConfig(proxyConfig).then((response) => { if (response) { notify('success', 'Proxy configuration submitted successfully'); } else { notify('error', 'Failed to submit proxy configuration. Try again.'); } }); }; const handleTabChange = (event: React.SyntheticEvent, newValue: number) => { setTabIndex(newValue); }; const testProxy = async () => { await testProxyConfig().then((response) => { if (response.success) { notify('success', 'Proxy configuration is working'); } else { notify('error', 'Failed to test proxy configuration. Try again.'); } }); }; const fetchProxyConfig = async () => { await getProxyConfig().then((response) => { if (response.proxy_url) { setIsProxyConfigured(true); notify('success', 'Proxy configuration fetched successfully'); } else { notify('error', 'Failed to fetch proxy configuration. Try again.'); } }); }; useEffect(() => { fetchProxyConfig(); }, []); return ( <> { isProxyConfigured ? ( Proxy is already configured. You can test the configuration below. ) : ( Proxy Configuration {tabIndex === 0 && ( } label="Requires Authentication?" /> {requiresAuth && ( <> )} )} {tabIndex === 1 && ( <> Coming Soon. Join our Cloud Waitlist to get early access. )} ) } ); }; export default ProxyForm;