debian-mirror-gitlab/app/assets/javascripts/header_search/store/getters.js

211 lines
5.3 KiB
JavaScript
Raw Normal View History

2022-01-26 12:08:38 +05:30
import { omitBy, isNil } from 'lodash';
2021-11-11 11:23:49 +05:30
import { objectToQuery } from '~/lib/utils/url_utility';
import {
MSG_ISSUES_ASSIGNED_TO_ME,
MSG_ISSUES_IVE_CREATED,
MSG_MR_ASSIGNED_TO_ME,
MSG_MR_IM_REVIEWER,
MSG_MR_IVE_CREATED,
MSG_IN_PROJECT,
MSG_IN_GROUP,
MSG_IN_ALL_GITLAB,
} from '../constants';
export const searchQuery = (state) => {
2022-01-26 12:08:38 +05:30
const query = omitBy(
{
search: state.search,
nav_source: 'navbar',
2022-05-07 20:08:51 +05:30
project_id: state.searchContext?.project?.id,
group_id: state.searchContext?.group?.id,
2022-01-26 12:08:38 +05:30
scope: state.searchContext?.scope,
2022-05-07 20:08:51 +05:30
snippets: state.searchContext?.for_snippets ? true : null,
search_code: state.searchContext?.code_search ? true : null,
repository_ref: state.searchContext?.ref,
2022-01-26 12:08:38 +05:30
},
isNil,
);
2021-11-11 11:23:49 +05:30
return `${state.searchPath}?${objectToQuery(query)}`;
};
2021-11-18 22:05:49 +05:30
export const autocompleteQuery = (state) => {
2022-01-26 12:08:38 +05:30
const query = omitBy(
{
term: state.search,
2022-05-07 20:08:51 +05:30
project_id: state.searchContext?.project?.id,
2022-01-26 12:08:38 +05:30
project_ref: state.searchContext?.ref,
},
isNil,
);
2021-11-18 22:05:49 +05:30
return `${state.autocompletePath}?${objectToQuery(query)}`;
};
2021-11-11 11:23:49 +05:30
export const scopedIssuesPath = (state) => {
return (
2022-05-07 20:08:51 +05:30
state.searchContext?.project_metadata?.issues_path ||
state.searchContext?.group_metadata?.issues_path ||
2021-11-11 11:23:49 +05:30
state.issuesPath
);
};
export const scopedMRPath = (state) => {
return (
2022-05-07 20:08:51 +05:30
state.searchContext?.project_metadata?.mr_path ||
state.searchContext?.group_metadata?.mr_path ||
2021-11-11 11:23:49 +05:30
state.mrPath
);
};
export const defaultSearchOptions = (state, getters) => {
const userName = gon.current_username;
return [
{
2022-01-26 12:08:38 +05:30
html_id: 'default-issues-assigned',
2021-11-11 11:23:49 +05:30
title: MSG_ISSUES_ASSIGNED_TO_ME,
url: `${getters.scopedIssuesPath}/?assignee_username=${userName}`,
},
{
2022-01-26 12:08:38 +05:30
html_id: 'default-issues-created',
2021-11-11 11:23:49 +05:30
title: MSG_ISSUES_IVE_CREATED,
url: `${getters.scopedIssuesPath}/?author_username=${userName}`,
},
{
2022-01-26 12:08:38 +05:30
html_id: 'default-mrs-assigned',
2021-11-11 11:23:49 +05:30
title: MSG_MR_ASSIGNED_TO_ME,
url: `${getters.scopedMRPath}/?assignee_username=${userName}`,
},
{
2022-01-26 12:08:38 +05:30
html_id: 'default-mrs-reviewer',
2021-11-11 11:23:49 +05:30
title: MSG_MR_IM_REVIEWER,
url: `${getters.scopedMRPath}/?reviewer_username=${userName}`,
},
{
2022-01-26 12:08:38 +05:30
html_id: 'default-mrs-created',
2021-11-11 11:23:49 +05:30
title: MSG_MR_IVE_CREATED,
url: `${getters.scopedMRPath}/?author_username=${userName}`,
},
];
};
export const projectUrl = (state) => {
2022-01-26 12:08:38 +05:30
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,
2022-05-07 20:08:51 +05:30
snippets: state.searchContext?.for_snippets ? true : null,
search_code: state.searchContext?.code_search ? true : null,
repository_ref: state.searchContext?.ref,
2022-01-26 12:08:38 +05:30
},
isNil,
);
2021-11-11 11:23:49 +05:30
return `${state.searchPath}?${objectToQuery(query)}`;
};
export const groupUrl = (state) => {
2022-01-26 12:08:38 +05:30
const query = omitBy(
{
search: state.search,
nav_source: 'navbar',
group_id: state.searchContext?.group?.id,
scope: state.searchContext?.scope,
2022-05-07 20:08:51 +05:30
snippets: state.searchContext?.for_snippets ? true : null,
search_code: state.searchContext?.code_search ? true : null,
repository_ref: state.searchContext?.ref,
2022-01-26 12:08:38 +05:30
},
isNil,
);
2021-11-11 11:23:49 +05:30
return `${state.searchPath}?${objectToQuery(query)}`;
};
export const allUrl = (state) => {
2022-01-26 12:08:38 +05:30
const query = omitBy(
{
search: state.search,
nav_source: 'navbar',
scope: state.searchContext?.scope,
2022-05-07 20:08:51 +05:30
snippets: state.searchContext?.for_snippets ? true : null,
search_code: state.searchContext?.code_search ? true : null,
repository_ref: state.searchContext?.ref,
2022-01-26 12:08:38 +05:30
},
isNil,
);
2021-11-11 11:23:49 +05:30
return `${state.searchPath}?${objectToQuery(query)}`;
};
export const scopedSearchOptions = (state, getters) => {
const options = [];
2022-05-07 20:08:51 +05:30
if (state.searchContext?.project) {
2021-11-11 11:23:49 +05:30
options.push({
2022-01-26 12:08:38 +05:30
html_id: 'scoped-in-project',
2022-05-07 20:08:51 +05:30
scope: state.searchContext.project?.name || '',
2021-11-11 11:23:49 +05:30
description: MSG_IN_PROJECT,
url: getters.projectUrl,
});
}
2022-05-07 20:08:51 +05:30
if (state.searchContext?.group) {
2021-11-11 11:23:49 +05:30
options.push({
2022-01-26 12:08:38 +05:30
html_id: 'scoped-in-group',
2022-05-07 20:08:51 +05:30
scope: state.searchContext.group?.name || '',
2021-11-11 11:23:49 +05:30
description: MSG_IN_GROUP,
url: getters.groupUrl,
});
}
options.push({
2022-01-26 12:08:38 +05:30
html_id: 'scoped-in-all',
2021-11-11 11:23:49 +05:30
description: MSG_IN_ALL_GITLAB,
url: getters.allUrl,
});
return options;
};
2021-11-18 22:05:49 +05:30
export const autocompleteGroupedSearchOptions = (state) => {
const groupedOptions = {};
const results = [];
state.autocompleteOptions.forEach((option) => {
const category = groupedOptions[option.category];
if (category) {
category.data.push(option);
} else {
groupedOptions[option.category] = {
category: option.category,
data: [option],
};
results.push(groupedOptions[option.category]);
}
});
return results;
};
2022-01-26 12:08:38 +05:30
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);
};