From 703d6aa24b37ecd66a160dbd419567ca8df46966 Mon Sep 17 00:00:00 2001
From: Tomas Bulva <tbulva@gitlab.com>
Date: Thu, 18 Apr 2024 20:10:20 +0000
Subject: [PATCH] Hide archived filter toggle with selected project

Changelog: changed
---
 .../sidebar/components/blobs_filters.vue      |   5 +-
 .../sidebar/components/commits_filters.vue    |   7 +-
 .../sidebar/components/issues_filters.vue     |  28 ++---
 .../components/merge_requests_filters.vue     |  14 +--
 .../sidebar/components/milestones_filters.vue |   7 +-
 .../sidebar/components/notes_filters.vue      |   7 +-
 .../sidebar/components/project_filter.vue     |   2 +
 .../sidebar/components/wiki_blobs_filters.vue |   7 +-
 .../javascripts/search/store/getters.js       |   3 +
 .../sidebar/components/blobs_filters_spec.js  |  12 +++
 .../components/commits_filters_spec.js        |  34 +++++-
 .../search/sidebar/components/filters_spec.js | 102 ------------------
 .../sidebar/components/issues_filters_spec.js |  20 +---
 .../components/merge_requests_filters_spec.js |  10 +-
 .../components/milestones_filters_spec.js     |  28 ++++-
 .../sidebar/components/notes_filters_spec.js  |  34 +++++-
 .../sidebar/components/project_filter_spec.js |   2 +
 .../components/wiki_blobs_filters_spec.js     |  54 ++++++++++
 spec/frontend/search/store/getters_spec.js    |  11 ++
 19 files changed, 216 insertions(+), 171 deletions(-)
 delete mode 100644 spec/frontend/search/sidebar/components/filters_spec.js
 create mode 100644 spec/frontend/search/sidebar/components/wiki_blobs_filters_spec.js

diff --git a/app/assets/javascripts/search/sidebar/components/blobs_filters.vue b/app/assets/javascripts/search/sidebar/components/blobs_filters.vue
index c04224c0cb1f..f414e39a5b5f 100644
--- a/app/assets/javascripts/search/sidebar/components/blobs_filters.vue
+++ b/app/assets/javascripts/search/sidebar/components/blobs_filters.vue
@@ -1,6 +1,6 @@
 <script>
 // eslint-disable-next-line no-restricted-imports
-import { mapState } from 'vuex';
+import { mapState, mapGetters } from 'vuex';
 import { SEARCH_TYPE_ADVANCED } from '../constants';
 import LanguageFilter from './language_filter/index.vue';
 import ArchivedFilter from './archived_filter/index.vue';
