Quellcode durchsuchen

added table to App.js

Bernadette Elena Hammerle vor 4 Jahren
Ursprung
Commit
5ff4d8a4ef
7 geänderte Dateien mit 194 neuen und 122 gelöschten Zeilen
  1. 0 0
      public/foto.png
  2. 7 1
      public/index.html
  3. 49 0
      src/App.css
  4. 14 81
      src/App.js
  5. 103 0
      src/components/Tables.js
  6. 1 1
      src/index.js
  7. 20 39
      src/table.html

+ 0 - 0
src/foto.png → public/foto.png


+ 7 - 1
public/index.html

@@ -28,7 +28,13 @@
   </head>
   <body>
     <noscript>You need to enable JavaScript to run this app.</noscript>
-    <div id="root"></div>
+    <div id="root">
+      <div id="wrapper">
+        <div id="online"></div>
+        <div id="offline"></div>
+      </div>
+      <div id="app"></div>
+    </div>
     <!--
       This HTML file is a template.
       If you open it directly in the browser, you will see an empty page.

+ 49 - 0
src/App.css

@@ -20,3 +20,52 @@
 .App-link {
   color: #09d3ac;
 }
+
+
+
+#wrapper{
+  width: 30%;
+  max-height: 80vh;
+  overflow: hidden;
+}
+.person {
+  background-color: #ddd;
+  color: #444;
+  cursor: pointer;
+  padding: 18px;
+  width: 100%;
+  border: none;
+  text-align: left;
+  outline: none;
+  font-size: 15px;
+  transition: 0.4s;
+}
+
+#offline{
+
+}
+
+#online {
+
+}
+
+#offline .person{
+  background-color: #eee;
+}
+
+#offline .person:hover, #online .person:hover {
+  background-color: #bbb;
+}
+
+.extend {
+  padding: 0 18px;
+  display: none;
+  overflow: hidden;
+}
+
+img{
+  width: 90px;
+  float: left;
+  margin-right: 20px;
+  margin-top: 10px;
+}

+ 14 - 81
src/App.js

@@ -1,87 +1,20 @@
-import React from 'react';
-import logo from './logo.svg';
+import React, { Component } from 'react';
+//import ReactDOM from 'react-dom';
+//import logo from './logo.svg';
 import './App.css';
