From 0f58178e4d0eeae0d045ed1f349ea53a90dcef8a Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 6 Mar 2025 00:25:59 +0100 Subject: [PATCH] fix(files_sharing): ugly hacks to update permissions on share creation Signed-off-by: Ferdinand Thiessen --- apps/files_sharing/src/mixins/ShareDetails.js | 1 + apps/files_sharing/src/mixins/SharesMixin.js | 3 +-- apps/files_sharing/src/models/Share.js | 6 ++++- .../src/views/SharingDetailsTab.vue | 25 ++++++++++++++----- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/apps/files_sharing/src/mixins/ShareDetails.js b/apps/files_sharing/src/mixins/ShareDetails.js index 77fbd657944..094fefd9491 100644 --- a/apps/files_sharing/src/mixins/ShareDetails.js +++ b/apps/files_sharing/src/mixins/ShareDetails.js @@ -46,6 +46,7 @@ export default { scope: 'permissions', }, ], + hideDownload: false, share_type: shareRequestObject.shareType, share_with: shareRequestObject.shareWith, is_no_user: shareRequestObject.isNoUser, diff --git a/apps/files_sharing/src/mixins/SharesMixin.js b/apps/files_sharing/src/mixins/SharesMixin.js index a97fbaf670e..2742860649d 100644 --- a/apps/files_sharing/src/mixins/SharesMixin.js +++ b/apps/files_sharing/src/mixins/SharesMixin.js @@ -308,7 +308,7 @@ export default { } }) - this.updateQueue.add(async () => { + return this.updateQueue.add(async () => { this.saving = true this.errors = {} try { @@ -340,7 +340,6 @@ export default { this.saving = false } }) - return } // This share does not exists on the server yet diff --git a/apps/files_sharing/src/models/Share.js b/apps/files_sharing/src/models/Share.js index b88d376a0ff..a1ae8b59540 100644 --- a/apps/files_sharing/src/models/Share.js +++ b/apps/files_sharing/src/models/Share.js @@ -39,6 +39,10 @@ export default class Share { ocsData = ocsData.ocs.data[0] } + // string to int + if (typeof ocsData.id === 'string') { + ocsData.id = Number.parseInt(ocsData.id) + } // convert int into boolean ocsData.hide_download = !!ocsData.hide_download ocsData.mail_send = !!ocsData.mail_send @@ -113,7 +117,7 @@ export default class Share { * @memberof Share */ get attributes() { - return this._share.attributes + return this._share.attributes || [] } /** diff --git a/apps/files_sharing/src/views/SharingDetailsTab.vue b/apps/files_sharing/src/views/SharingDetailsTab.vue index 5d3af9ce590..3169babeab1 100644 --- a/apps/files_sharing/src/views/SharingDetailsTab.vue +++ b/apps/files_sharing/src/views/SharingDetailsTab.vue @@ -901,16 +901,29 @@ export default { this.creating = true const share = await this.addShare(incomingShare) - this.creating = false + // ugly hack to make code work - we need the id to be set but at the same time we need to keep values we want to update + this.share._share.id = share.id + await this.queueUpdate(...permissionsAndAttributes) + // Also a ugly hack to update the updated permissions + for (const prop of permissionsAndAttributes) { + if (prop in share && prop in this.share) { + try { + share[prop] = this.share[prop] + } catch { + share._share[prop] = this.share[prop] + } + } + } this.share = share + this.creating = false this.$emit('add:share', this.share) + } else { + // Let's update after creation as some attrs are only available after creation + this.$emit('update:share', this.share) + emit('update:share', this.share) + this.queueUpdate(...permissionsAndAttributes) } - // Let's update after creation as some attrs are only available after creation - this.$emit('update:share', this.share) - emit('update:share', this.share) - this.queueUpdate(...permissionsAndAttributes) - await this.getNode() emit('files:node:updated', this.node)