diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-20 02:18:09 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-20 02:18:09 +0300 |
commit | 6ed4ec3e0b1340f96b7c043ef51d1b33bbe85fde (patch) | |
tree | dc4d20fe6064752c0bd323187252c77e0a89144b /app/assets/javascripts/header_search | |
parent | 9868dae7fc0655bd7ce4a6887d4e6d487690eeed (diff) |
Add latest changes from gitlab-org/gitlab@15-4-stable-eev15.4.0-rc42
Diffstat (limited to 'app/assets/javascripts/header_search')
4 files changed, 57 insertions, 23 deletions
diff --git a/app/assets/javascripts/header_search/constants.js b/app/assets/javascripts/header_search/constants.js index 3a20fb0216d..332ccee510f 100644 --- a/app/assets/javascripts/header_search/constants.js +++ b/app/assets/javascripts/header_search/constants.js @@ -26,11 +26,17 @@ export const GROUPS_CATEGORY = s__('GlobalSearch|Groups'); export const PROJECTS_CATEGORY = s__('GlobalSearch|Projects'); -export const ISSUES_CATEGORY = 'Recent issues'; +export const ISSUES_CATEGORY = s__('GlobalSearch|Recent issues'); -export const MERGE_REQUEST_CATEGORY = 'Recent merge requests'; +export const MERGE_REQUEST_CATEGORY = s__('GlobalSearch|Recent merge requests'); -export const RECENT_EPICS_CATEGORY = 'Recent epics'; +export const RECENT_EPICS_CATEGORY = s__('GlobalSearch|Recent epics'); + +export const IN_THIS_PROJECT_CATEGORY = s__('GlobalSearch|In this project'); + +export const SETTINGS_CATEGORY = s__('GlobalSearch|Settings'); + +export const HELP_CATEGORY = s__('GlobalSearch|Help'); export const LARGE_AVATAR_PX = 32; @@ -55,3 +61,16 @@ export const HEADER_INIT_EVENTS = ['input', 'focus']; export const IS_SEARCHING = 'is-searching'; export const IS_FOCUSED = 'is-focused'; export const IS_NOT_FOCUSED = 'is-not-focused'; + +export const DROPDOWN_ORDER = [ + MERGE_REQUEST_CATEGORY, + ISSUES_CATEGORY, + RECENT_EPICS_CATEGORY, + GROUPS_CATEGORY, + PROJECTS_CATEGORY, + IN_THIS_PROJECT_CATEGORY, + SETTINGS_CATEGORY, + HELP_CATEGORY, +]; + +export const FETCH_TYPES = ['generic', 'search']; diff --git a/app/assets/javascripts/header_search/store/actions.js b/app/assets/javascripts/header_search/store/actions.js index 3a86dcca409..a0f9e594506 100644 --- a/app/assets/javascripts/header_search/store/actions.js +++ b/app/assets/javascripts/header_search/store/actions.js @@ -1,10 +1,26 @@ +import { omitBy, isNil } from 'lodash'; +import { objectToQuery } from '~/lib/utils/url_utility'; import axios from '~/lib/utils/axios_utils'; +import { FETCH_TYPES } from '../constants'; import * as types from './mutation_types'; -export const fetchAutocompleteOptions = ({ commit, getters }) => { - commit(types.REQUEST_AUTOCOMPLETE); +export const autocompleteQuery = ({ state, fetchType }) => { + const query = omitBy( + { + term: state.search, + project_id: state.searchContext?.project?.id, + project_ref: state.searchContext?.ref, + filter: fetchType, + }, + isNil, + ); + + return `${state.autocompletePath}?${objectToQuery(query)}`; +}; + +const doFetch = ({ commit, state, fetchType }) => { return axios - .get(getters.autocompleteQuery) + .get(autocompleteQuery({ state, fetchType })) .then(({ data }) => { commit(types.RECEIVE_AUTOCOMPLETE_SUCCESS, data); }) @@ -13,6 +29,13 @@ export const fetchAutocompleteOptions = ({ commit, getters }) => { }); }; +export const fetchAutocompleteOptions = ({ commit, state }) => { + commit(types.REQUEST_AUTOCOMPLETE); + const promises = FETCH_TYPES.map((fetchType) => doFetch({ commit, state, fetchType })); + + return Promise.all(promises); +}; + export const clearAutocomplete = ({ commit }) => { commit(types.CLEAR_AUTOCOMPLETE); }; diff --git a/app/assets/javascripts/header_search/store/getters.js b/app/assets/javascripts/header_search/store/getters.js index da7bccd35c0..3da9d2cd961 100644 --- a/app/assets/javascripts/header_search/store/getters.js +++ b/app/assets/javascripts/header_search/store/getters.js @@ -14,6 +14,7 @@ import { PROJECTS_CATEGORY, GROUPS_CATEGORY, SEARCH_SHORTCUTS_MIN_CHARACTERS, + DROPDOWN_ORDER, } from '../constants'; export const searchQuery = (state) => { @@ -34,19 +35,6 @@ export const searchQuery = (state) => { return `${state.searchPath}?${objectToQuery(query)}`; }; -export const autocompleteQuery = (state) => { - const query = omitBy( - { - term: state.search, - project_id: state.searchContext?.project?.id, - project_ref: state.searchContext?.ref, - }, - isNil, - ); - - return `${state.autocompletePath}?${objectToQuery(query)}`; -}; - export const scopedIssuesPath = (state) => { return ( state.searchContext?.project_metadata?.issues_path || @@ -197,7 +185,9 @@ export const autocompleteGroupedSearchOptions = (state) => { } }); - return results; + return results.sort( + (a, b) => DROPDOWN_ORDER.indexOf(a.category) - DROPDOWN_ORDER.indexOf(b.category), + ); }; export const searchOptions = (state, getters) => { diff --git a/app/assets/javascripts/header_search/store/mutations.js b/app/assets/javascripts/header_search/store/mutations.js index 92948bec515..19b4d4ec330 100644 --- a/app/assets/javascripts/header_search/store/mutations.js +++ b/app/assets/javascripts/header_search/store/mutations.js @@ -8,9 +8,11 @@ export default { }, [types.RECEIVE_AUTOCOMPLETE_SUCCESS](state, data) { state.loading = false; - state.autocompleteOptions = data.map((d, i) => { - return { html_id: `autocomplete-${d.category}-${i}`, ...d }; - }); + state.autocompleteOptions = [...state.autocompleteOptions].concat( + data.map((d, i) => { + return { html_id: `autocomplete-${d.category}-${i}`, ...d }; + }), + ); state.autocompleteError = false; }, [types.RECEIVE_AUTOCOMPLETE_ERROR](state) { |