/
index.js
108 lines (88 loc) · 3.04 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import _ from 'lodash';
import { uiModules } from 'ui/modules';
import { npStart } from 'ui/new_platform';
import '../../common/jquery-plugins/observer';
import FilterManagerHelper from './FilterManagerHelper';
import Popover from './Popover';
const app = uiModules.get('kibana');
const {
query: { filterManager },
indexPatterns,
} = npStart.plugins.data;
const popover = new Popover();
window.popover = popover;
filterManager.register = (customFilter) => {
if (!filterManager.customFilters) {
filterManager.customFilters = [];
}
filterManager.customFilters.push(customFilter);
};
app.run([
'$rootScope',
($rootScope) => {
$rootScope.$on('$routeChangeSuccess', (_$event, next) => {
const {
$$route: { originalPath },
} = next;
if (popover.isInit()) {
popover.destroy();
}
popover.init();
});
},
]);
(async (indexPatterns, addFiltersCached) => {
const indexPatternIDList = await indexPatterns.getFields(['id']);
let indexPatternLookup = {};
for (let pattern of indexPatternIDList) {
let ip = await indexPatterns.get(pattern.id);
indexPatternLookup[pattern.id] = ip.fieldFormatMap;
}
const filterManagerHelper = new FilterManagerHelper(addFiltersCached);
filterManager.addFilters = (newFilters) => {
if (_.isArray(newFilters) && newFilters.length === 0) {
return;
}
for (let newFilter of newFilters) {
const selectedIndexPatternID = _.get(newFilter, 'meta.index', null);
const fieldFormatMap = indexPatternLookup[selectedIndexPatternID];
const matchPhrase = _.get(newFilter, 'query.match_phrase', {});
const fieldNameKeys = Object.keys(matchPhrase);
const fieldName = fieldNameKeys.length === 1 ? fieldNameKeys[0] : '';
const formatType = _.get(fieldFormatMap, [fieldName, 'type', 'id'], null);
const params = _.get(fieldFormatMap, [fieldName, '_params'], {});
const values = _.get(matchPhrase, [fieldName], {});
const meta = _.get(newFilter, 'meta', {});
const {
getCurrentFilters,
addFilter,
addImageSimilarityFilter,
removeFilter,
} = filterManagerHelper;
filterManagerHelper.newFilter = newFilter;
filterManagerHelper.similarityScript = _.get(params, 'similarityScript', '');
const filterParams = {
fieldName,
formatType,
params,
values,
meta,
popover,
addFilter: addFilter.bind(filterManagerHelper),
addImageSimilarityFilter: addImageSimilarityFilter.bind(filterManagerHelper),
removeFilter: removeFilter.bind(filterManagerHelper),
getCurrentFilters: getCurrentFilters.bind(filterManagerHelper),
};
let customFilterFlag = false;
for (let customFilter of filterManager.customFilters) {
customFilterFlag = customFilter(filterParams);
if (customFilterFlag) {
break;
}
}
if (!customFilterFlag) {
addFiltersCached.apply(filterManager, [newFilter]);
}
}
};
})(indexPatterns, filterManager.addFilters);