From cdbdb94bcfc86c032ba654950e506e92e422dc9b Mon Sep 17 00:00:00 2001
From: Aman22sharma <kumaraman.rose@gmail.com>
Date: Tue, 2 Jun 2020 11:21:00 +0530
Subject: [PATCH] Create Patch File

---
 src/App.tsx   | 27 ++++++++++++++++++++-------
 src/Graph.tsx | 13 +++++++++++--
 2 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/src/App.tsx b/src/App.tsx
index 0728518..7b0ca3f 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,29 @@ 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..d38914a 100644
--- a/src/Graph.tsx
+++ b/src/Graph.tsx
@@ -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": "distinct count",
+      "top_ask_price":"avg",
+      "top_bid_price": "avg",
+      "timestamp":"distinct count"}`)
     }
   }
 
-- 
2.22.0.windows.1

