diff --git a/src-web/components/HttpResponseTimeline.tsx b/src-web/components/HttpResponseTimeline.tsx
index b0122700..98c10b5d 100644
--- a/src-web/components/HttpResponseTimeline.tsx
+++ b/src-web/components/HttpResponseTimeline.tsx
@@ -47,8 +47,8 @@ function Inner({ response }: Props) {
/>
);
}}
- renderDetail={({ event }) => (
-
+ renderDetail={({ event, onClose }) => (
+
)}
/>
);
@@ -64,10 +64,12 @@ function EventDetails({
event,
showRaw,
setShowRaw,
+ onClose,
}: {
event: HttpResponseEvent;
showRaw: boolean;
setShowRaw: (v: boolean) => void;
+ onClose: () => void;
}) {
const { label } = getEventDisplay(event.event);
const e = event.event;
@@ -81,72 +83,76 @@ function EventDetails({
];
// Determine the title based on event type
- const title =
- e.type === 'header_up'
- ? 'Header Sent'
- : e.type === 'header_down'
- ? 'Header Received'
- : label;
+ const title = (() => {
+ switch (e.type) {
+ case 'header_up':
+ return 'Header Sent';
+ case 'header_down':
+ return 'Header Received';
+ case 'send_url':
+ return 'Request';
+ case 'receive_url':
+ return 'Response';
+ case 'redirect':
+ return 'Redirect';
+ case 'setting':
+ return 'Apply Setting';
+ case 'chunk_sent':
+ return 'Data Sent';
+ case 'chunk_received':
+ return 'Data Received';
+ case 'dns_resolved':
+ return e.overridden ? 'DNS Override' : 'DNS Resolution';
+ default:
+ return label;
+ }
+ })();
- // Raw view - show plaintext representation
- if (showRaw) {
- const rawText = formatEventRaw(event.event);
- return (
-
-
-
-
- );
- }
+ // Render content based on view mode and event type
+ const renderContent = () => {
+ // Raw view - show plaintext representation
+ if (showRaw) {
+ const rawText = formatEventRaw(event.event);
+ return ;
+ }
- // Headers - show name and value with Editor for JSON
- if (e.type === 'header_up' || e.type === 'header_down') {
- return (
-
-
+ // Headers - show name and value
+ if (e.type === 'header_up' || e.type === 'header_down') {
+ return (
{e.name}{e.value}
-
- );
- }
+ );
+ }
- // Request URL - show method and path separately
- if (e.type === 'send_url') {
- return (
-
-
+ // Request URL - show method and path separately
+ if (e.type === 'send_url') {
+ return (
{e.path}
-
- );
- }
+ );
+ }
- // Response status - show version and status separately
- if (e.type === 'receive_url') {
- return (
-
-
+ // Response status - show version and status separately
+ if (e.type === 'receive_url') {
+ return (
{e.version}
-
- );
- }
+ );
+ }
- // Redirect - show status, URL, and behavior
- if (e.type === 'redirect') {
- return (
-
-
+ // Redirect - show status, URL, and behavior
+ if (e.type === 'redirect') {
+ return (
@@ -156,47 +162,27 @@ function EventDetails({
{e.behavior === 'drop_body' ? 'Drop body, change to GET' : 'Preserve method and body'}
-
- );
- }
+ );
+ }
- // Settings - show as key/value
- if (e.type === 'setting') {
- return (
-
-
+ // Settings - show as key/value
+ if (e.type === 'setting') {
+ return (
{e.name}{e.value}
-