diff --git a/app/assets/javascripts/search/topbar/components/app.vue b/app/assets/javascripts/search/topbar/components/app.vue index d0fcbb0d83bb9d704f4b78eadfd2db35994a2e13..22ebf99862001c5aed039c2f4630f16369b523fc 100644 --- a/app/assets/javascripts/search/topbar/components/app.vue +++ b/app/assets/javascripts/search/topbar/components/app.vue @@ -20,12 +20,12 @@ export default { }, mixins: [glFeatureFlagsMixin()], props: { - groupInitialData: { + groupInitialJson: { type: Object, required: false, default: () => ({}), }, - projectInitialData: { + projectInitialJson: { type: Object, required: false, default: () => ({}), @@ -72,11 +72,11 @@ export default { </div> <div v-if="showFilters" class="gl-mb-4 gl-lg-mb-0 gl-lg-mx-2"> <label class="gl-display-block">{{ __('Group') }}</label> - <group-filter :initial-data="groupInitialData" /> + <group-filter :initial-data="groupInitialJson" /> </div> <div v-if="showFilters" class="gl-mb-4 gl-lg-mb-0 gl-lg-mx-2"> <label class="gl-display-block">{{ __('Project') }}</label> - <project-filter :initial-data="projectInitialData" /> + <project-filter :initial-data="projectInitialJson" /> </div> </div> <hr v-if="hasVerticalNav" class="gl-mt-5 gl-mb-0 gl-border-gray-100" /> diff --git a/app/assets/javascripts/search/topbar/index.js b/app/assets/javascripts/search/topbar/index.js index 87316e10e8d498c01bec1c6a8f6fbc3cd6606b28..d6e16085c280609ca7bcd6426af20a3eef9b9921 100644 --- a/app/assets/javascripts/search/topbar/index.js +++ b/app/assets/javascripts/search/topbar/index.js @@ -11,10 +11,18 @@ export const initTopbar = (store) => { return false; } - let { groupInitialData, projectInitialData } = el.dataset; + const { + groupInitialJson, + projectInitialJson, + elasticsearchEnabled, + defaultBranchName, + } = el.dataset; - groupInitialData = JSON.parse(groupInitialData); - projectInitialData = JSON.parse(projectInitialData); + const groupInitialJsonParsed = JSON.parse(groupInitialJson); + const projectInitialJsonParsed = JSON.parse(projectInitialJson); + const elasticsearchEnabledParsed = elasticsearchEnabled + ? JSON.parse(elasticsearchEnabled) + : false; return new Vue({ el, @@ -22,8 +30,10 @@ export const initTopbar = (store) => { render(createElement) { return createElement(GlobalSearchTopbar, { props: { - groupInitialData, - projectInitialData, + groupInitialJson: groupInitialJsonParsed, + projectInitialJson: projectInitialJsonParsed, + elasticsearchEnabled: elasticsearchEnabledParsed, + defaultBranchName, }, }); }, diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 5351e3e9e770461a18e62facf6db10ec29e0b9e6..9fb7a1835972ab12a6cb7fec67a4d1be5918ffcc 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -32,7 +32,7 @@ def self.search_rate_limited_endpoints before_action only: :show do push_frontend_feature_flag(:search_page_vertical_nav, current_user) end - + before_action :elasticsearch_in_use, only: :show rescue_from ActiveRecord::QueryCanceled, with: :render_timeout layout 'search' @@ -118,6 +118,11 @@ def autocomplete def opensearch end + def elasticsearch_in_use + search_service.respond_to?(:use_elasticsearch?) && search_service.use_elasticsearch? + end + strong_memoize_attr :elasticsearch_in_use + private # overridden in EE diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml index 9d812e77ad470e68246d78c3bf8348ea7fd4eaab..c58f492f6332f62d5bc3e52f1a5d5d87857e62d2 100644 --- a/app/views/search/show.html.haml +++ b/app/views/search/show.html.haml @@ -20,7 +20,7 @@ = render_if_exists 'search/form_elasticsearch', attrs: { class: 'mb-2 mb-sm-0 align-self-center' } .gl-mt-3 - #js-search-topbar{ data: { "group-initial-data": group_attributes.to_json, "project-initial-data": project_attributes.to_json } } + #js-search-topbar{ data: { "group-initial-json": group_attributes.to_json, "project-initial-json": project_attributes.to_json, "elasticsearch-enabled": @elasticsearch_in_use.to_s, "default-branch-name": @project&.default_branch } } - if @search_term - if Feature.disabled?(:search_page_vertical_nav, current_user) = render 'search/category'