summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src/components
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-07-08 13:15:28 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-07-08 13:20:27 +0200
commit29196842447d841d2e21462adcfc8c2ed1d851ad (patch)
treedf2945e6a9f7ec2d32acf9c9c7bcf8e8b4a322d6 /opendc-web/opendc-web-ui/src/components
parent1157cc3c56c0f8d36be277bd1ea633f03dd7abbf (diff)
ui: Simplify normalization of topology
This change updates the OpenDC frontend to use the normalizr library for normalizing the user topology.
Diffstat (limited to 'opendc-web/opendc-web-ui/src/components')
-rw-r--r--opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js8
-rw-r--r--opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js2
-rw-r--r--opendc-web/opendc-web-ui/src/components/app/map/groups/TopologyGroup.js6
-rw-r--r--opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitComponent.js2
-rw-r--r--opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitListComponent.js22
-rw-r--r--opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js10
-rw-r--r--opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js19
7 files changed, 40 insertions, 29 deletions
diff --git a/opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js b/opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js
index e67d54fc..42d20ff1 100644
--- a/opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js
+++ b/opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js
@@ -10,7 +10,7 @@ const RoomGroup = ({ room, interactionLevel, currentRoomInConstruction, onClick
if (currentRoomInConstruction === room._id) {
return (
<Group onClick={onClick}>
- {room.tileIds.map((tileId) => (
+ {room.tiles.map((tileId) => (
<TileContainer key={tileId} tileId={tileId} newTile={true} />
))}
</Group>
@@ -25,16 +25,16 @@ const RoomGroup = ({ room, interactionLevel, currentRoomInConstruction, onClick
interactionLevel.roomId === room._id
) {
return [
- room.tileIds
+ room.tiles
.filter((tileId) => tileId !== interactionLevel.tileId)
.map((tileId) => <TileContainer key={tileId} tileId={tileId} />),
<GrayContainer key={-1} />,
- room.tileIds
+ room.tiles
.filter((tileId) => tileId === interactionLevel.tileId)
.map((tileId) => <TileContainer key={tileId} tileId={tileId} />),
]
} else {
- return room.tileIds.map((tileId) => <TileContainer key={tileId} tileId={tileId} />)
+ return room.tiles.map((tileId) => <TileContainer key={tileId} tileId={tileId} />)
}
})()}
<WallContainer roomId={room._id} />
diff --git a/opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js b/opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js
index 2a108b93..ce5e4a6b 100644
--- a/opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js
+++ b/opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js
@@ -8,7 +8,7 @@ import RoomTile from '../elements/RoomTile'
const TileGroup = ({ tile, newTile, onClick }) => {
let tileObject
- if (tile.rackId) {
+ if (tile.rack) {
tileObject = <RackContainer tile={tile} />
} else {
tileObject = null
diff --git a/opendc-web/opendc-web-ui/src/components/app/map/groups/TopologyGroup.js b/opendc-web/opendc-web-ui/src/components/app/map/groups/TopologyGroup.js
index 57107768..d4c6db7d 100644
--- a/opendc-web/opendc-web-ui/src/components/app/map/groups/TopologyGroup.js
+++ b/opendc-web/opendc-web-ui/src/components/app/map/groups/TopologyGroup.js
@@ -12,7 +12,7 @@ const TopologyGroup = ({ topology, interactionLevel }) => {
if (interactionLevel.mode === 'BUILDING') {
return (
<Group>
- {topology.roomIds.map((roomId) => (
+ {topology.rooms.map((roomId) => (
<RoomContainer key={roomId} roomId={roomId} />
))}
</Group>
@@ -21,13 +21,13 @@ const TopologyGroup = ({ topology, interactionLevel }) => {
return (
<Group>
- {topology.roomIds
+ {topology.rooms
.filter((roomId) => roomId !== interactionLevel.roomId)
.map((roomId) => (
<RoomContainer key={roomId} roomId={roomId} />
))}
{interactionLevel.mode === 'ROOM' ? <GrayContainer /> : null}
- {topology.roomIds
+ {topology.rooms
.filter((roomId) => roomId === interactionLevel.roomId)
.map((roomId) => (
<RoomContainer key={roomId} roomId={roomId} />
diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitComponent.js
index 03b92459..46c639bd 100644
--- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitComponent.js
+++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitComponent.js
@@ -60,7 +60,7 @@ function UnitComponent({ index, unitType, unit, onDelete }) {
UnitComponent.propTypes = {
index: PropTypes.number,
unitType: PropTypes.string,
- unit: PropTypes.oneOf([ProcessingUnit, StorageUnit]),
+ unit: PropTypes.oneOfType([ProcessingUnit, StorageUnit]),
onDelete: PropTypes.func,
}
diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitListComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitListComponent.js
index b7da74a1..54c1a6cc 100644
--- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitListComponent.js
+++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/machine/UnitListComponent.js
@@ -1,12 +1,19 @@
import PropTypes from 'prop-types'
import React from 'react'
-import UnitContainer from '../../../../../containers/app/sidebars/topology/machine/UnitContainer'
+import { ProcessingUnit, StorageUnit } from '../../../../../shapes'
+import UnitComponent from './UnitComponent'
-const UnitListComponent = ({ unitType, unitIds }) => (
+const UnitListComponent = ({ unitType, units, onDelete }) => (
<ul className="list-group mt-1">
- {unitIds.length !== 0 ? (
- unitIds.map((unitId, index) => (
- <UnitContainer unitType={unitType} unitId={unitId} index={index} key={index} />
+ {units.length !== 0 ? (
+ units.map((unit, index) => (
+ <UnitComponent
+ unitType={unitType}
+ unit={unit}
+ onDelete={() => onDelete(unit, unitType)}
+ index={index}
+ key={index}
+ />
))
) : (
<div className="alert alert-info">
@@ -19,8 +26,9 @@ const UnitListComponent = ({ unitType, unitIds }) => (
)
UnitListComponent.propTypes = {
- unitType: PropTypes.string,
- unitIds: PropTypes.array,
+ unitType: PropTypes.string.isRequired,
+ units: PropTypes.arrayOf(PropTypes.oneOfType([ProcessingUnit, StorageUnit])).isRequired,
+ onDelete: PropTypes.func,
}
export default UnitListComponent
diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js
index f91202ba..b71918da 100644
--- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js
+++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js
@@ -23,7 +23,7 @@ UnitIcon.propTypes = {
const MachineComponent = ({ position, machine, onClick }) => {
const hasNoUnits =
- machine.cpuIds.length + machine.gpuIds.length + machine.memoryIds.length + machine.storageIds.length === 0
+ machine.cpus.length + machine.gpus.length + machine.memories.length + machine.storages.length === 0
return (
<ListGroupItem
@@ -36,10 +36,10 @@ const MachineComponent = ({ position, machine, onClick }) => {
{position}
</Badge>
<div className="d-inline-flex">
- {machine.cpuIds.length > 0 ? <UnitIcon id="cpu" type="CPU" /> : undefined}
- {machine.gpuIds.length > 0 ? <UnitIcon id="gpu" type="GPU" /> : undefined}
- {machine.memoryIds.length > 0 ? <UnitIcon id="memory" type="memory" /> : undefined}
- {machine.storageIds.length > 0 ? <UnitIcon id="storage" type="storage" /> : undefined}
+ {machine.cpus.length > 0 ? <UnitIcon id="cpu" type="CPU" /> : undefined}
+ {machine.gpus.length > 0 ? <UnitIcon id="gpu" type="GPU" /> : undefined}
+ {machine.memories.length > 0 ? <UnitIcon id="memory" type="memory" /> : undefined}
+ {machine.storages.length > 0 ? <UnitIcon id="storage" type="storage" /> : undefined}
{hasNoUnits ? <Badge color="warning">Machine with no units</Badge> : undefined}
</div>
</ListGroupItem>
diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js
index d0958c28..e024a417 100644
--- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js
+++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js
@@ -1,17 +1,18 @@
import PropTypes from 'prop-types'
import React from 'react'
-import EmptySlotContainer from '../../../../../containers/app/sidebars/topology/rack/EmptySlotContainer'
-import MachineContainer from '../../../../../containers/app/sidebars/topology/rack/MachineContainer'
import { machineList } from './MachineListComponent.module.scss'
+import MachineComponent from './MachineComponent'
+import { Machine } from '../../../../../shapes'
+import EmptySlotComponent from './EmptySlotComponent'
-const MachineListComponent = ({ machineIds }) => {
+const MachineListComponent = ({ machines = [], onSelect, onAdd }) => {
return (
<ul className={`list-group ${machineList}`}>
- {machineIds.map((machineId, index) => {
- if (machineId === null) {
- return <EmptySlotContainer key={index} position={index + 1} />
+ {machines.map((machine, index) => {
+ if (machine === null) {
+ return <EmptySlotComponent key={index} onAdd={() => onAdd(index + 1)} />
} else {
- return <MachineContainer key={index} position={index + 1} machineId={machineId} />
+ return <MachineComponent key={index} onClick={() => onSelect(index + 1)} machine={machine} />
}
})}
</ul>
@@ -19,7 +20,9 @@ const MachineListComponent = ({ machineIds }) => {
}
MachineListComponent.propTypes = {
- machineIds: PropTypes.array,
+ machines: PropTypes.arrayOf(Machine),
+ onSelect: PropTypes.func.isRequired,
+ onAdd: PropTypes.func.isRequired,
}
export default MachineListComponent