Skip to content

Commit

Permalink
Merge pull request #29 from svrcekmichal/feature/remove-enhanced-getS…
Browse files Browse the repository at this point in the history
…tate

removed enhanced getState
  • Loading branch information
svrcekmichal authored Aug 10, 2016
2 parents c68784c + dbaf0e3 commit ac43ce0
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 50 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# CHANGELOG

## 2.0.0 ( Aug 10, 2016 )
- changes to support [email protected]
- removed enhanced getState function as first interceptor argument

## 1.3.0 ( Jun 14, 2016 )
- added warning to not use first interceptor argument as `getState` function
- added `dispatch` and `action` to first interceptor argument - [#26](https://github.com/svrcekmichal/redux-axios-middleware/pull/26)
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "redux-axios-middleware",
"version": "1.3.0",
"version": "2.0.0",
"description": "Redux middleware for fetching data with axios HTTP client",
"main": "lib/index.js",
"scripts": {
Expand Down
81 changes: 34 additions & 47 deletions src/middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,54 +21,41 @@ function bindInterceptors(client, getState, middlewareInterceptors = {}, clientI
export const multiClientMiddleware = (clients, customMiddlewareOptions) => {
const middlewareOptions = { ...defaultOptions, ...customMiddlewareOptions };
const setupedClients = {};
return function ({ getState, dispatch }) {
const enhancedGetState = function () {
console.log(`
Warning, getState as function in interceptor will be removed in version 2 of middleware.
Stop: interceptor(getState,config) { ... }
Do: interceptor({getState}, config) { ... }
`);
return getState();
};
enhancedGetState.getState = getState;
enhancedGetState.dispatch = dispatch;
return next => action => {
if (!middlewareOptions.isAxiosRequest(action)) {
return next(action);
return ({ getState, dispatch }) => next => action => {
if (!middlewareOptions.isAxiosRequest(action)) {
return next(action);
}
const clientName = middlewareOptions.getClientName(action) || middlewareOptions.defaultClientName;
if (!clients[clientName]) {
throw new Error(`Client with name "${clientName}" has not been defined in middleware`);
}
if (!setupedClients[clientName]) {
const clientOptions = { ...middlewareOptions, ...clients[clientName].options };
if (clientOptions.interceptors) {
bindInterceptors(clients[clientName].client, { getState, dispatch, action },
middlewareOptions.interceptors, clients[clientName].options.interceptors);
}
const clientName = middlewareOptions.getClientName(action) || middlewareOptions.defaultClientName;
if (!clients[clientName]) {
throw new Error(`Client with name "${clientName}" has not been defined in middleware`);
}
if (!setupedClients[clientName]) {
const clientOptions = { ...middlewareOptions, ...clients[clientName].options };
if (clientOptions.interceptors) {
enhancedGetState.action = action;
bindInterceptors(clients[clientName].client, enhancedGetState,
middlewareOptions.interceptors, clients[clientName].options.interceptors);
}
setupedClients[clientName] = {
client: clients[clientName].client,
options: clientOptions
};
}
const setupedClient = setupedClients[clientName];
const actionOptions = { ...setupedClient.options, ...setupedClient.options.getRequestOptions(action) };
const [REQUEST] = getActionTypes(action, actionOptions);
next({ ...action, type: REQUEST });
return setupedClient.client.request(actionOptions.getRequestConfig(action))
.then(
(response) => {
const newAction = actionOptions.onSuccess({ action, next, response, getState, dispatch }, actionOptions);
actionOptions.onComplete({ action: newAction, next, getState, dispatch }, actionOptions);
return newAction;
},
(error) => {
const newAction = actionOptions.onError({ action, next, error, getState, dispatch }, actionOptions);
actionOptions.onComplete({ action: newAction, next, getState, dispatch }, actionOptions);
return actionOptions.returnRejectedPromiseOnError ? Promise.reject(newAction) : newAction;
});
};
setupedClients[clientName] = {
client: clients[clientName].client,
options: clientOptions
};
}
const setupedClient = setupedClients[clientName];
const actionOptions = { ...setupedClient.options, ...setupedClient.options.getRequestOptions(action) };
const [REQUEST] = getActionTypes(action, actionOptions);
next({ ...action, type: REQUEST });
return setupedClient.client.request(actionOptions.getRequestConfig(action))
.then(
(response) => {
const newAction = actionOptions.onSuccess({ action, next, response, getState, dispatch }, actionOptions);
actionOptions.onComplete({ action: newAction, next, getState, dispatch }, actionOptions);
return newAction;
},
(error) => {
const newAction = actionOptions.onError({ action, next, error, getState, dispatch }, actionOptions);
actionOptions.onComplete({ action: newAction, next, getState, dispatch }, actionOptions);
return actionOptions.returnRejectedPromiseOnError ? Promise.reject(newAction) : newAction;
});
};
};

Expand Down
2 changes: 0 additions & 2 deletions test/middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ import MockAdapter from 'axios-mock-adapter';

import middleware from './../src/middleware';

const BASE_URL = 'mockapi';
const client = axios.create({
baseURL: BASE_URL,
responseType: 'json'
});

Expand Down

0 comments on commit ac43ce0

Please sign in to comment.