39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
import { parseStatus, parseJSON, userFeedback, userFeedbackError } from './response';
|
|
import { config } from 'grav-config';
|
|
|
|
let raw;
|
|
let request = function(url, options = {}, callback = () => true) {
|
|
if (typeof options === 'function') {
|
|
callback = options;
|
|
options = {};
|
|
}
|
|
|
|
if (options.method && options.method === 'post') {
|
|
let data = new FormData();
|
|
|
|
options.body = Object.assign({ 'admin-nonce': config.admin_nonce }, options.body || {});
|
|
Object.keys(options.body).map((key) => data.append(key, options.body[key]));
|
|
options.body = data;
|
|
}
|
|
|
|
options = Object.assign({
|
|
credentials: 'same-origin',
|
|
headers: {
|
|
'Accept': 'application/json'
|
|
}
|
|
}, options);
|
|
|
|
return fetch(url, options)
|
|
.then((response) => {
|
|
raw = response;
|
|
return response;
|
|
})
|
|
.then(parseStatus)
|
|
.then(parseJSON)
|
|
.then(userFeedback)
|
|
.then((response) => callback(response, raw))
|
|
.catch(userFeedbackError);
|
|
};
|
|
|
|
export default request;
|