import { useRef, useState } from 'react'; import { HttpNetworkEntry } from '../state/model'; import { Section } from '../components/Section'; import { KeyValueGrid } from '../components/KeyValueGrid'; import { useNetworkActivityActions } from '../state/hooks'; import { CodeEditor } from '../components/CodeEditor'; import { RequestOverride } from '../../shared/client'; import { Button } from './Button'; import { Check, CircleSlash2 } from 'lucide-react'; export type OverrideResponseProps = { selectedRequest: HttpNetworkEntry; initialOverride: RequestOverride | undefined; onClear: () => void; }; export const OverrideResponse = ({ selectedRequest, initialOverride, onClear, }: OverrideResponseProps) => { const actions = useNetworkActivityActions(); const [savedOverride, setSavedOverride] = useState< RequestOverride | undefined >(initialOverride); const [editedBody, setEditedBody] = useState( initialOverride?.body ); const [editedStatus, setEditedStatus] = useState( initialOverride?.status ); const responseEditorRef = useRef(null); const responseBody = selectedRequest.response?.body; const saveOverride = () => { if (editedBody === undefined && editedStatus === undefined) return; const newOverrideData = { body: editedBody, status: editedStatus, }; setSavedOverride(newOverrideData); actions.addOverride(selectedRequest.request.url, newOverrideData); }; const clearOverride = () => { setSavedOverride(undefined); setEditedBody(undefined); actions.clearOverride(selectedRequest.request.url); onClear(); }; if (!responseBody || responseBody.data === null) { return (
No response body available for this request
); } const { type } = responseBody; const hasChanges = editedBody !== savedOverride?.body || editedStatus !== savedOverride?.status; const overrideActions = ( <> ); if (savedOverride !== undefined) { return (
Status Code { setEditedStatus(parseInt(e.target.value)); }} className="max-w-24 font-mono text-gray-300 whitespace-pre-wrap bg-gray-800 p-1 rounded-md border border-gray-700 overflow-x-auto wrap-anywhere ring-offset-blue-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2" />
setEditedBody(e.currentTarget.innerText)} />
); } };