grafana/public/app/features/search/utils.ts
Josh Hunt 70f109526a
Search: Store only search value in state, not the whole selectable value (#62228)
* Search: Store only search value in state, not the whole selectable value

* type sort to undefined-able
2023-01-27 10:50:48 +00:00

51 lines
1.3 KiB
TypeScript

import { UrlQueryMap } from '@grafana/data';
import { SECTION_STORAGE_KEY } from './constants';
import { SearchState } from './types';
/**
* Check if search query has filters enabled. Excludes folderId
* @param query
*/
export const hasFilters = (query: SearchState) => {
if (!query) {
return false;
}
return Boolean(query.query || query.tag?.length > 0 || query.starred || query.sort);
};
/**
* Get storage key for a dashboard folder by its title
* @param title
*/
export const getSectionStorageKey = (title = 'General') => {
return `${SECTION_STORAGE_KEY}.${title.toLowerCase()}`;
};
/**
* Remove undefined keys from url params object and format non-primitive values
* @param params
* @param folder
*/
export const parseRouteParams = (params: UrlQueryMap) => {
const cleanedParams = Object.entries(params).reduce<Partial<SearchState>>((obj, [key, val]) => {
if (!val) {
return obj;
} else if (key === 'tag' && !Array.isArray(val)) {
return { ...obj, tag: [val] as string[] };
}
return { ...obj, [key]: val };
}, {});
if (params.folder) {
const folderStr = `folder:${params.folder}`;
return {
...cleanedParams,
query: `${folderStr} ${(cleanedParams.query ?? '').replace(folderStr, '')}`,
};
}
return { ...cleanedParams };
};