diff --git a/app/assets/javascripts/search/sidebar/components/app.vue b/app/assets/javascripts/search/sidebar/components/app.vue index a2e857dc5e412b362c482609b9ecfeff5da628f2..532a66affd8406e79acbac17565bd2be5c08bb63 100644 --- a/app/assets/javascripts/search/sidebar/components/app.vue +++ b/app/assets/javascripts/search/sidebar/components/app.vue @@ -14,6 +14,7 @@ import { SCOPE_BLOB, SCOPE_PROJECTS, SCOPE_NOTES, + SCOPE_COMMITS, SEARCH_TYPE_ADVANCED, } from '../constants'; import IssuesFilters from './issues_filters.vue'; @@ -21,6 +22,7 @@ import MergeRequestsFilters from './merge_requests_filters.vue'; import BlobsFilters from './blobs_filters.vue'; import ProjectsFilters from './projects_filters.vue'; import NotesFilters from './notes_filters.vue'; +import CommitsFilters from './commits_filters.vue'; export default { name: 'GlobalSearchSidebar', @@ -35,6 +37,7 @@ export default { SidebarPortal, DomElementListener, SmallScreenDrawerNavigation, + CommitsFilters, }, mixins: [glFeatureFlagsMixin()], computed: { @@ -51,7 +54,6 @@ export default { return this.currentScope === SCOPE_BLOB && this.searchType === SEARCH_TYPE_ADVANCED; }, showProjectsFilters() { - // for now the feature flag is here. Since we have only one filter in projects scope return this.currentScope === SCOPE_PROJECTS; }, showNotesFilters() { @@ -61,6 +63,14 @@ export default { this.glFeatures.searchNotesHideArchivedProjects ); }, + showCommitsFilters() { + // for now, the feature flag is placed here. Since we have only one filter in commits scope + return ( + this.currentScope === SCOPE_COMMITS && + this.searchType === SEARCH_TYPE_ADVANCED && + this.glFeatures.searchCommitsHideArchivedProjects + ); + }, showScopeNavigation() { // showScopeNavigation refers to whether the scope navigation should be shown // while the legacy navigation is being used and there are no search results @@ -86,6 +96,7 @@ export default { <blobs-filters v-if="showBlobFilters" /> <projects-filters v-if="showProjectsFilters" /> <notes-filters v-if="showNotesFilters" /> + <commits-filters v-if="showCommitsFilters" /> </sidebar-portal> </section> @@ -100,6 +111,7 @@ export default { <blobs-filters v-if="showBlobFilters" /> <projects-filters v-if="showProjectsFilters" /> <notes-filters v-if="showNotesFilters" /> + <commits-filters v-if="showCommitsFilters" /> </div> <small-screen-drawer-navigation class="gl-lg-display-none"> <scope-legacy-navigation /> @@ -108,6 +120,7 @@ export default { <blobs-filters v-if="showBlobFilters" /> <projects-filters v-if="showProjectsFilters" /> <notes-filters v-if="showNotesFilters" /> + <commits-filters v-if="showCommitsFilters" /> </small-screen-drawer-navigation> </section> </template> diff --git a/app/assets/javascripts/search/sidebar/components/archived_filter/data.js b/app/assets/javascripts/search/sidebar/components/archived_filter/data.js index de73ca57adb382f629befe3b4feafe4d98d9b153..5cddf5e744f8ce8a1331f377db89141d2ad04181 100644 --- a/app/assets/javascripts/search/sidebar/components/archived_filter/data.js +++ b/app/assets/javascripts/search/sidebar/components/archived_filter/data.js @@ -11,6 +11,7 @@ const scopes = { MERGE_REQUESTS: 'merge_requests', NOTES: 'notes', BLOBS: 'blobs', + COMMITS: 'commits', }; const filterParam = 'include_archived'; diff --git a/app/assets/javascripts/search/sidebar/components/commits_filters.vue b/app/assets/javascripts/search/sidebar/components/commits_filters.vue new file mode 100644 index 0000000000000000000000000000000000000000..4f9fdbe955170c47b0a1298fb3e1793fea5b808a --- /dev/null +++ b/app/assets/javascripts/search/sidebar/components/commits_filters.vue @@ -0,0 +1,18 @@ +<script> +import ArchivedFilter from './archived_filter/index.vue'; +import FiltersTemplate from './filters_template.vue'; + +export default { + name: 'CommitsFilters', + components: { + ArchivedFilter, + FiltersTemplate, + }, +}; +</script> + +<template> + <filters-template> + <archived-filter class="gl-mb-5" /> + </filters-template> +</template> diff --git a/app/assets/javascripts/search/sidebar/constants/index.js b/app/assets/javascripts/search/sidebar/constants/index.js index e6808082185248ee75447d85294ac137db034c19..19df875c292855bd6a2daf2bcb323a0562d845b2 100644 --- a/app/assets/javascripts/search/sidebar/constants/index.js +++ b/app/assets/javascripts/search/sidebar/constants/index.js @@ -3,6 +3,7 @@ export const SCOPE_MERGE_REQUESTS = 'merge_requests'; export const SCOPE_BLOB = 'blobs'; export const SCOPE_PROJECTS = 'projects'; export const SCOPE_NOTES = 'notes'; +export const SCOPE_COMMITS = 'commits'; export const LABEL_DEFAULT_CLASSES = [ 'gl-display-flex', 'gl-flex-direction-row', diff --git a/ee/app/controllers/ee/search_controller.rb b/ee/app/controllers/ee/search_controller.rb index adc5a044ffd1adc728f5bcfa6988ee32d41db212..bb7fe85e0db165b8046fb32a24a99cf236e1d0e4 100644 --- a/ee/app/controllers/ee/search_controller.rb +++ b/ee/app/controllers/ee/search_controller.rb @@ -58,6 +58,10 @@ def search_rate_limited_endpoints push_frontend_feature_flag(:search_blobs_hide_archived_projects, current_user) end + before_action only: :show do + push_frontend_feature_flag(:search_commits_hide_archived_projects, current_user) + end + after_action :run_index_integrity_worker, only: :show, if: :no_results_for_group_or_project_blobs_advanced_search? end diff --git a/spec/frontend/search/sidebar/components/app_spec.js b/spec/frontend/search/sidebar/components/app_spec.js index 72c9537bd613de92072662b309f25b82978be5e3..8e23f9c16800307ef94e54322149ecbd9d837071 100644 --- a/spec/frontend/search/sidebar/components/app_spec.js +++ b/spec/frontend/search/sidebar/components/app_spec.js @@ -15,6 +15,7 @@ import MergeRequestsFilters from '~/search/sidebar/components/merge_requests_fil import BlobsFilters from '~/search/sidebar/components/blobs_filters.vue'; import ProjectsFilters from '~/search/sidebar/components/projects_filters.vue'; import NotesFilters from '~/search/sidebar/components/notes_filters.vue'; +import CommitsFilters from '~/search/sidebar/components/commits_filters.vue'; import ScopeLegacyNavigation from '~/search/sidebar/components/scope_legacy_navigation.vue'; import SmallScreenDrawerNavigation from '~/search/sidebar/components/small_screen_drawer_navigation.vue'; import ScopeSidebarNavigation from '~/search/sidebar/components/scope_sidebar_navigation.vue'; @@ -45,6 +46,7 @@ describe('GlobalSearchSidebar', () => { provide: { glFeatures: { searchNotesHideArchivedProjects: true, + searchCommitsHideArchivedProjects: true, }, }, }); @@ -56,6 +58,7 @@ describe('GlobalSearchSidebar', () => { const findBlobsFilters = () => wrapper.findComponent(BlobsFilters); const findProjectsFilters = () => wrapper.findComponent(ProjectsFilters); const findNotesFilters = () => wrapper.findComponent(NotesFilters); + const findCommitsFilters = () => wrapper.findComponent(CommitsFilters); const findScopeLegacyNavigation = () => wrapper.findComponent(ScopeLegacyNavigation); const findSmallScreenDrawerNavigation = () => wrapper.findComponent(SmallScreenDrawerNavigation); const findScopeSidebarNavigation = () => wrapper.findComponent(ScopeSidebarNavigation); @@ -82,6 +85,8 @@ describe('GlobalSearchSidebar', () => { ${'blobs'} | ${findBlobsFilters} | ${SEARCH_TYPE_ZOEKT} | ${false} ${'notes'} | ${findNotesFilters} | ${SEARCH_TYPE_BASIC} | ${false} ${'notes'} | ${findNotesFilters} | ${SEARCH_TYPE_ADVANCED} | ${true} + ${'commits'} | ${findCommitsFilters} | ${SEARCH_TYPE_BASIC} | ${false} + ${'commits'} | ${findCommitsFilters} | ${SEARCH_TYPE_ADVANCED} | ${true} `('with sidebar $scope scope:', ({ scope, filter, searchType, isShown }) => { beforeEach(() => { getterSpies.currentScope = jest.fn(() => scope); diff --git a/spec/frontend/search/sidebar/components/commits_filters_spec.js b/spec/frontend/search/sidebar/components/commits_filters_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..cb47c6833efb006e53baef477aaaeca3e1569d7b --- /dev/null +++ b/spec/frontend/search/sidebar/components/commits_filters_spec.js @@ -0,0 +1,28 @@ +import { shallowMount } from '@vue/test-utils'; +import CommitsFilters from '~/search/sidebar/components/projects_filters.vue'; +import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue'; +import FiltersTemplate from '~/search/sidebar/components/filters_template.vue'; + +describe('GlobalSearch CommitsFilters', () => { + let wrapper; + + const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter); + const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate); + + const createComponent = () => { + wrapper = shallowMount(CommitsFilters); + }; + + describe('Renders correctly', () => { + beforeEach(() => { + createComponent(); + }); + it('renders ArchivedFilter', () => { + expect(findArchivedFilter().exists()).toBe(true); + }); + + it('renders FiltersTemplate', () => { + expect(findFiltersTemplate().exists()).toBe(true); + }); + }); +});