diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2025-04-08 18:27:05 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2025-05-05 16:58:16 +0200 |
commit | c2dea5faf65dca0f6775ed6d73661eb9738eaf0b (patch) | |
tree | 86952e9f3991a9cd49176a83e0e46e6d323c8037 /apps/workflowengine/src | |
parent | c668703021d1eec5bd71ef0f33f6e359a270cf2a (diff) | |
download | nextcloud-server-c2dea5faf65dca0f6775ed6d73661eb9738eaf0b.tar.gz nextcloud-server-c2dea5faf65dca0f6775ed6d73661eb9738eaf0b.zip |
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>
Diffstat (limited to 'apps/workflowengine/src')
-rw-r--r-- | apps/workflowengine/src/components/Checks/RequestUserGroup.vue | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/apps/workflowengine/src/components/Checks/RequestUserGroup.vue b/apps/workflowengine/src/components/Checks/RequestUserGroup.vue index 978732aed09..f9606b7ca26 100644 --- a/apps/workflowengine/src/components/Checks/RequestUserGroup.vue +++ b/apps/workflowengine/src/components/Checks/RequestUserGroup.vue @@ -25,6 +25,7 @@ import axios from '@nextcloud/axios' import NcSelect from '@nextcloud/vue/components/NcSelect' 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> |