@@ -108,9 +108,10 @@ const CopyDropdown: React.FC<{
108108
109109const ExpandableSection : React . FC < {
110110 title : string ;
111+ data ?: { name : string , value : React . ReactNode } [ ] ,
111112 children ?: React . ReactNode
112113 className ?: string ;
113- } > = ( { title, children, className } ) => {
114+ } > = ( { title, data , children, className } ) => {
114115 const [ expanded , setExpanded ] = useSetting ( `trace-viewer-network-details-${ title . replaceAll ( ' ' , '-' ) } ` , true ) ;
115116 return < Expandable
116117 expanded = { expanded }
@@ -119,6 +120,17 @@ const ExpandableSection: React.FC<{
119120 title = { < span className = 'network-request-details-header' > { title } </ span > }
120121 className = { className }
121122 >
123+ { data && < table className = 'network-request-details-table' >
124+ < tbody >
125+ { data . map ( ( { name, value } , index ) => (
126+ value !== null &&
127+ ( < tr key = { index } >
128+ < td > { name } </ td >
129+ < td > { value } </ td >
130+ </ tr > )
131+ ) ) }
132+ </ tbody >
133+ </ table > }
122134 { children }
123135 </ Expandable > ;
124136} ;
@@ -128,33 +140,26 @@ const RequestTab: React.FunctionComponent<{
128140 startTimeOffset : number ;
129141 requestBody : RequestBody ,
130142} > = ( { resource, startTimeOffset, requestBody } ) => {
131- return < div className = 'vbox network-request-details-tab' >
132- < ExpandableSection title = 'General' >
133- < div className = 'network-request-details-url' > { `URL: ${ resource . request . url } ` } </ div >
134- < div className = 'network-request-details-general' > { `Method: ${ resource . request . method } ` } </ div >
135- { resource . response . status !== - 1 && < div className = 'network-request-details-general' style = { { display : 'flex' } } >
136- Status Code: < span className = { statusClass ( resource . response . status ) } style = { { display : 'inline-flex' } } >
137- { `${ resource . response . status } ${ resource . response . statusText } ` }
138- </ span > </ div > }
139- </ ExpandableSection >
140-
141- { resource . request . queryString . length ?
142- < ExpandableSection title = 'Query String Parameters' >
143- < div className = 'network-request-details-headers' >
144- { resource . request . queryString . map ( param => `${ param . name } : ${ param . value } ` ) . join ( '\n' ) }
145- </ div >
146- </ ExpandableSection >
147- : null }
143+ const generalData = React . useMemo ( ( ) =>
144+ Object . entries ( {
145+ 'URL' : resource . request . url ,
146+ 'Method' : resource . request . method ,
147+ 'Status Code' : resource . response . status !== - 1 && < span className = { statusClass ( resource . response . status ) } > { resource . response . status } { resource . response . statusText } </ span > ,
148+ } ) . map ( ( [ name , value ] ) => ( { name, value } ) ) ,
149+ [ resource ] ) ;
148150
149- < ExpandableSection title = 'Request Headers' >
150- < div className = 'network-request-details-headers' > { resource . request . headers . map ( pair => `${ pair . name } : ${ pair . value } ` ) . join ( '\n' ) } </ div >
151- </ ExpandableSection >
152-
153- < ExpandableSection title = 'Time' >
154- < div className = 'network-request-details-general' > { `Start: ${ msToString ( startTimeOffset ) } ` } </ div >
155- < div className = 'network-request-details-general' > { `Duration: ${ msToString ( resource . time ) } ` } </ div >
156- </ ExpandableSection >
151+ const timeData = React . useMemo ( ( ) =>
152+ Object . entries ( {
153+ 'Start' : msToString ( startTimeOffset ) ,
154+ 'Duration' : msToString ( resource . time ) ,
155+ } ) . map ( ( [ name , value ] ) => ( { name, value } ) ) ,
156+ [ startTimeOffset , resource ] ) ;
157157
158+ return < div className = 'vbox network-request-details-tab' >
159+ < ExpandableSection title = 'General' data = { generalData } />
160+ { resource . request . queryString . length > 0 && < ExpandableSection title = 'Query String Parameters' data = { resource . request . queryString } /> }
161+ < ExpandableSection title = 'Request Headers' data = { resource . request . headers } />
162+ < ExpandableSection title = 'Time' data = { timeData } />
158163 { requestBody && < ExpandableSection title = 'Request Body' className = 'network-request-request-body' >
159164 < CodeMirrorWrapper text = { requestBody . text } mimeType = { requestBody . mimeType } readOnly lineNumbers = { true } />
160165 </ ExpandableSection > }
@@ -165,9 +170,7 @@ const ResponseTab: React.FunctionComponent<{
165170 resource : ResourceSnapshot ;
166171} > = ( { resource } ) => {
167172 return < div className = 'vbox network-request-details-tab' >
168- < ExpandableSection title = 'Response Headers' >
169- < div className = 'network-request-details-headers' > { resource . response . headers . map ( pair => `${ pair . name } : ${ pair . value } ` ) . join ( '\n' ) } </ div >
170- </ ExpandableSection >
173+ < ExpandableSection title = 'Response Headers' data = { resource . response . headers } />
171174 </ div > ;
172175} ;
173176
0 commit comments