-import BarChart from 'chart-race-react';
-
-
-//const data = {"apple": "2", "ELENA": "5", "orange": "2", "yoghurt": "3", "pinguin": "1", "blub": "5"}
-const data = ['apple', 'banana', 'orange', 'yoghurt', 'pinguin', 'blub'].reduce((res, item) => ({...res, ...{[item]: Array(20).fill(0).map(_ => Math.floor(20 * Math.random()))}}), {});
-
-const randomColor = () => {
-  return `rgb(${255 * Math.random()}, ${255 * Math.random()}, ${255})`;
-}
-
-const len = data[Object.keys(data)[0]].length;
-const keys = Object.keys(data);
-const colors = keys.reduce((res, item) => ({ 
-    ...res, 
-    ...{ [item]: randomColor() } 
-}), {});
-
-const labels = keys.reduce((res, item, idx) => {
-  return{
-  ...res, 
-  ...{[item]: (
-    <div style={{textAlign:"center",}}>
-      <div>{item}</div>
-    </div>
-    )}
-}}, {});
-
-const time = Array(20).fill(0).map((itm, idx) => idx + 1);
-
-function App() {
-  
-  return (
-    <div className="App">
-      <header className="App-header">
-        <img src={logo} className="App-logo" alt="logo" />
-        <p>
-          Edit <code>src/App.js</code> and save to reload.
-        </p>
-        <a
-          className="App-link"
-          href="https://reactjs.org"
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          Learn React
-        </a>
-      </header>
-      <h1>Test</h1>
-      <div style={{width: "500px"}}>
-        <BarChart
-        start={true}
-            data={data} 
-            timeline={time}
-            labels={labels}
-            colors={colors}
-            len={len}
-            timeout={400}
-            delay={1000}
-            timelineStyle={{
-              textAlign: "center",
-              fontSize: "50px",
-              color: "rgb(148, 148, 148)",
-              marginBottom: "100px"
-            }}
-            textBoxStyle={{
-              textAlign: "right",
-              color: "rgb(133, 131, 131)",
-              fontSize: "30px",
-            }}
-            barStyle={{
-              height: "60px",
-              marginTop: "10px",
-              borderRadius: "10px",
-            }}
-            width={[15, 75, 10]}
-            maxItems={5}
-        />
+//import BarChart from 'chart-race-react';
+import Tables from './components/Tables';
+
+class App extends Component {
+  render (){
+    return (
+      <div>
+        <Tables/>
       </div>
-      <h1>Test</h1>
-    </div>
   );
+  }
 }
 
+
+
 export default App;

+ 103 - 0
src/components/Tables.js

@@ -0,0 +1,103 @@
+import React, { Component } from 'react';
+
+
+class Tables extends Component {
+    constructor(props){
+        super(props);
+        
+        this.state = {
+            persons: [
+              {name: "Martin", fullName: "Martin Venzl", status: "online", speed: 2},
+              {name: "Simon", fullName: "Simon Ellinger", status: "online", speed: 4},
+              {name: "Lukas", fullName: "Lukas Wagner", status: "online", speed: 1},
+              {name: "Bernie", fullName: "Bernadette Hammerle", status: "online", speed: 3},
+              
+              {name: "tester1", fullName: "Testperson 1", status: "online", speed: 0},
+              {name: "tester2", fullName: "Testperson 2", status: "offline", speed: 6}
+            ]
+        }
+        
+        this.sortDivs = this.sortDivs.bind(this)
+    }
+    
+    // put every person in the right div (online or offline)
+    pushPersonToDiv(personDiv){
+      if (personDiv.dataset.status==="online"){
+        document.getElementById("online").appendChild(personDiv);
+      }else{
+        document.getElementById("offline").appendChild(personDiv);
+      }
+    }
+    
+    // update the content inside the div of one person
+    updateDivContent(person){
+      var id = person.name;
+      var div = document.getElementById(id);
+      div.dataset.status = person.status;
+      if (person.status==="online") {
+        div.innerHTML = person.name +
+        " (" + person.speed + " - " + person.status + ")" +
+        "<div class='extend'>" +
+        "<img src='foto.png'/>" +
+        "<p>" + person.fullName + "</p>" +
+        "<p>Geschwindigkeit: " + person.speed + "</p>" +
+        "<p>Status: " + person.status + "</p>" +
+        "</div>";
+      }else{
+        div.innerHTML = person.name +
+        " (" + person.status + ")" +
+        "<div class='extend'>" +
+        "<img src='foto.png'/>" +
+        "<p>" + person.fullName + "</p>" +
+        "<p>Geschwindigkeit: " + person.speed + "</p>" +
+        "<p>Status: " + person.status + "</p>" +
+        "</div>";
+      }
+      this.pushPersonToDiv(div);
+    }
+      
+    // create div with event listener for every person in array
+    createDivs(person){
+        var div = document.createElement('div');
+        div.className = "person";
+        div.id = person.name;
+        div.setAttribute("data-status", person.status);
+        
+        this.pushPersonToDiv(div);
+        this.updateDivContent(person);
+        
+        // add event listener to extend every person div
+        div.addEventListener("click", function(event) {
+          this.classList.toggle("active");
+          var targetElement = event.target || event.srcElement;
+          var extend = targetElement.children[0];
+          if (extend.style.display === "block") {
+              extend.style.display = "none";
+          } else {
+            extend.style.display = "block";
+          }
+        });
+    
+    }
+      
+    
+    // comparing the speed
+    sortDivs(){
+        this.state.persons.sort(function(a, b){return b.speed - a.speed});
+        this.state.persons.map((person) => (this.updateDivContent(person)));
+    }
+
+    // render every person and a button in a wrapper
+    render(){
+        return (
+            <div>
+                {this.state.persons.map((person) => (
+                    this.createDivs(person)
+                ))}
+                <button onClick={this.sortDivs}>Sort</button>
+            </div>
+        );
+    }
+}
+
+export default Tables;

+ 1 - 1
src/index.js

@@ -4,7 +4,7 @@ import './index.css';
 import App from './App';
 import * as serviceWorker from './serviceWorker';
 
-ReactDOM.render(<App />, document.getElementById('root'));
+ReactDOM.render(<App />, document.getElementById('app'));
 
 // If you want your app to work offline and load faster, you can change
 // unregister() to register() below. Note this comes with some pitfalls.

+ 20 - 39
src/table.html

@@ -4,7 +4,7 @@
 <meta name="viewport" content="width=device-width, initial-scale=1">  
 <style>
 #wrapper{
-  width: 80%;
+  width: 30%;
   max-height: 80vh;
   overflow: hidden;
 }
@@ -36,7 +36,7 @@
 }
 
 img{
-  width: 120px;
+  width: 90px;
   float: left;
   margin-right: 20px;
   margin-top: 10px;
@@ -78,13 +78,13 @@ var persons = [
 
 // create div for every person in persons array
 function createDivs(){
-  for (i=0; i<persons.length; i++) { 
+  for (person of persons) { 
     div = document.createElement('div');
     div.className = "person";
-    div.id = persons[i].name;
-    div.setAttribute("data-status", persons[i].status);
+    div.id = person.name;
+    div.setAttribute("data-status", person.status);
     pushPersonToDiv(div);
-    updateDivContent(persons[i]);
+    updateDivContent(person);
     
     // add event listener to extend every person div
     div.addEventListener("click", function(event) {
@@ -102,24 +102,6 @@ function createDivs(){
 
 createDivs();
 
-// add event listener to every person
-// TODO: combine with create ? 
-//var person = document.getElementsByClassName("person");
-//var i;
-//
-//for (i = 0; i < person.length; i++) {
-//  person[i].addEventListener("click", function(event) {
-//    this.classList.toggle("active");
-//    var targetElement = event.target || event.srcElement;
-//    /*var panel = this.nextElementSibling;*/
-//    var extend = targetElement.children[0];
-//    if (extend.style.display === "block") {
-//      extend.style.display = "none";
-//    } else {
-//      extend.style.display = "block";
-//    }
-//  });
-//}
 
 // update the content inside the div of one person
 // TODO: only execute if something has changed 
@@ -146,19 +128,18 @@ function updateDivContent(person){
     "<p>Status: " + person.status + "</p>" +
     "</div>";
   }
-  
   pushPersonToDiv(div);
 }
 
 // convert nodes to array
-function getPersonArray(){
-  var nodes = document.getElementsByClassName("person");
-  var personArray = [];
-  for (var j=0; j<nodes.length; j++) {
-    personArray.push(nodes[j]);
-  }
-  return personArray;
-}
+//function getPersonArray(){
+//  var nodes = document.getElementsByClassName("person");
+//  var personArray = [];
+//  for (node of nodes) {
+//    personArray.push(node);
+//  }
+//  return personArray;
+//}
 
 // put every person in the right div (online or offline)
 function pushPersonToDiv(personDiv){
@@ -172,13 +153,13 @@ function pushPersonToDiv(personDiv){
 // change the status from every person
 // TODO: check if status changed in intervall 
 function changeStatus(){
-  for (var i=0; i<persons.length; i++) {
-    if (persons[i].status=="online"){
-      persons[i].status = "offline";
-      updateDivContent(persons[i]);
+  for (person of persons) {
+    if (person.status=="online"){
+      person.status = "offline";
+      updateDivContent(person);
     }else{
-      persons[i].status = "online";
-      updateDivContent(persons[i]);
+      person.status = "online";
+      updateDivContent(person);
     }
   }
 }