@@ -15,6 +15,7 @@ export default {
   },
   computed: {
     ...mapState(['searchType']),
+    ...mapGetters(['showArchived']),
     showLanguageFilter() {
       return this.searchType === SEARCH_TYPE_ADVANCED;
     },
@@ -25,6 +26,6 @@ export default {
 <template>
   <filters-template>
     <language-filter v-if="showLanguageFilter" class="gl-mb-5" />
-    <archived-filter class="gl-mb-5" />
+    <archived-filter v-if="showArchived" class="gl-mb-5" />
   </filters-template>
 </template>
diff --git a/app/assets/javascripts/search/sidebar/components/commits_filters.vue b/app/assets/javascripts/search/sidebar/components/commits_filters.vue
index 4f9fdbe95517..cb267ec5c310 100644
--- a/app/assets/javascripts/search/sidebar/components/commits_filters.vue
+++ b/app/assets/javascripts/search/sidebar/components/commits_filters.vue
@@ -1,4 +1,6 @@
 <script>
+// eslint-disable-next-line no-restricted-imports
+import { mapGetters } from 'vuex';
 import ArchivedFilter from './archived_filter/index.vue';
 import FiltersTemplate from './filters_template.vue';
 
@@ -8,11 +10,14 @@ export default {
     ArchivedFilter,
     FiltersTemplate,
   },
+  computed: {
+    ...mapGetters(['showArchived']),
+  },
 };
 </script>
 
 <template>
   <filters-template>
-    <archived-filter class="gl-mb-5" />
+    <archived-filter v-if="showArchived" class="gl-mb-5" />
   </filters-template>
 </template>
diff --git a/app/assets/javascripts/search/sidebar/components/issues_filters.vue b/app/assets/javascripts/search/sidebar/components/issues_filters.vue
index d815b68b98a6..dd01c0fe3073 100644
--- a/app/assets/javascripts/search/sidebar/components/issues_filters.vue
+++ b/app/assets/javascripts/search/sidebar/components/issues_filters.vue
@@ -2,12 +2,8 @@
 // eslint-disable-next-line no-restricted-imports
 import { mapGetters, mapState } from 'vuex';
 import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
-import { SEARCH_TYPE_ADVANCED } from '../constants';
-import { confidentialFilterData } from './confidentiality_filter/data';
-import { statusFilterData } from './status_filter/data';
+import { SEARCH_TYPE_ADVANCED } from '~/search/sidebar/constants';
 import ConfidentialityFilter from './confidentiality_filter/index.vue';
-import { labelFilterData } from './label_filter/data';
-import { archivedFilterData } from './archived_filter/data';
 import LabelFilter from './label_filter/index.vue';
 import StatusFilter from './status_filter/index.vue';
 import ArchivedFilter from './archived_filter/index.vue';
@@ -25,22 +21,10 @@ export default {
   },
   mixins: [glFeatureFlagsMixin()],
   computed: {
-    ...mapGetters(['currentScope']),
+    ...mapGetters(['showArchived']),
     ...mapState(['searchType']),
-    showConfidentialityFilter() {
-      return Object.values(confidentialFilterData.scopes).includes(this.currentScope);
-    },
-    showStatusFilter() {
-      return Object.values(statusFilterData.scopes).includes(this.currentScope);
-    },
     showLabelFilter() {
-      return (
-        Object.values(labelFilterData.scopes).includes(this.currentScope) &&
-        this.searchType === SEARCH_TYPE_ADVANCED
-      );
-    },
-    showArchivedFilter() {
-      return archivedFilterData.scopes.includes(this.currentScope);
+      return this.searchType === SEARCH_TYPE_ADVANCED;
     },
   },
 };
@@ -48,9 +32,9 @@ export default {
 
 <template>
   <filters-template>
-    <status-filter v-if="showStatusFilter" class="gl-mb-5" />
-    <confidentiality-filter v-if="showConfidentialityFilter" class="gl-mb-5" />
+    <status-filter class="gl-mb-5" />
+    <confidentiality-filter class="gl-mb-5" />
     <label-filter v-if="showLabelFilter" class="gl-mb-5" />
-    <archived-filter v-if="showArchivedFilter" class="gl-mb-5" />
+    <archived-filter v-if="showArchived" class="gl-mb-5" />
   </filters-template>
 </template>
diff --git a/app/assets/javascripts/search/sidebar/components/merge_requests_filters.vue b/app/assets/javascripts/search/sidebar/components/merge_requests_filters.vue
index 18074db76034..c20b35d2c18c 100644
--- a/app/assets/javascripts/search/sidebar/components/merge_requests_filters.vue
+++ b/app/assets/javascripts/search/sidebar/components/merge_requests_filters.vue
@@ -1,10 +1,8 @@
 <script>
 // eslint-disable-next-line no-restricted-imports
 import { mapGetters } from 'vuex';
-import { statusFilterData } from './status_filter/data';
 import StatusFilter from './status_filter/index.vue';
 import FiltersTemplate from './filters_template.vue';
-import { archivedFilterData } from './archived_filter/data';
 import ArchivedFilter from './archived_filter/index.vue';
 
 export default {
@@ -15,20 +13,14 @@ export default {
     ArchivedFilter,
   },
   computed: {
-    ...mapGetters(['currentScope']),
-    showArchivedFilter() {
-      return archivedFilterData.scopes.includes(this.currentScope);
-    },
-    showStatusFilter() {
-      return Object.values(statusFilterData.scopes).includes(this.currentScope);
-    },
+    ...mapGetters(['showArchived']),
   },
 };
 </script>
 
 <template>
   <filters-template>
-    <status-filter v-if="showStatusFilter" class="gl-mb-5" />
-    <archived-filter v-if="showArchivedFilter" class="gl-mb-5" />
+    <status-filter class="gl-mb-5" />
+    <archived-filter v-if="showArchived" class="gl-mb-5" />
   </filters-template>
 </template>
diff --git a/app/assets/javascripts/search/sidebar/components/milestones_filters.vue b/app/assets/javascripts/search/sidebar/components/milestones_filters.vue
index 098e2980c3f7..169cd3b962c5 100644
--- a/app/assets/javascripts/search/sidebar/components/milestones_filters.vue
+++ b/app/assets/javascripts/search/sidebar/components/milestones_filters.vue
@@ -1,4 +1,6 @@
 <script>
+// eslint-disable-next-line no-restricted-imports
+import { mapGetters } from 'vuex';
 import ArchivedFilter from './archived_filter/index.vue';
 import FiltersTemplate from './filters_template.vue';
 
@@ -8,11 +10,14 @@ export default {
     ArchivedFilter,
     FiltersTemplate,
   },
+  computed: {
+    ...mapGetters(['showArchived']),
+  },
 };
 </script>
 
 <template>
   <filters-template>
