diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-11-17 11:33:21 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-11-17 11:33:21 +0000 |
commit | 7021455bd1ed7b125c55eb1b33c5a01f2bc55ee0 (patch) | |
tree | 5bdc2229f5198d516781f8d24eace62fc7e589e9 /app/assets/javascripts/vue_merge_request_widget/components/states | |
parent | 185b095e93520f96e9cfc31d9c3e69b498cdab7c (diff) | |
download | gitlab-ce-7021455bd1ed7b125c55eb1b33c5a01f2bc55ee0.tar.gz |
Add latest changes from gitlab-org/gitlab@15-6-stable-eev15.6.0-rc42
Diffstat (limited to 'app/assets/javascripts/vue_merge_request_widget/components/states')
10 files changed, 111 insertions, 271 deletions
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/merge_checks_failed.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/merge_checks_failed.vue index 2b22033514f..38b99dae264 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/merge_checks_failed.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/merge_checks_failed.vue @@ -9,6 +9,7 @@ export default { blockingMergeRequests: s__( 'mrWidget|Merge blocked: you can only merge after the above items are resolved.', ), + externalStatusChecksFailed: s__('mrWidget|Merge blocked: all status checks must pass.'), }, components: { StatusIcon, @@ -25,6 +26,8 @@ export default { return this.$options.i18n.approvalNeeded; } else if (this.mr.detailedMergeStatus === DETAILED_MERGE_STATUS.BLOCKED_STATUS) { return this.$options.i18n.blockingMergeRequests; + } else if (this.mr.detailedMergeStatus === DETAILED_MERGE_STATUS.EXTERNAL_STATUS_CHECKS) { + return this.$options.i18n.externalStatusChecksFailed; } return null; diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue index 92a7fa39cdc..38f7d3d2c96 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue @@ -3,8 +3,8 @@ import { GlSkeletonLoader, GlSprintf } from '@gitlab/ui'; import autoMergeMixin from 'ee_else_ce/vue_merge_request_widget/mixins/auto_merge'; import autoMergeEnabledQuery from 'ee_else_ce/vue_merge_request_widget/queries/states/auto_merge_enabled.query.graphql'; import { createAlert } from '~/flash'; +import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import { __ } from '~/locale'; -import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import { AUTO_MERGE_STRATEGIES } from '../../constants'; import eventHub from '../../event_hub'; import mergeRequestQueryVariablesMixin from '../../mixins/merge_request_query_variables'; @@ -16,9 +16,6 @@ export default { apollo: { state: { query: autoMergeEnabledQuery, - skip() { - return !this.glFeatures.mergeRequestWidgetGraphql; - }, variables() { return this.mergeRequestQueryVariables; }, @@ -31,7 +28,7 @@ export default { GlSprintf, StateContainer, }, - mixins: [autoMergeMixin, glFeatureFlagMixin(), mergeRequestQueryVariablesMixin], + mixins: [autoMergeMixin, mergeRequestQueryVariablesMixin], props: { mr: { type: Object, @@ -51,31 +48,21 @@ export default { }, computed: { loading() { - return ( - this.glFeatures.mergeRequestWidgetGraphql && - this.$apollo.queries.state.loading && - Object.keys(this.state).length === 0 - ); - }, - mergeUser() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.mergeUser; - } - - return this.mr.setToAutoMergeBy; + return this.$apollo.queries.state.loading && Object.keys(this.state).length === 0; }, - targetBranch() { - return (this.glFeatures.mergeRequestWidgetGraphql ? this.state : this.mr).targetBranch; - }, - shouldRemoveSourceBranch() { - if (!this.glFeatures.mergeRequestWidgetGraphql) return this.mr.shouldRemoveSourceBranch; - + stateRemoveSourceBranch() { if (!this.state.shouldRemoveSourceBranch) return false; return this.state.shouldRemoveSourceBranch || this.state.forceRemoveSourceBranch; }, - autoMergeStrategy() { - return (this.glFeatures.mergeRequestWidgetGraphql ? this.state : this.mr).autoMergeStrategy; + canRemoveSourceBranch() { + const { currentUserId } = this.mr; + const mergeUserId = getIdFromGraphQLId(this.state.mergeUser?.id); + const canRemoveSourceBranch = this.state.userPermissions.removeSourceBranch; + + return ( + !this.stateRemoveSourceBranch && canRemoveSourceBranch && mergeUserId === currentUserId + ); }, actions() { const actions = []; @@ -104,12 +91,8 @@ export default { this.service .cancelAutomaticMerge() .then((res) => res.data) - .then((data) => { - if (this.glFeatures.mergeRequestWidgetGraphql) { - eventHub.$emit('MRWidgetUpdateRequested'); - } else { - eventHub.$emit('UpdateWidgetData', data); - } + .then(() => { + eventHub.$emit('MRWidgetUpdateRequested'); }) .catch(() => { this.isCancellingAutoMerge = false; @@ -121,7 +104,7 @@ export default { removeSourceBranch() { const options = { sha: this.mr.sha, - auto_merge_strategy: this.autoMergeStrategy, + auto_merge_strategy: this.state.autoMergeStrategy, should_remove_source_branch: true, }; @@ -135,9 +118,7 @@ export default { } }) .then(() => { - if (this.glFeatures.mergeRequestWidgetGraphql) { - this.$apollo.queries.state.refetch(); - } + this.$apollo.queries.state.refetch(); }) .catch(() => { this.isRemovingSourceBranch = false; @@ -162,7 +143,7 @@ export default { <h4 class="gl-mr-3" data-testid="statusText"> <gl-sprintf :message="statusText" data-testid="statusText"> <template #merge_author> - <mr-widget-author :author="mergeUser" /> + <mr-widget-author v-if="state.mergeUser" :author="state.mergeUser" /> </template> </gl-sprintf> </h4> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_failed.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_failed.vue index 39c56cbb93d..448805cf8b9 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_failed.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_failed.vue @@ -1,6 +1,5 @@ <script> import { s__ } from '~/locale'; -import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import eventHub from '../../event_hub'; import mergeRequestQueryVariablesMixin from '../../mixins/merge_request_query_variables'; import autoMergeFailedQuery from '../../queries/states/auto_merge_failed.query.graphql'; @@ -11,13 +10,10 @@ export default { components: { StateContainer, }, - mixins: [glFeatureFlagMixin(), mergeRequestQueryVariablesMixin], + mixins: [mergeRequestQueryVariablesMixin], apollo: { mergeError: { query: autoMergeFailedQuery, - skip() { - return !this.glFeatures.mergeRequestWidgetGraphql; - }, variables() { return this.mergeRequestQueryVariables; }, @@ -32,7 +28,7 @@ export default { }, data() { return { - mergeError: this.glFeatures.mergeRequestWidgetGraphql ? null : this.mr.mergeError, + mergeError: null, isRefreshing: false, }; }, diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_conflicts.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_conflicts.vue index d60d3cfc9ea..8e1b18c63a4 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_conflicts.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_conflicts.vue @@ -1,6 +1,5 @@ <script> import { GlButton, GlSkeletonLoader } from '@gitlab/ui'; -import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import mergeRequestQueryVariablesMixin from '../../mixins/merge_request_query_variables'; import userPermissionsQuery from '../../queries/permissions.query.graphql'; import conflictsStateQuery from '../../queries/states/conflicts.query.graphql'; @@ -13,23 +12,17 @@ export default { GlButton, StateContainer, }, - mixins: [glFeatureFlagMixin(), mergeRequestQueryVariablesMixin], + mixins: [mergeRequestQueryVariablesMixin], apollo: { userPermissions: { query: userPermissionsQuery, - skip() { - return !this.glFeatures.mergeRequestWidgetGraphql; - }, variables() { return this.mergeRequestQueryVariables; }, update: (data) => data.project.mergeRequest.userPermissions, }, - stateData: { + state: { query: conflictsStateQuery, - skip() { - return !this.glFeatures.mergeRequestWidgetGraphql; - }, variables() { return this.mergeRequestQueryVariables; }, @@ -47,40 +40,19 @@ export default { data() { return { userPermissions: {}, - stateData: {}, + state: {}, }; }, computed: { isLoading() { - return ( - this.glFeatures.mergeRequestWidgetGraphql && - this.$apollo.queries.userPermissions.loading && - this.$apollo.queries.stateData.loading - ); - }, - canPushToSourceBranch() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.userPermissions.pushToSourceBranch; - } - - return this.mr.canPushToSourceBranch; - }, - canMerge() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.userPermissions.canMerge; - } - - return this.mr.canMerge; - }, - shouldBeRebased() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.stateData.shouldBeRebased; - } - - return this.mr.shouldBeRebased; + return this.$apollo.queries.userPermissions.loading && this.$apollo.queries.state.loading; }, showResolveButton() { - return this.mr.conflictResolutionPath && this.canPushToSourceBranch; + return ( + this.mr.conflictResolutionPath && + this.userPermissions.pushToSourceBranch && + !this.state.sourceBranchProtected + ); }, }, }; @@ -95,7 +67,7 @@ export default { </gl-skeleton-loader> </template> <template v-if="!isLoading"> - <span v-if="shouldBeRebased" class="bold gl-ml-0! gl-text-body!"> + <span v-if="state.shouldBeRebased" class="bold gl-ml-0! gl-text-body!"> {{ s__(`mrWidget|Merge blocked: fast-forward merge is not possible. To merge this request, first rebase locally.`) @@ -104,7 +76,7 @@ export default { <template v-else> <span class="bold gl-ml-0! gl-text-body! gl-flex-grow-1 gl-w-full gl-md-w-auto gl-mr-2"> {{ s__('mrWidget|Merge blocked: merge conflicts must be resolved.') }} - <span v-if="!canMerge"> + <span v-if="!userPermissions.canMerge"> {{ s__( `mrWidget|Users who can write to the source or target branches can resolve the conflicts.`, @@ -114,9 +86,9 @@ export default { </span> </template> </template> - <template v-if="!isLoading && !shouldBeRebased" #actions> + <template v-if="!isLoading && !state.shouldBeRebased" #actions> <gl-button - v-if="canMerge" + v-if="userPermissions.canMerge" size="small" variant="confirm" category="secondary" diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.vue index 214d1b49732..5e073bf7c04 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.vue @@ -1,7 +1,6 @@ <script> import { GlIcon, GlTooltipDirective, GlSprintf } from '@gitlab/ui'; import { sprintf } from '~/locale'; -import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import mergeRequestQueryVariablesMixin from '../../mixins/merge_request_query_variables'; import missingBranchQuery from '../../queries/states/missing_branch.query.graphql'; import { @@ -21,13 +20,10 @@ export default { GlSprintf, StatusIcon, }, - mixins: [glFeatureFlagMixin(), mergeRequestQueryVariablesMixin], + mixins: [mergeRequestQueryVariablesMixin], apollo: { state: { query: missingBranchQuery, - skip() { - return !this.glFeatures.mergeRequestWidgetGraphql; - }, variables() { return this.mergeRequestQueryVariables; }, @@ -44,15 +40,8 @@ export default { return { state: {} }; }, computed: { - sourceBranchRemoved() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return !this.state.sourceBranchExists; - } - - return this.mr.sourceBranchRemoved; - }, type() { - return this.sourceBranchRemoved ? 'source' : 'target'; + return this.mr.sourceBranchRemoved ? 'source' : 'target'; }, name() { return this.type === 'source' ? this.mr.sourceBranch : this.mr.targetBranch; diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_rebase.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_rebase.vue index f6843c1f3d3..4ae4edf02c3 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_rebase.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_rebase.vue @@ -2,7 +2,6 @@ import { GlButton, GlSkeletonLoader } from '@gitlab/ui'; import { createAlert } from '~/flash'; import { __ } from '~/locale'; -import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import toast from '~/vue_shared/plugins/global_toast'; import simplePoll from '~/lib/utils/simple_poll'; import eventHub from '../../event_hub'; @@ -15,9 +14,6 @@ export default { apollo: { state: { query: rebaseQuery, - skip() { - return !this.glFeatures.mergeRequestWidgetGraphql; - }, variables() { return this.mergeRequestQueryVariables; }, @@ -29,7 +25,7 @@ export default { GlButton, StateContainer, }, - mixins: [glFeatureFlagMixin(), mergeRequestQueryVariablesMixin], + mixins: [mergeRequestQueryVariablesMixin], props: { mr: { type: Object, @@ -49,28 +45,16 @@ export default { }, computed: { isLoading() { - return this.glFeatures.mergeRequestWidgetGraphql && this.$apollo.queries.state.loading; + return this.$apollo.queries.state.loading; }, rebaseInProgress() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.rebaseInProgress; - } - - return this.mr.rebaseInProgress; + return this.state.rebaseInProgress; }, canPushToSourceBranch() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.userPermissions.pushToSourceBranch; - } - - return this.mr.canPushToSourceBranch; + return this.state.userPermissions.pushToSourceBranch; }, targetBranch() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.targetBranch; - } - - return this.mr.targetBranch; + return this.state.targetBranch; }, status() { if (this.isLoading) { diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/new_ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/new_ready_to_merge.vue index 0b6aa104181..2db5c71be82 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/new_ready_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/new_ready_to_merge.vue @@ -8,7 +8,7 @@ export default { canMerge: { query: readyToMergeQuery, skip() { - return !this.mr || !window.gon?.features?.mergeRequestWidgetGraphql; + return !this.mr; }, variables() { return this.mergeRequestQueryVariables; 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 1298c1316e2..c54672cd0f8 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 @@ -19,7 +19,6 @@ import { secondsToMilliseconds } from '~/lib/utils/datetime_utility'; import simplePoll from '~/lib/utils/simple_poll'; import { __, s__, n__ } from '~/locale'; import SmartInterval from '~/smart_interval'; -import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import { helpPagePath } from '~/helpers/help_page_helper'; import { AUTO_MERGE_STRATEGIES, @@ -54,9 +53,6 @@ export default { apollo: { state: { query: readyToMergeQuery, - skip() { - return !this.glFeatures.mergeRequestWidgetGraphql; - }, variables() { return this.mergeRequestQueryVariables; }, @@ -123,14 +119,14 @@ export default { directives: { GlTooltip: GlTooltipDirective, }, - mixins: [readyToMergeMixin, glFeatureFlagMixin(), mergeRequestQueryVariablesMixin], + mixins: [readyToMergeMixin, mergeRequestQueryVariablesMixin], props: { mr: { type: Object, required: true }, service: { type: Object, required: true }, }, data() { return { - loading: this.glFeatures.mergeRequestWidgetGraphql, + loading: true, state: {}, removeSourceBranch: this.mr.shouldRemoveSourceBranch, isMakingRequest: false, @@ -148,7 +144,7 @@ export default { }, computed: { stateData() { - return this.glFeatures.mergeRequestWidgetGraphql ? this.state : this.mr; + return this.state; }, hasCI() { return this.stateData.hasCI || this.stateData.hasCi; @@ -157,35 +153,19 @@ export default { return !isEmpty(this.stateData.availableAutoMergeStrategies); }, pipeline() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.headPipeline; - } - - return this.mr.pipeline; + return this.state.headPipeline; }, isPipelineFailed() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return ['FAILED', 'CANCELED'].indexOf(this.pipeline?.status) !== -1; - } - - return this.mr.isPipelineFailed; + return ['FAILED', 'CANCELED'].indexOf(this.pipeline?.status) !== -1; }, showMergeFailedPipelineConfirmationDialog() { return this.status === PIPELINE_FAILED_STATE && this.isPipelineFailed; }, isMergeAllowed() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.mergeable; - } - - return this.mr.isMergeAllowed; + return this.state.mergeable || false; }, canRemoveSourceBranch() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.userPermissions.removeSourceBranch; - } - - return this.mr.canRemoveSourceBranch; + return this.state.userPermissions.removeSourceBranch; }, commitTemplateHelpPage() { return helpPagePath('user/project/merge_requests/commit_templates.md'); @@ -200,46 +180,24 @@ export default { return this.$options.i18n.mergeCommitTemplateHintText; }, commits() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.commitsWithoutMergeCommits.nodes; - } - - return this.mr.commits; + return this.state.commitsWithoutMergeCommits?.nodes; }, commitsCount() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.state.commitCount || 0; - } - - return this.mr.commitsCount; + return this.state.commitCount || 0; }, preferredAutoMergeStrategy() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return MergeRequestStore.getPreferredAutoMergeStrategy( - this.state.availableAutoMergeStrategies, - ); - } - - return this.mr.preferredAutoMergeStrategy; + return MergeRequestStore.getPreferredAutoMergeStrategy( + this.state.availableAutoMergeStrategies, + ); }, squashIsSelected() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.isSquashReadOnly ? this.state.squashOnMerge : this.state.squash; - } - - return this.mr.squashIsSelected; + return this.isSquashReadOnly ? this.state.squashOnMerge : this.state.squash; }, isPipelineActive() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.pipeline?.active || false; - } - - return this.mr.isPipelineActive; + return this.pipeline?.active || false; }, status() { - const ciStatus = this.glFeatures.mergeRequestWidgetGraphql - ? this.pipeline?.status.toLowerCase() - : this.mr.ciStatus; + const ciStatus = this.pipeline?.status?.toLowerCase(); if ((this.hasCI && !ciStatus) || this.hasPipelineMustSucceedConflict) { return PIPELINE_FAILED_STATE; @@ -304,11 +262,7 @@ export default { return this.squashBeforeMerge && this.shouldShowSquashBeforeMerge; }, shouldShowMergeEdit() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return !this.state.mergeRequestsFfOnlyEnabled; - } - - return !this.mr.ffOnlyEnabled; + return !this.state.mergeRequestsFfOnlyEnabled; }, shaMismatchLink() { return this.mr.mergeRequestDiffsPath; @@ -345,18 +299,15 @@ export default { }, }, mounted() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - eventHub.$on('ApprovalUpdated', this.updateGraphqlState); - eventHub.$on('MRWidgetUpdateRequested', this.updateGraphqlState); - eventHub.$on('mr.discussion.updated', this.updateGraphqlState); - } + eventHub.$on('ApprovalUpdated', this.updateGraphqlState); + eventHub.$on('MRWidgetUpdateRequested', this.updateGraphqlState); + eventHub.$on('mr.discussion.updated', this.updateGraphqlState); }, beforeDestroy() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - eventHub.$off('ApprovalUpdated', this.updateGraphqlState); - eventHub.$off('MRWidgetUpdateRequested', this.updateGraphqlState); - eventHub.$off('mr.discussion.updated', this.updateGraphqlState); - } + eventHub.$off('ApprovalUpdated', this.updateGraphqlState); + eventHub.$off('MRWidgetUpdateRequested', this.updateGraphqlState); + eventHub.$off('mr.discussion.updated', this.updateGraphqlState); + eventHub.$off('ApprovalUpdated', this.updateGraphqlState); if (this.pollingInterval) { this.pollingInterval.destroy(); @@ -391,9 +342,7 @@ export default { if (mergeImmediately) { this.isMergingImmediately = true; } - const latestSha = this.glFeatures.mergeRequestWidgetGraphql - ? this.state.diffHeadSha - : this.mr.latestSHA; + const latestSha = this.state.diffHeadSha; const options = { sha: latestSha || this.mr.sha, @@ -435,9 +384,7 @@ export default { this.mr.transitionStateMachine({ transition: MERGE_FAILURE }); } - if (this.glFeatures.mergeRequestWidgetGraphql) { - this.updateGraphqlState(); - } + this.updateGraphqlState(); this.isMakingRequest = false; }) @@ -521,7 +468,7 @@ export default { <template> <div data-testid="ready_to_merge_state" - class="gl-border-t-1 gl-border-t-solid gl-border-gray-100 gl-bg-gray-10 gl-pl-7 gl-rounded-bottom-left-base gl-rounded-bottom-right-base" + class="gl-border-t-1 gl-border-t-solid gl-border-gray-100 gl-bg-gray-10 gl-pl-7" > <div v-if="loading" class="mr-widget-body"> <div class="gl-w-full mr-ready-to-merge-loader"> @@ -538,13 +485,15 @@ export default { <div class="media-body"> <div class="mr-widget-body-controls gl-display-flex gl-align-items-center gl-flex-wrap"> <template v-if="shouldShowMergeControls"> - <div class="gl-display-flex gl-align-items-center gl-flex-wrap gl-w-full gl-mb-5"> + <div + class="gl-display-flex gl-sm-flex-direction-column gl-md-align-items-center gl-flex-wrap gl-w-full gl-md-pb-5" + > <gl-form-checkbox v-if="canRemoveSourceBranch" id="remove-source-branch-input" v-model="removeSourceBranch" :disabled="isRemoveSourceBranchButtonDisabled" - class="js-remove-source-branch-checkbox gl-display-flex gl-align-items-center gl-mr-5" + class="js-remove-source-branch-checkbox gl-display-flex gl-align-items-center gl-mr-5 gl-mb-3 gl-md-mb-0" > {{ __('Delete source branch') }} </gl-form-checkbox> @@ -555,37 +504,18 @@ export default { v-model="squashBeforeMerge" :help-path="mr.squashBeforeMergeHelpPath" :is-disabled="isSquashReadOnly" - class="gl-mr-5" + class="gl-mr-5 gl-mb-3 gl-md-mb-0" /> <gl-form-checkbox v-if="shouldShowSquashEdit || shouldShowMergeEdit" v-model="editCommitMessage" data-testid="widget_edit_commit_message" - class="gl-display-flex gl-align-items-center" + class="gl-display-flex gl-align-items-center gl-mb-3 gl-md-mb-0" > {{ __('Edit commit message') }} </gl-form-checkbox> </div> - <div class="gl-w-full gl-text-gray-500 gl-mb-5"> - <added-commit-message - :is-squash-enabled="squashBeforeMerge" - :is-fast-forward-enabled="!shouldShowMergeEdit" - :commits-count="commitsCount" - :target-branch="stateData.targetBranch" - /> - <template v-if="mr.relatedLinks"> - · - <related-links - :state="mr.state" - :related-links="mr.relatedLinks" - :show-assign-to-me="false" - :diverged-commits-count="mr.divergedCommitsCount" - :target-branch-path="mr.targetBranchPath" - class="mr-ready-merge-related-links gl-display-inline" - /> - </template> - </div> <div v-if="editCommitMessage" class="gl-w-full" data-testid="edit_commit_message"> <ul class="border-top commits-list flex-list gl-list-style-none gl-p-0 gl-pt-4"> <commit-edit @@ -625,6 +555,25 @@ export default { </li> </ul> </div> + <div class="gl-w-full gl-text-gray-500 gl-mb-3 gl-md-mb-0 gl-md-pb-5"> + <added-commit-message + :is-squash-enabled="squashBeforeMerge" + :is-fast-forward-enabled="!shouldShowMergeEdit" + :commits-count="commitsCount" + :target-branch="state.targetBranch" + /> + <template v-if="mr.relatedLinks"> + · + <related-links + :state="mr.state" + :related-links="mr.relatedLinks" + :show-assign-to-me="false" + :diverged-commits-count="mr.divergedCommitsCount" + :target-branch-path="mr.targetBranchPath" + class="mr-ready-merge-related-links gl-display-inline" + /> + </template> + </div> <gl-button-group class="gl-align-self-start"> <gl-button size="medium" @@ -702,7 +651,7 @@ export default { :is-squash-enabled="squashBeforeMerge" :is-fast-forward-enabled="!shouldShowMergeEdit" :commits-count="commitsCount" - :target-branch="stateData.targetBranch" + :target-branch="state.targetBranch" :merge-commit-path="mr.mergeCommitPath" /> </li> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/unresolved_discussions.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/unresolved_discussions.vue index 8f2e4eb2131..074758e33b2 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/unresolved_discussions.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/unresolved_discussions.vue @@ -26,30 +26,30 @@ export default { <template> <state-container :mr="mr" status="failed"> <span - class="gl-ml-3 gl-font-weight-bold gl-w-100 gl-flex-grow-1 gl-md-mr-3 gl-ml-0! gl-text-body!" + class="gl-ml-3 gl-font-weight-bold gl-w-100 gl-flex-grow-1 gl-md-mr-3 gl-ml-0! gl-text-body! gl-align-self-start" > {{ s__('mrWidget|Merge blocked: all threads must be resolved.') }} </span> <template #actions> <gl-button - v-if="mr.createIssueToResolveDiscussionsPath" - :href="mr.createIssueToResolveDiscussionsPath" - class="js-create-issue gl-align-self-start gl-vertical-align-top gl-mr-2" + data-testid="jump-to-first" + class="gl-align-self-start gl-vertical-align-top" size="small" variant="confirm" - category="secondary" + category="primary" + @click="jumpToFirstUnresolvedDiscussion" > - {{ s__('mrWidget|Create issue to resolve all threads') }} + {{ s__('mrWidget|Jump to first unresolved thread') }} </gl-button> <gl-button - data-testid="jump-to-first" - class="gl-mb-2 gl-md-mb-0 gl-align-self-start gl-vertical-align-top" + v-if="mr.createIssueToResolveDiscussionsPath" + :href="mr.createIssueToResolveDiscussionsPath" + class="js-create-issue gl-align-self-start gl-vertical-align-top" size="small" variant="confirm" - category="primary" - @click="jumpToFirstUnresolvedDiscussion" + category="secondary" > - {{ s__('mrWidget|Jump to first unresolved thread') }} + {{ s__('mrWidget|Create issue to resolve all threads') }} </gl-button> </template> </state-container> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue index dee27a5d5b5..ef5be0fbfcd 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue @@ -5,14 +5,12 @@ import $ from 'jquery'; import { createAlert } from '~/flash'; import toast from '~/vue_shared/plugins/global_toast'; import { __ } from '~/locale'; -import MergeRequest from '~/merge_request'; -import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; -import eventHub from '../../event_hub'; import mergeRequestQueryVariablesMixin from '../../mixins/merge_request_query_variables'; import getStateQuery from '../../queries/get_state.query.graphql'; import draftQuery from '../../queries/states/draft.query.graphql'; import removeDraftMutation from '../../queries/toggle_draft.mutation.graphql'; import StateContainer from '../state_container.vue'; +import eventHub from '../../event_hub'; export default { name: 'WorkInProgress', @@ -20,13 +18,10 @@ export default { GlButton, StateContainer, }, - mixins: [glFeatureFlagMixin(), mergeRequestQueryVariablesMixin], + mixins: [mergeRequestQueryVariablesMixin], apollo: { userPermissions: { query: draftQuery, - skip() { - return !this.glFeatures.mergeRequestWidgetGraphql; - }, variables() { return this.mergeRequestQueryVariables; }, @@ -35,7 +30,6 @@ export default { }, props: { mr: { type: Object, required: true }, - service: { type: Object, required: true }, }, data() { return { @@ -43,17 +37,8 @@ export default { isMakingRequest: false, }; }, - computed: { - canUpdate() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - return this.userPermissions.updateMergeRequest; - } - - return Boolean(this.mr.removeWIPPath); - }, - }, methods: { - removeDraftMutation() { + handleRemoveDraft() { const { mergeRequestQueryVariables } = this; this.isMakingRequest = true; @@ -138,26 +123,6 @@ export default { this.isMakingRequest = false; }); }, - handleRemoveDraft() { - if (this.glFeatures.mergeRequestWidgetGraphql) { - this.removeDraftMutation(); - } else { - this.isMakingRequest = true; - this.service - .removeWIP() - .then((res) => res.data) - .then((data) => { - eventHub.$emit('UpdateWidgetData', data); - MergeRequest.toggleDraftStatus(this.mr.title, true); - }) - .catch(() => { - this.isMakingRequest = false; - createAlert({ - message: __('Something went wrong. Please try again.'), - }); - }); - } - }, }, }; </script> @@ -169,12 +134,13 @@ export default { </span> <template #actions> <gl-button - v-if="canUpdate" + v-if="userPermissions.updateMergeRequest" size="small" :disabled="isMakingRequest" :loading="isMakingRequest" variant="confirm" class="js-remove-draft gl-md-ml-3 gl-align-self-start" + data-testid="removeWipButton" @click="handleRemoveDraft" > {{ s__('mrWidget|Mark as ready') }} |