@atlaskit/global-search
Version:
A cross-product search component (batteries included)
86 lines (75 loc) • 3.05 kB
JavaScript
export const ADVANCED_CONFLUENCE_SEARCH_RESULT_ID = 'search_confluence';
export const ADVANCED_JIRA_SEARCH_RESULT_ID = 'search_jira';
export const ADVANCED_PEOPLE_SEARCH_RESULT_ID = 'search_people';
export let JiraEntityTypes;
(function (JiraEntityTypes) {
JiraEntityTypes["Projects"] = "projects";
JiraEntityTypes["Issues"] = "issues";
JiraEntityTypes["Boards"] = "boards";
JiraEntityTypes["Filters"] = "filters";
JiraEntityTypes["People"] = "people";
})(JiraEntityTypes || (JiraEntityTypes = {}));
export let ConfluenceAdvancedSearchTypes;
(function (ConfluenceAdvancedSearchTypes) {
ConfluenceAdvancedSearchTypes["Content"] = "content";
ConfluenceAdvancedSearchTypes["People"] = "people";
})(ConfluenceAdvancedSearchTypes || (ConfluenceAdvancedSearchTypes = {}));
export const isAdvancedSearchResult = resultId => [ADVANCED_CONFLUENCE_SEARCH_RESULT_ID, ADVANCED_JIRA_SEARCH_RESULT_ID, ADVANCED_PEOPLE_SEARCH_RESULT_ID].some(advancedResultId => advancedResultId === resultId);
export function getConfluenceAdvancedSearchLink(query) {
const queryString = query ? `?text=${encodeURIComponent(query)}` : '';
return `/wiki/search${queryString}`;
}
export function getJiraAdvancedSearchUrl(props) {
const {
entityType,
query,
enableIssueKeySmartMode,
isJiraPeopleProfilesEnabled
} = props;
switch (entityType) {
case JiraEntityTypes.Issues:
return !enableIssueKeySmartMode && query && +query ? `/issues/?jql=order+by+created+DESC` : `/secure/QuickSearch.jspa?searchString=${query}`;
case JiraEntityTypes.Boards:
return `/secure/ManageRapidViews.jspa?contains=${query}`;
case JiraEntityTypes.Filters:
return `/secure/ManageFilters.jspa?Search=Search&filterView=search&name=${query}`;
case JiraEntityTypes.Projects:
return `/projects?contains=${query}`;
case JiraEntityTypes.People:
return !!isJiraPeopleProfilesEnabled ? `/jira/people/search?q=${query}` : `/people/search?q=${query}`;
}
}
export function redirectToConfluenceAdvancedSearch(query = '') {
// XPSRCH-891: this breaks SPA navigation. Consumer needs to pass in a redirect/navigate function.
window.location.assign(getConfluenceAdvancedSearchLink(query));
}
export function redirectToJiraAdvancedSearch(entityType, query = '') {
window.location.assign(getJiraAdvancedSearchUrl({
entityType,
query,
enableIssueKeySmartMode: true
}));
}
export function take(array, n) {
return (array || []).slice(0, n);
}
export function isEmpty(array) {
return array.length === 0;
}
/**
*
* Gracefully handle promise catch and returning default value
* @param promise promise to handle its catch block
* @param defaultValue value returned by the promise in case of error
* @param errorHandler function to be called in case of promise rejection
*/
export function handlePromiseError(promise, defaultValue, errorHandler) {
return promise.catch(error => {
try {
if (errorHandler) {
errorHandler(error);
}
} catch (e) {}
return defaultValue;
});
}