Browse Source

fix(workflowengine): fix group not shown in Group membership check

this might have occured on instances with
- more than twenty groups, and
- on rules with more than one Group membership checks
- and at least one of them being not in the set of the first 20 groups

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
pull/52641/head
Arthur Schiwon 7 months ago
parent
commit
d712e5deff
No known key found for this signature in database GPG Key ID: 7424F1874854DF23
  1. 37
      apps/workflowengine/src/components/Checks/RequestUserGroup.vue

37
apps/workflowengine/src/components/Checks/RequestUserGroup.vue

@ -25,6 +25,7 @@ import axios from '@nextcloud/axios'
import NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'
const groups = []
const wantedGroups = []
const status = {
isLoading: false,
}
@ -49,6 +50,7 @@ export default {
return {
groups,
status,
wantedGroups,
newValue: '',
}
},
@ -82,6 +84,13 @@ export default {
searchAsync(searchQuery) {
if (this.status.isLoading) {
if (searchQuery) {
// The first 20 groups are loaded up front (indicated by an
// empty searchQuery parameter), afterwards we may load
// groups that have not been fetched yet, but are used
// in existing rules.
this.enqueueWantedGroup(searchQuery)
}
return
}
@ -94,11 +103,15 @@ export default {
})
})
this.status.isLoading = false
this.findGroupByQueue()
}, (error) => {
console.error('Error while loading group list', error.response)
})
},
updateInternalValue() {
async updateInternalValue() {
if (!this.newValue) {
await this.searchAsync(this.modelValue)
}
this.newValue = this.modelValue
},
addGroup(group) {
@ -107,10 +120,32 @@ export default {
this.groups.push(group)
}
},
hasGroup(group) {
const index = this.groups.findIndex((item) => item.id === group)
return index > -1
},
update(value) {
this.newValue = value.id
this.$emit('update:model-value', this.newValue)
},
enqueueWantedGroup(expectedGroupId) {
const index = this.wantedGroups.findIndex((groupId) => groupId === expectedGroupId)
if (index === -1) {
this.wantedGroups.push(expectedGroupId)
}
},
async findGroupByQueue() {
let nextQuery
do {
nextQuery = this.wantedGroups.shift()
if (this.hasGroup(nextQuery)) {
nextQuery = undefined
}
} while (!nextQuery && this.wantedGroups.length > 0)
if (nextQuery) {
await this.searchAsync(nextQuery)
}
},
},
}
</script>

Loading…
Cancel
Save