@@ -13,6 +13,9 @@ import 'react-sliding-pane/dist/react-sliding-pane.css';
1313import TimeoutSelector from 'components/atoms/common/TimeoutSelector' ;
1414import { timeoutForGraphRun } from 'components/molecules/flow/utils' ;
1515import HorizontalDivider from 'components/atoms/common/HorizontalDivider' ;
16+ import { JsonView , allExpanded , collapseAllNested , darkStyles , defaultStyles } from 'react-json-view-lite' ;
17+ import 'react-json-view-lite/dist/index.css' ;
18+ import { LogLevel } from '../flow/graph/GraphLogger' ;
1619
1720const TabPanelHeader = ( ) => {
1821 const focusTabId = useTabStore ( ( state ) => state . focusTabId ) ;
@@ -31,6 +34,84 @@ const TabPanelHeader = () => {
3134
3235 const [ generateFlowTestModalOpen , setGenerateFlowTestModalOpen ] = useState ( false ) ;
3336
37+ const renderLog = ( log ) => {
38+ if ( log . logLevel === LogLevel . INFO ) {
39+ let message = '' ;
40+ let json = undefined ;
41+ if ( log . message . trim ( ) != '' ) {
42+ message = log . message ;
43+ }
44+
45+ if ( log . node != undefined ) {
46+ const type = log . node . type ;
47+ if ( type === 'outputNode' ) {
48+ json = {
49+ output : log . node . data ,
50+ } ;
51+ }
52+
53+ if ( type === 'assertNode' ) {
54+ const data = log . node . data ;
55+ message = `Assert : ${ data . var1 } ${ data . operator } ${ data . var2 } = ${ data . result } ` ;
56+ }
57+
58+ if ( type === 'delayNode' ) {
59+ message = `Waiting for ${ log . node . data } ms` ;
60+ }
61+
62+ if ( type === 'setVarNode' ) {
63+ const data = log . node . data ;
64+ message = `Setting Variable: ${ data . name } = ${ data . value } ` ;
65+ }
66+
67+ if ( type === 'requestNode' ) {
68+ const data = log . node . data ;
69+ message = `${ data . request . type . toUpperCase ( ) } ${ data . request . url } ` ;
70+ json = data ;
71+ }
72+ }
73+
74+ return (
75+ < div className = 'flex flex-col items-start' >
76+ < div className = 'flex flex-row items-start' >
77+ < div >
78+ < p style = { { color : 'red' } } > { log . timestamp } </ p >
79+ </ div >
80+ < div >
81+ < p > : { message } </ p >
82+ </ div >
83+ </ div >
84+ < div >
85+ { json != undefined ? (
86+ < React . Fragment >
87+ < JsonView data = { json } shouldExpandNode = { collapseAllNested } style = { defaultStyles } />
88+ </ React . Fragment >
89+ ) : (
90+ < > </ >
91+ ) }
92+ </ div >
93+ </ div >
94+ ) ;
95+ } else {
96+ return (
97+ < div className = 'flex flex-col items-start' >
98+ < p style = { { color : 'red' } } >
99+ { log . timestamp } : { log . message }
100+ </ p >
101+ < div >
102+ { log . node != undefined ? (
103+ < React . Fragment >
104+ < JsonView data = { log . node . data } shouldExpandNode = { collapseAllNested } style = { defaultStyles } />
105+ </ React . Fragment >
106+ ) : (
107+ < > </ >
108+ ) }
109+ </ div >
110+ </ div >
111+ ) ;
112+ }
113+ } ;
114+
34115 return (
35116 < >
36117 { focusTab ? (
@@ -97,11 +178,9 @@ const TabPanelHeader = () => {
97178 aria-label = 'close sidebar'
98179 className = 'drawer-overlay'
99180 > </ label >
100- < ul className = 'min-h-full p-4 menu w-80 bg-base-200 text-base-content' >
181+ < ul className = 'min-h-full p-4 menu bg-base-200 text-base-content' >
101182 { graphRunLogs . map ( ( item , index ) => (
102- < li key = { index } >
103- < a > { JSON . stringify ( item ) } </ a >
104- </ li >
183+ < li key = { index } > { renderLog ( item ) } </ li >
105184 ) ) }
106185 </ ul >
107186 </ SlidingPane >
0 commit comments