Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-11-17 03:12:37 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-11-17 03:12:37 +0300
commit049fd8333a1c87144f43680f69f472de89bb7743 (patch)
treef04a0c0dc4aa142a46ac7544c9decc8af9083764 /app
parentf9e0126cad562c7199e26e84a1540df3bc849e55 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/sidebar/components/assignees/assignees.vue6
-rw-r--r--app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue6
-rw-r--r--app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue6
-rw-r--r--app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue12
-rw-r--r--app/assets/javascripts/sidebar/components/attention_requested_toggle.vue (renamed from app/assets/javascripts/sidebar/components/attention_required_toggle.vue)20
-rw-r--r--app/assets/javascripts/sidebar/components/reviewers/reviewers.vue6
-rw-r--r--app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue6
-rw-r--r--app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue12
-rw-r--r--app/assets/javascripts/sidebar/queries/attention_required.mutation.graphql5
-rw-r--r--app/assets/javascripts/sidebar/queries/toggle_attention_requested.mutation.graphql7
-rw-r--r--app/assets/javascripts/sidebar/services/sidebar_service.js6
-rw-r--r--app/assets/javascripts/sidebar/sidebar_mediator.js15
-rw-r--r--app/assets/javascripts/vue_shared/components/settings/settings_block.vue17
-rw-r--r--app/graphql/mutations/merge_requests/toggle_attention_requested.rb (renamed from app/graphql/mutations/merge_requests/attention_required.rb)8
-rw-r--r--app/graphql/types/mutation_type.rb2
-rw-r--r--app/helpers/todos_helper.rb2
-rw-r--r--app/models/concerns/merge_request_reviewer_state.rb4
-rw-r--r--app/models/merge_request.rb2
-rw-r--r--app/models/todo.rb8
-rw-r--r--app/serializers/merge_request_user_entity.rb4
-rw-r--r--app/services/merge_requests/toggle_attention_requested_service.rb (renamed from app/services/merge_requests/attention_required_service.rb)16
-rw-r--r--app/services/todo_service.rb4
22 files changed, 96 insertions, 78 deletions
diff --git a/app/assets/javascripts/sidebar/components/assignees/assignees.vue b/app/assets/javascripts/sidebar/components/assignees/assignees.vue
index 968efab5c82..bdd014163a0 100644
--- a/app/assets/javascripts/sidebar/components/assignees/assignees.vue
+++ b/app/assets/javascripts/sidebar/components/assignees/assignees.vue
@@ -39,8 +39,8 @@ export default {
assignSelf() {
this.$emit('assign-self');
},
- toggleAttentionRequired(data) {
- this.$emit('toggle-attention-required', data);
+ toggleAttentionRequested(data) {
+ this.$emit('toggle-attention-requested', data);
},
},
};
@@ -65,7 +65,7 @@ export default {
v-else
:users="sortedAssigness"
:issuable-type="issuableType"
- @toggle-attention-required="toggleAttentionRequired"
+ @toggle-attention-requested="toggleAttentionRequested"
/>
</div>
</div>
diff --git a/app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue b/app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue
index c4856a801cf..a3379784bc1 100644
--- a/app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue
+++ b/app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue
@@ -33,8 +33,8 @@ export default {
},
},
methods: {
- toggleAttentionRequired(data) {
- this.$emit('toggle-attention-required', data);
+ toggleAttentionRequested(data) {
+ this.$emit('toggle-attention-requested', data);
},
},
};
@@ -66,7 +66,7 @@ export default {
:users="users"
:issuable-type="issuableType"
class="gl-text-gray-800 gl-mt-2 hide-collapsed"
- @toggle-attention-required="toggleAttentionRequired"
+ @toggle-attention-requested="toggleAttentionRequested"
/>
</div>
</template>
diff --git a/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue b/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue
index 6af33f0eec2..453dd1b0580 100644
--- a/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue
+++ b/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue
@@ -125,8 +125,8 @@ export default {
availability: this.assigneeAvailabilityStatus[username] || '',
}));
},
- toggleAttentionRequired(data) {
- this.mediator.toggleAttentionRequired('assignee', data);
+ toggleAttentionRequested(data) {
+ this.mediator.toggleAttentionRequested('assignee', data);
},
},
};
@@ -155,7 +155,7 @@ export default {
:editable="store.editable"
:issuable-type="issuableType"
@assign-self="assignSelf"
- @toggle-attention-required="toggleAttentionRequired"
+ @toggle-attention-requested="toggleAttentionRequested"
/>
</div>
</template>
diff --git a/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue b/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue
index 3bf0acf7216..8d5c3b2def3 100644
--- a/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue
+++ b/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue
@@ -2,7 +2,7 @@
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { IssuableType } from '~/issue_show/constants';
import { __, sprintf } from '~/locale';
-import AttentionRequiredToggle from '../attention_required_toggle.vue';
+import AttentionRequestedToggle from '../attention_requested_toggle.vue';
import AssigneeAvatarLink from './assignee_avatar_link.vue';
import UserNameWithStatus from './user_name_with_status.vue';
@@ -10,7 +10,7 @@ const DEFAULT_RENDER_COUNT = 5;
export default {
components: {
- AttentionRequiredToggle,
+ AttentionRequestedToggle,
AssigneeAvatarLink,
UserNameWithStatus,
},
@@ -82,8 +82,8 @@ export default {
}
return u?.status?.availability || '';
},
- toggleAttentionRequired(data) {
- this.$emit('toggle-attention-required', data);
+ toggleAttentionRequested(data) {
+ this.$emit('toggle-attention-requested', data);
},
},
};
@@ -113,11 +113,11 @@ export default {
}"
class="gl-display-inline-block"
>
- <attention-required-toggle
+ <attention-requested-toggle
v-if="showVerticalList && user.can_update_merge_request"
:user="user"
type="assignee"
- @toggle-attention-required="toggleAttentionRequired"
+ @toggle-attention-requested="toggleAttentionRequested"
/>
<assignee-avatar-link
:user="user"
diff --git a/app/assets/javascripts/sidebar/components/attention_required_toggle.vue b/app/assets/javascripts/sidebar/components/attention_requested_toggle.vue
index 90cb0bfcc3f..38ba468d197 100644
--- a/app/assets/javascripts/sidebar/components/attention_required_toggle.vue
+++ b/app/assets/javascripts/sidebar/components/attention_requested_toggle.vue
@@ -5,9 +5,9 @@ import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants';
export default {
i18n: {
- attentionRequiredReviewer: __('Request attention to review'),
- attentionRequiredAssignee: __('Request attention'),
- removeAttentionRequired: __('Remove attention request'),
+ attentionRequestedReviewer: __('Request attention to review'),
+ attentionRequestedAssignee: __('Request attention'),
+ removeAttentionRequested: __('Remove attention request'),
},
components: {
GlButton,
@@ -32,13 +32,13 @@ export default {
},
computed: {
tooltipTitle() {
- if (this.user.attention_required) {
- return this.$options.i18n.removeAttentionRequired;
+ if (this.user.attention_requested) {
+ return this.$options.i18n.removeAttentionRequested;
}
return this.type === 'reviewer'
- ? this.$options.i18n.attentionRequiredReviewer
- : this.$options.i18n.attentionRequiredAssignee;
+ ? this.$options.i18n.attentionRequestedReviewer
+ : this.$options.i18n.attentionRequestedAssignee;
},
},
methods: {
@@ -47,7 +47,7 @@ export default {
this.$root.$emit(BV_HIDE_TOOLTIP);
this.loading = true;
- this.$emit('toggle-attention-required', {
+ this.$emit('toggle-attention-requested', {
user: this.user,
callback: this.toggleAttentionRequiredComplete,
});
@@ -63,8 +63,8 @@ export default {
<span v-gl-tooltip.left.viewport="tooltipTitle">
<gl-button
:loading="loading"
- :variant="user.attention_required ? 'warning' : 'default'"
- :icon="user.attention_required ? 'star' : 'star-o'"
+ :variant="user.attention_requested ? 'warning' : 'default'"
+ :icon="user.attention_requested ? 'star' : 'star-o'"
:aria-label="tooltipTitle"
size="small"
category="tertiary"
diff --git a/app/assets/javascripts/sidebar/components/reviewers/reviewers.vue b/app/assets/javascripts/sidebar/components/reviewers/reviewers.vue
index 78f095dc77d..b07fd944ff9 100644
--- a/app/assets/javascripts/sidebar/components/reviewers/reviewers.vue
+++ b/app/assets/javascripts/sidebar/components/reviewers/reviewers.vue
@@ -49,8 +49,8 @@ export default {
requestReview(data) {
this.$emit('request-review', data);
},
- toggleAttentionRequired(data) {
- this.$emit('toggle-attention-required', data);
+ toggleAttentionRequested(data) {
+ this.$emit('toggle-attention-requested', data);
},
},
};
@@ -73,7 +73,7 @@ export default {
:root-path="rootPath"
:issuable-type="issuableType"
@request-review="requestReview"
- @toggle-attention-required="toggleAttentionRequired"
+ @toggle-attention-requested="toggleAttentionRequested"
/>
</div>
</div>
diff --git a/app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue b/app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue
index 8f33d4cd056..2ea63219e92 100644
--- a/app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue
+++ b/app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue
@@ -88,8 +88,8 @@ export default {
requestReview(data) {
this.mediator.requestReview(data);
},
- toggleAttentionRequired(data) {
- this.mediator.toggleAttentionRequired('reviewer', data);
+ toggleAttentionRequested(data) {
+ this.mediator.toggleAttentionRequested('reviewer', data);
},
},
};
@@ -109,7 +109,7 @@ export default {
:editable="store.editable"
:issuable-type="issuableType"
@request-review="requestReview"
- @toggle-attention-required="toggleAttentionRequired"
+ @toggle-attention-requested="toggleAttentionRequested"
/>
</div>
</template>
diff --git a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue
index adfb2491720..adaf1b65f3f 100644
--- a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue
+++ b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue
@@ -2,7 +2,7 @@
import { GlButton, GlTooltipDirective, GlIcon } from '@gitlab/ui';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { __, sprintf, s__ } from '~/locale';
-import AttentionRequiredToggle from '../attention_required_toggle.vue';
+import AttentionRequestedToggle from '../attention_requested_toggle.vue';
import ReviewerAvatarLink from './reviewer_avatar_link.vue';
const LOADING_STATE = 'loading';
@@ -16,7 +16,7 @@ export default {
GlButton,
GlIcon,
ReviewerAvatarLink,
- AttentionRequiredToggle,
+ AttentionRequestedToggle,
},
directives: {
GlTooltip: GlTooltipDirective,
@@ -80,8 +80,8 @@ export default {
this.loadingStates[userId] = null;
}
},
- toggleAttentionRequired(data) {
- this.$emit('toggle-attention-required', data);
+ toggleAttentionRequested(data) {
+ this.$emit('toggle-attention-requested', data);
},
},
LOADING_STATE,
@@ -97,11 +97,11 @@ export default {
:class="{ 'gl-mb-3': index !== users.length - 1 }"
data-testid="reviewer"
>
- <attention-required-toggle
+ <attention-requested-toggle
v-if="glFeatures.mrAttentionRequests && user.can_update_merge_request"
:user="user"
type="reviewer"
- @toggle-attention-required="toggleAttentionRequired"
+ @toggle-attention-requested="toggleAttentionRequested"
/>
<reviewer-avatar-link :user="user" :root-path="rootPath" :issuable-type="issuableType">
<div class="gl-ml-3 gl-line-height-normal gl-display-grid">
diff --git a/app/assets/javascripts/sidebar/queries/attention_required.mutation.graphql b/app/assets/javascripts/sidebar/queries/attention_required.mutation.graphql
deleted file mode 100644
index 2843291de97..00000000000
--- a/app/assets/javascripts/sidebar/queries/attention_required.mutation.graphql
+++ /dev/null
@@ -1,5 +0,0 @@
-mutation mergeRequestAttentionRequired($projectPath: ID!, $iid: String!, $userId: ID!) {
- mergeRequestAttentionRequired(input: { projectPath: $projectPath, iid: $iid, userId: $userId }) {
- errors
- }
-}
diff --git a/app/assets/javascripts/sidebar/queries/toggle_attention_requested.mutation.graphql b/app/assets/javascripts/sidebar/queries/toggle_attention_requested.mutation.graphql
new file mode 100644
index 00000000000..a9f4af6e1b9
--- /dev/null
+++ b/app/assets/javascripts/sidebar/queries/toggle_attention_requested.mutation.graphql
@@ -0,0 +1,7 @@
+mutation mergeRequestToggleAttentionRequested($projectPath: ID!, $iid: String!, $userId: ID!) {
+ mergeRequestToggleAttentionRequested(
+ input: { projectPath: $projectPath, iid: $iid, userId: $userId }
+ ) {
+ errors
+ }
+}
diff --git a/app/assets/javascripts/sidebar/services/sidebar_service.js b/app/assets/javascripts/sidebar/services/sidebar_service.js
index 455825c09f9..d8ab8f1c65b 100644
--- a/app/assets/javascripts/sidebar/services/sidebar_service.js
+++ b/app/assets/javascripts/sidebar/services/sidebar_service.js
@@ -5,7 +5,7 @@ import createGqClient, { fetchPolicies } from '~/lib/graphql';
import axios from '~/lib/utils/axios_utils';
import reviewerRereviewMutation from '../queries/reviewer_rereview.mutation.graphql';
import sidebarDetailsMRQuery from '../queries/sidebarDetailsMR.query.graphql';
-import attentionRequiredMutation from '../queries/attention_required.mutation.graphql';
+import toggleAttentionRequestedMutation from '../queries/toggle_attention_requested.mutation.graphql';
const queries = {
merge_request: sidebarDetailsMRQuery,
@@ -92,9 +92,9 @@ export default class SidebarService {
});
}
- attentionRequired(userId) {
+ toggleAttentionRequested(userId) {
return gqClient.mutate({
- mutation: attentionRequiredMutation,
+ mutation: toggleAttentionRequestedMutation,
variables: {
userId: convertToGraphQLId(TYPE_USER, `${userId}`),
projectPath: this.fullPath,
diff --git a/app/assets/javascripts/sidebar/sidebar_mediator.js b/app/assets/javascripts/sidebar/sidebar_mediator.js
index 0de4ae4569f..86580744ccc 100644
--- a/app/assets/javascripts/sidebar/sidebar_mediator.js
+++ b/app/assets/javascripts/sidebar/sidebar_mediator.js
@@ -63,30 +63,27 @@ export default class SidebarMediator {
.catch(() => callback(userId, false));
}
- async toggleAttentionRequired(type, { user, callback }) {
+ async toggleAttentionRequested(type, { user, callback }) {
try {
const isReviewer = type === 'reviewer';
const reviewerOrAssignee = isReviewer
? this.store.findReviewer(user)
: this.store.findAssignee(user);
- if (reviewerOrAssignee.attention_required) {
+ await this.service.toggleAttentionRequested(user.id);
+
+ if (reviewerOrAssignee.attention_requested) {
toast(
sprintf(__('Removed attention request from @%{username}'), {
username: user.username,
}),
);
} else {
- await this.service.attentionRequired(user.id);
-
toast(sprintf(__('Requested attention from @%{username}'), { username: user.username }));
}
- if (isReviewer) {
- this.store.updateReviewer(user.id, 'attention_required');
- } else {
- this.store.updateAssignee(user.id, 'attention_required');
- }
+ this.store.updateReviewer(user.id, 'attention_requested');
+ this.store.updateAssignee(user.id, 'attention_requested');
callback();
} catch (error) {
diff --git a/app/assets/javascripts/vue_shared/components/settings/settings_block.vue b/app/assets/javascripts/vue_shared/components/settings/settings_block.vue
index e75fedbb1d7..e68f0f31c13 100644
--- a/app/assets/javascripts/vue_shared/components/settings/settings_block.vue
+++ b/app/assets/javascripts/vue_shared/components/settings/settings_block.vue
@@ -24,10 +24,13 @@ export default {
},
},
data() {
+ const forceOpen = !this.collapsible || this.defaultExpanded;
return {
// Non-collapsible sections should always be expanded.
// For collapsible sections, fall back to defaultExpanded.
- sectionExpanded: !this.collapsible || this.defaultExpanded,
+ sectionExpanded: forceOpen,
+ initialised: forceOpen,
+ animating: false,
};
},
computed: {
@@ -53,7 +56,12 @@ export default {
toggleSectionExpanded() {
this.sectionExpanded = !this.sectionExpanded;
+ if (!this.initialised) {
+ this.initialised = true;
+ }
+
if (this.sectionExpanded) {
+ this.animating = true;
this.$refs.settingsContent.focus();
}
},
@@ -68,7 +76,10 @@ export default {
</script>
<template>
- <section class="settings" :class="{ 'no-animate': !slideAnimated, expanded: sectionExpanded }">
+ <section
+ class="settings"
+ :class="{ 'no-animate': !slideAnimated, expanded: sectionExpanded, animating }"
+ >
<div class="settings-header">
<h4>
<span
@@ -103,12 +114,14 @@ export default {
</p>
</div>
<div
+ v-show="initialised"
:id="settingsContentId"
ref="settingsContent"
:aria-labelledby="settingsLabelId"
tabindex="-1"
role="region"
class="settings-content"
+ @animationend="animating = false"
>
<slot></slot>
</div>
diff --git a/app/graphql/mutations/merge_requests/attention_required.rb b/app/graphql/mutations/merge_requests/toggle_attention_requested.rb
index 51e1891aad3..f316f23fb85 100644
--- a/app/graphql/mutations/merge_requests/attention_required.rb
+++ b/app/graphql/mutations/merge_requests/toggle_attention_requested.rb
@@ -2,20 +2,20 @@
module Mutations
module MergeRequests
- class AttentionRequired < Base
- graphql_name 'MergeRequestAttentionRequired'
+ class ToggleAttentionRequested < Base
+ graphql_name 'MergeRequestToggleAttentionRequested'
argument :user_id, ::Types::GlobalIDType[::User],
loads: Types::UserType,
required: true,
description: <<~DESC
- User ID for the user that has their attention requested.
+ User ID for the user to toggle attention requested.
DESC
def resolve(project_path:, iid:, user:)
merge_request = authorized_find!(project_path: project_path, iid: iid)
- result = ::MergeRequests::AttentionRequiredService.new(project: merge_request.project, current_user: current_user, merge_request: merge_request, user: user).execute
+ result = ::MergeRequests::ToggleAttentionRequestedService.new(project: merge_request.project, current_user: current_user, merge_request: merge_request, user: user).execute
{
merge_request: merge_request,
diff --git a/app/graphql/types/mutation_type.rb b/app/graphql/types/mutation_type.rb
index 5366283e55a..e8a952e9c61 100644
--- a/app/graphql/types/mutation_type.rb
+++ b/app/graphql/types/mutation_type.rb
@@ -68,7 +68,7 @@ module Types
mount_mutation Mutations::MergeRequests::SetDraft, calls_gitaly: true
mount_mutation Mutations::MergeRequests::SetAssignees
mount_mutation Mutations::MergeRequests::ReviewerRereview
- mount_mutation Mutations::MergeRequests::AttentionRequired, feature_flag: :mr_attention_requests
+ mount_mutation Mutations::MergeRequests::ToggleAttentionRequested, feature_flag: :mr_attention_requests
mount_mutation Mutations::Metrics::Dashboard::Annotations::Create
mount_mutation Mutations::Metrics::Dashboard::Annotations::Delete
mount_mutation Mutations::Notes::Create::Note, calls_gitaly: true
diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb
index b715993b6dc..79767ca76b7 100644
--- a/app/helpers/todos_helper.rb
+++ b/app/helpers/todos_helper.rb
@@ -24,7 +24,7 @@ module TodosHelper
when Todo::UNMERGEABLE then 'Could not merge'
when Todo::DIRECTLY_ADDRESSED then "directly addressed #{todo_action_subject(todo)} on"
when Todo::MERGE_TRAIN_REMOVED then "Removed from Merge Train:"
- when Todo::ATTENTION_REQUIRED then 'requested your attention on'
+ when Todo::ATTENTION_REQUESTED then 'requested your attention on'
end
end
diff --git a/app/models/concerns/merge_request_reviewer_state.rb b/app/models/concerns/merge_request_reviewer_state.rb
index ba3c55adf64..216a3a0bd64 100644
--- a/app/models/concerns/merge_request_reviewer_state.rb
+++ b/app/models/concerns/merge_request_reviewer_state.rb
@@ -7,7 +7,7 @@ module MergeRequestReviewerState
enum state: {
unreviewed: 0,
reviewed: 1,
- attention_required: 2
+ attention_requested: 2
}
validates :state,
@@ -18,7 +18,7 @@ module MergeRequestReviewerState
def set_state
if Feature.enabled?(:mr_attention_requests, self.merge_request&.project, default_enabled: :yaml)
- self.state = :attention_required
+ self.state = :attention_requested
end
end
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index d220f4b837a..0cd8f12088c 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -1945,7 +1945,7 @@ class MergeRequest < ApplicationRecord
end
end
- def attention_required_enabled?
+ def attention_requested_enabled?
Feature.enabled?(:mr_attention_requests, project, default_enabled: :yaml)
end
diff --git a/app/models/todo.rb b/app/models/todo.rb
index d0a6d1d9e23..742b8fd2a9d 100644
--- a/app/models/todo.rb
+++ b/app/models/todo.rb
@@ -18,7 +18,7 @@ class Todo < ApplicationRecord
DIRECTLY_ADDRESSED = 7
MERGE_TRAIN_REMOVED = 8 # This is an EE-only feature
REVIEW_REQUESTED = 9
- ATTENTION_REQUIRED = 10
+ ATTENTION_REQUESTED = 10
ACTION_NAMES = {
ASSIGNED => :assigned,
@@ -30,7 +30,7 @@ class Todo < ApplicationRecord
UNMERGEABLE => :unmergeable,
DIRECTLY_ADDRESSED => :directly_addressed,
MERGE_TRAIN_REMOVED => :merge_train_removed,
- ATTENTION_REQUIRED => :attention_required
+ ATTENTION_REQUESTED => :attention_requested
}.freeze
belongs_to :author, class_name: "User"
@@ -191,8 +191,8 @@ class Todo < ApplicationRecord
action == REVIEW_REQUESTED
end
- def attention_required?
- action == ATTENTION_REQUIRED
+ def attention_requested?
+ action == ATTENTION_REQUESTED
end
def merge_train_removed?
diff --git a/app/serializers/merge_request_user_entity.rb b/app/serializers/merge_request_user_entity.rb
index b527a9be5ad..97912656bbb 100644
--- a/app/serializers/merge_request_user_entity.rb
+++ b/app/serializers/merge_request_user_entity.rb
@@ -20,8 +20,8 @@ class MergeRequestUserEntity < ::API::Entities::UserBasic
find_reviewer_or_assignee(user, options)&.reviewed?
end
- expose :attention_required, if: satisfies(:present?, :allows_reviewers?, :attention_required_enabled?) do |user, options|
- find_reviewer_or_assignee(user, options)&.attention_required?
+ expose :attention_requested, if: satisfies(:present?, :allows_reviewers?, :attention_requested_enabled?) do |user, options|
+ find_reviewer_or_assignee(user, options)&.attention_requested?
end
expose :approved, if: satisfies(:present?) do |user, options|
diff --git a/app/services/merge_requests/attention_required_service.rb b/app/services/merge_requests/toggle_attention_requested_service.rb
index 54a549899fd..66c5d6fce5d 100644
--- a/app/services/merge_requests/attention_required_service.rb
+++ b/app/services/merge_requests/toggle_attention_requested_service.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module MergeRequests
- class AttentionRequiredService < MergeRequests::BaseService
+ class ToggleAttentionRequestedService < MergeRequests::BaseService
attr_accessor :merge_request, :user
def initialize(project:, current_user:, merge_request:, user:)
@@ -15,10 +15,12 @@ module MergeRequests
return error("Invalid permissions") unless can?(current_user, :update_merge_request, merge_request)
if reviewer || assignee
- reviewer&.update(state: :attention_required)
- assignee&.update(state: :attention_required)
+ update_state(reviewer)
+ update_state(assignee)
- notity_user
+ if reviewer&.attention_requested? || assignee&.attention_requested?
+ notity_user
+ end
success
else
@@ -29,7 +31,7 @@ module MergeRequests
private
def notity_user
- todo_service.create_attention_required_todo(merge_request, current_user, user)
+ todo_service.create_attention_requested_todo(merge_request, current_user, user)
end
def assignee
@@ -39,5 +41,9 @@ module MergeRequests
def reviewer
merge_request.find_reviewer(user)
end
+
+ def update_state(reviewer_or_assignee)
+ reviewer_or_assignee&.update(state: reviewer_or_assignee&.attention_requested? ? :reviewed : :attention_requested)
+ end
end
end
diff --git a/app/services/todo_service.rb b/app/services/todo_service.rb
index 10779e38b75..091f441831a 100644
--- a/app/services/todo_service.rb
+++ b/app/services/todo_service.rb
@@ -217,8 +217,8 @@ class TodoService
create_todos(reviewers, attributes)
end
- def create_attention_required_todo(target, author, users)
- attributes = attributes_for_todo(target.project, target, author, Todo::ATTENTION_REQUIRED)
+ def create_attention_requested_todo(target, author, users)
+ attributes = attributes_for_todo(target.project, target, author, Todo::ATTENTION_REQUESTED)
create_todos(users, attributes)
end