summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-server/src/main/webui/components/projects/TopologyTable.js
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-web/opendc-web-server/src/main/webui/components/projects/TopologyTable.js')
-rw-r--r--opendc-web/opendc-web-server/src/main/webui/components/projects/TopologyTable.js32
1 files changed, 29 insertions, 3 deletions
diff --git a/opendc-web/opendc-web-server/src/main/webui/components/projects/TopologyTable.js b/opendc-web/opendc-web-server/src/main/webui/components/projects/TopologyTable.js
index 1c2c4f04..89a28889 100644
--- a/opendc-web/opendc-web-server/src/main/webui/components/projects/TopologyTable.js
+++ b/opendc-web/opendc-web-server/src/main/webui/components/projects/TopologyTable.js
@@ -37,11 +37,37 @@ function TopologyTable({ projectId }) {
onError: (error) => setError(error),
})
- const actions = ({ number }) => [
+ const downloadTopology = (topology) => {
+ const data = JSON.stringify(
+ { name: topology.name, rooms: topology.rooms },
+ (key, value) => {
+ if (key === 'id' || key === 'topologyId' || key === 'roomId' || key === 'rackId' || key === 'roomid') {
+ return undefined
+ }
+ return value
+ },
+ 4
+ )
+ const blob = new Blob([data], { type: 'application/json' })
+ const url = URL.createObjectURL(blob)
+ const link = document.createElement('a')
+ link.href = url
+ link.download = `${topology.name}.json`
+ document.body.appendChild(link)
+ link.click()
+ document.body.removeChild(link)
+ URL.revokeObjectURL(url)
+ }
+
+ const actions = (topology) => [
+ {
+ title: 'Download as JSON',
+ onClick: () => downloadTopology(topology),
+ },
{
title: 'Delete Topology',
- onClick: () => deleteTopology({ projectId, number }),
- isDisabled: number === 0,
+ onClick: () => deleteTopology({ projectId, number: topology.number }),
+ isDisabled: topology.number === 0,
},
]