From c329499bc66ab290dd7fcb8b526afabb108057c5 Mon Sep 17 00:00:00 2001 From: maddievn Date: Wed, 7 Aug 2024 10:16:42 +0200 Subject: [PATCH] Add priority_searchable concern to select search type Changelog: changed EE: true --- app/assets/javascripts/search/index.js | 19 ++++- app/assets/javascripts/search/store/state.js | 4 ++ .../components/search_type_indicator.vue | 61 ++++++++++------ app/presenters/search_service_presenter.rb | 4 ++ app/views/search/show.html.haml | 12 +++- .../presenters/ee/search_service_presenter.rb | 5 ++ .../search/advanced_and_zoekt_searchable.rb | 27 ++++++++ ee/app/services/ee/search/global_service.rb | 9 +-- ee/app/services/ee/search/group_service.rb | 8 +-- ee/app/services/ee/search/project_service.rb | 12 ++-- ee/app/services/ee/search_service.rb | 6 +- .../controllers/ee/search_controller_spec.rb | 10 +-- .../search/elastic/project_search_spec.rb | 3 +- .../ee/search_service_presenter_spec.rb | 18 +++++ .../services/search/global_service_spec.rb | 36 ++++++++++ ee/spec/services/search/group_service_spec.rb | 36 ++++++++++ .../services/search/project_service_spec.rb | 46 +++++++++++++ ee/spec/services/search_service_spec.rb | 52 ++++++++------ .../components/search_type_indicator_spec.js | 69 ++++++++++--------- .../search_service_presenter_spec.rb | 6 ++ spec/views/search/show.html.haml_spec.rb | 18 ++++- 21 files changed, 351 insertions(+), 110 deletions(-) create mode 100644 ee/app/services/concerns/search/advanced_and_zoekt_searchable.rb diff --git a/app/assets/javascripts/search/index.js b/app/assets/javascripts/search/index.js index 5c546056e6010e..e68b21ef2ba3fb 100644 --- a/app/assets/javascripts/search/index.js +++ b/app/assets/javascripts/search/index.js @@ -1,5 +1,6 @@ import setHighlightClass from 'ee_else_ce/search/highlight_blob_search_result'; import { queryToObject } from '~/lib/utils/url_utility'; +import { parseBoolean } from '~/lib/utils/common_utils'; import syntaxHighlight from '~/syntax_highlight'; import { initSidebar } from './sidebar'; import { initSearchSort } from './sort'; @@ -13,8 +14,16 @@ const sidebarInitState = () => { const el = document.getElementById('js-search-sidebar'); if (!el) return {}; - const { navigationJson, searchType, searchLevel, groupInitialJson, projectInitialJson, ref } = - el.dataset; + const { + navigationJson, + searchType, + searchLevel, + advancedSearchAvailable, + zoektAvailable, + groupInitialJson, + projectInitialJson, + ref, + } = el.dataset; const navigationJsonParsed = JSON.parse(navigationJson); const groupInitialJsonParsed = JSON.parse(groupInitialJson); @@ -24,6 +33,8 @@ const sidebarInitState = () => { navigationJsonParsed, searchType, searchLevel, + advancedSearchAvailable: parseBoolean(advancedSearchAvailable), + zoektAvailable: parseBoolean(zoektAvailable), groupInitialJsonParsed, projectInitialJsonParsed, ref, @@ -48,6 +59,8 @@ export const initSearchApp = () => { navigationJsonParsed: navigation, searchType, searchLevel, + advancedSearchAvailable, + zoektAvailable, groupInitialJsonParsed: groupInitialJson, projectInitialJsonParsed: projectInitialJson, ref, @@ -60,6 +73,8 @@ export const initSearchApp = () => { navigation, searchType, searchLevel, + advancedSearchAvailable, + zoektAvailable, groupInitialJson, projectInitialJson, defaultBranchName, diff --git a/app/assets/javascripts/search/store/state.js b/app/assets/javascripts/search/store/state.js index 7dc4bc8a8bcb92..085f1715c4fb5a 100644 --- a/app/assets/javascripts/search/store/state.js +++ b/app/assets/javascripts/search/store/state.js @@ -6,6 +6,8 @@ const createState = ({ navigation, searchType, searchLevel, + advancedSearchAvailable, + zoektAvailable, groupInitialJson, projectInitialJson, defaultBranchName, @@ -31,6 +33,8 @@ const createState = ({ searchLabelString: '', searchType, searchLevel, + advancedSearchAvailable, + zoektAvailable, groupInitialJson, projectInitialJson, defaultBranchName, diff --git a/app/assets/javascripts/search/topbar/components/search_type_indicator.vue b/app/assets/javascripts/search/topbar/components/search_type_indicator.vue index baa093796104e8..511fde603b279f 100644 --- a/app/assets/javascripts/search/topbar/components/search_type_indicator.vue +++ b/app/assets/javascripts/search/topbar/components/search_type_indicator.vue @@ -46,7 +46,15 @@ export default { GlLink, }, computed: { - ...mapState(['searchType', 'defaultBranchName', 'query', 'searchLevel', 'query']), + ...mapState([ + 'searchType', + 'advancedSearchAvailable', + 'zoektAvailable', + 'defaultBranchName', + 'query', + 'searchLevel', + 'query', + ]), ...mapGetters(['currentScope']), isZoekt() { return this.searchType === ZOEKT_SEARCH_TYPE && this.currentScope === SCOPE_BLOB; @@ -67,7 +75,14 @@ export default { return BASIC_SEARCH_TYPE; }, - isEnabled() { + searchTypeAvailableTestId() { + if (this.zoektAvailable) { + return ZOEKT_SEARCH_TYPE; + } + + return ADVANCED_SEARCH_TYPE; + }, + useAdvancedOrZoekt() { const repoRef = this.query.repository_ref; switch (this.searchLevel) { case SEARCH_LEVEL_GLOBAL: @@ -83,11 +98,14 @@ export default { return false; } }, + isFallBacktoBasicSearch() { + return !this.useAdvancedOrZoekt && (this.advancedSearchAvailable || this.zoektAvailable); + }, isBasicSearch() { return this.searchType === BASIC_SEARCH_TYPE; }, disabledMessage() { - return this.isZoekt + return this.zoektAvailable ? this.$options.i18n.zoekt_disabled : this.$options.i18n.advanced_disabled; }, @@ -98,7 +116,7 @@ export default { return this.isZoekt ? this.$options.i18n.zoekt_enabled : this.$options.i18n.advanced_enabled; }, syntaxHelpUrl() { - return this.isZoekt + return this.zoektAvailable ? this.$options.zoektSyntaxHelpUrl : this.$options.advancedSearchSyntaxHelpUrl; }, @@ -108,27 +126,28 @@ export default {