-export const parseQuery: (query: string) => { hasKeywords: boolean; values: string[]; properties: any } = (searchValue: string) => {
- const keywords = [
- 'type:',
- 'cluster:',
- 'project:',
- 'is:',
- 'from:',
- 'to:',
- 'has:'
- ];
-
- const hasKeywords = (search: string) => keywords.reduce((acc, keyword) => acc + search.indexOf(keyword) >= 0 ? 1 : 0, 0);
- let keywordsCnt = 0;
-
- const properties = {};
-
- keywords.forEach(k => {
- let p = searchValue.indexOf(k);
- const key = k.substr(0, k.length - 1);
-
- while (p >= 0) {
- const l = searchValue.length;
- keywordsCnt += 1;
-
- let v = '';
- let i = p + k.length;
- while (i < l && searchValue[i] === ' ') {
- ++i;
- }
- const vp = i;
- while (i < l && searchValue[i] !== ' ') {
- v += searchValue[i];
- ++i;
- }
-
- if (hasKeywords(v)) {
- searchValue = searchValue.substr(0, p) + searchValue.substr(vp);
- } else {
- if (v !== '') {
- if (!properties[key]) {
- properties[key] = [];
- }
- properties[key].push(v);
- }
- searchValue = searchValue.substr(0, p) + searchValue.substr(i);
- }
- p = searchValue.indexOf(k);
- }
- });
-
- const values = _.uniq(searchValue.split(' ').filter(v => v.length > 0));
-
- return { hasKeywords: keywordsCnt > 0, values, properties };
-};
-