summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-04-19 18:08:48 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2023-04-19 18:08:48 +0000
commitbb915e6375fe65053937c6bf8a7d0771dc9e4713 (patch)
tree1836cb9ec3d39d283707997f86f2edfc77c4e121 /app
parentb6d63c915a91aeb7a4437349c53e68be8c50cf4e (diff)
downloadgitlab-ce-bb915e6375fe65053937c6bf8a7d0771dc9e4713.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/projects/settings_service_desk/components/service_desk_root.vue2
-rw-r--r--app/assets/javascripts/projects/settings_service_desk/components/service_desk_setting.vue4
-rw-r--r--app/assets/javascripts/search/sidebar/components/app.vue3
-rw-r--r--app/assets/javascripts/search/sidebar/components/checkbox_filter.vue4
-rw-r--r--app/assets/javascripts/search/sidebar/components/confidentiality_filter.vue8
-rw-r--r--app/assets/javascripts/search/sidebar/components/language_filter/index.vue6
-rw-r--r--app/assets/javascripts/search/sidebar/components/radio_filter.vue4
-rw-r--r--app/assets/javascripts/search/sidebar/components/results_filters.vue8
-rw-r--r--app/assets/javascripts/search/sidebar/components/status_filter.vue8
-rw-r--r--app/assets/stylesheets/framework/flash.scss16
-rw-r--r--app/assets/stylesheets/framework/variables.scss1
-rw-r--r--app/assets/stylesheets/startup/startup-signin.scss7
-rw-r--r--app/graphql/resolvers/ci/runner_projects_resolver.rb15
-rw-r--r--app/graphql/resolvers/concerns/resolves_merge_requests.rb1
-rw-r--r--app/graphql/types/merge_request_type.rb4
-rw-r--r--app/views/search/_results_list.html.haml4
-rw-r--r--app/views/search/_results_status.html.haml4
17 files changed, 61 insertions, 38 deletions
diff --git a/app/assets/javascripts/projects/settings_service_desk/components/service_desk_root.vue b/app/assets/javascripts/projects/settings_service_desk/components/service_desk_root.vue
index b79b3fa4573..79ece99e6ec 100644
--- a/app/assets/javascripts/projects/settings_service_desk/components/service_desk_root.vue
+++ b/app/assets/javascripts/projects/settings_service_desk/components/service_desk_root.vue
@@ -8,7 +8,7 @@ import ServiceDeskSetting from './service_desk_setting.vue';
export default {
customEmailHelpPath: helpPagePath('/user/project/service_desk.html', {
- anchor: 'using-a-custom-email-address',
+ anchor: 'use-a-custom-email-address',
}),
components: {
GlAlert,
diff --git a/app/assets/javascripts/projects/settings_service_desk/components/service_desk_setting.vue b/app/assets/javascripts/projects/settings_service_desk/components/service_desk_setting.vue
index 85550e262e6..8af2e787740 100644
--- a/app/assets/javascripts/projects/settings_service_desk/components/service_desk_setting.vue
+++ b/app/assets/javascripts/projects/settings_service_desk/components/service_desk_setting.vue
@@ -102,12 +102,12 @@ export default {
},
emailSuffixHelpUrl() {
return helpPagePath('user/project/service_desk.html', {
- anchor: 'configuring-a-custom-email-address-suffix',
+ anchor: 'configure-a-custom-email-address-suffix',
});
},
customEmailAddressHelpUrl() {
return helpPagePath('user/project/service_desk.html', {
- anchor: 'using-a-custom-email-address',
+ anchor: 'use-a-custom-email-address',
});
},
},
diff --git a/app/assets/javascripts/search/sidebar/components/app.vue b/app/assets/javascripts/search/sidebar/components/app.vue
index 81a57e96b3c..317145d4cd1 100644
--- a/app/assets/javascripts/search/sidebar/components/app.vue
+++ b/app/assets/javascripts/search/sidebar/components/app.vue
@@ -25,6 +25,9 @@ export default {
showBlobFilter() {
return this.currentScope === SCOPE_BLOB;
},
+ showOldNavigation() {
+ return Boolean(this.currentScope);
+ },
},
};
</script>
diff --git a/app/assets/javascripts/search/sidebar/components/checkbox_filter.vue b/app/assets/javascripts/search/sidebar/components/checkbox_filter.vue
index 08a943d58f8..feff3f77dd2 100644
--- a/app/assets/javascripts/search/sidebar/components/checkbox_filter.vue
+++ b/app/assets/javascripts/search/sidebar/components/checkbox_filter.vue
@@ -27,7 +27,7 @@ export default {
},
},
computed: {
- ...mapState(['query']),
+ ...mapState(['query', 'useNewNavigation']),
...mapGetters(['queryLanguageFilters']),
dataFilters() {
return Object.values(this.filtersData?.filters || []);
@@ -69,7 +69,7 @@ export default {
<template>
<div class="gl-mx-5">
- <h5 class="gl-mt-0">{{ filtersData.header }}</h5>
+ <h5 class="gl-mt-0" :class="{ 'gl-font-sm': useNewNavigation }">{{ filtersData.header }}</h5>
<gl-form-checkbox-group v-model="selectedFilter">
<gl-form-checkbox
v-for="f in dataFilters"
diff --git a/app/assets/javascripts/search/sidebar/components/confidentiality_filter.vue b/app/assets/javascripts/search/sidebar/components/confidentiality_filter.vue
index e7aa3d61409..56e44d454a1 100644
--- a/app/assets/javascripts/search/sidebar/components/confidentiality_filter.vue
+++ b/app/assets/javascripts/search/sidebar/components/confidentiality_filter.vue
@@ -1,5 +1,7 @@
<script>
+import { mapState } from 'vuex';
import { confidentialFilterData } from '../constants/confidential_filter_data';
+import { HR_DEFAULT_CLASSES } from '../constants';
import RadioFilter from './radio_filter.vue';
export default {
@@ -7,13 +9,17 @@ export default {
components: {
RadioFilter,
},
+ computed: {
+ ...mapState(['useNewNavigation']),
+ },
confidentialFilterData,
+ HR_DEFAULT_CLASSES,
};
</script>
<template>
<div>
<radio-filter class="gl-px-5" :filter-data="$options.confidentialFilterData" />
- <hr class="gl-my-5 gl-mx-5 gl-border-gray-100" />
+ <hr v-if="!useNewNavigation" :class="$options.HR_DEFAULT_CLASSES" />
</div>
</template>
diff --git a/app/assets/javascripts/search/sidebar/components/language_filter/index.vue b/app/assets/javascripts/search/sidebar/components/language_filter/index.vue
index 4e3be9cdabc..40b50f657f0 100644
--- a/app/assets/javascripts/search/sidebar/components/language_filter/index.vue
+++ b/app/assets/javascripts/search/sidebar/components/language_filter/index.vue
@@ -38,7 +38,7 @@ export default {
reset: s__('GlobalSearch|Reset filters'),
},
computed: {
- ...mapState(['aggregations', 'sidebarDirty']),
+ ...mapState(['aggregations', 'sidebarDirty', 'useNewNavigation']),
...mapGetters([
'languageAggregationBuckets',
'currentUrlQueryHasLanguageFilters',
@@ -117,7 +117,7 @@ export default {
class="gl-pt-5 gl-md-pt-0 language-filter-checkbox"
@submit.prevent="submitQuery"
>
- <hr :class="dividerClasses" />
+ <hr v-if="!useNewNavigation" :class="dividerClasses" />
<div
v-if="!aggregations.error"
class="gl-overflow-x-hidden gl-overflow-y-auto"
@@ -147,7 +147,7 @@ export default {
</gl-button>
</div>
<div v-if="!aggregations.error">
- <hr :class="$options.HR_DEFAULT_CLASSES" />
+ <hr v-if="!useNewNavigation" :class="$options.HR_DEFAULT_CLASSES" />
<div
class="gl-display-flex gl-align-items-center gl-justify-content-space-between gl-mt-4 gl-mx-5"
>
diff --git a/app/assets/javascripts/search/sidebar/components/radio_filter.vue b/app/assets/javascripts/search/sidebar/components/radio_filter.vue
index 0733dc72d2e..477ba37dab7 100644
--- a/app/assets/javascripts/search/sidebar/components/radio_filter.vue
+++ b/app/assets/javascripts/search/sidebar/components/radio_filter.vue
@@ -16,7 +16,7 @@ export default {
},
},
computed: {
- ...mapState(['query']),
+ ...mapState(['query', 'useNewNavigation']),
...mapGetters(['currentScope']),
ANY() {
return this.filterData.filters.ANY;
@@ -56,7 +56,7 @@ export default {
<template>
<div>
- <h5 class="gl-mt-0">{{ filterData.header }}</h5>
+ <h5 class="gl-mt-0" :class="{ 'gl-font-sm': useNewNavigation }">{{ filterData.header }}</h5>
<gl-form-radio-group v-model="selectedFilter">
<gl-form-radio v-for="f in filtersArray" :key="f.value" :value="f.value">
{{ radioLabel(f) }}
diff --git a/app/assets/javascripts/search/sidebar/components/results_filters.vue b/app/assets/javascripts/search/sidebar/components/results_filters.vue
index 7d995f26684..24804baef44 100644
--- a/app/assets/javascripts/search/sidebar/components/results_filters.vue
+++ b/app/assets/javascripts/search/sidebar/components/results_filters.vue
@@ -1,6 +1,7 @@
<script>
import { GlButton, GlLink } from '@gitlab/ui';
import { mapActions, mapState, mapGetters } from 'vuex';
+import { HR_DEFAULT_CLASSES } from '../constants/index';
import { confidentialFilterData } from '../constants/confidential_filter_data';
import { stateFilterData } from '../constants/state_filter_data';
import ConfidentialityFilter from './confidentiality_filter.vue';
@@ -15,7 +16,7 @@ export default {
ConfidentialityFilter,
},
computed: {
- ...mapState(['urlQuery', 'sidebarDirty']),
+ ...mapState(['urlQuery', 'sidebarDirty', 'useNewNavigation']),
...mapGetters(['currentScope']),
showReset() {
return this.urlQuery.state || this.urlQuery.confidential;
@@ -26,6 +27,9 @@ export default {
showStatusFilter() {
return Object.values(stateFilterData.scopes).includes(this.currentScope);
},
+ hrClasses() {
+ return [...HR_DEFAULT_CLASSES, 'gl-display-none', 'gl-md-display-block'];
+ },
},
methods: {
...mapActions(['applyQuery', 'resetQuery']),
@@ -35,7 +39,7 @@ export default {
<template>
<form class="gl-pt-5 gl-md-pt-0" @submit.prevent="applyQuery">
- <hr class="gl-my-5 gl-mx-5 gl-border-gray-100 gl-display-none gl-md-display-block" />
+ <hr v-if="!useNewNavigation" :class="hrClasses" />
<status-filter v-if="showStatusFilter" />
<confidentiality-filter v-if="showConfidentialityFilter" />
<div class="gl-display-flex gl-align-items-center gl-mt-4 gl-px-5">
diff --git a/app/assets/javascripts/search/sidebar/components/status_filter.vue b/app/assets/javascripts/search/sidebar/components/status_filter.vue
index c3deabfcc26..44d6b537b7b 100644
--- a/app/assets/javascripts/search/sidebar/components/status_filter.vue
+++ b/app/assets/javascripts/search/sidebar/components/status_filter.vue
@@ -1,5 +1,7 @@
<script>
+import { mapState } from 'vuex';
import { stateFilterData } from '../constants/state_filter_data';
+import { HR_DEFAULT_CLASSES } from '../constants';
import RadioFilter from './radio_filter.vue';
export default {
@@ -7,13 +9,17 @@ export default {
components: {
RadioFilter,
},
+ computed: {
+ ...mapState(['useNewNavigation']),
+ },
stateFilterData,
+ HR_DEFAULT_CLASSES,
};
</script>
<template>
<div>
<radio-filter class="gl-px-5" :filter-data="$options.stateFilterData" />
- <hr class="gl-my-5 gl-mx-5 gl-border-gray-100" />
+ <hr v-if="!useNewNavigation" :class="$options.HR_DEFAULT_CLASSES" />
</div>
</template>
diff --git a/app/assets/stylesheets/framework/flash.scss b/app/assets/stylesheets/framework/flash.scss
index b63365e8159..6b4f1478978 100644
--- a/app/assets/stylesheets/framework/flash.scss
+++ b/app/assets/stylesheets/framework/flash.scss
@@ -9,7 +9,7 @@ $notification-box-shadow-color: rgba(0, 0, 0, 0.25);
&.sticky {
position: sticky;
- top: $flash-container-top;
+ top: $calc-application-header-height;
z-index: 251;
.flash-alert,
@@ -114,17 +114,3 @@ $notification-box-shadow-color: rgba(0, 0, 0, 0.25);
left: -50%;
}
}
-
-.with-system-header .flash-container.sticky {
- top: $flash-container-top + $system-header-height;
-}
-
-.with-performance-bar {
- .flash-container.sticky {
- top: $flash-container-top + $performance-bar-height;
- }
-
- &.with-system-header .flash-container.sticky {
- top: $flash-container-top + $performance-bar-height + $system-header-height;
- }
-}
diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss
index 32abd5d94a2..dba9cafbd71 100644
--- a/app/assets/stylesheets/framework/variables.scss
+++ b/app/assets/stylesheets/framework/variables.scss
@@ -482,7 +482,6 @@ $system-header-height: 16px;
$system-footer-height: $system-header-height;
$mr-review-bar-height: calc(2rem + 13px);
$flash-height: 52px;
-$flash-container-top: 48px;
$context-header-height: 60px;
$top-bar-height: 48px;
$home-panel-title-row-height: 64px;
diff --git a/app/assets/stylesheets/startup/startup-signin.scss b/app/assets/stylesheets/startup/startup-signin.scss
index fcdcab5caeb..cd768c3bbc0 100644
--- a/app/assets/stylesheets/startup/startup-signin.scss
+++ b/app/assets/stylesheets/startup/startup-signin.scss
@@ -672,6 +672,7 @@ body.navless {
:root {
--performance-bar-height: 0px;
--system-header-height: 0px;
+ --top-bar-height: 0px;
--system-footer-height: 0px;
--mr-review-bar-height: 0px;
}
@@ -702,7 +703,11 @@ hr {
}
.flash-container.sticky {
position: sticky;
- top: 48px;
+ top: calc(
+ var(--header-height, 48px) +
+ calc(var(--system-header-height) + var(--performance-bar-height)) +
+ var(--top-bar-height)
+ );
z-index: 251;
}
.flash-container.flash-container-page {
diff --git a/app/graphql/resolvers/ci/runner_projects_resolver.rb b/app/graphql/resolvers/ci/runner_projects_resolver.rb
index 13a493c42a5..625efc615c8 100644
--- a/app/graphql/resolvers/ci/runner_projects_resolver.rb
+++ b/app/graphql/resolvers/ci/runner_projects_resolver.rb
@@ -34,25 +34,30 @@ module Resolvers
.where(runner_id: runner_ids)
.pluck(:runner_id, :project_id)
- project_ids = plucked_runner_and_project_ids.collect { |_runner_id, project_id| project_id }.uniq
+ unique_project_ids = plucked_runner_and_project_ids.collect { |_runner_id, project_id| project_id }.uniq
projects = ProjectsFinder
.new(current_user: current_user,
params: project_finder_params(args),
- project_ids_relation: project_ids)
+ project_ids_relation: unique_project_ids)
.execute
projects = apply_lookahead(projects)
Preloaders::ProjectPolicyPreloader.new(projects, current_user).execute
+ sorted_project_ids = projects.map(&:id)
projects_by_id = projects.index_by(&:id)
# In plucked_runner_and_project_ids, first() represents the runner ID, and second() the project ID,
# so let's group the project IDs by runner ID
- runner_project_ids_by_runner_id =
+ project_ids_by_runner_id =
plucked_runner_and_project_ids
.group_by(&:first)
- .transform_values { |values| values.map(&:second).filter_map { |project_id| projects_by_id[project_id] } }
+ .transform_values { |runner_id_and_project_id| runner_id_and_project_id.map(&:second) }
+ # Reorder the project IDs according to the order in sorted_project_ids
+ sorted_project_ids_by_runner_id =
+ project_ids_by_runner_id.transform_values { |project_ids| sorted_project_ids.intersection(project_ids) }
runner_ids.each do |runner_id|
- runner_projects = runner_project_ids_by_runner_id[runner_id] || []
+ runner_project_ids = sorted_project_ids_by_runner_id[runner_id] || []
+ runner_projects = runner_project_ids.map { |id| projects_by_id[id] }
loader.call(runner_id, runner_projects)
end
diff --git a/app/graphql/resolvers/concerns/resolves_merge_requests.rb b/app/graphql/resolvers/concerns/resolves_merge_requests.rb
index c68e120ee24..b9326015ac0 100644
--- a/app/graphql/resolvers/concerns/resolves_merge_requests.rb
+++ b/app/graphql/resolvers/concerns/resolves_merge_requests.rb
@@ -40,6 +40,7 @@ module ResolvesMergeRequests
def preloads
{
assignees: [:assignees],
+ award_emoji: { award_emoji: [:awardable] },
reviewers: [:reviewers],
participants: MergeRequest.participant_includes,
author: [:author],
diff --git a/app/graphql/types/merge_request_type.rb b/app/graphql/types/merge_request_type.rb
index 94470290082..d73eaed8a0a 100644
--- a/app/graphql/types/merge_request_type.rb
+++ b/app/graphql/types/merge_request_type.rb
@@ -219,6 +219,10 @@ module Types
field :timelogs, Types::TimelogType.connection_type, null: false,
description: 'Timelogs on the merge request.'
+ field :award_emoji, Types::AwardEmojis::AwardEmojiType.connection_type,
+ null: true,
+ description: 'List of award emojis associated with the merge request.'
+
markdown_field :title_html, null: true
markdown_field :description_html, null: true
diff --git a/app/views/search/_results_list.html.haml b/app/views/search/_results_list.html.haml
index c36acaf9ea8..fcbf0ba4452 100644
--- a/app/views/search/_results_list.html.haml
+++ b/app/views/search/_results_list.html.haml
@@ -5,7 +5,9 @@
- elsif @search_objects.blank?
= render partial: "search/results/empty"
- else
- .gl-md-pl-5
+ - statusBarClass = !show_super_sidebar? ? 'gl-md-pl-5' : ''
+
+ .section{ class: statusBarClass }
- if @scope == 'commits'
%ul.content-list.commit-list
= render partial: "search/results/commit", collection: @search_objects
diff --git a/app/views/search/_results_status.html.haml b/app/views/search/_results_status.html.haml
index 4ab68caaf22..6fc07d35296 100644
--- a/app/views/search/_results_status.html.haml
+++ b/app/views/search/_results_status.html.haml
@@ -1,5 +1,7 @@
- return unless @search_service_presenter.show_results_status?
-.gl-md-pl-5
+- statusBarClass = !show_super_sidebar? ? 'gl-md-pl-5' : ''
+
+.section{ class: statusBarClass }
.search-results-status
.gl-display-flex.gl-flex-direction-column
.gl-p-5.gl-display-flex