From 4a2b6052e6a36313b5e10b0ddc2011933001c03c Mon Sep 17 00:00:00 2001
From: Matt Grau <graum@phys.ethz.ch>
Date: Tue, 13 Jul 2021 14:32:04 +0200
Subject: [PATCH] connect device frontend object to backend (readonly)

---
 frontend/package-lock.json | 13 +++++++
 frontend/package.json      |  1 +
 frontend/src/device.jsx    | 72 +++++++++++++++++++++++++-------------
 frontend/src/index.js      |  3 +-
 server.py                  |  2 ++
 5 files changed, 65 insertions(+), 26 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index d4fc838..c1c6460 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1327,6 +1327,14 @@
       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
       "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
     },
+    "axios": {
+      "version": "0.21.1",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
+      "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
+      "requires": {
+        "follow-redirects": "^1.10.0"
+      }
+    },
     "babel-plugin-dynamic-import-node": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
@@ -2923,6 +2931,11 @@
         }
       }
     },
+    "follow-redirects": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
+      "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg=="
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index cff6686..ff3266d 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -10,6 +10,7 @@
   "author": "Matt Grau",
   "license": "ISC",
   "dependencies": {
+    "axios": "^0.21.1",
     "parcel-bundler": "^1.12.5",
     "react": "^17.0.2",
     "react-dom": "^17.0.2"
diff --git a/frontend/src/device.jsx b/frontend/src/device.jsx
index 4ab83b1..cedad0d 100644
--- a/frontend/src/device.jsx
+++ b/frontend/src/device.jsx
@@ -1,27 +1,49 @@
-import  React from 'react'
+import React from "react";
+import axios from "axios";
 
 export default class Device extends React.Component {
-    render() {
-        return (
-            <div>
-                <div>
-                    <h3>Device Name</h3>
-                </div>
-                <div>
-                    <div>
-                        <label>Voltage</label>
-                        <input></input>
-                    </div>
-                    <div>
-                        <label>Current</label>
-                        <input></input>
-                    </div>
-                    <div>
-                        <label>Resistance</label>
-                        <input></input>
-                    </div>
-                </div>
-            </div>
-        )
-    }
-}
\ No newline at end of file
+  constructor(props) {
+    super(props);
+
+    this.state = {
+      voltage: 0,
+      current: 0,
+      resistance: 0,
+    };
+  }
+
+  async componentDidMount() {
+    const voltage = await axios.get("http://localhost:8000/get_voltage");
+    const current = await axios.get("http://localhost:8000/get_current");
+    const resistance = await axios.get("http://localhost:8000/calculate_resistance");
+    this.setState({
+        voltage: voltage.data,
+        current: current.data,
+        resistance: resistance.data
+    })
+  }
+
+  render() {
+    return (
+      <div>
+        <div>
+          <h3>{this.props.name}</h3>
+        </div>
+        <div>
+          <div>
+            <label>Voltage</label>
+            <input value={this.state.voltage}></input>
+          </div>
+          <div>
+            <label>Current</label>
+            <input value={this.state.current}></input>
+          </div>
+          <div>
+            <label>Resistance</label>
+            <input value={this.state.resistance}></input>
+          </div>
+        </div>
+      </div>
+    );
+  }
+}
diff --git a/frontend/src/index.js b/frontend/src/index.js
index 5aef464..2819725 100644
--- a/frontend/src/index.js
+++ b/frontend/src/index.js
@@ -1,6 +1,7 @@
+import 'regenerator-runtime/runtime'
 import React from "react";
 import ReactDOM from "react-dom";
 
 import Device from './device'
 
-ReactDOM.render(<Device />, document.getElementById("root"));
+ReactDOM.render(<Device name="My Device" />, document.getElementById("root"));
diff --git a/server.py b/server.py
index d55f0f6..75b5f61 100644
--- a/server.py
+++ b/server.py
@@ -1,8 +1,10 @@
 import flask
+import flask_cors
 from device import Device
 
 device = Device()
 app = flask.Flask(__name__)
+flask_cors.CORS(app)
 
 
 @app.route('/')
-- 
GitLab