@@ -21,7 +21,7 @@ import { UnreachableCheck, unreachableCheck } from '../../util/error';
2121
2222import { SERVER_SEND_API_SUPPORTED , serverVersion , versionSatisfies } from '../../services/service-versions' ;
2323
24- import { UiStore } from '../../model/ui/ui-store' ;
24+ import { ExpandableViewCardKey , UiStore } from '../../model/ui/ui-store' ;
2525import { ProxyStore } from '../../model/proxy-store' ;
2626import { EventsStore } from '../../model/events/events-store' ;
2727import { RulesStore } from '../../model/rules/rules-store' ;
@@ -143,6 +143,19 @@ const EDITOR_KEYS = [
143143] as const ;
144144type EditorKey = typeof EDITOR_KEYS [ number ] ;
145145
146+ const paneExpansionRequirements : { [ key in ExpandableViewCardKey ] : ( event : CollectedEvent ) => boolean } = {
147+ requestBody : ( event : CollectedEvent ) =>
148+ event . isHttp ( ) &&
149+ ( event . hasRequestBody ( ) || ! ! event . downstream . requestBreakpoint ) ,
150+ responseBody : ( event : CollectedEvent ) =>
151+ event . isHttp ( ) &&
152+ ( event . hasResponseBody ( ) || ! ! event . downstream . responseBreakpoint ) ,
153+ webSocketMessages : ( event : CollectedEvent ) =>
154+ event . isWebSocket ( ) && event . wasAccepted ,
155+ rawTunnelPackets : ( event : CollectedEvent ) =>
156+ event . isRawTunnel ( )
157+ } ;
158+
146159@inject ( 'eventsStore' )
147160@inject ( 'proxyStore' )
148161@inject ( 'uiStore' )
@@ -280,33 +293,14 @@ class ViewPage extends React.Component<ViewPageProps> {
280293 }
281294
282295 const { expandedViewCard } = this . props . uiStore ;
283- if ( ! expandedViewCard ) return ;
284-
285- const selectedHttpExchange = this . selectedExchange ;
286-
287- // If you have a pane expanded, and select an event with no data
288- // for that pane, then disable the expansion:
289- if (
290- ! selectedHttpExchange ||
291- (
292- expandedViewCard === 'requestBody' &&
293- ! selectedHttpExchange . hasRequestBody ( ) &&
294- ! selectedHttpExchange . downstream . requestBreakpoint
295- ) ||
296- (
297- expandedViewCard === 'responseBody' &&
298- ! selectedHttpExchange . hasResponseBody ( ) &&
299- ! selectedHttpExchange . downstream . responseBreakpoint
300- ) ||
301- (
302- expandedViewCard === 'webSocketMessages' &&
303- ! ( selectedHttpExchange . isWebSocket ( ) && selectedHttpExchange . wasAccepted )
304- )
305- ) {
306- runInAction ( ( ) => {
307- this . props . uiStore . expandedViewCard = undefined ;
308- } ) ;
309- return ;
296+ if ( expandedViewCard ) {
297+ // If you have a pane expanded, and select an event with no data
298+ // for that pane, then disable the expansion:
299+ if ( ! paneExpansionRequirements [ expandedViewCard ] ( selectedEvent ) ) {
300+ runInAction ( ( ) => {
301+ this . props . uiStore . expandedViewCard = undefined ;
302+ } ) ;
303+ }
310304 }
311305 } ) ) ;
312306
0 commit comments