diff --git a/apps/files_sharing/src/components/SharingEntryLink.vue b/apps/files_sharing/src/components/SharingEntryLink.vue index 8c6235a78ee..b66586e25d8 100644 --- a/apps/files_sharing/src/components/SharingEntryLink.vue +++ b/apps/files_sharing/src/components/SharingEntryLink.vue @@ -50,7 +50,7 @@ - + + {{ config.enforcePasswordForPublicLink ? t('files_sharing', 'Enable link expiration (enforced)') : t('files_sharing', 'Enable link expiration') }} + + {{ t('files_sharing', 'Expiration date (enforced)') }} @@ -242,6 +250,7 @@ export default { shareCreationComplete: false, copySuccess: true, copied: false, + defaultExpirationDateEnabled: false, // Are we waiting for password/expiration date pending: false, @@ -402,14 +411,28 @@ export default { * * @return {boolean} */ + pendingDataIsMissing() { + return this.pendingPassword || this.pendingEnforcedPassword || this.pendingEnforcedExpirationDate + }, pendingPassword() { - return this.config.enableLinkPasswordByDefault && this.share && !this.share.id + return this.config.enableLinkPasswordByDefault && this.isPendingShare }, pendingEnforcedPassword() { - return this.config.enforcePasswordForPublicLink && this.share && !this.share.id + return this.config.enforcePasswordForPublicLink && this.isPendingShare }, - pendingExpirationDate() { - return this.config.isDefaultExpireDateEnforced && this.share && !this.share.id + pendingEnforcedExpirationDate() { + return this.config.isDefaultExpireDateEnforced && this.isPendingShare + }, + hasDefaultExpirationDate() { + return (this.config.defaultExpirationDate instanceof Date || !isNaN(new Date(this.config.defaultExpirationDate).getTime())) && this.isPendingShare + }, + + isPendingShare() { + return !!(this.share && !this.share.id) + }, + + shareRequiresReview() { + return this.defaultExpirationDateEnabled || this.config.enableLinkPasswordByDefault }, sharePolicyHasRequiredProperties() { @@ -508,6 +531,10 @@ export default { return this.fileInfo.shareAttributes.some(hasDisabledDownload) }, }, + mounted() { + this.defaultExpirationDateEnabled = this.config.defaultExpirationDate instanceof Date + this.share.expireDate = this.defaultExpirationDateEnabled ? this.formatDateToString(this.config.defaultExpirationDate) : '' + }, methods: { /** @@ -530,8 +557,10 @@ export default { } 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.sharePolicyHasRequiredProperties && this.requiredPropertiesMissing) { + // Do not push yet if we need a password or an expiration date: show pending menu + // A share would require a review for example is default expiration date is set but not enforced, this allows + // the user to review the share and remove the expiration date if they don't want it + if ((this.sharePolicyHasRequiredProperties && this.requiredPropertiesMissing) || this.shareRequiresReview) { this.pending = true this.shareCreationComplete = false @@ -765,6 +794,9 @@ export default { this.onPasswordSubmit() this.onNoteSubmit() }, + onDefaultExpirationDateEnabledChange(enabled) { + this.share.expireDate = enabled ? this.formatDateToString(this.config.defaultExpirationDate) : '' + }, /** * Cancel the share creation