Skip to content
This repository was archived by the owner on Aug 7, 2025. It is now read-only.

Commit 6d26443

Browse files
committed
Workset batch delete: allow select and delete read-only worksets
1 parent aaa89dd commit 6d26443

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

src/components/UpdateWorksetStatus.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export default {
3838
methods: {
3939
...mapActions(useModelStore, ['dispatchWorksetStatus']),
4040
41-
// refersh workset list
41+
// update workset read-only status
4242
async doUpdate () {
4343
if (!this.modelDigest || !this.worksetName) {
4444
console.warn('Unable to update input scenario: model digest or name is empty')

src/pages/WorksetList.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,11 +467,11 @@
467467
>
468468
<div class="col-auto">
469469
<q-btn
470-
:disable="!wsTreeTicked.length || isEdit() || isReadOnlyTicked()"
470+
:disable="!wsTreeTicked.length || isEdit() || isUnsavedTicked()"
471471
@click.stop="onWsMultipleDelete"
472472
:round="!wsTreeTicked.length"
473-
:outline="!wsTreeTicked.length || isEdit() || isReadOnlyTicked()"
474-
:rounded="!!wsTreeTicked.length || isEdit() || isReadOnlyTicked()"
473+
:outline="!wsTreeTicked.length || isEdit() || isUnsavedTicked()"
474+
:rounded="!!wsTreeTicked.length || isEdit() || isUnsavedTicked()"
475475
no-caps
476476
color="primary"
477477
class="col-auto"

src/pages/workset-list.js

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ export default {
120120
...mapState(useUiStateStore, [
121121
'runDigestSelected',
122122
'worksetNameSelected',
123+
'paramViewWorksetUpdatedCount',
123124
'uiLang'
124125
])
125126
},
@@ -284,16 +285,20 @@ export default {
284285
onWorksetReadonlyToggle () {
285286
this.$emit('set-update-readonly', this.digest, this.worksetNameSelected, !this.worksetCurrent.IsReadonly)
286287
},
287-
// return true if any ticked workset is read only
288-
isReadOnlyTicked () {
288+
// return true if any ticked workset is has unsaved parameter
289+
isUnsavedTicked () {
289290
if (!this.wsTreeTicked?.length) return false // no selection, nothing is ticked
290291

291292
const wsTop = this.wsTreeData[0]
292293
for (const ws of wsTop.children) {
293294
if (!ws.label || ws.children.length > 0) continue // it is not a workset
294295

295296
if (this.wsTreeTicked.findIndex((wsKey) => { return wsKey === ws.key }) >= 0) { // workset is ticked
296-
if (ws.isReadonly) return true
297+
if (ws.isReadonly) continue // workset is readonly
298+
299+
// if there are any edited and unsaved parameters for this workset
300+
const n = this.paramViewWorksetUpdatedCount({ digest: this.digest, worksetName: ws.label })
301+
if (n > 0) return true // unable to delete because workset have unsaved parameter(s)
297302
}
298303
}
299304
return false // all ticked worksets are unlocked for delete
@@ -412,7 +417,7 @@ export default {
412417
}
413418
},
414419

415-
// delete multiple worksets worksets
420+
// delete multiple worksets
416421
async doWsDeleteMultiple (nameLst) {
417422
if (!nameLst || !Array.isArray(nameLst) || !nameLst?.length) {
418423
console.warn('Unable to delete: invalid (or empty) list of names, length:', nameLst?.length)
@@ -422,7 +427,44 @@ export default {
422427
this.$q.notify({ type: 'info', message: this.$t('Deleting multiple input scenarios') + ': [ ' + nLen.toString() + ' ]' })
423428
this.loadWsMultipletDelete = true
424429

425-
let isOk = false
430+
// if any workset is readonly then make it read-write
431+
let isOk = true
432+
let nUpd = 0
433+
434+
for (const name of nameLst) {
435+
if (this.worksetTextList.findIndex(wt => wt.Name === name && wt.IsReadonly) < 0) continue
436+
437+
// workset is readonly: make it read-write
438+
isOk = false
439+
440+
const u = this.omsUrl +
441+
'/api/model/' + encodeURIComponent(this.digest) +
442+
'/workset/' + encodeURIComponent(name) +
443+
'/readonly/false'
444+
try {
445+
await this.$axios.post(u) // ignore response on success
446+
isOk = true
447+
nUpd++
448+
} catch (e) {
449+
let em = ''
450+
try {
451+
if (e.response) em = e.response.data || ''
452+
} finally {}
453+
console.warn('Server offline or input scenario not found.', em)
454+
this.$q.notify({ type: 'negative', message: this.$t('Server offline or input scenario not found: ') + name })
455+
}
456+
if (!isOk) break
457+
}
458+
// exit on error and refersh workset list if required
459+
if (!isOk) {
460+
this.loadWsMultipletDelete = false
461+
if (nUpd > 0) this.$emit('set-list-refresh')
462+
return
463+
}
464+
465+
// delete multiple worksets
466+
isOk = false
467+
426468
const u = this.omsUrl + '/api/model/' + encodeURIComponent(this.digest) + '/delete-worksets'
427469
try {
428470
await this.$axios.post(u, nameLst) // ignore response on success

0 commit comments

Comments
 (0)