From 7c177080ab7ffb0f390adb720ad7df2fb81f1043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C5=BEe=20Fortun?= Date: Tue, 9 Jul 2024 15:16:54 +0200 Subject: [PATCH] Fix some user selects showing selected value as undefined if user was not on the first page --- .../src/components/Authclient/CSelectUser.vue | 1 + .../web/admin/src/components/CRolePicker.vue | 1 + .../Permissions/CPermissionList.vue | 39 +++++++++---- .../components/Role/CRoleEditorMembers.vue | 1 + .../web/admin/src/mixins/permissionHelpers.js | 16 +++++- .../components/Namespaces/Reminders/Edit.vue | 57 +++++++++++-------- .../components/Namespaces/Reminders/List.vue | 4 +- .../components/Namespaces/Reminders/index.vue | 8 --- .../Navigation/NavTypes/ComposePage.vue | 1 - .../src/components/Common/ColumnSelector.vue | 1 - .../src/components/Configurator/Function.vue | 2 +- .../src/components/Configurator/Workflow.vue | 1 + .../permissions/CPermissionsModal.vue | 48 +++++++++------- .../privacy/CSensitivityLevelPicker.vue | 1 - .../components/reminders/CReminderSidebar.vue | 2 +- .../corteza-webapp-compose/permissions.yaml | 5 ++ 16 files changed, 114 insertions(+), 74 deletions(-) diff --git a/client/web/admin/src/components/Authclient/CSelectUser.vue b/client/web/admin/src/components/Authclient/CSelectUser.vue index 9adc115e4..639bcbaf8 100644 --- a/client/web/admin/src/components/Authclient/CSelectUser.vue +++ b/client/web/admin/src/components/Authclient/CSelectUser.vue @@ -5,6 +5,7 @@ :get-option-label="getOptionLabel" :get-option-key="getOptionKey" :value="user.value" + :filterable="false" @search="search" @input="updateRunAs" /> diff --git a/client/web/admin/src/components/CRolePicker.vue b/client/web/admin/src/components/CRolePicker.vue index 1dcdcebdd..817997454 100644 --- a/client/web/admin/src/components/CRolePicker.vue +++ b/client/web/admin/src/components/CRolePicker.vue @@ -9,6 +9,7 @@ :get-option-key="r => r.value" :get-option-label="r => getRoleLabel(r)" :placeholder="$t('admin:picker.role.placeholder')" + :filterable="false" @search="search" @input="updateValue($event)" /> diff --git a/client/web/admin/src/components/Permissions/CPermissionList.vue b/client/web/admin/src/components/Permissions/CPermissionList.vue index d7e859384..eb6236744 100644 --- a/client/web/admin/src/components/Permissions/CPermissionList.vue +++ b/client/web/admin/src/components/Permissions/CPermissionList.vue @@ -218,13 +218,12 @@ class="mb-0" > @@ -237,15 +236,13 @@ class="mt-3 mb-0" > @@ -328,6 +325,8 @@ export default { newRole: null, permissionChanges: [], + + fetchedUsers: {}, } }, @@ -380,6 +379,10 @@ export default { this.searchUsers('', () => {}) }, + beforeDestroy () { + this.setDefaultValues() + }, + methods: { checkRule (ID, res, op, access) { const key = `${op}@${res}` @@ -426,15 +429,23 @@ export default { this.$SystemAPI.userList({ query, limit: 15 }) .then(({ set }) => { - this.userOptions = set.map(m => Object.freeze(m)) + this.userOptions = set.reduce((acc, { userID, name, username, email }) => { + if (!this.fetchedUsers[userID]) { + this.fetchedUsers[userID] = name || username || email || `<@${userID}>` + } + + acc.push(userID) + + return acc + }, []) }) .finally(() => { loading(false) }) }, - getUserLabel ({ userID, email, name, username }) { - return name || username || email || `<@${userID}>` + getUserLabel (userID) { + return this.fetchedUsers[userID] }, getTranslation (resource, operation = '') { @@ -461,7 +472,7 @@ export default { }, onAdd () { - this.$emit('add', this.add) + this.$emit('add', { ...this.add, userID: { userID: this.add.userID, name: this.fetchedUsers[this.add.userID] } }) this.add = { mode: 'edit', roleID: [], @@ -477,8 +488,14 @@ export default { return roleID }, - getOptionUserKey ({ userID }) { - return userID + setDefaultValues () { + this.add = {} + this.modeOptions = [] + this.userOptions = [] + this.evaluatedPermissions = undefined + this.newRole = null + this.permissionChanges = [] + this.fetchedUsers = {} }, }, } diff --git a/client/web/admin/src/components/Role/CRoleEditorMembers.vue b/client/web/admin/src/components/Role/CRoleEditorMembers.vue index 88672d068..78d87132b 100644 --- a/client/web/admin/src/components/Role/CRoleEditorMembers.vue +++ b/client/web/admin/src/components/Role/CRoleEditorMembers.vue @@ -21,6 +21,7 @@ :get-option-key="u => u.value" :get-option-label="u => getUserLabel(u)" :placeholder="$t('admin:picker.member.placeholder')" + :filterable="false" @search="search" @input="updateValue($event)" /> diff --git a/client/web/admin/src/mixins/permissionHelpers.js b/client/web/admin/src/mixins/permissionHelpers.js index 1aff63afe..f6c6cab09 100644 --- a/client/web/admin/src/mixins/permissionHelpers.js +++ b/client/web/admin/src/mixins/permissionHelpers.js @@ -146,6 +146,12 @@ export default { if (mode === 'edit') { const { roleID, name } = add.roleID || {} + const ID = `edit-${roleID}` + + if (this.roles.some(r => r.ID === ID)) { + this.loaded.roles = true + return + } this.readPermissions({ roleID, name: [name] }) .finally(() => { @@ -157,14 +163,20 @@ export default { let name = '' if (userID) { - const { name: uname, username, email, handle } = userID - name = [uname || username || email || handle || userID || ''] + name = [userID.name] userID = userID.userID } else { name = roleID.map(({ name }) => name) roleID = roleID.map(({ roleID }) => roleID) } + const ID = userID ? `eval-${userID}` : `eval-${roleID.join('-')}` + + if (this.roles.some(r => r.ID === ID)) { + this.loaded.roles = true + return + } + this.evaluatePermissions({ name, roleID, userID }) .finally(() => { setIncludedRoles(this.roles) diff --git a/client/web/compose/src/components/Namespaces/Reminders/Edit.vue b/client/web/compose/src/components/Namespaces/Reminders/Edit.vue index 7cf1ddba3..3172d7968 100644 --- a/client/web/compose/src/components/Namespaces/Reminders/Edit.vue +++ b/client/web/compose/src/components/Namespaces/Reminders/Edit.vue @@ -1,6 +1,6 @@