Skip to content

Commit 0dbc8d1

Browse files
Michal SvrčekThibault Lenclos
authored andcommitted
it should be possible to get action which triggered interceptor
1 parent c114d87 commit 0dbc8d1

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# CHANGELOG
22

3+
## 3.1.3 ( March 15, 2017 )
4+
- in interceptors, you can use `getAction` to receive action which triggered interceptors, for now, bug with `action` will not be removed, but it'll be removed in 4.0 as it is breaking change
5+
36
## 3.1.2 ( Feb 20, 2017 )
47
- exclude our .babelrc from our npm build.
58

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ getRequestConfig | function | return con
242242
getClientName | function | returns `action.payload.client` OR `'default'` | `M` `C` `A` | attempts to resolve used client name or use defaultClientName
243243
defaultClientName | every possible object key type | `'default'` | `M` | key which define client used if `getClienName` returned false value
244244
getRequestOptions | function | return `action.payload.options` | `M` `C` | returns options object from action to override some values
245-
interceptors | object `{request: [], response: []}` | | `M` `C` | You can pass axios request and response interceptors. Take care, first argument of interceptor is different from default axios interceptor, first received argument is object with `getState`, `dispatch` and `action` keys
245+
interceptors | object `{request: [], response: []}` | | `M` `C` | You can pass axios request and response interceptors. Take care, first argument of interceptor is different from default axios interceptor, first received argument is object with `getState`, `dispatch` and `getAction` keys
246246

247247
## License
248248

src/middleware.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,42 @@
11
import * as defaultOptions from './defaults';
22
import { getActionTypes } from './getActionTypes';
33

4-
function addInterceptor(target, candidate, getState) {
4+
function addInterceptor(target, candidate, injectedParameters) {
55
if (!candidate) return;
66
const successInterceptor = typeof candidate === 'function' ? candidate : candidate.success;
77
const errorInterceptor = candidate && candidate.error;
8-
target.use(successInterceptor && successInterceptor.bind(null, getState),
9-
errorInterceptor && errorInterceptor.bind(null, getState));
8+
target.use(successInterceptor && successInterceptor.bind(null, injectedParameters),
9+
errorInterceptor && errorInterceptor.bind(null, injectedParameters));
1010
}
1111

12-
function bindInterceptors(client, getState, middlewareInterceptors = {}, clientInterceptors = {}) {
12+
function bindInterceptors(client, injectedParameters, middlewareInterceptors = {}, clientInterceptors = {}) {
1313
[...middlewareInterceptors.request || [], ...clientInterceptors.request || []].forEach((interceptor) => {
14-
addInterceptor(client.interceptors.request, interceptor, getState);
14+
addInterceptor(client.interceptors.request, interceptor, injectedParameters);
1515
});
1616
[...middlewareInterceptors.response || [], ...clientInterceptors.response || []].forEach((interceptor) => {
17-
addInterceptor(client.interceptors.response, interceptor, getState);
17+
addInterceptor(client.interceptors.response, interceptor, injectedParameters);
1818
});
1919
}
2020

2121
export const multiClientMiddleware = (clients, customMiddlewareOptions) => {
2222
const middlewareOptions = { ...defaultOptions, ...customMiddlewareOptions };
2323
const setupedClients = {};
24+
let storedAction;
2425
return ({ getState, dispatch }) => next => action => {
2526
if (!middlewareOptions.isAxiosRequest(action)) {
2627
return next(action);
2728
}
29+
storedAction = action;
2830
const clientName = middlewareOptions.getClientName(action) || middlewareOptions.defaultClientName;
2931
if (!clients[clientName]) {
3032
throw new Error(`Client with name "${clientName}" has not been defined in middleware`);
3133
}
3234
if (!setupedClients[clientName]) {
3335
const clientOptions = { ...middlewareOptions, ...clients[clientName].options };
3436
if (clientOptions.interceptors) {
35-
bindInterceptors(clients[clientName].client, { getState, dispatch, action },
37+
const getAction = () => storedAction;
38+
const injectToInterceptor = { getState, dispatch, action, getAction };
39+
bindInterceptors(clients[clientName].client, injectToInterceptor,
3640
middlewareOptions.interceptors, clients[clientName].options.interceptors);
3741
}
3842
setupedClients[clientName] = {

0 commit comments

Comments
 (0)