import React, {useState} from 'react'; import {Button} from '@/components/ui/button'; import {Select, SelectContent, SelectItem, SelectTrigger, SelectValue} from '@/components/ui/select'; import {Input} from '@/components/ui/input'; import {Tabs, TabsContent, TabsList, TabsTrigger} from '@/components/ui/tabs'; import {Label} from '@/components/ui/label'; import EditableInput from '../shared/EditableInput'; import PropertyTable from '../shared/PropertyTable'; import ServerManager from '@/components/ServerManager.jsx'; import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from '@/components/ui/table.jsx'; import {useAPI} from '@/providers/APIProvider'; import MonacoEditor from '@/components/shared/MonacoEditor'; // import MonacoVariableEditor from './MonacoVariableEditor'; // Import the new component const HTTP_METHODS = [ 'POST', 'GET', 'PUT', 'DELETE', 'CONNECT', 'HEAD', 'OPTIONS', 'TRACE', 'PATCH' ]; export const HTTPClientView = ({model, index}) => { const {getServer} = useAPI(); const [currentModel, setCurrentModel] = useState(model); const [basePath, setBasePath] = useState(''); const [currentTab, setCurrentTab] = useState('body'); const [currentResponseTab, setCurrentResponseTab] = useState('response-body'); const [responseData, setResponseData] = useState({ headers: [], status: '', time: '', size: '' }); const [editorContents, setEditorContents] = useState({ requestBody: currentModel.requestBody || '', responseBody: currentModel.responseBody || '', console: '', preRequestScript: currentModel.preRequestScript || '', postRequestScript: currentModel.postRequestScript || '' }); const handleServerChange = (serverId) => { const selectedServer = getServer(serverId); setCurrentModel(prev => ({ ...prev, server: serverId })); if (selectedServer) { setBasePath(selectedServer.basePath || ''); } }; const handleHeadersChange = (headers) => { setCurrentModel(prev => ({ ...prev, headers })); }; const handlePathChange = (path) => { const queryParams = parseQueryParams(path); setCurrentModel(prev => ({ ...prev, path, queryParams })); }; const parseQueryParams = (path) => { const queryParams = []; const queryString = path.split('?')[1]; if (queryString) { queryString.split('&').forEach(param => { const [key, value] = param.split('='); queryParams.push({ enabled: true, key, value: value || '' }); }); } return queryParams; }; const renderRequestVariables = () => (

Available Variables

Request object containing headers, body, etc.
Current environment variables
); const renderResponseHeaders = () => ( Name Value {responseData.headers.map((header, index) => ( {header.name} {header.value} ))}
); return (
{/* Request Header Section */}
{currentModel.collectionName} {' > '} {currentModel.name}
{/* Request Controls */}
{/* Request/Response Container */}
{/* Request Section */}
Body Params Headers Pre-Request Post-Request
{/* Body Tab Content */}
{ setCurrentModel(prev => ({ ...prev, requestBody: newValue })); }} height="full" />
{/* Headers Tab Content */} { setEditorContents(prev => ({...prev, preRequestScript: value})); setCurrentModel(prev => ({...prev, preRequestScript: value})); }} height="full" /> {/* Post-Request Tab Content */} { setEditorContents(prev => ({...prev, postRequestScript: value})); setCurrentModel(prev => ({...prev, postRequestScript: value})); }} height="full" />
{/* Response Section */}
Response {responseData.status} {responseData.time} {responseData.size}
Body Headers Console
{renderResponseHeaders()}
); }; export default HTTPClientView;