-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
120 lines (107 loc) · 3.68 KB
/
app.js
File metadata and controls
120 lines (107 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
--
node_modules.zip | Bin 0 -> 109310732 bytes
src/App.tsx | 27 +++++++++++++++++++++------
src/Graph.tsx | 15 ++++++++++++---
3 files changed, 33 insertions(+), 9 deletions(-)
create mode 100644 node_modules.zip
diff --git a/node_modules.zip b/node_modules.zip
new file mode 100644
index 0000000000000000000000000000000000000000..1a2295a48fe4694a62fe03a95ea205ba8f91e083
GIT binary patch
literal 109310732
literal 0
HcmV?d00001
diff --git a/src/App.tsx b/src/App.tsx
index 0728518..77c3fab 100755
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -8,6 +8,7 @@ import './App.css';
*/
interface IState {
data: ServerRespond[],
+ showGraph: boolean,
}
/**
@@ -22,6 +23,7 @@ class App extends Component<{}, IState> {
// data saves the server responds.
// We use this state to parse data down to the child element (Graph) as element property
data: [],
+ showGraph: false,
};
}
@@ -29,18 +31,31 @@ class App extends Component<{}, IState> {
* Render Graph react component with state.data parse as property data
*/
renderGraph() {
- return (<Graph data={this.state.data}/>)
+ if(this.state.showGraph) {
+ return (<Graph data={this.state.data}/>)
+ }
}
/**
* Get new data from server and update the state with the new data
*/
getDataFromServer() {
- DataStreamer.getData((serverResponds: ServerRespond[]) => {
- // Update the state by creating a new array of data that consists of
- // Previous data in the state and the new data from server
- this.setState({ data: [...this.state.data, ...serverResponds] });
- });
+ let x = 0;
+ const interval = setInterval(() => {
+ DataStreamer.getData((serverResponds: ServerRespond[]) => {
+ // Update the state by creating a new array of data that consists of
+ // Previous data in the state and the new data from server
+ this.setState ({
+ data: serverResponds ,
+ showGraph: true ,
+ });
+ });
+ x++;
+ if (x > 1000)
+ {
+ clearInterval(interval);
+ }
+ }, 100);
}
/**
diff --git a/src/Graph.tsx b/src/Graph.tsx
index ec1430e..79094d5 100644
--- a/src/Graph.tsx
+++ b/src/Graph.tsx
@@ -1,5 +1,5 @@
import React, { Component } from 'react';
-import { Table } from '@jpmorganchase/perspective';
+import { Table } from '@finos/perspective';
import { ServerRespond } from './DataStreamer';
import './Graph.css';
@@ -14,7 +14,7 @@ interface IProps {
* Perspective library adds load to HTMLElement prototype.
* This interface acts as a wrapper for Typescript compiler.
*/
-interface PerspectiveViewerElement {
+interface PerspectiveViewerElement extends HTMLElement{
load: (table: Table) => void,
}
@@ -32,7 +32,7 @@ class Graph extends Component<IProps, {}> {
componentDidMount() {
// Get element to attach the table from the DOM.
- const elem: PerspectiveViewerElement = document.getElementsByTagName('perspective-viewer')[0] as unknown as PerspectiveViewerElement;
+ const elem = document.getElementsByTagName('perspective-viewer')[0] as unknown as PerspectiveViewerElement;
const schema = {
stock: 'string',
@@ -49,6 +49,15 @@ class Graph extends Component<IProps, {}> {
// Add more Perspective configurations here.
elem.load(this.table);
+ elem.setAttribute('view', 'y_line');
+ elem.setAttribute('column-pivots', '["stock"]');
+ elem.setAttribute('row-pivots', '["timestamp"]');
+ elem.setAttribute('columns','["top_ask_price"]');
+ elem.setAttribute('aggregates', `
+ {"stock": "discount count",
+ "top_ask_price":"avg",
+ "top_bid_price": "avg",
+ "timestamp":"distinct count"}`)
}
}
--