diff --git a/assets/js/utils/http.js b/assets/js/utils/http.js new file mode 100644 index 00000000..1158a4b4 --- /dev/null +++ b/assets/js/utils/http.js @@ -0,0 +1,145 @@ +/* ---------------------------------------------------------------------------- + * Easy!Appointments - Open Source Web Scheduler + * + * @package EasyAppointments + * @author A.Tselegidis + * @copyright Copyright (c) 2013 - 2020, Alex Tselegidis + * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 + * @link http://easyappointments.org + * @since v1.5.0 + * ---------------------------------------------------------------------------- */ + +window.App.Utils.Http = (function () { + function request(method, url, data) { + return new Promise((resolve, reject) => { + fetch(App.Utils.Url.siteUrl(url), { + method, + mode: 'cors', + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json' + }, + redirect: 'follow', + referrer: 'no-referrer', + body: data ? JSON.stringify(data) : undefined + }) + .then((response) => { + if (!response.ok) { + response + .text() + .then((message) => { + const error = new Error(message); + error.status = response.status; + throw error; + }) + .catch((error) => { + console.error(error); + reject(error); + }); + } + + return response; + }) + .then((response) => { + return response.json(); + }) + .then((json) => { + resolve(json); + }) + .catch((error) => { + console.error(error); + reject(error); + }); + }); + } + + export function upload(user, method, url, file) { + const formData = new FormData(); + + formData.append('file', file, file.name); + + return new Promise((resolve, reject) => { + fetch(App.Utils.Url.siteUrl(url), { + method, + redirect: 'follow', + referrer: 'no-referrer', + body: formData + }) + .then((response) => { + if (!response.ok) { + response + .text() + .then((message) => { + const error = new Error(message); + error.status = response.status; + throw error; + }) + .catch((error) => { + console.error(error); + reject(error); + }); + } + + return response; + }) + .then((response) => { + return response.json(); + }) + .then((json) => { + resolve(json); + }) + .catch((error) => { + console.error(error); + reject(error); + }); + }); + } + + export function download(user, method, url) { + return new Promise((resolve, reject) => { + fetch(App.Utils.Url.siteUrl(url), { + method, + mode: 'cors', + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json' + }, + redirect: 'follow', + referrer: 'no-referrer' + }) + .then((response) => { + if (!response.ok) { + response + .text() + .then((message) => { + const error = new Error(message); + error.status = response.status; + throw error; + }) + .catch((error) => { + console.error(error); + reject(error); + }); + } + + return response; + }) + .then((response) => { + return response.arrayBuffer(); + }) + .then((json) => { + resolve(json); + }) + .catch((error) => { + console.error(error); + reject(error); + }); + }); + } + + return { + request, + upload, + download + }; +})();