-    <archived-filter class="gl-mb-5" />
+    <archived-filter v-if="showArchived" class="gl-mb-5" />
   </filters-template>
 </template>
diff --git a/app/assets/javascripts/search/sidebar/components/notes_filters.vue b/app/assets/javascripts/search/sidebar/components/notes_filters.vue
index 3a9f582d5546..90f614681885 100644
--- a/app/assets/javascripts/search/sidebar/components/notes_filters.vue
+++ b/app/assets/javascripts/search/sidebar/components/notes_filters.vue
@@ -1,4 +1,6 @@
 <script>
+// eslint-disable-next-line no-restricted-imports
+import { mapGetters } from 'vuex';
 import ArchivedFilter from './archived_filter/index.vue';
 import FiltersTemplate from './filters_template.vue';
 
@@ -8,11 +10,14 @@ export default {
     ArchivedFilter,
     FiltersTemplate,
   },
+  computed: {
+    ...mapGetters(['showArchived']),
+  },
 };
 </script>
 
 <template>
   <filters-template>
-    <archived-filter class="gl-mb-5" />
+    <archived-filter v-if="showArchived" class="gl-mb-5" />
   </filters-template>
 </template>
diff --git a/app/assets/javascripts/search/sidebar/components/project_filter.vue b/app/assets/javascripts/search/sidebar/components/project_filter.vue
index 76983644e605..ad1c97fbde4a 100644
--- a/app/assets/javascripts/search/sidebar/components/project_filter.vue
+++ b/app/assets/javascripts/search/sidebar/components/project_filter.vue
@@ -6,6 +6,7 @@ import { s__ } from '~/locale';
 import { visitUrl, setUrlParams } from '~/lib/utils/url_utility';
 import { ANY_OPTION, GROUP_DATA, PROJECT_DATA } from '~/search/sidebar/constants';
 import SearchableDropdown from './searchable_dropdown.vue';
