1- import React from 'react' ;
1+ import React , { useReducer } from 'react' ;
22import { v4 as uuid } from 'uuid' ;
33// Import controllers
44import SendRequestButton from '../sharedComponents/requestButtons/SendRequestButton' ;
@@ -7,8 +7,10 @@ import TRPCMethodAndEndpointEntryForm from './TRPCMethodAndEndpointEntryForm';
77// Import Redux hooks
88import { useSelector , useDispatch } from 'react-redux' ;
99// Import Actions from RTK slice
10- import { responseDataSaved } from '../../../toolkit-refactor/slices/reqResSlice' ;
11- import { useState } from 'react' ;
10+ import {
11+ reqResItemAdded ,
12+ responseDataSaved ,
13+ } from '../../../toolkit-refactor/slices/reqResSlice' ;
1214
1315// Import MUI components
1416import { Box } from '@mui/material' ;
@@ -31,45 +33,89 @@ import Store from '../../../toolkit-refactor/store';
3133 */
3234
3335const PROCEDURE_DEFAULT = {
34- procedureMethod : 'QUERRY ' ,
36+ method : 'QUERY ' ,
3537 endpoint : '' ,
3638 variable : '' ,
3739} ;
40+
41+ // {type:"",payload:{index,value}}
42+ function reducer ( procedures , action ) {
43+ if ( action . type === 'METHOD' ) {
44+ const proceduresCopy = [ ...procedures ] ;
45+ const procedure = proceduresCopy [ action . payload . index ] ;
46+ const newState = {
47+ ...procedure ,
48+ method : action . payload . value ,
49+ } ;
50+ proceduresCopy [ action . payload . index ] = newState ;
51+ return proceduresCopy ;
52+ } else if ( action . type === 'ENDPOINT' ) {
53+ const proceduresCopy = [ ...procedures ] ;
54+ const procedure = proceduresCopy [ action . payload . index ] ;
55+ const newState = {
56+ ...procedure ,
57+ endpoint : action . payload . value ,
58+ } ;
59+ proceduresCopy [ action . payload . index ] = newState ;
60+ return proceduresCopy ;
61+ } else if ( action . type === 'VARIABLE' ) {
62+ const proceduresCopy = [ ...procedures ] ;
63+ const procedure = proceduresCopy [ action . payload . index ] ;
64+ const newState = {
65+ ...procedure ,
66+ variable : action . payload . value ,
67+ } ;
68+ proceduresCopy [ action . payload . index ] = newState ;
69+ return proceduresCopy ;
70+ } else if ( action . type === 'ADD' ) {
71+ const proceduresCopy = [ ...procedures ] ;
72+ proceduresCopy . push ( PROCEDURE_DEFAULT ) ;
73+ return proceduresCopy ;
74+ } else if ( action . type === 'DELETE' ) {
75+ const proceduresCopy = [ ...procedures ] ;
76+ proceduresCopy . splice ( action . payload . index , 1 ) ;
77+ return proceduresCopy ;
78+ }
79+ return procedures ;
80+ }
81+
3882export default function TRPCComposer ( props ) {
3983 const dispatch = useDispatch ( ) ;
4084 /** newRequestBody slice from redux store, contains specific request info */
4185 const requestBody = useSelector (
4286 ( state : RootState ) => state . newRequest . newRequestBody
4387 ) ;
4488
45- const [ procedures , setProcedures ] = useState ( [ { PROCEDURE_DEFAULT } ] ) ;
89+ const [ procedures , proceduresDipatch ] = useReducer ( reducer , [
90+ PROCEDURE_DEFAULT ,
91+ ] ) ;
92+ // const [procedures, setProcedures] = useState([{ PROCEDURE_DEFAULT }]);
4693
4794 const {
95+ currentTab,
4896 newRequestHeadersSet,
4997 newRequestStreamsSet,
5098 newRequestFields,
5199 newRequestHeaders,
52100 newRequestBody,
53101 newRequestStreams,
102+ reqResItemAdded,
54103 } = props ;
55104
56- console . log ( Store . getState ( ) ) ;
57105 /** newRequestFields slice from redux store, contains general request info*/
58106 const requestFields = useSelector (
59107 ( state : RootState ) => state . newRequestFields
60108 ) ;
61109
62110 /** reqRes slice from redux store, contains request and response data */
63111 const newRequest = useSelector ( ( state : RootState ) => state . newRequest ) ;
64- // const headers = requestStuff .newRequestHeaders.headersArr.filter(
112+ // const headers = newRequest .newRequestHeaders.headersArr.filter(
65113 // (x) => x.active
66114 // );
67115
68116 let subscription : any ;
69117 const addProcedures = ( ) => {
70- setProcedures ( ( prev ) => {
71- return [ ...prev , { ...PROCEDURE_DEFAULT } ] ;
72- } ) ;
118+ proceduresDipatch ( { type : 'ADD' } ) ;
73119 } ;
74120 // const sendRequest = () => {
75121 // let isWebsocket = false;
@@ -173,12 +219,130 @@ export default function TRPCComposer(props) {
173219 // };
174220
175221 // //dispatch response to it's slice, to update the state
176- // dispatch(responseDataSaved (newCurrentResponse));
222+ // dispatch(responseDataSarved (newCurrentResponse));
177223 // });
178224 // }
179225 // };
180226
181- const sendRequest = ( ) => { } ;
227+ function parseString ( str ) {
228+ if ( str === 'true' ) {
229+ return true ;
230+ }
231+
232+ if ( str === 'false' ) {
233+ return false ;
234+ }
235+
236+ if ( ! isNaN ( str ) ) {
237+ return parseFloat ( str ) ;
238+ }
239+
240+ try {
241+ const parsedJson = JSON . parse ( str ) ;
242+
243+ if ( typeof parsedJson === 'object' && parsedJson !== null ) {
244+ return parsedJson ;
245+ }
246+ } catch ( error ) {
247+ return str ;
248+ }
249+ }
250+
251+ const sendRequest = async ( ) => {
252+ const links = [ ] ;
253+ const batchConfigureObject = { } ;
254+ batchConfigureObject . url = requestFields . url ;
255+ const headers = newRequest . newRequestHeaders . headersArr
256+ . filter ( ( x ) => x . active )
257+ . reduce ( ( acc , curr ) => {
258+ acc [ curr . key ] = curr . value ;
259+ return acc ;
260+ } , { } ) ;
261+ if ( headers ) {
262+ batchConfigureObject . headers = headers ;
263+ }
264+ links . push ( httpBatchLink ( batchConfigureObject ) ) ;
265+ // const clientURL: string = requestFields.url; //grabbing url
266+
267+ const client = createTRPCProxyClient ( { links } ) ;
268+ Promise . all (
269+ procedures . map ( ( procedure ) => {
270+ let endpoint = procedure . endpoint ;
271+ const method = procedure . method . toLowerCase ( ) ;
272+ if ( procedure . variable ) {
273+ console . log ( 'SHOULD NOT HI' ) ;
274+ let arg = parseString ( procedure . variable . replace ( / \s / g, '' ) ) ;
275+ const tempArg = procedure . variable . replace ( / \s / g, '' ) ;
276+ const e = `client.${ endpoint } .${ method } (${ tempArg } )` ;
277+ return eval ( e ) ;
278+ } else {
279+ return eval ( `client.${ endpoint } .${ method } ()` ) ;
280+ }
281+ } )
282+ ) . then ( ( res ) => {
283+ // const fakeRes = {
284+ // id: uuid(),
285+ // createdAt: new Date(),
286+ // protocol: 'http://',
287+ // url: 'google.com',
288+ // timeSent: null,
289+ // timeReceived: null,
290+ // connection: 'uninitialized',
291+ // connectionType: null,
292+ // checkSelected: false,
293+ // request: {
294+ // method: 'Get',
295+ // },
296+ // response: {
297+ // headers: {},
298+ // events: [],
299+ // },
300+ // checked: false,
301+ // minimized: false,
302+ // tab: currentTab,
303+ // };
304+ const newCurrentResponse : any = {
305+ checkSelected : false ,
306+ checked : false ,
307+ connection : 'closed' ,
308+ connectionType : 'plain' ,
309+ createdAt : new Date ( ) ,
310+ gRPC : false ,
311+ graphQL : false ,
312+ host : requestFields . url ,
313+ id : uuid ( ) ,
314+ minimized : false ,
315+ path : '/' ,
316+ protoPath : undefined ,
317+ protocol : 'http://' ,
318+ request : { ...newRequest } ,
319+ tab : undefined ,
320+ timeReceived : null ,
321+ timeSent : null ,
322+ url : requestFields . url ,
323+ webrtc : false ,
324+ response : {
325+ events : [ res ] ,
326+ } ,
327+ } ;
328+
329+ //dispatch response to it's slice, to update the state
330+ // reqResItemAdded(fakeRes);
331+ dispatch ( responseDataSaved ( newCurrentResponse ) ) ;
332+ } ) ;
333+
334+ // const arg = JSON.parse(currProc.variable.replace(/\s/g, ''));
335+
336+ // const res = await client[endpoint][method](arg);
337+ // console.log(res);
338+ // console.log((procedures.variable = procedures.variable.replace(/\s/g, '')));
339+
340+ // const res = await client.update.mutate({
341+ // userId: '1',
342+ // name: 'nguyen',
343+ // });
344+ // console.log(res);
345+ } ;
182346 return (
183347 < Box
184348 className = "is-flex is-flex-direction-column is-justify-content-space-between"
@@ -201,7 +365,7 @@ export default function TRPCComposer(props) {
201365
202366 < TRPCProceduresContainer
203367 procedures = { procedures }
204- addProcedures = { addProcedures }
368+ proceduresDipatch = { proceduresDipatch }
205369 />
206370 < button
207371 className = "button is-normal is-primary-100 add-request-button is-vertical-align-center is-justify-content-center no-border-please"
0 commit comments