1
1
import "./FileList.css" ;
2
- import { Container , Badge , Table , Placeholder } from "react-bootstrap" ;
2
+ import {
3
+ Container ,
4
+ Badge ,
5
+ Table ,
6
+ OverlayTrigger ,
7
+ Tooltip ,
8
+ Placeholder ,
9
+ } from "react-bootstrap" ;
3
10
import { useEffect , useState , useRef } from "react" ;
4
11
import { BsAppIndicator , BsPlayFill } from "react-icons/bs" ;
5
12
import { SwitchTransition , CSSTransition } from "react-transition-group" ;
13
+ import { AutoSizer , List , Column } from "react-virtualized" ;
14
+ import "react-virtualized/styles.css" ;
6
15
7
- const ListPlaceholder = Array ( 10 ) . fill ( 0 ) . map ( ( _ , i ) => (
8
- < tr key = { i } >
9
- {
10
- Array ( 5 ) . fill ( 0 ) . map ( ( _ , i ) => (
11
- < td key = { i } >
12
- < Placeholder as = "div" animation = "glow" > < Placeholder xs = { 12 } /> </ Placeholder >
13
- </ td >
14
- ) )
15
- }
16
- </ tr >
17
- ) )
16
+ const ListPlaceholder = Array ( 10 )
17
+ . fill ( 0 )
18
+ . map ( ( _ , i ) => (
19
+ < tr key = { i } >
20
+ { Array ( 5 )
21
+ . fill ( 0 )
22
+ . map ( ( _ , i ) => (
23
+ < td key = { i } >
24
+ < Placeholder as = "div" animation = "glow" >
25
+ < Placeholder xs = { 12 } />
26
+ </ Placeholder >
27
+ </ td >
28
+ ) ) }
29
+ </ tr >
30
+ ) ) ;
31
+
32
+ const typemaps = {
33
+ spawn : < Badge bg = "dark" > spawn</ Badge > ,
34
+ MessageBox : < Badge variant = "info" > MessageBox</ Badge > ,
35
+ ...Object . fromEntries (
36
+ [ "CreateFile" , "WriteFile" , "ReadFile" ] . map ( ( v ) => [
37
+ v ,
38
+ < Badge variant = "info" > { v } </ Badge > ,
39
+ ] )
40
+ ) ,
41
+ ...Object . fromEntries (
42
+ [ "HeapCreate" , "HeapDestroy" , "HeapFree" ] . map ( ( v ) => [
43
+ v ,
44
+ < Badge variant = "info" > { v } </ Badge > ,
45
+ ] )
46
+ ) ,
47
+ ...Object . fromEntries (
48
+ [
49
+ "RegCreateKeyEx" ,
50
+ "RegSetValueEx" ,
51
+ "RegDeleteValue" ,
52
+ "RegCloseKey" ,
53
+ "RegOpenKeyEx" ,
54
+ ] . map ( ( v ) => [ v , < Badge variant = "info" > { v } </ Badge > ] )
55
+ ) ,
56
+ ...Object . fromEntries (
57
+ [ "socket" , "bind" , "send" , "connect" , "recv" ] . map ( ( v ) => [
58
+ v ,
59
+ < Badge variant = "info" > { v } </ Badge > ,
60
+ ] )
61
+ ) ,
62
+ memcpy : < Badge variant = "info" > memcpy</ Badge > ,
63
+ } ;
18
64
19
65
function OperationList ( props ) {
20
66
const [ ready , setReady ] = useState ( false ) ;
21
67
const bottomElement = useRef ( null ) ;
22
- console . log ( 'operation list inited' )
23
68
useEffect ( ( ) => {
24
69
setReady ( true ) ;
25
70
} , [ ] ) ;
26
71
useEffect ( ( ) => {
27
- if ( bottomElement . current ) { bottomElement . current . scrollIntoView ( { behavior : "smooth" } ) } ;
72
+ if ( bottomElement . current ) {
73
+ bottomElement . current . scrollIntoView ( { behavior : "smooth" } ) ;
74
+ }
28
75
} , [ props . following , props . operations , props . filters , ready , props . loading ] ) ;
29
76
const showPlaceholder = ! ready || props . loading ;
30
- const showData = ! showPlaceholder && ( props . operations && props . operations != 0 ) ;
77
+ const showData =
78
+ ! showPlaceholder && props . operations && props . operations != 0 ;
31
79
const showText = ! showPlaceholder && ! showData ;
80
+ const rowRenderer = ( { key, index, isScrolling, isVisible, style } ) => {
81
+ const o = props . operations [ index ] ;
82
+ return (
83
+ < tr key = { key } style = { style } >
84
+ < td > { o . index } </ td >
85
+ < td > { o . time } </ td >
86
+ < td > { o . pid } </ td >
87
+ < td > { typemaps [ o . display . type ] || o . display . type } </ td >
88
+ < td >
89
+ { typeof o . display . summary == "string"
90
+ ? o . display . summary
91
+ : o . display . summary . map ( ( s ) => (
92
+ < OverlayTrigger
93
+ placement = "bottom"
94
+ delay = { { show : 250 , hide : 400 } }
95
+ overlay = { ( props ) => < Tooltip { ...props } > { s . tooltip } </ Tooltip > }
96
+ >
97
+ < Badge bg = "light" text = "dark" key = { s . key } >
98
+ < span > { s . key } :</ span >
99
+ < Badge pill bg = "info" >
100
+ { s . value }
101
+ </ Badge >
102
+ </ Badge >
103
+ </ OverlayTrigger >
104
+ ) ) }
105
+ </ td >
106
+ </ tr >
107
+ ) ;
108
+ } ;
109
+ const rowGetter = ( { index } ) => {
110
+ const o = props . operations [ index ] ;
111
+ return {
112
+ ...o ,
113
+ type : typemaps [ o . display . type ] ,
114
+ summary : o . display . summary . map ( ( s ) => (
115
+ < OverlayTrigger
116
+ placement = "bottom"
117
+ delay = { { show : 250 , hide : 400 } }
118
+ overlay = { ( props ) => < Tooltip { ...props } > { s . tooltip } </ Tooltip > }
119
+ >
120
+ < Badge bg = "light" text = "dark" key = { s . key } >
121
+ < span > { s . key } :</ span >
122
+ < Badge pill bg = "info" >
123
+ { s . value }
124
+ </ Badge >
125
+ </ Badge >
126
+ </ OverlayTrigger >
127
+ ) ) ,
128
+ } ;
129
+ } ;
130
+ // return (
131
+ // <div>
132
+ // <AutoSizer>
133
+ // {({ height, width }) => (
134
+ // <Table
135
+ // width={width}
136
+ // height={height}
137
+ // headerHeight={20}
138
+ // rowHeight={50}
139
+ // rowCount={props.operations.length}
140
+ // rowGetter={rowGetter}
141
+ // >
142
+ // {/* <Column label="ID" dataKey="index" /> */}
143
+ // <Column label="Time" dataKey="time" width={300} />
144
+ // <Column label="PID" dataKey="pid" width={100} />
145
+ // <Column label="Type" dataKey="type" width={100} />
146
+ // <Column label="Summary" dataKey="summary" width={100} />
147
+ // {/* <Column width={200} label="Description" dataKey="description" /> */ }
148
+ // </Table>
149
+ // )}
150
+ // </AutoSizer>
151
+ // </div>
152
+ // );
153
+ // return (
154
+ // <Container>
155
+ // {/* <div style={{ display: "flex", flexDirection: "column" }}> */ }
156
+ // <Table hover>
157
+ // <thead>
158
+ // <tr>
159
+ // <th>ID</th>
160
+ // <th>Time</th>
161
+ // <th>Process</th>
162
+ // <th>Type</th>
163
+ // <th>Summary</th>
164
+ // </tr>
165
+ // </thead>
166
+ // <tbody>
167
+ // {showPlaceholder && ListPlaceholder}
168
+ // <div>
169
+ // {showData && (
170
+ // <AutoSizer>
171
+ // {({ height, width }) => (
172
+ // <List
173
+ // width={width}
174
+ // height={height}
175
+ // rowCount={props.operations.length}
176
+ // rowHeight={20}
177
+ // rowRenderer={rowRenderer}
178
+ // />
179
+ // )}
180
+ // </AutoSizer>
181
+ // )}
182
+ // </div>
183
+ // </tbody>
184
+ // </Table>
185
+ // {showText && (
186
+ // <div style={{ textAlign: "center" }}>No operations are recorded.</div>
187
+ // )}
188
+ // <div ref={bottomElement}></div>
189
+ // </Container>
190
+ // );
32
191
return (
33
192
< Container >
34
- { /* <div style={{ display: "flex", flexDirection: "column" }}> */ }
193
+ { /* <div style={{ display: "flex", flexDirection: "column" }}> */ }
35
194
< Table hover >
36
195
< thead >
37
196
< tr >
@@ -43,23 +202,39 @@ function OperationList(props) {
43
202
</ tr >
44
203
</ thead >
45
204
< tbody >
46
- {
47
- showPlaceholder && ListPlaceholder
48
- }
49
- {
50
- showData && props . operations . map ( ( o , i ) => {
51
- return (
52
- < tr variant = "success" key = { i } >
53
- < td > { i } </ td >
54
- < td > { o . time } </ td >
55
- < td > { o . pid } </ td >
56
- < td > { o . display . type } </ td >
57
- < td > { o . display . summary } </ td >
58
- </ tr >
59
- )
60
- }
205
+ { showPlaceholder && ListPlaceholder }
206
+ { showData && props . operations . map ( o => {
207
+ // if (o.type == 'HOOK') return [];
208
+ return (
209
+ < tr key = { o . index } >
210
+ < td > { o . index } </ td >
211
+ < td > { o . time } </ td >
212
+ < td > { o . pid } </ td >
213
+ < td > { typemaps [ o . display . type ] || o . display . type } </ td >
214
+ < td >
215
+ {
216
+ typeof o . display . summary == "string"
217
+ ? o . display . summary
218
+ : o . display . summary . map ( ( s ) => [
219
+ < OverlayTrigger
220
+ placement = "bottom"
221
+ delay = { { show : 250 , hide : 400 } }
222
+ overlay = { ( props ) => < Tooltip { ...props } > { s . tooltip } </ Tooltip > }
223
+ >
224
+ < Badge bg = "light" text = "dark" key = { s . key } >
225
+ < span > { s . key } :</ span >
226
+ < Badge pill bg = "info" >
227
+ { s . value }
228
+ </ Badge >
229
+ </ Badge >
230
+ </ OverlayTrigger > ,
231
+ ' '
232
+ ] )
233
+ }
234
+ </ td >
235
+ </ tr >
61
236
)
62
- }
237
+ } ) }
63
238
</ tbody >
64
239
</ Table >
65
240
{ showText && (
0 commit comments