diff options
Diffstat (limited to 'app/assets/javascripts/header_search/store/getters.js')
-rw-r--r-- | app/assets/javascripts/header_search/store/getters.js | 107 |
1 files changed, 69 insertions, 38 deletions
diff --git a/app/assets/javascripts/header_search/store/getters.js b/app/assets/javascripts/header_search/store/getters.js index 3f4e231ca55..a1348a8aa3f 100644 --- a/app/assets/javascripts/header_search/store/getters.js +++ b/app/assets/javascripts/header_search/store/getters.js @@ -1,3 +1,4 @@ +import { omitBy, isNil } from 'lodash'; import { objectToQuery } from '~/lib/utils/url_utility'; import { @@ -12,23 +13,29 @@ import { } from '../constants'; export const searchQuery = (state) => { - const query = { - search: state.search, - nav_source: 'navbar', - project_id: state.searchContext.project?.id, - group_id: state.searchContext.group?.id, - scope: state.searchContext.scope, - }; + const query = omitBy( + { + search: state.search, + nav_source: 'navbar', + project_id: state.searchContext.project?.id, + group_id: state.searchContext.group?.id, + scope: state.searchContext?.scope, + }, + isNil, + ); return `${state.searchPath}?${objectToQuery(query)}`; }; export const autocompleteQuery = (state) => { - const query = { - term: state.search, - project_id: state.searchContext.project?.id, - project_ref: state.searchContext.ref, - }; + const query = omitBy( + { + term: state.search, + project_id: state.searchContext.project?.id, + project_ref: state.searchContext?.ref, + }, + isNil, + ); return `${state.autocompletePath}?${objectToQuery(query)}`; }; @@ -54,22 +61,27 @@ export const defaultSearchOptions = (state, getters) => { return [ { + html_id: 'default-issues-assigned', title: MSG_ISSUES_ASSIGNED_TO_ME, url: `${getters.scopedIssuesPath}/?assignee_username=${userName}`, }, { + html_id: 'default-issues-created', title: MSG_ISSUES_IVE_CREATED, url: `${getters.scopedIssuesPath}/?author_username=${userName}`, }, { + html_id: 'default-mrs-assigned', title: MSG_MR_ASSIGNED_TO_ME, url: `${getters.scopedMRPath}/?assignee_username=${userName}`, }, { + html_id: 'default-mrs-reviewer', title: MSG_MR_IM_REVIEWER, url: `${getters.scopedMRPath}/?reviewer_username=${userName}`, }, { + html_id: 'default-mrs-created', title: MSG_MR_IVE_CREATED, url: `${getters.scopedMRPath}/?author_username=${userName}`, }, @@ -77,42 +89,43 @@ export const defaultSearchOptions = (state, getters) => { }; export const projectUrl = (state) => { - if (!state.searchContext.project || !state.searchContext.group) { - return null; - } - - const query = { - search: state.search, - nav_source: 'navbar', - project_id: state.searchContext.project.id, - group_id: state.searchContext.group.id, - scope: state.searchContext.scope, - }; + const query = omitBy( + { + search: state.search, + nav_source: 'navbar', + project_id: state.searchContext?.project?.id, + group_id: state.searchContext?.group?.id, + scope: state.searchContext?.scope, + }, + isNil, + ); return `${state.searchPath}?${objectToQuery(query)}`; }; export const groupUrl = (state) => { - if (!state.searchContext.group) { - return null; - } - - const query = { - search: state.search, - nav_source: 'navbar', - group_id: state.searchContext.group.id, - scope: state.searchContext.scope, - }; + const query = omitBy( + { + search: state.search, + nav_source: 'navbar', + group_id: state.searchContext?.group?.id, + scope: state.searchContext?.scope, + }, + isNil, + ); return `${state.searchPath}?${objectToQuery(query)}`; }; export const allUrl = (state) => { - const query = { - search: state.search, - nav_source: 'navbar', - scope: state.searchContext.scope, - }; + const query = omitBy( + { + search: state.search, + nav_source: 'navbar', + scope: state.searchContext?.scope, + }, + isNil, + ); return `${state.searchPath}?${objectToQuery(query)}`; }; @@ -122,6 +135,7 @@ export const scopedSearchOptions = (state, getters) => { if (state.searchContext.project) { options.push({ + html_id: 'scoped-in-project', scope: state.searchContext.project.name, description: MSG_IN_PROJECT, url: getters.projectUrl, @@ -130,6 +144,7 @@ export const scopedSearchOptions = (state, getters) => { if (state.searchContext.group) { options.push({ + html_id: 'scoped-in-group', scope: state.searchContext.group.name, description: MSG_IN_GROUP, url: getters.groupUrl, @@ -137,6 +152,7 @@ export const scopedSearchOptions = (state, getters) => { } options.push({ + html_id: 'scoped-in-all', description: MSG_IN_ALL_GITLAB, url: getters.allUrl, }); @@ -165,3 +181,18 @@ export const autocompleteGroupedSearchOptions = (state) => { return results; }; + +export const searchOptions = (state, getters) => { + if (!state.search) { + return getters.defaultSearchOptions; + } + + const sortedAutocompleteOptions = Object.values(getters.autocompleteGroupedSearchOptions).reduce( + (options, group) => { + return [...options, ...group.data]; + }, + [], + ); + + return getters.scopedSearchOptions.concat(sortedAutocompleteOptions); +}; |