UNPKG

@atlaskit/global-search

Version:

A cross-product search component (batteries included)

86 lines (75 loc) 3.05 kB
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; }); }