diff --git a/apps/files_sharing/src/components/SharingEntryLink.vue b/apps/files_sharing/src/components/SharingEntryLink.vue index 522e8e2335507..44c3c986e1783 100644 --- a/apps/files_sharing/src/components/SharingEntryLink.vue +++ b/apps/files_sharing/src/components/SharingEntryLink.vue @@ -44,7 +44,7 @@ - {{ t('files_sharing', 'Create a new share link') }} @@ -373,6 +373,9 @@ export default { copySuccess: true, copied: false, + // Are we waiting for password/expiration date + pending: false, + publicUploadRWValue: OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ | OC.PERMISSION_DELETE, publicUploadRValue: OC.PERMISSION_READ, publicUploadWValue: OC.PERMISSION_CREATE, @@ -618,6 +621,11 @@ export default { * Create a new share link and append it to the list */ async onNewLinkShare() { + // do not run again if already loading + if (this.loading) { + return + } + const shareDefaults = { share_type: OC.Share.SHARE_TYPE_LINK, } @@ -630,11 +638,13 @@ export default { shareDefaults.password = await this.generatePassword() } - // do not push yet if we need a password or an expiration date + // do not push yet if we need a password or an expiration date: show pending menu if (this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced) { - this.loading = true + this.pending = true + // if a share already exists, pushing it if (this.share && !this.share.id) { + // if the share is valid, create it on the server if (this.checkShare(this.share)) { await this.pushNewLinkShare(this.share, true) return true @@ -660,10 +670,10 @@ export default { // open the menu on the // freshly created share component this.open = false - this.loading = false + this.pending = false component.open = true - // Nothing enforced, creating share directly + // Nothing is enforced, creating share directly } else { const share = new Share(shareDefaults) await this.pushNewLinkShare(share) @@ -680,6 +690,11 @@ export default { */ async pushNewLinkShare(share, update) { try { + // do nothing if we're already pending creation + if (this.loading) { + return true + } + this.loading = true this.errors = {}