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>2023-04-18 18:09:26 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-04-18 18:09:26 +0300
commitb6b9abb7cdb61f18d6fc5222e52486d7f6c482dc (patch)
tree1515d3bd2dec5e8f2705212f4548d3d8e6259a49 /app
parentba12560b3fcd6e24d0ab7e14ae71917a9a81f6aa (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/environments/components/kubernetes_pods.vue2
-rw-r--r--app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue28
-rw-r--r--app/assets/javascripts/work_items/components/work_item_actions.vue17
-rw-r--r--app/assets/stylesheets/framework/sidebar.scss18
-rw-r--r--app/controllers/projects/cycle_analytics_controller.rb11
-rw-r--r--app/helpers/sidebars_helper.rb4
-rw-r--r--app/presenters/project_presenter.rb2
-rw-r--r--app/views/profiles/emails/index.html.haml2
8 files changed, 73 insertions, 11 deletions
diff --git a/app/assets/javascripts/environments/components/kubernetes_pods.vue b/app/assets/javascripts/environments/components/kubernetes_pods.vue
index e43bc838708..1220347e440 100644
--- a/app/assets/javascripts/environments/components/kubernetes_pods.vue
+++ b/app/assets/javascripts/environments/components/kubernetes_pods.vue
@@ -97,7 +97,7 @@ export default {
<div
v-else-if="podStats && !error"
- class="gl-display-flex gl-flex-wrap-wrap gl-sm-flex-wrap-nowrap gl-mx-n3 gl-mt-n3"
+ class="gl-display-flex gl-flex-wrap-wrap gl-sm-flex-nowrap gl-mx-n3 gl-mt-n3"
>
<gl-single-stat
v-for="(stat, index) in podStats"
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 23570a374f0..99f9d5e872c 100644
--- a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue
+++ b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue
@@ -6,6 +6,7 @@ import ReviewerAvatarLink from './reviewer_avatar_link.vue';
const LOADING_STATE = 'loading';
const SUCCESS_STATE = 'success';
+const JUST_APPROVED = 'approved';
export default {
i18n: {
@@ -42,7 +43,7 @@ export default {
},
watch: {
users: {
- handler(users) {
+ handler(users, previousUsers) {
this.loadingStates = users.reduce(
(acc, user) => ({
...acc,
@@ -50,11 +51,35 @@ export default {
}),
this.loadingStates,
);
+ if (previousUsers) {
+ users.forEach((user) => {
+ const userPreviousState = previousUsers.find(({ id }) => id === user.id);
+ if (
+ userPreviousState &&
+ user.mergeRequestInteraction.approved &&
+ !userPreviousState.mergeRequestInteraction.approved
+ ) {
+ this.showApprovalAnimation(user.id);
+ }
+ });
+ }
},
immediate: true,
},
},
methods: {
+ showApprovalAnimation(userId) {
+ this.loadingStates[userId] = JUST_APPROVED;
+
+ setTimeout(() => {
+ this.loadingStates[userId] = null;
+ }, 1500);
+ },
+ approveAnimation(userId) {
+ return {
+ 'merge-request-approved-icon': this.loadingStates[userId] === JUST_APPROVED,
+ };
+ },
approvedByTooltipTitle(user) {
return sprintf(s__('MergeRequest|Approved by @%{username}'), user);
},
@@ -128,6 +153,7 @@ export default {
:title="approvedByTooltipTitle(user)"
name="status-success"
class="float-right gl-my-2 gl-ml-auto gl-text-green-500 gl-flex-shrink-0"
+ :class="approveAnimation(user.id)"
data-testid="approved"
/>
<gl-icon
diff --git a/app/assets/javascripts/work_items/components/work_item_actions.vue b/app/assets/javascripts/work_items/components/work_item_actions.vue
index 5dfae18b698..0e0c6bca802 100644
--- a/app/assets/javascripts/work_items/components/work_item_actions.vue
+++ b/app/assets/javascripts/work_items/components/work_item_actions.vue
@@ -86,6 +86,11 @@ export default {
default: false,
},
},
+ data() {
+ return {
+ initialSubscribed: this.subscribedToNotifications,
+ };
+ },
computed: {
i18n() {
return {
@@ -94,6 +99,16 @@ export default {
};
},
},
+ watch: {
+ subscribedToNotifications() {
+ /**
+ * To toggle the value if mutation fails, assign the
+ * subscribedToNotifications boolean value directly
+ * to data prop.
+ */
+ this.initialSubscribed = this.subscribedToNotifications;
+ },
+ },
methods: {
handleToggleWorkItemConfidentiality() {
this.track('click_toggle_work_item_confidentiality');
@@ -180,7 +195,7 @@ export default {
>
<div class="gl-px-5 gl-pb-2 gl-pt-1">
<gl-toggle
- :value="subscribedToNotifications"
+ v-model="initialSubscribed"
:label="$options.i18n.notifications"
:data-testid="$options.notificationsToggleTestId"
label-position="left"
diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss
index 7afbb7a4bed..946f2b28859 100644
--- a/app/assets/stylesheets/framework/sidebar.scss
+++ b/app/assets/stylesheets/framework/sidebar.scss
@@ -271,6 +271,24 @@
}
}
+.merge-request-approved-icon {
+ animation: approval-animate 350ms ease-in;
+}
+
+@include keyframes(approval-animate) {
+ 0% {
+ transform: scale(0);
+ }
+
+ 75% {
+ transform: scale(1.4);
+ }
+
+ 100% {
+ transform: scale(1);
+ }
+}
+
.assignee-grid,
.reviewer-grid {
[data-css-area='attention'] {
diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb
index f3dea88862f..da0bda19602 100644
--- a/app/controllers/projects/cycle_analytics_controller.rb
+++ b/app/controllers/projects/cycle_analytics_controller.rb
@@ -6,10 +6,10 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
include CycleAnalyticsParams
include GracefulTimeoutHandling
include ProductAnalyticsTracking
+ include Gitlab::Utils::StrongMemoize
extend ::Gitlab::Utils::Override
before_action :authorize_read_cycle_analytics!
- before_action :load_value_stream, only: :show
track_event :show,
name: 'p_analytics_valuestream',
@@ -51,12 +51,13 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
override :all_cycle_analytics_params
def all_cycle_analytics_params
- super.merge({ namespace: @project.project_namespace, value_stream: @value_stream })
+ super.merge({ namespace: @project.project_namespace, value_stream: value_stream })
end
- def load_value_stream
- @value_stream = Analytics::CycleAnalytics::ValueStream.build_default_value_stream(@project.project_namespace)
+ def value_stream
+ Analytics::CycleAnalytics::ValueStream.build_default_value_stream(@project.project_namespace)
end
+ strong_memoize_attr :value_stream
def cycle_analytics_json
{
@@ -74,3 +75,5 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
project
end
end
+
+Projects::CycleAnalyticsController.prepend_mod
diff --git a/app/helpers/sidebars_helper.rb b/app/helpers/sidebars_helper.rb
index bf223cfe41c..5bbc89a9d65 100644
--- a/app/helpers/sidebars_helper.rb
+++ b/app/helpers/sidebars_helper.rb
@@ -70,8 +70,8 @@ module SidebarsHelper
total_merge_requests_count: format_user_bar_count(user_merge_requests_counts[:total]),
create_new_menu_groups: create_new_menu_groups(group: group, project: project),
merge_request_menu: create_merge_request_menu(user),
- projects_path: projects_path,
- groups_path: groups_path,
+ projects_path: dashboard_projects_path,
+ groups_path: dashboard_groups_path,
support_path: support_url,
display_whats_new: display_whats_new?,
whats_new_most_recent_release_items_count: whats_new_most_recent_release_items_count,
diff --git a/app/presenters/project_presenter.rb b/app/presenters/project_presenter.rb
index c02f3021069..856eba5aadc 100644
--- a/app/presenters/project_presenter.rb
+++ b/app/presenters/project_presenter.rb
@@ -182,7 +182,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
AnchorData.new(
true,
- statistic_icon('deployments') +
+ statistic_icon('rocket-launch') +
n_('%{strong_start}%{release_count}%{strong_end} Release', '%{strong_start}%{release_count}%{strong_end} Releases', releases_count).html_safe % {
release_count: number_with_delimiter(releases_count),
strong_start: '<strong class="project-stat-value">'.html_safe,
diff --git a/app/views/profiles/emails/index.html.haml b/app/views/profiles/emails/index.html.haml
index ada2ea3ab67..53db00c1638 100644
--- a/app/views/profiles/emails/index.html.haml
+++ b/app/views/profiles/emails/index.html.haml
@@ -55,7 +55,7 @@
%li= s_('Profiles|Public email')
- if email.email == current_user.notification_email_or_default
%li= s_('Profiles|Notification email')
- .gl-display-flex.gl-justify-content-end.gl-align-items-flex-end.gl-flex-grow-1.gl-flex-wrap-wrap-reverse.gl-gap-3
+ .gl-display-flex.gl-justify-content-end.gl-align-items-flex-end.gl-flex-grow-1.gl-flex-wrap-reverse.gl-gap-3
- unless email.confirmed?
- confirm_title = "#{email.confirmation_sent_at ? _('Resend confirmation email') : _('Send confirmation email')}"
= link_to confirm_title, resend_confirmation_instructions_profile_email_path(email), method: :put, class: 'gl-button btn btn-sm btn-default'