diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-20 16:18:24 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-20 16:18:24 +0300 |
commit | 0653e08efd039a5905f3fa4f6e9cef9f5d2f799c (patch) | |
tree | 4dcc884cf6d81db44adae4aa99f8ec1233a41f55 /app/assets/javascripts/vue_merge_request_widget/components | |
parent | 744144d28e3e7fddc117924fef88de5d9674fe4c (diff) |
Add latest changes from gitlab-org/gitlab@14-3-stable-eev14.3.0-rc42
Diffstat (limited to 'app/assets/javascripts/vue_merge_request_widget/components')
12 files changed, 168 insertions, 20 deletions
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_related_links.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_related_links.vue index ac6368a3025..306026072a3 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_related_links.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_related_links.vue @@ -1,5 +1,4 @@ <script> -/* eslint-disable vue/no-v-html */ import { s__, n__ } from '~/locale'; export default { @@ -32,11 +31,16 @@ export default { </script> <template> <section class="mr-info-list gl-ml-7 gl-pb-5"> - <p v-if="relatedLinks.closing">{{ closesText }} <span v-html="relatedLinks.closing"></span></p> + <p v-if="relatedLinks.closing"> + {{ closesText }} + <span v-html="relatedLinks.closing /* eslint-disable-line vue/no-v-html */"></span> + </p> <p v-if="relatedLinks.mentioned"> {{ n__('mrWidget|Mentions issue', 'mrWidget|Mentions issues', relatedLinks.mentionedCount) }} - <span v-html="relatedLinks.mentioned"></span> + <span v-html="relatedLinks.mentioned /* eslint-disable-line vue/no-v-html */"></span> + </p> + <p v-if="relatedLinks.assignToMe"> + <span v-html="relatedLinks.assignToMe /* eslint-disable-line vue/no-v-html */"></span> </p> - <p v-if="relatedLinks.assignToMe"><span v-html="relatedLinks.assignToMe"></span></p> </section> </template> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_suggest_pipeline.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_suggest_pipeline.vue index d2581f57837..f3673005c45 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_suggest_pipeline.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_suggest_pipeline.vue @@ -98,7 +98,7 @@ export default { data-testid="add-pipeline-link" :data-track-property="humanAccess" :data-track-value="$options.SP_LINK_TRACK_VALUE" - :data-track-event="$options.SP_LINK_TRACK_EVENT" + :data-track-action="$options.SP_LINK_TRACK_EVENT" :data-track-label="$options.SP_TRACK_LABEL" > {{ content }} @@ -139,7 +139,7 @@ export default { :href="pipelinePath" :data-track-property="humanAccess" :data-track-value="$options.SP_SHOW_TRACK_VALUE" - :data-track-event="$options.SP_SHOW_TRACK_EVENT" + :data-track-action="$options.SP_SHOW_TRACK_EVENT" :data-track-label="$options.SP_TRACK_LABEL" > {{ __('Show me how to add a pipeline') }} diff --git a/app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue b/app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue index ebd2b5cd22d..e31e69d0f3a 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue @@ -39,7 +39,7 @@ export default { target="_blank" rel="noopener noreferrer nofollow" :class="cssClass" - data-track-event="open_review_app" + data-track-action="open_review_app" data-track-label="review_app" > {{ display.text }} <gl-icon class="fgray" name="external-link" /> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/commits_header.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/commits_header.vue index d331f1690f5..a55dba92e16 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/commits_header.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/commits_header.vue @@ -1,5 +1,5 @@ <script> -/* eslint-disable vue/no-v-html */ +/* eslint-disable @gitlab/require-string-literal-i18n-helpers */ import { GlButton } from '@gitlab/ui'; import { escape } from 'lodash'; import { __, n__, sprintf, s__ } from '~/locale'; @@ -89,7 +89,10 @@ export default { /> <span v-if="expanded">{{ __('Collapse') }}</span> <span v-else> - <span class="vertical-align-middle" v-html="message"></span> + <span + class="vertical-align-middle" + v-html="message /* eslint-disable-line vue/no-v-html */" + ></span> <gl-button variant="link" class="modify-message-button"> {{ modifyLinkMessage }} </gl-button> 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 new file mode 100644 index 00000000000..503ddf8a396 --- /dev/null +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/merge_checks_failed.vue @@ -0,0 +1,75 @@ +<script> +import { GlButton } from '@gitlab/ui'; +import { s__ } from '~/locale'; +import notesEventHub from '~/notes/event_hub'; +import StatusIcon from '../mr_widget_status_icon.vue'; + +export default { + i18n: { + pipelineFailed: s__( + 'mrWidget|The pipeline for this merge request did not complete. Push a new commit to fix the failure.', + ), + approvalNeeded: s__('mrWidget|You can only merge once this merge request is approved.'), + unresolvedDiscussions: s__('mrWidget|Merge blocked: all threads must be resolved.'), + }, + components: { + StatusIcon, + GlButton, + }, + props: { + mr: { + type: Object, + required: true, + }, + }, + computed: { + failedText() { + if (this.mr.isPipelineFailed) { + return this.$options.i18n.pipelineFailed; + } else if (this.mr.approvals && !this.mr.isApproved) { + return this.$options.i18n.approvalNeeded; + } else if (this.mr.hasMergeableDiscussionsState) { + return this.$options.i18n.unresolvedDiscussions; + } + + return null; + }, + }, + methods: { + jumpToFirstUnresolvedDiscussion() { + notesEventHub.$emit('jumpToFirstUnresolvedDiscussion'); + }, + }, +}; +</script> + +<template> + <div class="mr-widget-body media gl-flex-wrap"> + <status-icon status="warning" /> + <p class="media-body gl-m-0! gl-font-weight-bold gl-text-black-normal!"> + {{ failedText }} + <template v-if="failedText == $options.i18n.unresolvedDiscussions"> + <gl-button + class="gl-ml-3" + size="small" + variant="confirm" + data-testid="jumpToUnresolved" + @click="jumpToFirstUnresolvedDiscussion" + > + {{ s__('mrWidget|Jump to first unresolved thread') }} + </gl-button> + <gl-button + v-if="mr.createIssueToResolveDiscussionsPath" + :href="mr.createIssueToResolveDiscussionsPath" + class="gl-ml-3" + size="small" + variant="confirm" + category="secondary" + data-testid="resolveIssue" + > + {{ s__('mrWidget|Create issue to resolve all threads') }} + </gl-button> + </template> + </p> + </div> +</template> 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 22f41b43095..1976d3639a6 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 @@ -1,5 +1,4 @@ <script> -/* eslint-disable vue/no-v-html */ import { GlButton, GlSkeletonLoader } from '@gitlab/ui'; import { escape } from 'lodash'; import createFlash from '~/flash'; @@ -171,7 +170,7 @@ export default { v-if="!rebaseInProgress && !canPushToSourceBranch" class="gl-font-weight-bold gl-ml-0!" data-testid="rebase-message" - v-html="fastForwardMergeText" + v-html="fastForwardMergeText /* eslint-disable-line vue/no-v-html */" ></span> <div v-if="!rebaseInProgress && canPushToSourceBranch && !isMakingRequest" 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 new file mode 100644 index 00000000000..9a7743348ff --- /dev/null +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/new_ready_to_merge.vue @@ -0,0 +1,49 @@ +<script> +import mergeRequestQueryVariablesMixin from '../../mixins/merge_request_query_variables'; +import readyToMergeQuery from '../../queries/states/new_ready_to_merge.query.graphql'; +import StatusIcon from '../mr_widget_status_icon.vue'; + +export default { + apollo: { + canMerge: { + query: readyToMergeQuery, + skip() { + return !this.mr || !window.gon?.features?.mergeRequestWidgetGraphql; + }, + variables() { + return this.mergeRequestQueryVariables; + }, + update: (data) => data?.project?.mergeRequest?.userPermissions?.canMerge, + }, + }, + components: { + StatusIcon, + }, + mixins: [mergeRequestQueryVariablesMixin], + props: { + mr: { + type: Object, + required: true, + }, + }, + data() { + return { + canMerge: null, + }; + }, +}; +</script> + +<template> + <div class="mr-widget-body media"> + <status-icon status="success" /> + <p class="media-body gl-m-0! gl-font-weight-bold"> + <template v-if="canMerge"> + {{ __('Ready to merge!') }} + </template> + <template v-else> + {{ __('Ready to merge by members who can write to the target branch.') }} + </template> + </p> + </div> +</template> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/nothing_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/nothing_to_merge.vue index 01e0b91bd4a..7827c79cd31 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/nothing_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/nothing_to_merge.vue @@ -1,6 +1,5 @@ <script> -/* eslint-disable vue/no-v-html */ -import { GlButton, GlSprintf, GlLink } from '@gitlab/ui'; +import { GlButton, GlSprintf, GlLink, GlSafeHtmlDirective } from '@gitlab/ui'; import emptyStateSVG from 'icons/_mr_widget_empty_state.svg'; import { helpPagePath } from '~/helpers/help_page_helper'; @@ -11,6 +10,9 @@ export default { GlSprintf, GlLink, }, + directives: { + SafeHtml: GlSafeHtmlDirective, + }, props: { mr: { type: Object, @@ -21,6 +23,7 @@ export default { return { emptyStateSVG }; }, ciHelpPage: helpPagePath('/ci/quick_start/index.html'), + safeHtmlConfig: { ADD_TAGS: ['use'] }, }; </script> @@ -30,7 +33,7 @@ export default { <div class="artwork col-md-5 order-md-last col-12 text-center d-flex justify-content-center align-items-center" > - <span v-html="emptyStateSVG"></span> + <span v-safe-html:[$options.safeHtmlConfig]="emptyStateSVG"></span> </div> <div class="text col-md-7 order-md-first col-12"> <p class="highlight"> 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 f33f4d3fda0..7df65e995a5 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 @@ -28,6 +28,7 @@ import { CONFIRM, WARNING, MT_MERGE_STRATEGY, + PIPELINE_FAILED_STATE, } from '../../constants'; import eventHub from '../../event_hub'; import mergeRequestQueryVariablesMixin from '../../mixins/merge_request_query_variables'; @@ -39,7 +40,6 @@ import CommitsHeader from './commits_header.vue'; import SquashBeforeMerge from './squash_before_merge.vue'; const PIPELINE_RUNNING_STATE = 'running'; -const PIPELINE_FAILED_STATE = 'failed'; const PIPELINE_PENDING_STATE = 'pending'; const PIPELINE_SUCCESS_STATE = 'success'; @@ -105,6 +105,10 @@ export default { import( 'ee_component/vue_merge_request_widget/components/merge_immediately_confirmation_dialog.vue' ), + MergeTrainFailedPipelineConfirmationDialog: () => + import( + 'ee_component/vue_merge_request_widget/components/merge_train_failed_pipeline_confirmation_dialog.vue' + ), }, directives: { GlTooltip: GlTooltipDirective, @@ -125,6 +129,7 @@ export default { squashBeforeMerge: this.mr.squashIsSelected, isSquashReadOnly: this.mr.squashIsReadonly, squashCommitMessage: this.mr.squashCommitMessage, + isPipelineFailedModalVisible: false, }; }, computed: { @@ -327,7 +332,12 @@ export default { : this.mr.commitMessageWithDescription; this.commitMessage = includeDescription ? commitMessageWithDescription : commitMessage; }, - handleMergeButtonClick(useAutoMerge, mergeImmediately = false) { + handleMergeButtonClick(useAutoMerge, mergeImmediately = false, confirmationClicked = false) { + if (this.showFailedPipelineModal && !confirmationClicked) { + this.isPipelineFailedModalVisible = true; + return; + } + if (mergeImmediately) { this.isMergingImmediately = true; } @@ -386,7 +396,7 @@ export default { } }, onMergeImmediatelyConfirmation() { - this.handleMergeButtonClick(false, true); + this.handleMergeButtonClick(false, true, true); }, initiateMergePolling() { simplePoll( @@ -522,6 +532,11 @@ export default { @mergeImmediately="onMergeImmediatelyConfirmation" /> </gl-dropdown> + <merge-train-failed-pipeline-confirmation-dialog + :visible="isPipelineFailedModalVisible" + @startMergeTrain="onStartMergeTrainConfirmation" + @cancel="isPipelineFailedModalVisible = false" + /> </gl-button-group> <div v-if="shouldShowMergeControls" 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 c6ce29acb09..69e4df0ca11 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 @@ -46,7 +46,7 @@ export default { size="small" icon="issue-new" > - {{ s__('mrWidget|Resolve all threads in new issue') }} + {{ s__('mrWidget|Create issue to resolve all threads') }} </gl-button> </div> </div> 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 a1eb77479bd..393c599c7e8 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 @@ -124,7 +124,7 @@ export default { }, }) => { createFlash({ - message: __('The merge request can now be merged.'), + message: __('Marked as ready. Merging is now allowed.'), type: 'notice', }); $('.merge-request .detail-page-description .title').text(title); diff --git a/app/assets/javascripts/vue_merge_request_widget/components/terraform/terraform_plan.vue b/app/assets/javascripts/vue_merge_request_widget/components/terraform/terraform_plan.vue index 427ab0842ea..87a310efe78 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/terraform/terraform_plan.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/terraform/terraform_plan.vue @@ -104,7 +104,7 @@ export default { :href="plan.job_path" target="_blank" data-testid="terraform-report-link" - data-track-event="click_terraform_mr_plan_button" + data-track-action="click_terraform_mr_plan_button" data-track-label="mr_widget_terraform_mr_plan_button" data-track-property="terraform_mr_plan_button" class="btn btn-sm" |