diff --git a/changelog/unreleased/enhancement-share-and-folder-loading-performance b/changelog/unreleased/enhancement-share-and-folder-loading-performance index 1f926060548..2a3ad17a6ca 100644 --- a/changelog/unreleased/enhancement-share-and-folder-loading-performance +++ b/changelog/unreleased/enhancement-share-and-folder-loading-performance @@ -6,3 +6,4 @@ https://github.com/owncloud/web/issues/7721 https://github.com/owncloud/web/pull/8349 https://github.com/owncloud/web/pull/8482 https://github.com/owncloud/web/pull/8667 +https://github.com/owncloud/web/pull/8915 diff --git a/packages/web-app-files/src/store/actions.ts b/packages/web-app-files/src/store/actions.ts index 0f10a902672..9dad1317be9 100644 --- a/packages/web-app-files/src/store/actions.ts +++ b/packages/web-app-files/src/store/actions.ts @@ -294,12 +294,15 @@ export default { const shareMethod = isGroupShare ? 'shareFileWithGroup' : 'shareFileWithUser' return client.shares[shareMethod](path, shareWith, options) - .then((share) => { + .then(async (share) => { const builtShare = buildCollaboratorShare( share.shareInfo, context.getters.highlightedFile, allowSharePermissions(context.rootGetters) ) + if (context.state.sharesLoading) { + await Promise.resolve(context.state.sharesLoading) + } context.commit('OUTGOING_SHARES_UPSERT', { ...builtShare, outgoing: true }) context.dispatch('updateCurrentFileShareTypes') context.commit('LOAD_INDICATORS', path) @@ -317,7 +320,10 @@ export default { }) }, deleteShare(context, { client, share, path, loadIndicators = false }) { - return client.shares.deleteShare(share.id, {} as any).then(() => { + return client.shares.deleteShare(share.id, {} as any).then(async () => { + if (context.state.sharesLoading) { + await Promise.resolve(context.state.sharesLoading) + } context.commit('OUTGOING_SHARES_REMOVE', share) context.dispatch('updateCurrentFileShareTypes') if (loadIndicators) { @@ -427,8 +433,11 @@ export default { return new Promise((resolve, reject) => { client.shares .shareFileWithLink(path, { ...params, spaceRef: storageId }) - .then((data) => { + .then(async (data) => { const link = buildShare(data.shareInfo, null, allowSharePermissions(context.rootGetters)) + if (context.state.sharesLoading) { + await Promise.resolve(context.state.sharesLoading) + } context.commit('OUTGOING_SHARES_UPSERT', { ...link, outgoing: true }) context.dispatch('updateCurrentFileShareTypes') context.commit('LOAD_INDICATORS', path) @@ -454,7 +463,10 @@ export default { }) }, removeLink(context, { share, client, path, loadIndicators = false }) { - return client.shares.deleteShare(share.id).then(() => { + return client.shares.deleteShare(share.id).then(async () => { + if (context.state.sharesLoading) { + await Promise.resolve(context.state.sharesLoading) + } context.commit('OUTGOING_SHARES_REMOVE', share) context.dispatch('updateCurrentFileShareTypes') if (loadIndicators) { diff --git a/packages/web-app-files/tests/unit/store/actions.spec.ts b/packages/web-app-files/tests/unit/store/actions.spec.ts index b7c4776ebba..8816ff39605 100644 --- a/packages/web-app-files/tests/unit/store/actions.spec.ts +++ b/packages/web-app-files/tests/unit/store/actions.spec.ts @@ -17,7 +17,8 @@ const stateMock = { commit: jest.fn(), dispatch: jest.fn(), getters: {}, - rootGetters: {} + rootGetters: {}, + state: {} } // we need to define $gettext explicitly to make it enumerable on the mock const languageMock = mock({ $gettext: jest.fn() })