Skip to content

Commit a66e4d0

Browse files
committed
add persisting selected resources in calendar view
1 parent 384a4e0 commit a66e4d0

File tree

2 files changed

+82
-34
lines changed

2 files changed

+82
-34
lines changed

tensorhive/app/web/dev/src/components/views/ReservationsOverview.vue

-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ export default {
162162
}
163163
this.parsedNodes.push(tempNode)
164164
}
165-
this.loadCalendar()
166165
},
167166
168167
loadCalendar () {

tensorhive/app/web/dev/src/components/views/reserve_resources/MySchedule.vue

+82-33
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<v-checkbox
4747
class="small-checkbox"
4848
color="success"
49-
label="Change all"
49+
label="Select all"
5050
v-model="changeAllCheckbox"
5151
@change="changeAll"
5252
>
@@ -159,7 +159,6 @@ export default {
159159
reactive: false,
160160
range: 7,
161161
changeAllCheckbox: true,
162-
selectedNodes: 0,
163162
allFlag: false,
164163
nodeFlag: false
165164
}
@@ -172,6 +171,12 @@ export default {
172171
watch: {
173172
parsedNodes () {
174173
this.fillTable()
174+
for (var nodeIndex in this.parsedNodes) {
175+
var nodeName = this.parsedNodes[nodeIndex].nodeName
176+
this.checkIfAllResourcesSelected(nodeName)
177+
}
178+
this.checkIfAllNodesSelected()
179+
this.loadResources()
175180
}
176181
},
177182
@@ -189,15 +194,20 @@ export default {
189194
changeWholeNode: function (nodeName) {
190195
this.nodeFlag = true
191196
for (var resourceId in this.tableContent.nodes[nodeName].resources) {
192-
var resourceName = this.tableContent.nodes[nodeName].resources[resourceId]
193-
var resource = this.tableContent.resources[resourceName]
197+
var resourceUUID = this.tableContent.nodes[nodeName].resources[resourceId]
198+
var resource = this.tableContent.resources[resourceUUID]
194199
resource.selected = this.tableContent.nodes[nodeName].selected
200+
if (this.tableContent.nodes[nodeName].selected) {
201+
this.selectedResources[nodeName].add(resource.resourceUUID)
202+
} else {
203+
this.selectedResources[nodeName].delete(resource.resourceUUID)
204+
}
195205
}
196206
if (!this.allFlag) {
197207
if (this.tableContent.nodes[nodeName].selected) {
198-
this.selectedNodes += 1
208+
this.selectedNodes.add(nodeName)
199209
} else {
200-
this.selectedNodes -= 1
210+
this.selectedNodes.delete(nodeName)
201211
}
202212
this.checkIfAllNodesSelected()
203213
this.loadResources()
@@ -206,38 +216,74 @@ export default {
206216
},
207217
208218
checkIfAllNodesSelected: function () {
209-
if (this.selectedNodes === Object.keys(this.tableContent.nodes).length) {
219+
if (this.selectedNodes.size === Object.keys(this.tableContent.nodes).length) {
210220
this.changeAllCheckbox = true
211221
} else {
212222
this.changeAllCheckbox = false
213223
}
214224
},
215225
216226
changeResource: function (nodeName, resourceUUID) {
217-
if (!this.allFlag && !this.nodeFlag) {
218-
if (this.tableContent.resources[resourceUUID].selected) {
219-
this.tableContent.nodes[nodeName].selectedResources += 1
220-
} else {
221-
this.tableContent.nodes[nodeName].selectedResources -= 1
222-
}
223-
this.checkIfAllResourcesSelected(nodeName)
224-
this.checkIfAllNodesSelected()
225-
this.forceRerenderTables()
226-
this.loadResources()
227+
if (this.allFlag || this.nodeFlag) {
228+
return
227229
}
230+
231+
if (this.tableContent.resources[resourceUUID].selected) {
232+
this.selectedResources[nodeName].add(resourceUUID)
233+
} else {
234+
this.selectedResources[nodeName].delete(resourceUUID)
235+
}
236+
237+
this.checkIfAllResourcesSelected(nodeName)
238+
this.checkIfAllNodesSelected()
239+
this.forceRerenderTables()
240+
this.loadResources()
228241
},
229242
230243
checkIfAllResourcesSelected: function (nodeName) {
231-
if (this.tableContent.nodes[nodeName].selectedResources === Object.keys(this.tableContent.nodes[nodeName].resources).length) {
244+
if (this.selectedResources[nodeName].size === Object.keys(this.tableContent.nodes[nodeName].resources).length) {
232245
this.tableContent.nodes[nodeName].selected = true
233-
this.selectedNodes += 1
246+
this.selectedNodes.add(nodeName)
234247
} else {
235248
this.tableContent.nodes[nodeName].selected = false
236-
this.selectedNodes -= 1
249+
this.selectedNodes.delete(nodeName)
250+
}
251+
},
252+
253+
loadOrInitSelected: function () {
254+
this.selectedNodes = Set.from(JSON.parse(window.localStorage.getItem('selectedNodes')))
255+
this.selectedResources = JSON.parse(window.localStorage.getItem('selectedResources'))
256+
257+
if (this.selectedNodes === null || this.selectedResources === null) {
258+
this.selectedNodes = new Set()
259+
this.selectedResources = {}
260+
for (var nodeIndex in this.parsedNodes) {
261+
var node = this.parsedNodes[nodeIndex]
262+
var nodeName = node.nodeName
263+
this.selectedNodes.add(nodeName)
264+
265+
this.selectedResources[nodeName] = new Set()
266+
for (var resourceTypeIndex in node.resourceTypes) {
267+
var resourceType = node.resourceTypes[resourceTypeIndex]
268+
for (var resourceIndex in resourceType.resources) {
269+
var resourceUUID = resourceType.resources[resourceIndex].resourceUUID
270+
this.selectedResources[nodeName].add(resourceUUID)
271+
}
272+
}
273+
}
237274
}
275+
for (var entry in this.selectedResources) {
276+
this.selectedResources[entry] = Set.from(this.selectedResources[entry])
277+
}
278+
},
279+
280+
storeSelected: function () {
281+
window.localStorage.setItem('selectedNodes', JSON.stringify(this.selectedNodes))
282+
window.localStorage.setItem('selectedResources', JSON.stringify(this.selectedResources))
238283
},
239284
240285
loadResources: function () {
286+
this.storeSelected()
241287
this.$emit('loadResources', this.tableContent.resources)
242288
},
243289
@@ -265,42 +311,45 @@ export default {
265311
fillTable: function () {
266312
this.resourceIds = []
267313
this.tableContent.nodes = {}
268-
this.tableContent.resources = []
314+
this.tableContent.resources = {}
315+
269316
for (var nodeIndex in this.parsedNodes) {
270317
var node = this.parsedNodes[nodeIndex]
318+
var nodeName = node.nodeName
271319
var nodeSlots = []
272320
for (var i = 0; i < 48 * this.range; i++) {
273321
nodeSlots.push({ value: '', id: 'slot ' + i, reserved: false, userReservation: false })
274322
}
275-
this.tableContent.nodes[node.nodeName] = {
276-
nodeName: node.nodeName,
323+
this.tableContent.nodes[nodeName] = {
324+
nodeName: nodeName,
277325
hidden: true,
278326
resources: [],
279-
selected: true,
280-
selectedResources: 0,
327+
selected: this.selectedNodes.has(nodeName),
281328
slots: nodeSlots
282329
}
330+
283331
for (var resourceTypeIndex in node.resourceTypes) {
284332
var resourceType = node.resourceTypes[resourceTypeIndex]
285333
for (var resourceIndex in resourceType.resources) {
286334
var resource = resourceType.resources[resourceIndex]
287-
resource.name = resource.nodeName + ' GPU' + resourceIndex
288-
resource['selected'] = true
289-
this.tableContent.nodes[node.nodeName].selectedResources += 1
335+
resource.name = resource.nodeName + ' ' + resourceType.name + resourceIndex
336+
if (resource.nodeName in this.selectedResources) {
337+
resource['selected'] = this.selectedResources[resource.nodeName].has(resource.resourceUUID)
338+
} else {
339+
resource['selected'] = 'false'
340+
}
290341
this.resourcesIds.push(resource.resourceUUID)
291342
var slots = []
292343
for (i = 0; i < 48 * this.range; i++) {
293344
slots.push({ value: '', id: 'slot ' + i, reserved: false, userReservation: false })
294345
}
295346
resource['slots'] = slots
296-
this.tableContent.nodes[node.nodeName].resources.push(resource.resourceUUID)
347+
this.tableContent.nodes[nodeName].resources.push(resource.resourceUUID)
297348
this.tableContent.resources[resource.resourceUUID] = resource
298349
}
299350
}
300-
this.tableContent.nodes[node.nodeName].selectedResources = Object.keys(this.tableContent.nodes[node.nodeName].resources).length
351+
this.selectedNodes.add(nodeName)
301352
}
302-
this.selectedNodes = Object.keys(this.tableContent.nodes).length
303-
this.getReservations()
304353
},
305354
306355
getReservations: function () {
@@ -400,7 +449,7 @@ export default {
400449
header: header,
401450
hours: hours
402451
}
403-
this.fillTable()
452+
this.loadOrInitSelected()
404453
}
405454
}
406455
</script>

0 commit comments

Comments
 (0)