+import { archivedFilterData } from './archived_filter/data';
 
 export default {
   name: 'ProjectFilter',
@@ -63,6 +64,7 @@ export default {
         [PROJECT_DATA.queryParam]: project.id,
         nav_source: null,
         scope: this.currentScope,
+        [archivedFilterData.filterParam]: null,
       };
 
       visitUrl(setUrlParams(queryParams));
diff --git a/app/assets/javascripts/search/sidebar/components/wiki_blobs_filters.vue b/app/assets/javascripts/search/sidebar/components/wiki_blobs_filters.vue
index b1f386d9f4fd..e0692dbafaa9 100644
--- a/app/assets/javascripts/search/sidebar/components/wiki_blobs_filters.vue
+++ b/app/assets/javascripts/search/sidebar/components/wiki_blobs_filters.vue
@@ -1,4 +1,6 @@
 <script>
+// eslint-disable-next-line no-restricted-imports
+import { mapGetters } from 'vuex';
 import ArchivedFilter from './archived_filter/index.vue';
 import FiltersTemplate from './filters_template.vue';
 
@@ -8,11 +10,14 @@ export default {
     ArchivedFilter,
     FiltersTemplate,
   },
+  computed: {
+    ...mapGetters(['showArchived']),
+  },
 };
 </script>
 
 <template>
   <filters-template>
-    <archived-filter class="gl-mb-5" />
+    <archived-filter v-if="showArchived" class="gl-mb-5" />
   </filters-template>
 </template>
diff --git a/app/assets/javascripts/search/store/getters.js b/app/assets/javascripts/search/store/getters.js
index de05e9b80b21..5fb6afb63274 100644
--- a/app/assets/javascripts/search/store/getters.js
+++ b/app/assets/javascripts/search/store/getters.js
@@ -3,6 +3,7 @@ import { languageFilterData } from '~/search/sidebar/components/language_filter/
 import { labelFilterData } from '~/search/sidebar/components/label_filter/data';
 import { formatSearchResultCount, addCountOverLimit } from '~/search/store/utils';
 
+import { PROJECT_DATA } from '~/search/sidebar/constants';
 import { GROUPS_LOCAL_STORAGE_KEY, PROJECTS_LOCAL_STORAGE_KEY, ICON_MAP } from './constants';
 
 const queryLabelFilters = (state) => state?.query?.[labelFilterData.filterParam] || [];
@@ -85,3 +86,5 @@ export const navigationItems = (state) =>
     pill_count: `${formatSearchResultCount(item?.count)}${addCountOverLimit(item?.count)}` || '',
     items: [],
   }));
