diff options
Diffstat (limited to 'app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue')
-rw-r--r-- | app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue index 615d59a7b8e..ca1b4a57717 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue @@ -1,4 +1,5 @@ <script> +import _ from 'underscore'; import successSvg from 'icons/_icon_status_success.svg'; import warningSvg from 'icons/_icon_status_warning.svg'; import simplePoll from '~/lib/utils/simple_poll'; @@ -12,6 +13,7 @@ import SquashBeforeMerge from './squash_before_merge.vue'; import CommitsHeader from './commits_header.vue'; import CommitEdit from './commit_edit.vue'; import CommitMessageDropdown from './commit_message_dropdown.vue'; +import { AUTO_MERGE_STRATEGIES } from '../../constants'; export default { name: 'ReadyToMerge', @@ -30,8 +32,6 @@ export default { data() { return { removeSourceBranch: this.mr.shouldRemoveSourceBranch, - mergeWhenBuildSucceeds: false, - autoMergeStrategy: undefined, isMakingRequest: false, isMergingImmediately: false, commitMessage: this.mr.commitMessage, @@ -42,18 +42,18 @@ export default { }; }, computed: { - shouldShowAutoMergeText() { - return this.mr.isPipelineActive; + isAutoMergeAvailable() { + return !_.isEmpty(this.mr.availableAutoMergeStrategies); }, status() { - const { pipeline, isPipelineActive, isPipelineFailed, hasCI, ciStatus } = this.mr; + const { pipeline, isPipelineFailed, hasCI, ciStatus } = this.mr; if (hasCI && !ciStatus) { return 'failed'; + } else if (this.isAutoMergeAvailable) { + return 'pending'; } else if (!pipeline) { return 'success'; - } else if (isPipelineActive) { - return 'pending'; } else if (isPipelineFailed) { return 'failed'; } @@ -87,14 +87,14 @@ export default { mergeButtonText() { if (this.isMergingImmediately) { return __('Merge in progress'); - } else if (this.shouldShowAutoMergeText) { - return __('Merge when pipeline succeeds'); + } else if (this.isAutoMergeAvailable) { + return this.autoMergeText; } - return 'Merge'; + return __('Merge'); }, shouldShowMergeOptionsDropdown() { - return this.mr.isPipelineActive && !this.mr.onlyAllowMergeIfPipelineSucceeds; + return this.isAutoMergeAvailable && !this.mr.onlyAllowMergeIfPipelineSucceeds; }, isRemoveSourceBranchButtonDisabled() { return this.isMergeButtonDisabled; @@ -104,7 +104,7 @@ export default { return enableSquashBeforeMerge && commitsCount > 1; }, shouldShowMergeControls() { - return this.mr.isMergeAllowed || this.shouldShowAutoMergeText; + return this.mr.isMergeAllowed || this.isAutoMergeAvailable; }, shouldShowSquashEdit() { return this.squashBeforeMerge && this.shouldShowSquashBeforeMerge; @@ -118,20 +118,15 @@ export default { const { commitMessageWithDescription, commitMessage } = this.mr; this.commitMessage = includeDescription ? commitMessageWithDescription : commitMessage; }, - handleMergeButtonClick(mergeWhenBuildSucceeds, mergeImmediately) { - // TODO: Remove no-param-reassign - if (mergeWhenBuildSucceeds === undefined) { - mergeWhenBuildSucceeds = this.mr.isPipelineActive; // eslint-disable-line no-param-reassign - } else if (mergeImmediately) { + handleMergeButtonClick(useAutoMerge, mergeImmediately = false) { + if (mergeImmediately) { this.isMergingImmediately = true; } - this.autoMergeStrategy = mergeWhenBuildSucceeds ? 'merge_when_pipeline_succeeds' : undefined; - const options = { sha: this.mr.sha, commit_message: this.commitMessage, - auto_merge_strategy: this.autoMergeStrategy, + auto_merge_strategy: useAutoMerge ? this.mr.preferredAutoMergeStrategy : undefined, should_remove_source_branch: this.removeSourceBranch === true, squash: this.squashBeforeMerge, squash_commit_message: this.squashCommitMessage, @@ -144,7 +139,7 @@ export default { .then(data => { const hasError = data.status === 'failed' || data.status === 'hook_validation_error'; - if (data.status === 'merge_when_pipeline_succeeds') { + if (_.includes(AUTO_MERGE_STRATEGIES, data.status)) { eventHub.$emit('MRWidgetUpdateRequested'); } else if (data.status === 'success') { this.initiateMergePolling(); @@ -242,13 +237,13 @@ export default { :class="mergeButtonClass" type="button" class="qa-merge-button" - @click="handleMergeButtonClick()" + @click="handleMergeButtonClick(isAutoMergeAvailable)" > <i v-if="isMakingRequest" class="fa fa-spinner fa-spin" aria-hidden="true"></i> {{ mergeButtonText }} </button> <button - v-if="shouldShowMergeOptionsDropdown" + v-if="isAutoMergeAvailable" :disabled="isMergeButtonDisabled" type="button" class="btn btn-sm btn-info dropdown-toggle js-merge-moment" @@ -264,15 +259,13 @@ export default { > <li> <a - class="merge_when_pipeline_succeeds qa-merge-when-pipeline-succeeds-option" + class="auto_merge_enabled qa-merge-when-pipeline-succeeds-option" href="#" @click.prevent="handleMergeButtonClick(true)" > <span class="media"> <span class="merge-opt-icon" aria-hidden="true" v-html="successSvg"></span> - <span class="media-body merge-opt-title">{{ - __('Merge when pipeline succeeds') - }}</span> + <span class="media-body merge-opt-title">{{ autoMergeText }}</span> </span> </a> </li> |