diff options
Diffstat (limited to 'apps/workflowengine/src')
-rw-r--r-- | apps/workflowengine/src/components/Checks/RequestUserGroup.vue | 37 | ||||
-rw-r--r-- | apps/workflowengine/src/components/Rule.vue | 4 |
2 files changed, 37 insertions, 4 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> diff --git a/apps/workflowengine/src/components/Rule.vue b/apps/workflowengine/src/components/Rule.vue index c9632d6c196..1c321fd014c 100644 --- a/apps/workflowengine/src/components/Rule.vue +++ b/apps/workflowengine/src/components/Rule.vue @@ -31,7 +31,6 @@ <Operation :operation="operation" :colored="false"> <component :is="operation.element" v-if="operation.element" - ref="operationComponent" :model-value="inputValue" @update:model-value="updateOperationByEvent" /> <component :is="operation.options" @@ -133,9 +132,8 @@ export default { }, mounted() { this.originalRule = JSON.parse(JSON.stringify(this.rule)) - if (this.operation?.element) { - this.$refs.operationComponent.value = this.rule.operation + this.inputValue = this.rule.operation } else if (this.operation?.options) { // keeping this in an else for apps that try to be backwards compatible and may ship both // to be removed in 03/2028 |