@@ -28,6 +28,7 @@ export default function ApiAction(props: Props) {
2828 const [ sendingRequest , setSendingRequest ] = useState ( false ) ;
2929 const [ queryParams , setQueryParams ] = useState ( '' ) ;
3030 const [ bodyParams , setBodyParams ] = useState ( '' ) ;
31+ const [ fileParams , setFileParams ] = useState ( null ) ;
3132 const [ responseData , setResponseData ] = useState ( "" ) ;
3233 const [ sqlQueriesCount , setSqlQueriesCount ] = useState ( 0 ) ;
3334 const [ sqlData , setSqlData ] = useState ( "" ) ;
@@ -37,13 +38,20 @@ export default function ApiAction(props: Props) {
3738 const [ responseHeaders , setResponseHeaders ] = useState ( "" ) ;
3839 const [ activeTab , setActiveTab ] = useState ( 'info' ) ;
3940
40- const handleFileChange = ( files : any ) => {
41- const bodyAppend = JSON . parse ( bodyParams )
42- bodyAppend [ "avatar" ] = files [ 0 ]
43- setBodyParams ( JSON . stringify ( bodyAppend ) )
41+ const handleFileChange = ( files : any , file : any ) => {
42+ const formData : any = new FormData ( )
43+ if ( file . includes ( '.*' ) ) {
44+ const fileParam = file . replace ( '.*' , '' )
45+ for ( let i = 0 ; i < files . length ; i ++ ) {
46+ formData . append ( `${ fileParam } [${ i } ]` , files [ i ] ) ;
47+ }
48+ } else {
49+ formData . append ( file , files [ 0 ] )
50+ }
51+ setFileParams ( formData )
4452 }
4553
46- // // update localstorage
54+ // // update localstorage
4755 const updateLocalStorage = ( ) => {
4856 const jsonAllParamsRegistry = JSON . parse ( allParamsRegistry )
4957 if ( method == 'GET' || method == 'HEAD' || method == 'DELETE' ) {
@@ -76,11 +84,22 @@ export default function ApiAction(props: Props) {
7684 if ( method == 'POST' || method == 'PUT' || method == 'PATCH' ) {
7785 try {
7886 JSON . parse ( bodyParams )
87+ if ( fileParams != null ) {
88+ for ( const [ key , value ] of Object . entries ( JSON . parse ( bodyParams ) ) ) {
89+ fileParams . append ( key , value )
90+ }
91+ }
92+
7993 } catch ( error : any ) {
8094 setError ( "Request body incorrect: " + error . message )
8195 return
8296 }
83- options [ 'body' ] = bodyParams
97+
98+ if ( fileParams != null ) {
99+ options [ 'body' ] = fileParams // includes body as well
100+ } else {
101+ options [ 'body' ] = bodyParams // just the body
102+ }
84103 }
85104
86105 const startTime = performance . now ( ) ;
@@ -93,51 +112,51 @@ export default function ApiAction(props: Props) {
93112 setError ( null )
94113
95114 fetch ( `${ host } /${ requestUri } ${ queryParams } ` , options )
96- . then ( ( response ) => {
97- let timeTaken = performance . now ( ) - startTime
98- // round to 3 decimals
99- timeTaken = Math . round ( ( timeTaken + Number . EPSILON ) * 1000 ) / 1000
100- setTimeTaken ( timeTaken )
101- setResponseStatus ( response . status )
102- setResponseHeaders ( JSON . stringify ( Object . fromEntries ( response . headers ) , null , 2 ) )
103- setSendingRequest ( false )
104- return response . json ( ) ;
105- } ) . then ( ( data ) => {
106-
107- if ( data && data . _lrd && data . _lrd . queries ) {
108- const sqlQueries = data . _lrd . queries . map ( ( query : any ) => {
109- return "Connection: "
110- + query . connection_name
111- + " Time taken: "
112- + query . time
113- + "ms: \n"
114- + query . sql + "\n"
115- } ) . join ( "\n" )
116- setSqlData ( sqlQueries )
117- setSqlQueriesCount ( data . _lrd . queries . length )
118- }
119- if ( data && data . _lrd && data . _lrd . logs ) {
120- let logs = ""
121- for ( const value of data . _lrd . logs ) {
122- logs += value . level + ": " + value . message + "\n"
115+ . then ( ( response ) => {
116+ let timeTaken = performance . now ( ) - startTime
117+ // round to 3 decimals
118+ timeTaken = Math . round ( ( timeTaken + Number . EPSILON ) * 1000 ) / 1000
119+ setTimeTaken ( timeTaken )
120+ setResponseStatus ( response . status )
121+ setResponseHeaders ( JSON . stringify ( Object . fromEntries ( response . headers ) , null , 2 ) )
122+ setSendingRequest ( false )
123+ return response . json ( ) ;
124+ } ) . then ( ( data ) => {
125+
126+ if ( data && data . _lrd && data . _lrd . queries ) {
127+ const sqlQueries = data . _lrd . queries . map ( ( query : any ) => {
128+ return "Connection: "
129+ + query . connection_name
130+ + " Time taken: "
131+ + query . time
132+ + "ms: \n"
133+ + query . sql + "\n"
134+ } ) . join ( "\n" )
135+ setSqlData ( sqlQueries )
136+ setSqlQueriesCount ( data . _lrd . queries . length )
123137 }
124- setLogData ( logs )
125- }
126- if ( data && data . _lrd && data . _lrd . memory ) {
127- setServerMemory ( data . _lrd . memory )
128- }
129- // remove key _lrd from response
130- if ( data && data . _lrd ) {
131- delete data . _lrd
132- }
133- setResponseData ( JSON . stringify ( data , null , 2 ) )
134- setActiveTab ( 'response' )
135- } ) . catch ( ( error ) => {
136- setError ( "Response error: " + error )
137- setResponseStatus ( 500 )
138- setSendingRequest ( false )
139- setActiveTab ( 'response' )
140- } )
138+ if ( data && data . _lrd && data . _lrd . logs ) {
139+ let logs = ""
140+ for ( const value of data . _lrd . logs ) {
141+ logs += value . level + ": " + value . message + "\n"
142+ }
143+ setLogData ( logs )
144+ }
145+ if ( data && data . _lrd && data . _lrd . memory ) {
146+ setServerMemory ( data . _lrd . memory )
147+ }
148+ // remove key _lrd from response
149+ if ( data && data . _lrd ) {
150+ delete data . _lrd
151+ }
152+ setResponseData ( JSON . stringify ( data , null , 2 ) )
153+ setActiveTab ( 'response' )
154+ } ) . catch ( ( error ) => {
155+ setError ( "Response error: " + error )
156+ setResponseStatus ( 500 )
157+ setSendingRequest ( false )
158+ setActiveTab ( 'response' )
159+ } )
141160
142161 }
143162
@@ -213,6 +232,7 @@ export default function ApiAction(props: Props) {
213232 ) }
214233 { activeTab == 'request' && (
215234 < ApiActionRequest
235+ lrdDocsItem = { lrdDocsItem }
216236 requestUri = { requestUri }
217237 method = { method }
218238 sendingRequest = { sendingRequest }
0 commit comments