diff --git a/apps/files_sharing/src/components/SharingEntryLink.vue b/apps/files_sharing/src/components/SharingEntryLink.vue index 8feeb92990eb8..296289a1ad527 100644 --- a/apps/files_sharing/src/components/SharingEntryLink.vue +++ b/apps/files_sharing/src/components/SharingEntryLink.vue @@ -87,7 +87,7 @@ - - - + + {{ t('files_sharing', 'Create share') }} @@ -203,6 +206,8 @@ import NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator. import NcActions from '@nextcloud/vue/dist/Components/NcActions.js' import NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js' +import CheckIcon from 'vue-material-design-icons/CheckBold.vue' +import LockIcon from 'vue-material-design-icons/Lock.vue' import Tune from 'vue-material-design-icons/Tune.vue' import IconCalendarBlank from 'vue-material-design-icons/CalendarBlank.vue' @@ -219,6 +224,7 @@ export default { name: 'SharingEntryLink', components: { + CheckIcon, ExternalShareAction, NcActions, NcActionButton, @@ -228,6 +234,7 @@ export default { NcActionText, NcActionSeparator, NcAvatar, + LockIcon, Tune, IconCalendarBlank, SharingEntryQuickShareSelect, @@ -413,7 +420,7 @@ export default { * @return {boolean} */ pendingDataIsMissing() { - return this.pendingPassword || this.pendingEnforcedPassword || this.pendingEnforcedExpirationDate + return this.pendingPassword || this.pendingEnforcedPassword || this.pendingDefaultExpirationDate || this.pendingEnforcedExpirationDate }, pendingPassword() { return this.config.enableLinkPasswordByDefault && this.isPendingShare @@ -424,18 +431,13 @@ export default { pendingEnforcedExpirationDate() { return this.config.isDefaultExpireDateEnforced && this.isPendingShare }, - hasDefaultExpirationDate() { + pendingDefaultExpirationDate() { 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() { return this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced }, @@ -546,10 +548,24 @@ export default { }, methods: { + /** + * Check if the share requires review + * + * @param {boolean} shareReviewComplete if the share was reviewed + * @return {boolean} + */ + shareRequiresReview(shareReviewComplete) { + // If a user clicks 'Create share' it means they have reviewed the share + if (shareReviewComplete) { + return false + } + return this.defaultExpirationDateEnabled || this.config.enableLinkPasswordByDefault + }, /** * Create a new share link and append it to the list + * @param {boolean} shareReviewComplete if the share was reviewed */ - async onNewLinkShare() { + async onNewLinkShare(shareReviewComplete = false) { this.logger.debug('onNewLinkShare called (with this.share)', this.share) // do not run again if already loading if (this.loading) { @@ -569,11 +585,11 @@ export default { // 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) { + if ((this.sharePolicyHasEnforcedProperties && this.enforcedPropertiesMissing) || this.shareRequiresReview(shareReviewComplete === true)) { this.pending = true this.shareCreationComplete = false - this.logger.info('Share policy requires mandated properties (password)...') + this.logger.info('Share policy requires a review or has mandated properties (password, expirationDate)...') // ELSE, show the pending popovermenu // if password default or enforced, pre-fill with random one