Skip to content

Commit

Permalink
Merge pull request #45305 from nextcloud/backport/44464/master
Browse files Browse the repository at this point in the history
44032 fix show new shares without refresh
  • Loading branch information
Fenn-CS authored Jun 12, 2024
2 parents a11262b + 8119010 commit 603122d
Show file tree
Hide file tree
Showing 10 changed files with 90 additions and 46 deletions.
116 changes: 79 additions & 37 deletions apps/files_sharing/src/components/SharingEntryLink.vue
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ import GeneratePassword from '../utils/GeneratePassword.js'
import Share from '../models/Share.js'
import SharesMixin from '../mixins/SharesMixin.js'
import ShareDetails from '../mixins/ShareDetails.js'
import { getLoggerBuilder } from '@nextcloud/logger'
export default {
name: 'SharingEntryLink',
Expand Down Expand Up @@ -282,6 +283,7 @@ export default {
data() {
return {
shareCreationComplete: false,
copySuccess: true,
copied: false,
Expand All @@ -290,6 +292,10 @@ export default {
ExternalLegacyLinkActions: OCA.Sharing.ExternalLinkActions.state,
ExternalShareActions: OCA.Sharing.ExternalShareActions.state,
logger: getLoggerBuilder()
.setApp('files_sharing')
.detectUser()
.build(),
// tracks whether modal should be opened or not
showQRCode: false,
Expand Down Expand Up @@ -453,6 +459,32 @@ export default {
return this.config.isDefaultExpireDateEnforced && this.share && !this.share.id
},
sharePolicyHasRequiredProperties() {
return this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced
},
requiredPropertiesMissing() {
// Ensure share exist and the share policy has required properties
if (!this.sharePolicyHasRequiredProperties) {
return false
}
if (!this.share) {
// if no share, we can't tell if properties are missing or not so we assume properties are missing
return true
}
// If share has ID, then this is an incoming link share created from the existing link share
// Hence assume required properties
if (this.share.id) {
return true
}
// Check if either password or expiration date is missing and enforced
const isPasswordMissing = this.config.enforcePasswordForPublicLink && !this.share.password
const isExpireDateMissing = this.config.isDefaultExpireDateEnforced && !this.share.expireDate
return isPasswordMissing || isExpireDateMissing
},
// if newPassword exists, but is empty, it means
// the user deleted the original password
hasUnsavedPassword() {
Expand Down Expand Up @@ -529,6 +561,7 @@ export default {
* Create a new share link and append it to the list
*/
async onNewLinkShare() {
this.logger.debug('onNewLinkShare called (with this.share)', this.share)
// do not run again if already loading
if (this.loading) {
return
Expand All @@ -543,28 +576,13 @@ export default {
shareDefaults.expiration = this.formatDateToString(this.config.defaultExpirationDate)
}
this.logger.debug('Missing required properties?', this.requiredPropertiesMissing)
// do not push yet if we need a password or an expiration date: show pending menu
if (this.config.enableLinkPasswordByDefault || this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced) {
if (this.sharePolicyHasRequiredProperties && this.requiredPropertiesMissing) {
this.pending = true
this.shareCreationComplete = false
// 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)) {
try {
await this.pushNewLinkShare(this.share, true)
} catch (e) {
this.pending = false
console.error(e)
return false
}
return true
} else {
this.open = true
OC.Notification.showTemporary(t('files_sharing', 'Error, please enter proper password and/or expiration date'))
return false
}
}
this.logger.info('Share policy requires mandated properties (password)...')
// ELSE, show the pending popovermenu
// if password default or enforced, pre-fill with random one
Expand All @@ -586,8 +604,32 @@ export default {
// Nothing is enforced, creating share directly
} else {
// 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)) {
try {
this.logger.info('Sending existing share to server', this.share)
await this.pushNewLinkShare(this.share, true)
this.shareCreationComplete = true
this.logger.info('Share created on server', this.share)
} catch (e) {
this.pending = false
this.logger.error('Error creating share', e)
return false
}
return true
} else {
this.open = true
showError(t('files_sharing', 'Error, please enter proper password and/or expiration date'))
return false
}
}
const share = new Share(shareDefaults)
await this.pushNewLinkShare(share)
this.shareCreationComplete = true
}
},
Expand Down Expand Up @@ -627,8 +669,8 @@ export default {
const newShare = await this.createShare(options)
this.open = false
this.shareCreationComplete = true
console.debug('Link share created', newShare)
// if share already exists, copy link directly on next tick
let component
if (update) {
Expand Down Expand Up @@ -670,8 +712,10 @@ export default {
this.onSyncError('pending', message)
}
throw data
} finally {
this.loading = false
this.shareCreationComplete = true
}
},
async copyLink() {
Expand Down Expand Up @@ -774,7 +818,9 @@ export default {
// this.share already exists at this point,
// but is incomplete as not pushed to server
// YET. We can safely delete the share :)
this.$emit('remove:share', this.share)
if (!this.shareCreationComplete) {
this.$emit('remove:share', this.share)
}
},
},
}
Expand All @@ -795,25 +841,21 @@ export default {
min-width: 0;
}
&__desc {
display: flex;
flex-direction: column;
line-height: 1.2em;
&__desc {
display: flex;
flex-direction: column;
line-height: 1.2em;
p {
color: var(--color-text-maxcontrast);
}
p {
color: var(--color-text-maxcontrast);
}
&__title {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
&__title {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
}
}
&__copy {
}
&:not(.sharing-entry--share) &__actions {
.new-share-link {
Expand Down
3 changes: 2 additions & 1 deletion apps/files_sharing/src/mixins/ShareDetails.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@


import Share from '../models/Share.js'
import Config from '../services/ConfigService.js'

export default {
methods: {
Expand Down Expand Up @@ -56,7 +57,7 @@ export default {
user: shareRequestObject.shareWith,
share_with_displayname: shareRequestObject.displayName,
subtitle: shareRequestObject.subtitle,
permissions: shareRequestObject.permissions,
permissions: shareRequestObject.permissions ?? new Config().defaultPermissions,
expiration: '',
}

Expand Down
1 change: 1 addition & 0 deletions apps/files_sharing/src/views/SharingDetailsTab.vue
Original file line number Diff line number Diff line change
Expand Up @@ -892,6 +892,7 @@ export default {
this.share = share
this.$emit('add:share', this.share)
} else {
this.$emit('update:share', this.share)
this.queueUpdate(...permissionsAndAttributes)
}
Expand Down
3 changes: 0 additions & 3 deletions dist/8450-8450.js

This file was deleted.

1 change: 0 additions & 1 deletion dist/8450-8450.js.map

This file was deleted.

3 changes: 3 additions & 0 deletions dist/8821-8821.js

Large diffs are not rendered by default.

File renamed without changes.
1 change: 1 addition & 0 deletions dist/8821-8821.js.map

Large diffs are not rendered by default.

Loading

0 comments on commit 603122d

Please sign in to comment.