@@ -124,20 +124,11 @@ document.addEventListener("DOMContentLoaded", async () => {
124
124
{
125
125
text : '<i class="bi bi-pen" ></i>' ,
126
126
action : ( ) => {
127
- const selectedDevice = dataTable . rows ( { selected : true } ) . data ( ) . toArray ( ) [ 0 ] ;
128
- $ ( "#device-selected-name" ) . val ( selectedDevice . name ) ;
127
+ const selectedDevices = dataTable . rows ( { selected : true } ) . data ( ) . toArray ( ) ;
128
+ const selectedDevice = selectedDevices [ 0 ] ;
129
+ updateSoftwareSelection ( selectedDevices ) ;
130
+ $ ( "#device-name" ) . val ( selectedDevice . name ) ;
129
131
$ ( "#device-selected-feed" ) . val ( selectedDevice . feed ) ;
130
-
131
- let selectedValue ;
132
- if ( selectedDevice . update_mode === "Rollout" ) {
133
- selectedValue = "rollout" ;
134
- } else if ( selectedDevice . update_mode === "Latest" ) {
135
- selectedValue = "latest" ;
136
- } else {
137
- selectedValue = selectedDevice . sw_assigned ;
138
- }
139
- $ ( "#selected-sw" ) . val ( selectedValue ) ;
140
-
141
132
new bootstrap . Modal ( "#device-config-modal" ) . show ( ) ;
142
133
} ,
143
134
className : "buttons-config" ,
@@ -199,22 +190,89 @@ document.addEventListener("DOMContentLoaded", async () => {
199
190
dataTable . ajax . reload ( null , false ) ;
200
191
} , TABLE_UPDATE_TIME ) ;
201
192
202
- await updateSoftwareSelection ( true ) ;
193
+ await updateSoftwareSelection ( ) ;
194
+
195
+ // Name update form submit
196
+ const nameForm = document . getElementById ( "device-name-form" ) ;
197
+ nameForm . addEventListener (
198
+ "submit" ,
199
+ async ( event ) => {
200
+ if ( nameForm . checkValidity ( ) === false ) {
201
+ event . preventDefault ( ) ;
202
+ event . stopPropagation ( ) ;
203
+ nameForm . classList . add ( "was-validated" ) ;
204
+ } else {
205
+ event . preventDefault ( ) ;
206
+ await updateDeviceName ( ) ;
207
+ nameForm . classList . remove ( "was-validated" ) ;
208
+ nameForm . reset ( ) ;
209
+ const modal = bootstrap . Modal . getInstance ( document . getElementById ( "device-config-modal" ) ) ;
210
+ modal . hide ( ) ;
211
+ }
212
+ } ,
213
+ false ,
214
+ ) ;
215
+
216
+ // Rollout form submit
217
+ const rolloutForm = document . getElementById ( "device-software-rollout-form" ) ;
218
+ rolloutForm . addEventListener (
219
+ "submit" ,
220
+ async ( event ) => {
221
+ if ( rolloutForm . checkValidity ( ) === false ) {
222
+ event . preventDefault ( ) ;
223
+ event . stopPropagation ( ) ;
224
+ rolloutForm . classList . add ( "was-validated" ) ;
225
+ } else {
226
+ event . preventDefault ( ) ;
227
+ await updateDeviceRollout ( ) ;
228
+ rolloutForm . classList . remove ( "was-validated" ) ;
229
+ rolloutForm . reset ( ) ;
230
+ const modal = bootstrap . Modal . getInstance ( document . getElementById ( "device-config-modal" ) ) ;
231
+ modal . hide ( ) ;
232
+ }
233
+ } ,
234
+ false ,
235
+ ) ;
236
+
237
+ // Manual software form submit
238
+ const manualSoftwareForm = document . getElementById ( "device-software-manual-form" ) ;
239
+ manualSoftwareForm . addEventListener (
240
+ "submit" ,
241
+ async ( event ) => {
242
+ if ( manualSoftwareForm . checkValidity ( ) === false ) {
243
+ event . preventDefault ( ) ;
244
+ event . stopPropagation ( ) ;
245
+ manualSoftwareForm . classList . add ( "was-validated" ) ;
246
+ if ( document . getElementById ( "selected-sw" ) . value === "" ) {
247
+ document . getElementById ( "selected-sw" ) . parentElement . classList . add ( "is-invalid" ) ;
248
+ }
249
+ } else {
250
+ event . preventDefault ( ) ;
251
+ await updateDeviceManualSoftware ( ) ;
252
+ manualSoftwareForm . classList . remove ( "was-validated" ) ;
253
+ document . getElementById ( "selected-sw" ) . parentElement . classList . remove ( "is-invalid" ) ;
254
+ manualSoftwareForm . reset ( ) ;
255
+ const modal = bootstrap . Modal . getInstance ( document . getElementById ( "device-config-modal" ) ) ;
256
+ modal . hide ( ) ;
257
+ }
258
+ } ,
259
+ false ,
260
+ ) ;
203
261
204
- // Config form submit
205
- const configForm = document . getElementById ( "device-config -form" ) ;
206
- configForm . addEventListener (
262
+ // Latest software form submit
263
+ const latestSoftwareForm = document . getElementById ( "device-software-latest -form" ) ;
264
+ latestSoftwareForm . addEventListener (
207
265
"submit" ,
208
266
async ( event ) => {
209
- if ( configForm . checkValidity ( ) === false ) {
267
+ if ( latestSoftwareForm . checkValidity ( ) === false ) {
210
268
event . preventDefault ( ) ;
211
269
event . stopPropagation ( ) ;
212
- configForm . classList . add ( "was-validated" ) ;
270
+ latestSoftwareForm . classList . add ( "was-validated" ) ;
213
271
} else {
214
272
event . preventDefault ( ) ;
215
- await updateDeviceConfig ( ) ;
216
- configForm . classList . remove ( "was-validated" ) ;
217
- configForm . reset ( ) ;
273
+ await updateDeviceLatest ( ) ;
274
+ latestSoftwareForm . classList . remove ( "was-validated" ) ;
275
+ latestSoftwareForm . reset ( ) ;
218
276
const modal = bootstrap . Modal . getInstance ( document . getElementById ( "device-config-modal" ) ) ;
219
277
modal . hide ( ) ;
220
278
}
@@ -244,18 +302,70 @@ function updateBtnState() {
244
302
}
245
303
}
246
304
247
- async function updateDeviceConfig ( ) {
305
+ async function updateDeviceName ( ) {
306
+ const devices = dataTable
307
+ . rows ( { selected : true } )
308
+ . data ( )
309
+ . toArray ( )
310
+ . map ( ( d ) => d . uuid ) ;
311
+ const name = document . getElementById ( "device-name" ) . value ;
312
+
313
+ try {
314
+ await patch_request ( "/ui/bff/devices" , { devices, name } ) ;
315
+ } catch ( error ) {
316
+ console . error ( "Update device config failed:" , error ) ;
317
+ }
318
+
319
+ setTimeout ( updateDeviceList , 50 ) ;
320
+ }
321
+
322
+ async function updateDeviceRollout ( ) {
248
323
const devices = dataTable
249
324
. rows ( { selected : true } )
250
325
. data ( )
251
326
. toArray ( )
252
327
. map ( ( d ) => d . uuid ) ;
253
- const name = document . getElementById ( "device-selected-name" ) . value ;
254
328
const feed = document . getElementById ( "device-selected-feed" ) . value ;
329
+ const software = "rollout" ;
330
+
331
+ try {
332
+ await patch_request ( "/ui/bff/devices" , { devices, feed, software } ) ;
333
+ } catch ( error ) {
334
+ console . error ( "Update device config failed:" , error ) ;
335
+ }
336
+
337
+ setTimeout ( updateDeviceList , 50 ) ;
338
+ }
339
+
340
+ async function updateDeviceManualSoftware ( ) {
341
+ const devices = dataTable
342
+ . rows ( { selected : true } )
343
+ . data ( )
344
+ . toArray ( )
345
+ . map ( ( d ) => d . uuid ) ;
346
+ const feed = null ;
255
347
const software = document . getElementById ( "selected-sw" ) . value ;
256
348
257
349
try {
258
- await patch_request ( "/ui/bff/devices" , { devices, name, feed, software } ) ;
350
+ await patch_request ( "/ui/bff/devices" , { devices, feed, software } ) ;
351
+ } catch ( error ) {
352
+ console . error ( "Update device config failed:" , error ) ;
353
+ }
354
+
355
+ setTimeout ( updateDeviceList , 50 ) ;
356
+ }
357
+
358
+ async function updateDeviceLatest ( ) {
359
+ const devices = dataTable
360
+ . rows ( { selected : true } )
361
+ . data ( )
362
+ . toArray ( )
363
+ . map ( ( d ) => d . uuid ) ;
364
+ const feed = null ;
365
+ const software = "latest" ;
366
+
367
+ try {
368
+ await patch_request ( "/ui/bff/devices" , { devices, feed, software } ) ;
259
369
} catch ( error ) {
260
370
console . error ( "Update device config failed:" , error ) ;
261
371
}
0 commit comments