@dabapps/redux-requests
Version:
Library for simple redux requests
126 lines • 4.36 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var axios_1 = require("axios");
var Cookies = require("js-cookie");
var path = require("path");
function asEntries(params) {
var result = [];
for (var key in params) {
if (params.hasOwnProperty(key)) {
result.push([key, params[key]]);
}
}
return result;
}
function makeAsyncActionSet(actionName) {
return {
FAILURE: actionName + '_FAILURE',
REQUEST: actionName + '_REQUEST',
SUCCESS: actionName + '_SUCCESS',
};
}
exports.makeAsyncActionSet = makeAsyncActionSet;
function formatQueryParams(params) {
if (!params) {
return '';
}
var asPairs = asEntries(params);
var filteredPairs = asPairs
.filter(function (tuple) {
return tuple[1] !== null && typeof tuple[1] !== 'undefined';
})
.map(function (_a) {
var key = _a[0], value = _a[1];
return [key, value.toString()];
});
if (!filteredPairs || !filteredPairs.length) {
return '';
}
return '?' + filteredPairs.map(function (_a) {
var key = _a[0], value = _a[1];
return key + "=" + value;
}).join('&');
}
exports.formatQueryParams = formatQueryParams;
function apiRequest(options) {
var combinedHeaders = __assign({ Accept: 'application/json', 'Content-Type': 'application/json', 'Cache-Control': 'no-cache', 'X-CSRFToken': Cookies.get('csrftoken') }, options.headers);
var url = options.url;
var myPath;
if (url) {
if (url.split(/:\/\//).length > 1) {
myPath = url;
}
else {
myPath = path.normalize(url);
}
}
var config = __assign({}, options, { url: myPath, headers: combinedHeaders, data: options.data || {} });
// Axios uses a different key for sending data on a GET request
if (options.method === 'GET') {
var data = config.data, getConfig = __rest(config, ["data"]);
return axios_1.default(__assign({}, getConfig, { params: data }));
}
return axios_1.default(config);
}
exports.apiRequest = apiRequest;
function getResponseState(state, actionSet, tag) {
return (state[actionSet.REQUEST] || {})[tag || ''] || {};
}
function isPending(state, actionSet, tag) {
return getResponseState(state, actionSet, tag).requestState === 'REQUEST';
}
exports.isPending = isPending;
function hasFailed(state, actionSet, tag) {
return getResponseState(state, actionSet, tag).requestState === 'FAILURE';
}
exports.hasFailed = hasFailed;
function hasSucceeded(state, actionSet, tag) {
return getResponseState(state, actionSet, tag).requestState === 'SUCCESS';
}
exports.hasSucceeded = hasSucceeded;
function anyPending(state, actionSets) {
return actionSets.some(function (actionSet) {
if (actionSet instanceof Array) {
var actualSet = actionSet[0], tag = actionSet[1];
return isPending(state, actualSet, tag);
}
else {
return isPending(state, actionSet);
}
});
}
exports.anyPending = anyPending;
function isAxiosError(data) {
return 'config' in data && 'name' in data && 'message' in data;
}
function getErrorData(state, actionSet, tag) {
if (hasFailed(state, actionSet, tag)) {
var responseState = getResponseState(state, actionSet, tag);
if (responseState.data && isAxiosError(responseState.data)) {
return responseState.data;
}
}
return null;
}
exports.getErrorData = getErrorData;
//# sourceMappingURL=utils.js.map