openstackid/resources/js/base_actions.js

96 lines
2.0 KiB
JavaScript

import request from 'superagent';
import URI from "urijs";
let http = request;
import Swal from 'sweetalert2';
export const createAction = type => payload => ({
type,
payload
});
export const RESET_LOADING = 'RESET_LOADING';
export const START_LOADING = 'START_LOADING';
export const STOP_LOADING = 'STOP_LOADING';
export const resetLoading = createAction(RESET_LOADING);
export const startLoading = createAction(START_LOADING);
export const stopLoading = createAction(STOP_LOADING);
const xhrs = {};
const cancel = (key) => {
if(xhrs[key]) {
xhrs[key].xhr.abort();
console.log(`aborted request ${key}`);
delete xhrs[key];
}
}
const schedule = (key, req) => {
// console.log(`scheduling ${key}`);
xhrs[key] = req;
};
const end = (key) => {
delete xhrs[key];
}
const isObjectEmpty = (obj) => {
return Object.keys(obj).length === 0 && obj.constructor === Object ;
}
export const getRawRequest = (endpoint) => (params) => {
let url = URI(endpoint);
if(!isObjectEmpty(params))
url = url.query(params);
let key = url.toString();
cancel(key);
let req = http.get(url.toString());
schedule(key, req);
return req.timeout({
response: 60000,
deadline: 60000,
}).then((res) => {
let json = res.body;
end(key);
return Promise.resolve({response: json});
}).catch((error) => {
end(key);
return Promise.reject(error);
})
}
export const postRawRequest = (endpoint) => (params, headers = {}) => {
let url = URI(endpoint);
if(!isObjectEmpty(params))
url = url.query(params);
let key = url.toString();
cancel(key);
let req = http.post(url.toString());
schedule(key, req);
return req.set(headers).send(params).timeout({
response: 60000,
deadline: 60000,
}).then((res) => {
let json = res.body;
end(key);
return Promise.resolve({response: json});
}).catch((error) => {
end(key);
return Promise.reject(error);
})
}