diff options
Diffstat (limited to 'frontend/src/sagas')
| -rw-r--r-- | frontend/src/sagas/objects.js | 20 | ||||
| -rw-r--r-- | frontend/src/sagas/topology.js | 11 |
2 files changed, 21 insertions, 10 deletions
diff --git a/frontend/src/sagas/objects.js b/frontend/src/sagas/objects.js index 1dbc7903..9dc65be1 100644 --- a/frontend/src/sagas/objects.js +++ b/frontend/src/sagas/objects.js @@ -142,6 +142,12 @@ const generateIdIfNotPresent = (obj) => { } export const updateTopologyOnServer = function* (id) { + const topology = yield getTopologyAsObject(id, true) + + yield call(updateTopology, topology) +} + +export const getTopologyAsObject = function* (id, keepIds) { const topologyStore = yield select(OBJECT_SELECTORS['topology']) const roomStore = yield select(OBJECT_SELECTORS['room']) const tileStore = yield select(OBJECT_SELECTORS['tile']) @@ -152,27 +158,27 @@ export const updateTopologyOnServer = function* (id) { const memoryStore = yield select(OBJECT_SELECTORS['memory']) const storageStore = yield select(OBJECT_SELECTORS['storage']) - const topology = { - _id: id, + return { + _id: keepIds ? id : undefined, name: topologyStore[id].name, rooms: topologyStore[id].roomIds.map((roomId) => ({ - _id: roomId, + _id: keepIds ? roomId : undefined, name: roomStore[roomId].name, tiles: roomStore[roomId].tileIds.map((tileId) => ({ - _id: tileId, + _id: keepIds ? tileId : undefined, positionX: tileStore[tileId].positionX, positionY: tileStore[tileId].positionY, rack: !tileStore[tileId].rackId ? undefined : { - _id: rackStore[tileStore[tileId].rackId]._id, + _id: keepIds ? rackStore[tileStore[tileId].rackId]._id : undefined, name: rackStore[tileStore[tileId].rackId].name, capacity: rackStore[tileStore[tileId].rackId].capacity, powerCapacityW: rackStore[tileStore[tileId].rackId].powerCapacityW, machines: rackStore[tileStore[tileId].rackId].machineIds .filter((m) => m !== null) .map((machineId) => ({ - _id: machineId, + _id: keepIds ? machineId : undefined, position: machineStore[machineId].position, cpus: machineStore[machineId].cpuIds.map((id) => cpuStore[id]), gpus: machineStore[machineId].gpuIds.map((id) => gpuStore[id]), @@ -183,8 +189,6 @@ export const updateTopologyOnServer = function* (id) { })), })), } - - yield call(updateTopology, topology) } export const fetchAndStoreAllTraces = () => fetchAndStoreObjects('trace', call(getAllTraces)) diff --git a/frontend/src/sagas/topology.js b/frontend/src/sagas/topology.js index 14c1ed2d..8b67c196 100644 --- a/frontend/src/sagas/topology.js +++ b/frontend/src/sagas/topology.js @@ -16,7 +16,7 @@ import { DEFAULT_RACK_SLOT_CAPACITY, MAX_NUM_UNITS_PER_MACHINE, } from '../components/app/map/MapConstants' -import { fetchAndStoreTopology, updateTopologyOnServer } from './objects' +import { fetchAndStoreTopology, getTopologyAsObject, updateTopologyOnServer } from './objects' import { uuid } from 'uuidv4' import { addTopology, deleteTopology } from '../api/routes/topologies' @@ -40,9 +40,16 @@ export function* onAddTopology(action) { try { const currentProjectId = yield select((state) => state.currentProjectId) + let topologyToBeCreated + if (action.duplicateId) { + topologyToBeCreated = yield getTopologyAsObject(action.duplicateId, false) + } else { + topologyToBeCreated = { name: action.name, rooms: [] } + } + const topology = yield call( addTopology, - Object.assign({}, action.topology, { + Object.assign({}, topologyToBeCreated, { projectId: currentProjectId, }) ) |
