forked from elastic/kibana
-
Notifications
You must be signed in to change notification settings - Fork 0
/
middleware.js
85 lines (69 loc) · 2.13 KB
/
middleware.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
import _ from 'lodash';
import { SearchSourceProvider } from 'ui/courier/data_source/search_source';
import {
SEARCH_SOURCE_EFFECT,
SEARCH_SOURCE_EFFECT_PENDING,
SEARCH_SOURCE_EFFECT_SUCCESS,
SEARCH_SOURCE_EFFECT_FAILURE,
} from './constants';
export function SearchSourceMiddlewareProvider(Private) {
const SearchSource = Private(SearchSourceProvider);
return (store) => (next) => (action) => {
if (action.type !== SEARCH_SOURCE_EFFECT) {
return next(action);
}
const {
payload: {
configuration = {},
method,
responseTransformation = _.identity,
responseTypes: [
pendingActionType = SEARCH_SOURCE_EFFECT_PENDING,
successActionType = SEARCH_SOURCE_EFFECT_SUCCESS,
failureActionType = SEARCH_SOURCE_EFFECT_FAILURE,
] = [],
} = {},
meta,
} = action;
const searchSource = createSearchSourceFromConfiguration(configuration);
switch(method) {
case 'fetch':
store.dispatch({
type: pendingActionType,
meta,
});
return searchSource.fetch()
.then((response) => {
const transformedResponse = responseTransformation(response);
store.dispatch({
type: successActionType,
payload: transformedResponse,
meta,
});
return transformedResponse;
})
.catch((error) => {
store.dispatch({
type: failureActionType,
payload: error,
error: true,
meta,
});
throw error;
});
default:
return next(action);
}
};
function createSearchSourceFromConfiguration(searchSourceConfiguration) {
const searchSource = new SearchSource();
const searchSourceConfigurationProps = (searchSource._methods || [])
.concat(['index', 'inherits']);
for (const property of searchSourceConfigurationProps) {
if (_.has(searchSourceConfiguration, property)) {
searchSource[property](searchSourceConfiguration[property]);
}
}
return searchSource;
}
}