From 5eaf8c89c1b700aff323e2fae3845a68f3a6a109 Mon Sep 17 00:00:00 2001 From: Alex Ackermann Date: Mon, 18 Nov 2024 10:53:40 +0100 Subject: [PATCH 1/3] Sort roles in role dropdown according to backend --- .../SideBar/Shares/Collaborators/RoleDropdown.vue | 4 +--- packages/web-pkg/src/components/SideBar/FileSideBar.vue | 8 ++++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/web-app-files/src/components/SideBar/Shares/Collaborators/RoleDropdown.vue b/packages/web-app-files/src/components/SideBar/Shares/Collaborators/RoleDropdown.vue index a01e6645512..712e8d63ee4 100644 --- a/packages/web-app-files/src/components/SideBar/Shares/Collaborators/RoleDropdown.vue +++ b/packages/web-app-files/src/components/SideBar/Shares/Collaborators/RoleDropdown.vue @@ -149,9 +149,7 @@ export default defineComponent({ roles = availableExternalRoles } - return [...unref(roles)].sort( - (role1, role2) => role1['@libre.graph.weight'] - role2['@libre.graph.weight'] - ) + return unref(roles) }) let initialSelectedRole: ShareRole diff --git a/packages/web-pkg/src/components/SideBar/FileSideBar.vue b/packages/web-pkg/src/components/SideBar/FileSideBar.vue index 60badec2e55..ed933441f79 100644 --- a/packages/web-pkg/src/components/SideBar/FileSideBar.vue +++ b/packages/web-pkg/src/components/SideBar/FileSideBar.vue @@ -224,8 +224,12 @@ export default defineComponent({ const loadedLinkShares = shares.filter(isLinkShare) const rolesArray = Object.values(sharesStore.graphRoles) - availableInternalShareRoles.value = - rolesArray.filter((r) => allowedRoles?.map(({ id }) => id).includes(r.id)) || [] + availableInternalShareRoles.value = allowedRoles.map((r) => { + return { + ...r, + icon: rolesArray.find((role) => role.id === r.id)?.icon + } + }) // load external share roles if (appsStore.isAppEnabled('open-cloud-mesh')) { From b426ceeb415be95d2a12b05451c82e0dc611bcf2 Mon Sep 17 00:00:00 2001 From: Alex Ackermann Date: Mon, 18 Nov 2024 10:55:04 +0100 Subject: [PATCH 2/3] Enhance chanelog item --- changelog/unreleased/bugfix-fix-order-in-roles-drop-down | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog/unreleased/bugfix-fix-order-in-roles-drop-down b/changelog/unreleased/bugfix-fix-order-in-roles-drop-down index cfd22976ad3..5f19c58a452 100644 --- a/changelog/unreleased/bugfix-fix-order-in-roles-drop-down +++ b/changelog/unreleased/bugfix-fix-order-in-roles-drop-down @@ -4,4 +4,5 @@ We've fixed an issue where the order of roles in the roles drop down was not cor Now the roles are sorted as delegated by the backend. https://github.com/owncloud/web/pull/11916 +https://github.com/owncloud/web/pull/11922 https://github.com/owncloud/web/issues/11915 \ No newline at end of file From fce9bb9776e2c09316d33c93b165c7f26a84cca2 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Mon, 18 Nov 2024 11:24:18 +0100 Subject: [PATCH 3/3] fix: external role sorting --- .../Shares/Collaborators/RoleDropdown.vue | 13 +++++++++++- .../src/components/SideBar/FileSideBar.vue | 20 ++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/web-app-files/src/components/SideBar/Shares/Collaborators/RoleDropdown.vue b/packages/web-app-files/src/components/SideBar/Shares/Collaborators/RoleDropdown.vue index 712e8d63ee4..7d632c7243a 100644 --- a/packages/web-app-files/src/components/SideBar/Shares/Collaborators/RoleDropdown.vue +++ b/packages/web-app-files/src/components/SideBar/Shares/Collaborators/RoleDropdown.vue @@ -81,7 +81,8 @@ import { computed, ref, unref, - Ref + Ref, + watch } from 'vue' import { useAbility, useUserStore } from '@ownclouders/web-pkg' import { Resource } from '@ownclouders/web-client' @@ -185,6 +186,16 @@ export default defineComponent({ emit('optionChange', unref(selectedRole)) } + watch( + () => props.isExternal, + () => { + if (!unref(hasExistingShareRole)) { + // when no role exists and the external flag changes, we need to reset the selected role + selectedRole.value = unref(availableRoles)[0] + } + } + ) + return { ability, user, diff --git a/packages/web-pkg/src/components/SideBar/FileSideBar.vue b/packages/web-pkg/src/components/SideBar/FileSideBar.vue index ed933441f79..8984219e9e1 100644 --- a/packages/web-pkg/src/components/SideBar/FileSideBar.vue +++ b/packages/web-pkg/src/components/SideBar/FileSideBar.vue @@ -224,12 +224,13 @@ export default defineComponent({ const loadedLinkShares = shares.filter(isLinkShare) const rolesArray = Object.values(sharesStore.graphRoles) - availableInternalShareRoles.value = allowedRoles.map((r) => { - return { - ...r, - icon: rolesArray.find((role) => role.id === r.id)?.icon - } - }) + availableInternalShareRoles.value = + allowedRoles?.map((r) => { + return { + ...r, + icon: rolesArray.find((role) => role.id === r.id)?.icon + } + }) || [] // load external share roles if (appsStore.isAppEnabled('open-cloud-mesh')) { @@ -247,7 +248,12 @@ export default defineComponent({ ) availableExternalShareRoles.value = - rolesArray.filter((r) => allowedRoles?.map(({ id }) => id).includes(r.id)) || [] + allowedRoles?.map((r) => { + return { + ...r, + icon: rolesArray.find((role) => role.id === r.id)?.icon + } + }) || [] } // use cache for indirect shares