@boomerang-io/utils
Version:
A library of reusable utilities and hooks for React webapps on the Boomerang platform.
84 lines (73 loc) • 2.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _axios = _interopRequireDefault(require("axios"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable no-console*/
/**
* Reducer boilerplate to make api calls
*
* @param {Obj} actions - object with actions regarding this request
* @param {Obj} config - axios config
* @example
* const appsOverviewReset = () => ({ type: types.APPS_OVERVIEW_RESET });
* const fetchAppsOverviewRequest = () => ({ type: types.FETCH_APPS_OVERVIEW_REQUEST });
* const fetchAppsOverviewSuccess = data => ({ type: types.FETCH_APPS_OVERVIEW_SUCCESS, data });
* const fetchAppsOverviewFailure = error => ({ type: types.FETCH_APPS_OVERVIEW_FAILURE, error });
*
* const fetchActionCreators = {
* reset: appsOverviewReset,
* request: fetchAppsOverviewRequest,
* success: fetchAppsOverviewSuccess,
* failure: fetchAppsOverviewFailure
* };
*
* const fetchApi = requestFactory(fetchActionCreators);
* const fetchAppsOverview = url => dispatch => dispatch(fetchApi.request({ method: "get", url }));
* // fecthAppsOverview is called with param url and dispatch the fetchApi method request with the url
* const cancelFetchAppsOverview = () => dispatch => dispatch(fecthApi.cancelRequest());
*/
var thunkRequestFactory = function thunkRequestFactory(actions) {
var CancelToken = _axios.default.CancelToken;
var cancel;
var cancelRequest = function cancelRequest() {
return function (dispatch) {
console.log("Request canceled");
cancel("Request Canceled");
dispatch(actions.reset());
};
};
var request = function request(config) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
return function (dispatch) {
dispatch(actions.request.apply(actions, args));
return (0, _axios.default)(config, {
cancelToken: new CancelToken(function executor(c) {
cancel = c;
})
}).then(function (response) {
dispatch(actions.success.apply(actions, [response.data].concat(args)));
return Promise.resolve(response);
}).catch(function (error) {
console.log("AXIOS Error :-S", error);
if (_axios.default.isCancel(error)) {
console.log(error);
return;
} else {
dispatch(actions.failure.apply(actions, [error].concat(args)));
return Promise.reject(error);
}
});
};
};
return {
request: request,
cancelRequest: cancelRequest
};
};
var _default = thunkRequestFactory;
exports.default = _default;