summaryrefslogtreecommitdiff
path: root/src/components/sidebars/topology/machine
diff options
context:
space:
mode:
authorGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-09-08 10:27:00 +0200
committerGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-09-23 10:05:59 +0200
commitfc9c52a8f102202bd0e1a8a9dc4d8d68babe2304 (patch)
tree0025827d791a3eeb5416bb89d4c36e777feabdd7 /src/components/sidebars/topology/machine
parent1b5d2658f9ec06308b2a5ed062f6f5b4798ed733 (diff)
Implement UI for unit addition and removal
Diffstat (limited to 'src/components/sidebars/topology/machine')
-rw-r--r--src/components/sidebars/topology/machine/MachineSidebarComponent.js2
-rw-r--r--src/components/sidebars/topology/machine/UnitAddComponent.js37
-rw-r--r--src/components/sidebars/topology/machine/UnitComponent.js10
-rw-r--r--src/components/sidebars/topology/machine/UnitListComponent.js17
-rw-r--r--src/components/sidebars/topology/machine/UnitTabsComponent.js42
5 files changed, 108 insertions, 0 deletions
diff --git a/src/components/sidebars/topology/machine/MachineSidebarComponent.js b/src/components/sidebars/topology/machine/MachineSidebarComponent.js
index 117db784..218e4f41 100644
--- a/src/components/sidebars/topology/machine/MachineSidebarComponent.js
+++ b/src/components/sidebars/topology/machine/MachineSidebarComponent.js
@@ -2,6 +2,7 @@ import React from "react";
import BackToRackContainer from "../../../../containers/sidebars/topology/machine/BackToRackContainer";
import DeleteMachineContainer from "../../../../containers/sidebars/topology/machine/DeleteMachineContainer";
import MachineNameContainer from "../../../../containers/sidebars/topology/machine/MachineNameContainer";
+import UnitTabsComponent from "./UnitTabsComponent";
const MachineSidebarComponent = () => {
return (
@@ -9,6 +10,7 @@ const MachineSidebarComponent = () => {
<MachineNameContainer/>
<BackToRackContainer/>
<DeleteMachineContainer/>
+ <UnitTabsComponent/>
</div>
);
};
diff --git a/src/components/sidebars/topology/machine/UnitAddComponent.js b/src/components/sidebars/topology/machine/UnitAddComponent.js
new file mode 100644
index 00000000..a1c9eb76
--- /dev/null
+++ b/src/components/sidebars/topology/machine/UnitAddComponent.js
@@ -0,0 +1,37 @@
+import PropTypes from "prop-types";
+import React from "react";
+
+class UnitAddComponent extends React.Component {
+ static propTypes = {
+ units: PropTypes.array.isRequired,
+ onAdd: PropTypes.func.isRequired,
+ };
+
+ render() {
+ return (
+ <div className="form-inline">
+ <div className="form-group w-100">
+ <select
+ className="form-control w-75 mr-1"
+ ref={unitSelect => this.unitSelect = unitSelect}
+ >
+ {this.props.units.map(unit => (
+ <option value={unit.id} key={unit.id}>
+ {unit.manufacturer + " " + unit.family + " " + unit.model + " " + unit.generation}
+ </option>
+ ))}
+ </select>
+ <button
+ type="submit"
+ className="btn btn-primary"
+ onClick={() => this.props.onAdd(parseInt(this.unitSelect.value, 10))}
+ >
+ Add
+ </button>
+ </div>
+ </div>
+ );
+ }
+}
+
+export default UnitAddComponent;
diff --git a/src/components/sidebars/topology/machine/UnitComponent.js b/src/components/sidebars/topology/machine/UnitComponent.js
new file mode 100644
index 00000000..20cdad1e
--- /dev/null
+++ b/src/components/sidebars/topology/machine/UnitComponent.js
@@ -0,0 +1,10 @@
+import React from "react";
+
+const UnitComponent = ({unit, onDelete}) => (
+ <li className="d-flex list-group-item justify-content-between align-items-center">
+ {unit.manufacturer + " " + unit.family + " " + unit.model + " " + unit.generation}
+ <span className="btn btn-outline-danger" onClick={onDelete}>Delete</span>
+ </li>
+);
+
+export default UnitComponent;
diff --git a/src/components/sidebars/topology/machine/UnitListComponent.js b/src/components/sidebars/topology/machine/UnitListComponent.js
new file mode 100644
index 00000000..288d1428
--- /dev/null
+++ b/src/components/sidebars/topology/machine/UnitListComponent.js
@@ -0,0 +1,17 @@
+import React from "react";
+import UnitContainer from "../../../../containers/sidebars/topology/machine/UnitContainer";
+
+const UnitListComponent = ({unitType, unitIds}) => (
+ <ul className="list-group mt-1">
+ {unitIds.length !== 0 ?
+ unitIds.map((unitId, index) => (
+ <UnitContainer unitType={unitType} unitId={unitId} index={index} key={index}/>
+ )) :
+ <div className="alert alert-info">
+ <strong>No units...</strong> Add some with the menu above!
+ </div>
+ }
+ </ul>
+);
+
+export default UnitListComponent;
diff --git a/src/components/sidebars/topology/machine/UnitTabsComponent.js b/src/components/sidebars/topology/machine/UnitTabsComponent.js
new file mode 100644
index 00000000..cd068442
--- /dev/null
+++ b/src/components/sidebars/topology/machine/UnitTabsComponent.js
@@ -0,0 +1,42 @@
+import React from "react";
+import UnitAddContainer from "../../../../containers/sidebars/topology/machine/UnitAddContainer";
+import UnitListContainer from "../../../../containers/sidebars/topology/machine/UnitListContainer";
+
+const UnitTabsComponent = () => (
+ <div>
+ <ul className="nav nav-tabs mt-2 mb-1" role="tablist">
+ <li className="nav-item">
+ <a className="nav-link active" data-toggle="tab" href="#cpu-units" role="tab">CPU</a>
+ </li>
+ <li className="nav-item">
+ <a className="nav-link" data-toggle="tab" href="#gpu-units" role="tab">GPU</a>
+ </li>
+ <li className="nav-item">
+ <a className="nav-link" data-toggle="tab" href="#memory-units" role="tab">Memory</a>
+ </li>
+ <li className="nav-item">
+ <a className="nav-link" data-toggle="tab" href="#storage-units" role="tab">Storage</a>
+ </li>
+ </ul>
+ <div className="tab-content">
+ <div className="tab-pane active" id="cpu-units" role="tabpanel">
+ <UnitAddContainer unitType="cpu"/>
+ <UnitListContainer unitType="cpu"/>
+ </div>
+ <div className="tab-pane" id="gpu-units" role="tabpanel">
+ <UnitAddContainer unitType="gpu"/>
+ <UnitListContainer unitType="gpu"/>
+ </div>
+ <div className="tab-pane" id="memory-units" role="tabpanel">
+ <UnitAddContainer unitType="memory"/>
+ <UnitListContainer unitType="memory"/>
+ </div>
+ <div className="tab-pane" id="storage-units" role="tabpanel">
+ <UnitAddContainer unitType="storage"/>
+ <UnitListContainer unitType="storage"/>
+ </div>
+ </div>
+ </div>
+);
+
+export default UnitTabsComponent;