From f5feb09cfad98ffdc62594298d8a3ff89ed03019 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Fri, 16 Sep 2022 16:38:05 +0200 Subject: [PATCH 1/5] Fix spaces on the 'Shared via link'-page --- .../bugfix-spaces-on-share-via-link-page | 6 ++++++ .../components/FilesList/ResourceTable.vue | 17 ++++++++++----- packages/web-app-files/src/fileSideBars.ts | 6 +++--- .../web-app-files/src/helpers/resources.ts | 21 +++++++++++++++++-- .../src/mixins/actions/navigate.ts | 2 +- .../services/folder/loaderSharedViaLink.ts | 12 ++++++++++- .../web-client/src/helpers/resource/types.ts | 11 ++++++++++ 7 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 changelog/unreleased/bugfix-spaces-on-share-via-link-page diff --git a/changelog/unreleased/bugfix-spaces-on-share-via-link-page b/changelog/unreleased/bugfix-spaces-on-share-via-link-page new file mode 100644 index 00000000000..1c87f37c3db --- /dev/null +++ b/changelog/unreleased/bugfix-spaces-on-share-via-link-page @@ -0,0 +1,6 @@ +Bugfix: Spaces on "Shared via link"-page + +Spaces on the "Shared via link"-page are now being displayed correctly. Also, the sidebar for those has been fixed. + +https://github.com/owncloud/web/pull/7651 +https://github.com/owncloud/web/issues/7103 diff --git a/packages/web-app-files/src/components/FilesList/ResourceTable.vue b/packages/web-app-files/src/components/FilesList/ResourceTable.vue index 1ad63d1553b..53f7068035c 100644 --- a/packages/web-app-files/src/components/FilesList/ResourceTable.vue +++ b/packages/web-app-files/src/components/FilesList/ResourceTable.vue @@ -54,7 +54,7 @@ ({ + ({ highlightedFile }) => ({ app: 'details-space-item', icon: 'questionnaire-line', title: $gettext('Details'), component: SpaceDetails, - default: isLocationSpacesActive(router, 'files-spaces-projects'), + default: highlightedFile?.type === 'space', get enabled() { return highlightedFile?.type === 'space' } diff --git a/packages/web-app-files/src/helpers/resources.ts b/packages/web-app-files/src/helpers/resources.ts index b8329d13698..4085478d847 100644 --- a/packages/web-app-files/src/helpers/resources.ts +++ b/packages/web-app-files/src/helpers/resources.ts @@ -136,14 +136,17 @@ export function attachIndicators(resource, sharesTree) { * @param {Boolean} incomingShares Asserts whether the shares are incoming * @param {Boolean} allowSharePermission Asserts whether the reshare permission is available * @param {Boolean} hasShareJail Asserts whether the share jail is available backend side + * @param {Array} spaces A list of spaces the current user has access to */ export function aggregateResourceShares( shares, incomingShares = false, allowSharePermission, - hasShareJail + hasShareJail, + spaces = [] ): Resource[] { shares.sort((a, b) => a.path.localeCompare(b.path)) + shares = addMatchingSpaceToShares(shares, spaces) if (incomingShares) { shares = addSharedWithToShares(shares) return orderBy(shares, ['file_target', 'permissions'], ['asc', 'desc']).map((share) => @@ -210,6 +213,16 @@ function addSharedWithToShares(shares) { return resources } +function addMatchingSpaceToShares(shares, spaces) { + const resources = [] + for (const share of shares) { + const storageId = extractStorageId(share.item_source) + const matchingSpace = spaces.find((s) => s.id === storageId) + resources.push({ ...share, matchingSpace }) + } + return resources +} + export function buildSharedResource( share, incomingShares = false, @@ -217,7 +230,7 @@ export function buildSharedResource( hasShareJail = false ): Resource { const isFolder = share.item_type === 'folder' - const resource: Resource = { + let resource: Resource = { id: share.id, fileId: share.item_source, storageId: extractStorageId(share.item_source), @@ -282,6 +295,10 @@ export function buildSharedResource( resource.canDeny = () => SharePermissions.denied.enabled(share.permissions) resource.getDomSelector = () => extractDomSelector(share.id) + if (share.matchingSpace) { + resource = { ...resource, ...share.matchingSpace } + } + return resource } diff --git a/packages/web-app-files/src/mixins/actions/navigate.ts b/packages/web-app-files/src/mixins/actions/navigate.ts index 42e6f558945..4c31ef70c43 100644 --- a/packages/web-app-files/src/mixins/actions/navigate.ts +++ b/packages/web-app-files/src/mixins/actions/navigate.ts @@ -37,7 +37,7 @@ export default { return false } - if (!resources[0].isFolder) { + if (!resources[0].isFolder || resources[0].type === 'space') { return false } diff --git a/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts b/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts index 747f34b43af..fad1853c68e 100644 --- a/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts +++ b/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts @@ -10,6 +10,8 @@ import { useCapabilityShareJailEnabled } from 'web-pkg/src/composables' import { unref } from '@vue/composition-api' +import { clientService } from 'web-pkg/src/services' +import { configurationManager } from 'web-pkg/src/configuration' export class FolderLoaderSharedViaLink implements FolderLoader { // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -33,6 +35,9 @@ export class FolderLoaderSharedViaLink implements FolderLoader { // eslint-disable-next-line @typescript-eslint/no-unused-vars return useTask(function* (signal1, signal2) { store.commit('Files/CLEAR_CURRENT_FILES_LIST') + const accessToken = store.getters['runtime/auth/accessToken'] + const serverUrl = configurationManager.serverUrl + const graphClient = clientService.graphAuthenticated(serverUrl, accessToken) let resources = yield client.shares.getShares('', { share_types: ShareTypes.link.value.toString(), @@ -41,12 +46,17 @@ export class FolderLoaderSharedViaLink implements FolderLoader { resources = resources.map((r) => r.shareInfo) + // FIXME: Wait until spaces are loaded? We already load them in the runtime + yield store.dispatch('runtime/spaces/loadSpaces', { graphClient }) + const spaces = store.getters['runtime/spaces/spaces'] + if (resources.length) { resources = aggregateResourceShares( resources, false, unref(hasResharing), - unref(hasShareJail) + unref(hasShareJail), + spaces ) } diff --git a/packages/web-client/src/helpers/resource/types.ts b/packages/web-client/src/helpers/resource/types.ts index 8717024786b..83967f877fa 100644 --- a/packages/web-client/src/helpers/resource/types.ts +++ b/packages/web-client/src/helpers/resource/types.ts @@ -12,6 +12,10 @@ export interface Resource { type?: string status?: number spaceRoles?: any[] + spaceQuota?: any[] + spaceMemberIds?: any[] + spaceImageData?: any[] + spaceReadmeData?: any[] mimeType?: string isFolder?: boolean sdate?: string @@ -35,12 +39,19 @@ export interface Resource { canBeDeleted?(): boolean canBeRestored?(): boolean canDeny?(): boolean + canEditDescription?(): boolean + canRestore?(): boolean + canDisable?(): boolean + canEditImage?(): boolean + canEditReadme?(): boolean isReceivedShare?(): boolean isMounted?(): boolean getDomSelector?(): string + matchingSpace?: any + resourceOwner?: User owner?: User[] ownerDisplayName?: string From cfe77c8c2c1789008abba61cdc35b74c02381ab2 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Mon, 19 Sep 2022 09:34:43 +0200 Subject: [PATCH 2/5] Fix public links for resources within spaces --- packages/web-app-files/src/helpers/resources.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/web-app-files/src/helpers/resources.ts b/packages/web-app-files/src/helpers/resources.ts index 4085478d847..d9a39b042ab 100644 --- a/packages/web-app-files/src/helpers/resources.ts +++ b/packages/web-app-files/src/helpers/resources.ts @@ -216,8 +216,11 @@ function addSharedWithToShares(shares) { function addMatchingSpaceToShares(shares, spaces) { const resources = [] for (const share of shares) { - const storageId = extractStorageId(share.item_source) - const matchingSpace = spaces.find((s) => s.id === storageId) + let matchingSpace + if (share.path === '/') { + const storageId = extractStorageId(share.item_source) + matchingSpace = spaces.find((s) => s.id === storageId && s.driveType === 'project') + } resources.push({ ...share, matchingSpace }) } return resources From 81ca496da065dc2b309a36f9cc41e50802ea0fb3 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Mon, 19 Sep 2022 12:00:34 +0200 Subject: [PATCH 3/5] Respect spaces capabilities --- .../src/services/folder/loaderSharedViaLink.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts b/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts index fad1853c68e..74144242dae 100644 --- a/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts +++ b/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts @@ -45,10 +45,12 @@ export class FolderLoaderSharedViaLink implements FolderLoader { }) resources = resources.map((r) => r.shareInfo) - - // FIXME: Wait until spaces are loaded? We already load them in the runtime - yield store.dispatch('runtime/spaces/loadSpaces', { graphClient }) - const spaces = store.getters['runtime/spaces/spaces'] + let spaces = [] + if (store.getters.capabilities?.spaces?.enabled) { + // FIXME: Wait until spaces are loaded? We already load them in the runtime + yield store.dispatch('runtime/spaces/loadSpaces', { graphClient }) + spaces = store.getters['runtime/spaces/spaces'] + } if (resources.length) { resources = aggregateResourceShares( From f7a5644abe9ba7c2f55900150f2491fd54a755f9 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Mon, 19 Sep 2022 12:01:56 +0200 Subject: [PATCH 4/5] Respect spaces capabilities --- .../src/services/folder/loaderSharedViaLink.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts b/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts index 74144242dae..6c72d348cb1 100644 --- a/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts +++ b/packages/web-app-files/src/services/folder/loaderSharedViaLink.ts @@ -35,9 +35,6 @@ export class FolderLoaderSharedViaLink implements FolderLoader { // eslint-disable-next-line @typescript-eslint/no-unused-vars return useTask(function* (signal1, signal2) { store.commit('Files/CLEAR_CURRENT_FILES_LIST') - const accessToken = store.getters['runtime/auth/accessToken'] - const serverUrl = configurationManager.serverUrl - const graphClient = clientService.graphAuthenticated(serverUrl, accessToken) let resources = yield client.shares.getShares('', { share_types: ShareTypes.link.value.toString(), @@ -47,6 +44,9 @@ export class FolderLoaderSharedViaLink implements FolderLoader { resources = resources.map((r) => r.shareInfo) let spaces = [] if (store.getters.capabilities?.spaces?.enabled) { + const accessToken = store.getters['runtime/auth/accessToken'] + const serverUrl = configurationManager.serverUrl + const graphClient = clientService.graphAuthenticated(serverUrl, accessToken) // FIXME: Wait until spaces are loaded? We already load them in the runtime yield store.dispatch('runtime/spaces/loadSpaces', { graphClient }) spaces = store.getters['runtime/spaces/spaces'] From 8599f41991c6eb6e94fecb280f9cccf15f877828 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Mon, 19 Sep 2022 12:03:04 +0200 Subject: [PATCH 5/5] Only load spaces if given --- packages/web-app-files/src/helpers/resources.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/web-app-files/src/helpers/resources.ts b/packages/web-app-files/src/helpers/resources.ts index d9a39b042ab..1e42dec7a42 100644 --- a/packages/web-app-files/src/helpers/resources.ts +++ b/packages/web-app-files/src/helpers/resources.ts @@ -146,7 +146,9 @@ export function aggregateResourceShares( spaces = [] ): Resource[] { shares.sort((a, b) => a.path.localeCompare(b.path)) - shares = addMatchingSpaceToShares(shares, spaces) + if (spaces.length) { + shares = addMatchingSpaceToShares(shares, spaces) + } if (incomingShares) { shares = addSharedWithToShares(shares) return orderBy(shares, ['file_target', 'permissions'], ['asc', 'desc']).map((share) =>