import { ScrollArea } from '../components/ScrollArea'; import { HttpNetworkEntry, HttpRequestData, SSENetworkEntry, } from '../state/model'; import { KeyValueGrid } from '../components/KeyValueGrid'; import { Section } from '../components/Section'; import { useMemo } from 'react'; import { RequestBody } from '../components/RequestBody'; export type RequestTabProps = { selectedRequest: HttpNetworkEntry | SSENetworkEntry; }; const getRequestBodySectionTitle = (body: HttpRequestData) => { const baseTitle = 'Request Body'; switch (body.data.type) { case 'form-data': return `${baseTitle} (FormData)`; case 'binary': return `${baseTitle} (Binary)`; default: return baseTitle; } }; export const RequestTab = ({ selectedRequest }: RequestTabProps) => { const queryParams = useMemo(() => { const { searchParams } = new URL(selectedRequest.request.url); return Array.from(searchParams.entries()).map(([key, value]) => ({ key, value, })); }, [selectedRequest.request.url]); const requestBody = selectedRequest.request.body; const hasQueryParams = queryParams.length > 0; const renderQueryParams = () => { if (!hasQueryParams) { return null; } return ( ); }; const renderRequestBody = () => { if (!requestBody) { return null; } return ( ); }; return ( {renderQueryParams()} {renderRequestBody()} {!hasQueryParams && !requestBody && ( No request body or query params for this request )} ); };