@@ -33,33 +33,23 @@ export const RequestDetails: React.FC<RequestDetailsProps> = ({ request, onClose
3333 ? styles . network . details . typeBadgePurple
3434 : styles . network . details . typeBadgeWhite
3535
36+ const duration = request . endTime ? request . endTime - request . startTime : 0
37+
3638 return (
3739 < div className = { styles . network . details . container } >
3840 < div className = { styles . network . details . content } >
41+ { /* Header with close button */ }
3942 < div className = { styles . network . details . header } >
40- < div className = { styles . network . details . headerRow } >
41- < div className = { styles . network . details . tagsContainer } >
42- { request ?. method && (
43- < Tag className = "w-max" color = { METHOD_COLORS [ request . method ] } >
44- { request . method }
45- </ Tag >
46- ) }
47- { request ?. type && (
48- < div className = { cx ( styles . network . details . typeBadge , typeBadgeColorClass ) } > { request . type } </ div >
49- ) }
50- { request ?. aborted && (
51- < div className = { cx ( styles . network . details . typeBadge , styles . network . details . typeBadgeRed ) } >
52- Request aborted
53- </ div >
54- ) }
55- </ div >
43+ < div className = { styles . network . details . headerTop } >
44+ < div className = { styles . network . details . headerTitle } > Request Details</ div >
5645 < div className = { styles . network . details . controls } >
5746 < div className = { styles . network . details . navButtons } >
5847 { index > 0 ? (
5948 < button
6049 type = "button"
6150 onClick = { ( ) => onChangeRequest ( index - 1 ) }
6251 className = { cx ( styles . network . details . navButton , styles . network . details . navButtonLeft ) }
52+ title = "Previous request"
6353 >
6454 < Icon name = "ChevronDown" />
6555 </ button >
@@ -69,40 +59,105 @@ export const RequestDetails: React.FC<RequestDetailsProps> = ({ request, onClose
6959 type = "button"
7060 onClick = { ( ) => onChangeRequest ( index + 1 ) }
7161 className = { cx ( styles . network . details . navButton , styles . network . details . navButtonRight ) }
62+ title = "Next request"
7263 >
7364 < Icon name = "ChevronDown" />
7465 </ button >
7566 ) : null }
7667 </ div >
77- < button type = "button" className = { styles . network . details . closeButton } onClick = { onClose } >
68+ < button type = "button" className = { styles . network . details . closeButton } onClick = { onClose } title = "Close" >
7869 < Icon name = "X" />
7970 </ button >
8071 </ div >
8172 </ div >
82- { request . id } < span className = { styles . network . details . title } > - { request . url } </ span >
73+
74+ { /* Main request info */ }
75+ < div className = { styles . network . details . mainInfo } >
76+ < div className = { styles . network . details . requestPath } >
77+ < div className = { styles . network . details . requestUrl } > { request . url } </ div >
78+ < div className = { styles . network . details . requestId } > ID: { request . id } </ div >
79+ </ div >
80+ </ div >
8381 </ div >
8482
85- < div >
86- Request duration: { new Date ( request . startTime ) . toLocaleTimeString ( ) } { " " }
87- { request . endTime && `- ${ new Date ( request . endTime ) . toLocaleTimeString ( ) } ` }
83+ { /* Metadata grid */ }
84+ < div className = { styles . network . details . metadataGrid } >
85+ < div className = { styles . network . details . metadataItem } >
86+ < div className = { styles . network . details . metadataLabel } > Method</ div >
87+ < div className = { styles . network . details . metadataValue } >
88+ { request ?. method && (
89+ < Tag className = "!px-2 !py-1" color = { METHOD_COLORS [ request . method ] } >
90+ { request . method }
91+ </ Tag >
92+ ) }
93+ </ div >
94+ </ div >
95+
96+ < div className = { styles . network . details . metadataItem } >
97+ < div className = { styles . network . details . metadataLabel } > Type</ div >
98+ < div className = { styles . network . details . metadataValue } >
99+ { request ?. type && (
100+ < div className = { cx ( styles . network . details . typeBadge , typeBadgeColorClass ) } > { request . type } </ div >
101+ ) }
102+ </ div >
103+ </ div >
104+
105+ < div className = { styles . network . details . metadataItem } >
106+ < div className = { styles . network . details . metadataLabel } > Duration</ div >
107+ < div className = { styles . network . details . metadataValue } >
108+ { request . endTime ? (
109+ < span className = { styles . network . details . duration } > { duration . toFixed ( 0 ) } ms</ span >
110+ ) : (
111+ < span className = { styles . network . details . durationPending } > Pending...</ span >
112+ ) }
113+ </ div >
114+ </ div >
115+
116+ < div className = { styles . network . details . metadataItem } >
117+ < div className = { styles . network . details . metadataLabel } > Started</ div >
118+ < div className = { styles . network . details . metadataValue } >
119+ { new Date ( request . startTime ) . toLocaleTimeString ( ) }
120+ </ div >
121+ </ div >
122+
88123 { request . endTime && (
89- < span className = { styles . network . details . duration } >
90- ({ ( request . endTime - request . startTime ) . toFixed ( 0 ) } ms)
91- </ span >
124+ < div className = { styles . network . details . metadataItem } >
125+ < div className = { styles . network . details . metadataLabel } > Completed</ div >
126+ < div className = { styles . network . details . metadataValue } >
127+ { new Date ( request . endTime ) . toLocaleTimeString ( ) }
128+ </ div >
129+ </ div >
130+ ) }
131+
132+ { request ?. aborted && (
133+ < div className = { styles . network . details . metadataItem } >
134+ < div className = { styles . network . details . metadataLabel } > Status</ div >
135+ < div className = { styles . network . details . metadataValue } >
136+ < div className = { cx ( styles . network . details . typeBadge , styles . network . details . typeBadgeRed ) } > Aborted</ div >
137+ </ div >
138+ </ div >
92139 ) }
93140 </ div >
94141
142+ { /* Data sections */ }
95143 { request . data && (
96144 < div className = { styles . network . details . section } >
97- < div className = { styles . network . details . sectionHeader } > Returned Data</ div >
145+ < div className = { styles . network . details . sectionHeader } >
146+ < Icon name = "Layers" />
147+ < span > Response Data</ span >
148+ </ div >
98149 < div className = { styles . network . details . sectionContent } >
99150 < JsonRenderer data = { request . data } />
100151 </ div >
101152 </ div >
102153 ) }
154+
103155 { request . headers && Object . keys ( request . headers ) . length > 0 && (
104156 < div className = { styles . network . details . section } >
105- < div className = { styles . network . details . sectionHeader } > Headers</ div >
157+ < div className = { styles . network . details . sectionHeader } >
158+ < Icon name = "List" />
159+ < span > Headers</ span >
160+ </ div >
106161 < div className = { styles . network . details . sectionContent } >
107162 < JsonRenderer data = { request . headers } />
108163 </ div >
0 commit comments