@boomerang-io/utils
Version:
A library of reusable utilities and hooks for React webapps on the Boomerang platform.
74 lines (72 loc) • 2.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _axios = _interopRequireDefault(require("axios"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/* 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());
*/
const thunkRequestFactory = actions => {
const CancelToken = _axios.default.CancelToken;
let cancel;
const cancelRequest = () => {
return dispatch => {
console.log("Request canceled");
cancel("Request Canceled");
dispatch(actions.reset());
};
};
const request = function (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 dispatch => {
dispatch(actions.request(...args));
return (0, _axios.default)(config, {
cancelToken: new CancelToken(function executor(c) {
cancel = c;
})
}).then(response => {
dispatch(actions.success(response.data, ...args));
return Promise.resolve(response);
}).catch(error => {
console.log("AXIOS Error :-S", error);
if (_axios.default.isCancel(error)) {
console.log(error);
return;
} else {
dispatch(actions.failure(error, ...args));
return Promise.reject(error);
}
});
};
};
return {
request,
cancelRequest
};
};
var _default = exports.default = thunkRequestFactory;