trc-client-core
Version:
The core of the TRC Client
88 lines (78 loc) • 2.7 kB
JavaScript
import request from 'superagent';
import PromiseErrorHandler from 'trc-client-core/src/utils/PromiseErrorHandler';
import PromiseSuccessHandler from 'trc-client-core/src/utils/PromiseSuccessHandler';
var requests = {};
function simpleQuery (verb, url, query) {
return new Promise(function(resolve, reject) {
requests[url] = request[verb](url)
.query(query)
.end(function(err, response){
if(!response) {
reject(err);
} else if (response.ok) {
resolve(response.body, response);
} else {
reject(response);
}
requests[url] = null;
});
});
}
function simplePost(verb, url, query) {
return new Promise(function(resolve, reject) {
request[verb](url)
.send(query)
.end(function(err, response){
if(!response) {
reject(err);
} else if (response.ok) {
resolve(response.body, response);
} else {
reject(response);
}
});
});
}
function fileUpload(url, name, file, onProgress) {
return new Promise(function(resolve, reject) {
var req = request
.post(url)
.attach(name, file, file.name)
.end((err, response) => {
if(!response) {
reject(err);
} else if (response.ok) {
resolve(response.body);
} else {
reject(response.body);
}
});
if(onProgress) {
req.on('progress', onProgress);
}
});
}
var xhr = {
get: function (url, query) {
return simpleQuery('get', url, query).then(PromiseSuccessHandler, PromiseErrorHandler);
},
post: function (url, query) {
return simplePost('post', url, query).then(PromiseSuccessHandler, PromiseErrorHandler);
},
patch: function (url, query) {
return simplePost('patch', url, query).then(PromiseSuccessHandler, PromiseErrorHandler);
},
put: function (url, query) {
return simplePost('put', url, query).then(PromiseSuccessHandler, PromiseErrorHandler);
},
del: function (url, query) {
return simpleQuery('del', url, query).then(PromiseSuccessHandler, PromiseErrorHandler);
},
upload: function (url, name, file, onProgress) {
return fileUpload(url, name, file, onProgress).then(PromiseSuccessHandler, PromiseErrorHandler);
},
requests() {
return requests;
}
};
module.exports = xhr;