+
+export const showArchived = (state) => !state.query?.[PROJECT_DATA.queryParam];
diff --git a/spec/frontend/search/sidebar/components/blobs_filters_spec.js b/spec/frontend/search/sidebar/components/blobs_filters_spec.js
index e42f182f4b83..3faab299c836 100644
--- a/spec/frontend/search/sidebar/components/blobs_filters_spec.js
+++ b/spec/frontend/search/sidebar/components/blobs_filters_spec.js
@@ -19,6 +19,7 @@ describe('GlobalSearch BlobsFilters', () => {
 
   const defaultGetters = {
     currentScope: () => 'blobs',
+    showArchived: () => true,
   };
 
   const createComponent = (initialState = { searchType: SEARCH_TYPE_ADVANCED }) => {
@@ -60,4 +61,15 @@ describe('GlobalSearch BlobsFilters', () => {
   it('renders ArchivedFilter', () => {
     expect(findArchivedFilter().exists()).toBe(true);
   });
+
+  describe('ShowArchived getter', () => {
+    beforeEach(() => {
+      defaultGetters.showArchived = () => false;
+      createComponent();
+    });
+
+    it('hides archived filter', () => {
+      expect(findArchivedFilter().exists()).toBe(false);
+    });
+  });
 });
diff --git a/spec/frontend/search/sidebar/components/commits_filters_spec.js b/spec/frontend/search/sidebar/components/commits_filters_spec.js
index cb47c6833efb..4752b8abfad0 100644
--- a/spec/frontend/search/sidebar/components/commits_filters_spec.js
+++ b/spec/frontend/search/sidebar/components/commits_filters_spec.js
@@ -1,18 +1,33 @@
 import { shallowMount } from '@vue/test-utils';
-import CommitsFilters from '~/search/sidebar/components/projects_filters.vue';
+import Vue from 'vue';
+// eslint-disable-next-line no-restricted-imports
+import Vuex from 'vuex';
+import CommitsFilters from '~/search/sidebar/components/commits_filters.vue';
 import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue';
 import FiltersTemplate from '~/search/sidebar/components/filters_template.vue';
 
+Vue.use(Vuex);
+
 describe('GlobalSearch CommitsFilters', () => {
   let wrapper;
 
-  const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter);
-  const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate);
+  const defaultGetters = {
+    showArchived: () => true,
+  };
 
   const createComponent = () => {
-    wrapper = shallowMount(CommitsFilters);
+    const store = new Vuex.Store({
+      getters: defaultGetters,
+    });
+
+    wrapper = shallowMount(CommitsFilters, {
+      store,
+    });
   };
 
+  const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter);
+  const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate);
+
   describe('Renders correctly', () => {
     beforeEach(() => {
       createComponent();
@@ -25,4 +40,15 @@ describe('GlobalSearch CommitsFilters', () => {
       expect(findFiltersTemplate().exists()).toBe(true);
     });
   });
+
+  describe('ShowArchived getter', () => {
+    beforeEach(() => {
+      defaultGetters.showArchived = () => false;
+      createComponent();
+    });
+
+    it('hides archived filter', () => {
+      expect(findArchivedFilter().exists()).toBe(false);
+    });
+  });
 });
diff --git a/spec/frontend/search/sidebar/components/filters_spec.js b/spec/frontend/search/sidebar/components/filters_spec.js
deleted file mode 100644
index d3c774929f52..000000000000
--- a/spec/frontend/search/sidebar/components/filters_spec.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import Vue from 'vue';
-// eslint-disable-next-line no-restricted-imports
-import Vuex from 'vuex';
-import { MOCK_QUERY } from 'jest/search/mock_data';
-import IssuesFilters from '~/search/sidebar/components/issues_filters.vue';
-import ConfidentialityFilter from '~/search/sidebar/components/confidentiality_filter/index.vue';
-import StatusFilter from '~/search/sidebar/components/status_filter/index.vue';
-
-Vue.use(Vuex);
-
-describe('GlobalSearchSidebarFilters', () => {
-  let wrapper;
-
-  const actionSpies = {
-    applyQuery: jest.fn(),
-    resetQuery: jest.fn(),
-  };
-
-  const defaultGetters = {
-    currentScope: () => 'issues',
-  };
-
-  const createComponent = (initialState) => {
-    const store = new Vuex.Store({
-      state: {
-        urlQuery: MOCK_QUERY,
-        ...initialState,
-      },
-      actions: actionSpies,
-      getters: defaultGetters,
-    });
-
-    wrapper = shallowMount(IssuesFilters, {
-      store,
-    });
-  };
-
-  const findStatusFilter = () => wrapper.findComponent(StatusFilter);
-  const findConfidentialityFilter = () => wrapper.findComponent(ConfidentialityFilter);
-
-  describe('Renders correctly', () => {
-    beforeEach(() => {
-      createComponent({ urlQuery: MOCK_QUERY });
-    });
-    it('renders StatusFilter', () => {
-      expect(findStatusFilter().exists()).toBe(true);
-    });
-
-    it('renders ConfidentialityFilter', () => {
-      expect(findConfidentialityFilter().exists()).toBe(true);
-    });
-  });
-
-  describe.each`
-    scope               | showFilter
-    ${'issues'}         | ${true}
-    ${'merge_requests'} | ${false}
-    ${'projects'}       | ${false}
-    ${'milestones'}     | ${false}
-    ${'users'}          | ${false}
-    ${'notes'}          | ${false}
-    ${'wiki_blobs'}     | ${false}
-    ${'blobs'}          | ${false}
-  `(`ConfidentialityFilter`, ({ scope, showFilter }) => {
-    beforeEach(() => {
-      defaultGetters.currentScope = () => scope;
-      createComponent();
-    });
-    afterEach(() => {
-      defaultGetters.currentScope = () => 'issues';
-    });
-
-    it(`does${showFilter ? '' : ' not'} render when scope is ${scope}`, () => {
-      expect(findConfidentialityFilter().exists()).toBe(showFilter);
-    });
-  });
-
-  describe.each`
-    scope               | showFilter
-    ${'issues'}         | ${true}
-    ${'merge_requests'} | ${true}
-    ${'projects'}       | ${false}
-    ${'milestones'}     | ${false}
-    ${'users'}          | ${false}
-    ${'notes'}          | ${false}
-    ${'wiki_blobs'}     | ${false}
-    ${'blobs'}          | ${false}
-  `(`StatusFilter`, ({ scope, showFilter }) => {
-    beforeEach(() => {
-      defaultGetters.currentScope = () => scope;
-      createComponent();
-    });
-    afterEach(() => {
-      defaultGetters.currentScope = () => 'issues';
-    });
-
-    it(`does${showFilter ? '' : ' not'} render when scope is ${scope}`, () => {
-      expect(findStatusFilter().exists()).toBe(showFilter);
-    });
-  });
-});
diff --git a/spec/frontend/search/sidebar/components/issues_filters_spec.js b/spec/frontend/search/sidebar/components/issues_filters_spec.js
index ce9c6c2bb0c3..ff5d770c5d5e 100644
--- a/spec/frontend/search/sidebar/components/issues_filters_spec.js
+++ b/spec/frontend/search/sidebar/components/issues_filters_spec.js
@@ -17,6 +17,7 @@ describe('GlobalSearch IssuesFilters', () => {
 
   const defaultGetters = {
     currentScope: () => 'issues',
+    showArchived: () => true,
   };
 
   const createComponent = ({ initialState = {} } = {}) => {
@@ -77,29 +78,18 @@ describe('GlobalSearch IssuesFilters', () => {
       expect(findLabelFilter().exists()).toBe(false);
     });
 
-    it("doesn't render ArchivedFilter", () => {
+    it('does render ArchivedFilter', () => {
       expect(findArchivedFilter().exists()).toBe(true);
     });
   });
 
-  describe('Renders correctly with wrong scope', () => {
+  describe('ShowArchived getter', () => {
     beforeEach(() => {
-      defaultGetters.currentScope = () => 'test';
+      defaultGetters.showArchived = () => false;
       createComponent();
     });
-    it("doesn't render StatusFilter", () => {
-      expect(findStatusFilter().exists()).toBe(false);
-    });
-
-    it("doesn't render ConfidentialityFilter", () => {
-      expect(findConfidentialityFilter().exists()).toBe(false);
-    });
-
-    it("doesn't render LabelFilter", () => {
-      expect(findLabelFilter().exists()).toBe(false);
-    });
 
-    it("doesn't render ArchivedFilter", () => {
+    it('hides archived filter', () => {
       expect(findArchivedFilter().exists()).toBe(false);
     });
   });
diff --git a/spec/frontend/search/sidebar/components/merge_requests_filters_spec.js b/spec/frontend/search/sidebar/components/merge_requests_filters_spec.js
index 8cd3cb45a203..45357d45ed02 100644
--- a/spec/frontend/search/sidebar/components/merge_requests_filters_spec.js
+++ b/spec/frontend/search/sidebar/components/merge_requests_filters_spec.js
@@ -15,6 +15,7 @@ describe('GlobalSearch MergeRequestsFilters', () => {
 
   const defaultGetters = {
     currentScope: () => 'merge_requests',
+    showArchived: () => true,
   };
 
   const createComponent = (initialState = {}) => {
@@ -63,16 +64,13 @@ describe('GlobalSearch MergeRequestsFilters', () => {
     });
   });
 
-  describe('Renders correctly with wrong scope', () => {
+  describe('ShowArchived getter', () => {
     beforeEach(() => {
-      defaultGetters.currentScope = () => 'test';
+      defaultGetters.showArchived = () => false;
       createComponent();
     });
-    it("doesn't render StatusFilter", () => {
-      expect(findStatusFilter().exists()).toBe(false);
-    });
 
-    it("doesn't render ArchivedFilter", () => {
+    it('hides archived filter', () => {
       expect(findArchivedFilter().exists()).toBe(false);
     });
   });
diff --git a/spec/frontend/search/sidebar/components/milestones_filters_spec.js b/spec/frontend/search/sidebar/components/milestones_filters_spec.js
index e7fcfb030f4d..6455fd59d603 100644
--- a/spec/frontend/search/sidebar/components/milestones_filters_spec.js
+++ b/spec/frontend/search/sidebar/components/milestones_filters_spec.js
@@ -1,16 +1,31 @@
 import { shallowMount } from '@vue/test-utils';
+import Vue from 'vue';
+// eslint-disable-next-line no-restricted-imports
+import Vuex from 'vuex';
 import MilestonesFilters from '~/search/sidebar/components/milestones_filters.vue';
 import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue';
 import FiltersTemplate from '~/search/sidebar/components/filters_template.vue';
 
+Vue.use(Vuex);
+
 describe('GlobalSearch MilestonesFilters', () => {
   let wrapper;
 
+  const defaultGetters = {
+    showArchived: () => true,
+  };
+
   const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter);
   const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate);
 
   const createComponent = () => {
-    wrapper = shallowMount(MilestonesFilters);
+    const store = new Vuex.Store({
+      getters: defaultGetters,
+    });
+
+    wrapper = shallowMount(MilestonesFilters, {
+      store,
+    });
   };
 
   describe('Renders correctly', () => {
@@ -25,4 +40,15 @@ describe('GlobalSearch MilestonesFilters', () => {
       expect(findFiltersTemplate().exists()).toBe(true);
     });
   });
+
+  describe('ShowArchived getter', () => {
+    beforeEach(() => {
+      defaultGetters.showArchived = () => false;
+      createComponent();
+    });
+
+    it('hides archived filter', () => {
+      expect(findArchivedFilter().exists()).toBe(false);
+    });
+  });
 });
diff --git a/spec/frontend/search/sidebar/components/notes_filters_spec.js b/spec/frontend/search/sidebar/components/notes_filters_spec.js
index 2fb8e731ef57..3d336329652b 100644
--- a/spec/frontend/search/sidebar/components/notes_filters_spec.js
+++ b/spec/frontend/search/sidebar/components/notes_filters_spec.js
@@ -1,18 +1,33 @@
 import { shallowMount } from '@vue/test-utils';
-import NotesFilters from '~/search/sidebar/components/projects_filters.vue';
+import Vue from 'vue';
+// eslint-disable-next-line no-restricted-imports
+import Vuex from 'vuex';
+import NotesFilters from '~/search/sidebar/components/notes_filters.vue';
 import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue';
 import FiltersTemplate from '~/search/sidebar/components/filters_template.vue';
 
+Vue.use(Vuex);
+
 describe('GlobalSearch ProjectsFilters', () => {
   let wrapper;
 
-  const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter);
-  const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate);
+  const defaultGetters = {
+    showArchived: () => true,
+  };
 
   const createComponent = () => {
-    wrapper = shallowMount(NotesFilters);
+    const store = new Vuex.Store({
+      getters: defaultGetters,
+    });
+
+    wrapper = shallowMount(NotesFilters, {
+      store,
+    });
   };
 
+  const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter);
+  const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate);
+
   describe('Renders correctly', () => {
     beforeEach(() => {
       createComponent();
@@ -25,4 +40,15 @@ describe('GlobalSearch ProjectsFilters', () => {
       expect(findFiltersTemplate().exists()).toBe(true);
     });
   });
+
+  describe('ShowArchived getter', () => {
+    beforeEach(() => {
+      defaultGetters.showArchived = () => false;
+      createComponent();
+    });
+
+    it('hides archived filter', () => {
+      expect(findArchivedFilter().exists()).toBe(false);
+    });
+  });
 });
diff --git a/spec/frontend/search/sidebar/components/project_filter_spec.js b/spec/frontend/search/sidebar/components/project_filter_spec.js
index 817ec77380f4..11ef6213d400 100644
--- a/spec/frontend/search/sidebar/components/project_filter_spec.js
+++ b/spec/frontend/search/sidebar/components/project_filter_spec.js
@@ -80,6 +80,7 @@ describe('ProjectFilter', () => {
 
         it('calls setUrlParams with null, no group id, nav_source null, then calls visitUrl', () => {
           expect(setUrlParams).toHaveBeenCalledWith({
+            include_archived: null,
             [PROJECT_DATA.queryParam]: null,
             nav_source: null,
             scope: CURRENT_SCOPE,
@@ -100,6 +101,7 @@ describe('ProjectFilter', () => {
         it('calls setUrlParams with project id, group id, nav_source null, then calls visitUrl', () => {
           expect(setUrlParams).toHaveBeenCalledWith({
             [GROUP_DATA.queryParam]: MOCK_PROJECT.namespace.id,
+            include_archived: null,
             [PROJECT_DATA.queryParam]: MOCK_PROJECT.id,
             nav_source: null,
             scope: CURRENT_SCOPE,
diff --git a/spec/frontend/search/sidebar/components/wiki_blobs_filters_spec.js b/spec/frontend/search/sidebar/components/wiki_blobs_filters_spec.js
new file mode 100644
index 000000000000..32ddf74bd267
--- /dev/null
+++ b/spec/frontend/search/sidebar/components/wiki_blobs_filters_spec.js
@@ -0,0 +1,54 @@
+import { shallowMount } from '@vue/test-utils';
+import Vue from 'vue';
+// eslint-disable-next-line no-restricted-imports
+import Vuex from 'vuex';
+import WikiBlobsFilters from '~/search/sidebar/components/wiki_blobs_filters.vue';
+import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue';
+import FiltersTemplate from '~/search/sidebar/components/filters_template.vue';
+
+Vue.use(Vuex);
+
+describe('GlobalSearch WikiBlobsFilters', () => {
+  let wrapper;
+
+  const defaultGetters = {
+    showArchived: () => true,
+  };
+
+  const createComponent = () => {
+    const store = new Vuex.Store({
+      getters: defaultGetters,
+    });
+
+    wrapper = shallowMount(WikiBlobsFilters, {
+      store,
+    });
+  };
+
+  const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter);
+  const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate);
+
+  describe('Renders correctly', () => {
+    beforeEach(() => {
+      createComponent();
+    });
+    it('renders ArchivedFilter', () => {
+      expect(findArchivedFilter().exists()).toBe(true);
+    });
+
+    it('renders FiltersTemplate', () => {
+      expect(findFiltersTemplate().exists()).toBe(true);
+    });
+  });
+
+  describe('ShowArchived getter', () => {
+    beforeEach(() => {
+      defaultGetters.showArchived = () => false;
+      createComponent();
+    });
+
+    it('hides archived filter', () => {
+      expect(findArchivedFilter().exists()).toBe(false);
+    });
+  });
+});
diff --git a/spec/frontend/search/store/getters_spec.js b/spec/frontend/search/store/getters_spec.js
index 8e988ce5c4a5..e6c0fd4e162c 100644
--- a/spec/frontend/search/store/getters_spec.js
+++ b/spec/frontend/search/store/getters_spec.js
@@ -153,4 +153,15 @@ describe('Global Search Store Getters', () => {
       expect(getters.unappliedNewLabels(state).map(({ key }) => key)).toStrictEqual(['6', '73']);
     });
   });
+  describe('showArchived', () => {
+    it('returns true project_id is NOT in query', () => {
+      state.query.project_id = undefined;
+      expect(getters.showArchived(state)).toBe(true);
+    });
+
+    it('returns false project_id is in query', () => {
+      state.query.project_id = 'test';
+      expect(getters.showArchived(state)).toBe(false);
+    });
+  });
 });
-- 
GitLab