fix: pass down onClose properly (#376)

This commit is contained in:
Rahul Mishra
2026-01-31 21:04:40 +05:30
committed by GitHub
parent f02ae35634
commit c4ce458f79
3 changed files with 31 additions and 13 deletions

View File

@@ -98,13 +98,14 @@ export function GrpcResponsePane({ style, methodType, activeRequest }: Props) {
renderRow={({ event, isActive, onClick }) => ( renderRow={({ event, isActive, onClick }) => (
<GrpcEventRow event={event} isActive={isActive} onClick={onClick} /> <GrpcEventRow event={event} isActive={isActive} onClick={onClick} />
)} )}
renderDetail={({ event }) => ( renderDetail={({ event, onClose }) => (
<GrpcEventDetail <GrpcEventDetail
event={event} event={event}
showLarge={showLarge} showLarge={showLarge}
showingLarge={showingLarge} showingLarge={showingLarge}
setShowLarge={setShowLarge} setShowLarge={setShowLarge}
setShowingLarge={setShowingLarge} setShowingLarge={setShowingLarge}
onClose={onClose}
/> />
)} )}
/> />
@@ -147,19 +148,26 @@ function GrpcEventDetail({
showingLarge, showingLarge,
setShowLarge, setShowLarge,
setShowingLarge, setShowingLarge,
onClose,
}: { }: {
event: GrpcEvent; event: GrpcEvent;
showLarge: boolean; showLarge: boolean;
showingLarge: boolean; showingLarge: boolean;
setShowLarge: (v: boolean) => void; setShowLarge: (v: boolean) => void;
setShowingLarge: (v: boolean) => void; setShowingLarge: (v: boolean) => void;
onClose: () => void;
}) { }) {
if (event.eventType === 'client_message' || event.eventType === 'server_message') { if (event.eventType === 'client_message' || event.eventType === 'server_message') {
const title = `Message ${event.eventType === 'client_message' ? 'Sent' : 'Received'}`; const title = `Message ${event.eventType === 'client_message' ? 'Sent' : 'Received'}`;
return ( return (
<div className="h-full grid grid-rows-[auto_minmax(0,1fr)]"> <div className="h-full grid grid-rows-[auto_minmax(0,1fr)]">
<EventDetailHeader title={title} timestamp={event.createdAt} copyText={event.content} /> <EventDetailHeader
title={title}
timestamp={event.createdAt}
copyText={event.content}
onClose={onClose}
/>
{!showLarge && event.content.length > 1000 * 1000 ? ( {!showLarge && event.content.length > 1000 * 1000 ? (
<VStack space={2} className="italic text-text-subtlest"> <VStack space={2} className="italic text-text-subtlest">
Message previews larger than 1MB are hidden Message previews larger than 1MB are hidden
@@ -197,7 +205,7 @@ function GrpcEventDetail({
// Error or connection_end - show metadata/trailers // Error or connection_end - show metadata/trailers
return ( return (
<div className="h-full grid grid-rows-[auto_minmax(0,1fr)]"> <div className="h-full grid grid-rows-[auto_minmax(0,1fr)]">
<EventDetailHeader title={event.content} timestamp={event.createdAt} /> <EventDetailHeader title={event.content} timestamp={event.createdAt} onClose={onClose} />
{event.error && ( {event.error && (
<div className="select-text cursor-text text-sm font-mono py-1 text-warning"> <div className="select-text cursor-text text-sm font-mono py-1 text-warning">
{event.error} {event.error}

View File

@@ -13,7 +13,7 @@ import { useStateWithDeps } from '../hooks/useStateWithDeps';
import { languageFromContentType } from '../lib/contentType'; import { languageFromContentType } from '../lib/contentType';
import { Button } from './core/Button'; import { Button } from './core/Button';
import { Editor } from './core/Editor/LazyEditor'; import { Editor } from './core/Editor/LazyEditor';
import { EventDetailHeader, EventViewer, type EventDetailAction } from './core/EventViewer'; import { type EventDetailAction, EventDetailHeader, EventViewer } from './core/EventViewer';
import { EventViewerRow } from './core/EventViewerRow'; import { EventViewerRow } from './core/EventViewerRow';
import { HotkeyList } from './core/HotkeyList'; import { HotkeyList } from './core/HotkeyList';
import { Icon } from './core/Icon'; import { Icon } from './core/Icon';
@@ -75,7 +75,7 @@ export function WebsocketResponsePane({ activeRequest }: Props) {
renderRow={({ event, isActive, onClick }) => ( renderRow={({ event, isActive, onClick }) => (
<WebsocketEventRow event={event} isActive={isActive} onClick={onClick} /> <WebsocketEventRow event={event} isActive={isActive} onClick={onClick} />
)} )}
renderDetail={({ event, index }) => ( renderDetail={({ event, index, onClose }) => (
<WebsocketEventDetail <WebsocketEventDetail
event={event} event={event}
hexDump={hexDumps[index] ?? event.messageType === 'binary'} hexDump={hexDumps[index] ?? event.messageType === 'binary'}
@@ -84,6 +84,7 @@ export function WebsocketResponsePane({ activeRequest }: Props) {
showingLarge={showingLarge} showingLarge={showingLarge}
setShowLarge={setShowLarge} setShowLarge={setShowLarge}
setShowingLarge={setShowingLarge} setShowingLarge={setShowingLarge}
onClose={onClose}
/> />
)} )}
/> />
@@ -145,6 +146,7 @@ function WebsocketEventDetail({
showingLarge, showingLarge,
setShowLarge, setShowLarge,
setShowingLarge, setShowingLarge,
onClose,
}: { }: {
event: WebsocketEvent; event: WebsocketEvent;
hexDump: boolean; hexDump: boolean;
@@ -153,6 +155,7 @@ function WebsocketEventDetail({
showingLarge: boolean; showingLarge: boolean;
setShowLarge: (v: boolean) => void; setShowLarge: (v: boolean) => void;
setShowingLarge: (v: boolean) => void; setShowingLarge: (v: boolean) => void;
onClose: () => void;
}) { }) {
const message = useMemo(() => { const message = useMemo(() => {
if (hexDump) { if (hexDump) {
@@ -185,11 +188,12 @@ function WebsocketEventDetail({
return ( return (
<div className="h-full grid grid-rows-[auto_minmax(0,1fr)]"> <div className="h-full grid grid-rows-[auto_minmax(0,1fr)]">
<EventDetailHeader <EventDetailHeader
title={title} title={title}
timestamp={event.createdAt} timestamp={event.createdAt}
actions={actions} actions={actions}
copyText={formattedMessage || undefined} copyText={formattedMessage || undefined}
/> onClose={onClose}
/>
{!showLarge && event.message.length > 1000 * 1000 ? ( {!showLarge && event.message.length > 1000 * 1000 ? (
<VStack space={2} className="italic text-text-subtlest"> <VStack space={2} className="italic text-text-subtlest">
Message previews larger than 1MB are hidden Message previews larger than 1MB are hidden

View File

@@ -51,10 +51,9 @@ function ActualEventStreamViewer({ response }: Props) {
<span className="truncate text-xs">{event.data.slice(0, 1000)}</span> <span className="truncate text-xs">{event.data.slice(0, 1000)}</span>
</HStack> </HStack>
} }
/> />
)} )}
renderDetail={({ event, index }) => ( renderDetail={({ event, index, onClose }) => (
<EventDetail <EventDetail
event={event} event={event}
index={index} index={index}
@@ -62,6 +61,7 @@ function ActualEventStreamViewer({ response }: Props) {
showingLarge={showingLarge} showingLarge={showingLarge}
setShowLarge={setShowLarge} setShowLarge={setShowLarge}
setShowingLarge={setShowingLarge} setShowingLarge={setShowingLarge}
onClose={onClose}
/> />
)} )}
/> />
@@ -75,6 +75,7 @@ function EventDetail({
showingLarge, showingLarge,
setShowLarge, setShowLarge,
setShowingLarge, setShowingLarge,
onClose,
}: { }: {
event: ServerSentEvent; event: ServerSentEvent;
index: number; index: number;
@@ -82,6 +83,7 @@ function EventDetail({
showingLarge: boolean; showingLarge: boolean;
setShowLarge: (v: boolean) => void; setShowLarge: (v: boolean) => void;
setShowingLarge: (v: boolean) => void; setShowingLarge: (v: boolean) => void;
onClose: () => void;
}) { }) {
const language = useMemo<'text' | 'json'>(() => { const language = useMemo<'text' | 'json'>(() => {
if (!event?.data) return 'text'; if (!event?.data) return 'text';
@@ -90,7 +92,11 @@ function EventDetail({
return ( return (
<div className="flex flex-col h-full"> <div className="flex flex-col h-full">
<EventDetailHeader title="Message Received" prefix={<EventLabels event={event} index={index} />} /> <EventDetailHeader
title="Message Received"
prefix={<EventLabels event={event} index={index} />}
onClose={onClose}
/>
{!showLarge && event.data.length > 1000 * 1000 ? ( {!showLarge && event.data.length > 1000 * 1000 ? (
<VStack space={2} className="italic text-text-subtlest"> <VStack space={2} className="italic text-text-subtlest">
Message previews larger than 1MB are hidden Message previews larger than 1MB are hidden