mirror of
https://github.com/orangecoding/fredy.git
synced 2026-06-16 12:31:07 +00:00
* chore: configure project-wide linting and formatting * chore: run lint autofix and formatter
135 lines
3.6 KiB
JavaScript
135 lines
3.6 KiB
JavaScript
/**
|
|
* post something to our backend.
|
|
*
|
|
* @param url
|
|
* @param data based on the content type, you need to make sure to parse in the proper data
|
|
* @param contentType default is json
|
|
* @returns {Promise}
|
|
*/
|
|
export function xhrPost(url, data, contentType = 'application/json; charset=utf-8', isJson = true) {
|
|
return executePostOrPutCall(url, contentType, data, isJson, true);
|
|
}
|
|
/**
|
|
* put request to backend.
|
|
*
|
|
* @param url
|
|
* @param data based on the content type, you need to make sure to parse in the proper data
|
|
* @param contentType default is json
|
|
* @returns {Promise}
|
|
*/
|
|
export function xhrPut(url, data, contentType = 'application/json; charset=utf-8', isJson = true) {
|
|
return executePostOrPutCall(url, contentType, data, isJson, false);
|
|
}
|
|
function executePostOrPutCall(url, contentType, data, isJson, isPost) {
|
|
return new Promise((resolve, reject) => {
|
|
fetch(url, {
|
|
method: isPost ? 'POST' : 'PUT',
|
|
cache: 'no-cache',
|
|
credentials: 'include',
|
|
mode: 'cors',
|
|
headers: {
|
|
'Content-Type': contentType,
|
|
},
|
|
body: data == null ? JSON.stringify({}) : JSON.stringify(data),
|
|
})
|
|
.then((response) => (isJson ? parseJSON(response) : response))
|
|
.then((response) => resolve(response))
|
|
.catch((error) => {
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
* get request to backend
|
|
* returns a Promise with
|
|
* {
|
|
* status: statusCode,
|
|
* json: values
|
|
* }
|
|
*
|
|
* if an error occurs, the promise rejects with
|
|
* {
|
|
* json: errors: ['error', 'error']
|
|
* }
|
|
* @param url
|
|
* @param contentType
|
|
* @param isJson
|
|
* @returns {Promise}
|
|
*/
|
|
export function xhrGet(url, contentType = 'application/json; charset=utf-8', isJson = true) {
|
|
return new Promise((resolve, reject) => {
|
|
fetch(url, {
|
|
credentials: 'include',
|
|
mode: 'cors',
|
|
headers: {
|
|
'Content-Type': contentType,
|
|
},
|
|
})
|
|
.then((response) => (isJson ? parseJSON(response) : response))
|
|
.then((response) => resolve(response))
|
|
.catch((error) => {
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
* delete request to backend
|
|
* returns a Promise with
|
|
* {
|
|
* status: statusCode,
|
|
* json: values
|
|
* }
|
|
*
|
|
* if an error occurs, the promise rejects with
|
|
* {
|
|
* json: errors: ['error', 'error']
|
|
* }
|
|
* @param url
|
|
* @param data
|
|
* @returns {Promise}
|
|
*/
|
|
export function xhrDelete(url, data, contentType = 'application/json; charset=utf-8') {
|
|
return new Promise((resolve, reject) => {
|
|
fetch(url, {
|
|
method: 'DELETE',
|
|
credentials: 'include',
|
|
mode: 'cors',
|
|
body: data == null ? JSON.stringify({}) : JSON.stringify(data),
|
|
headers: {
|
|
'Content-Type': contentType,
|
|
},
|
|
})
|
|
.then((response) => parseJSON(response))
|
|
.then((response) => resolve(response))
|
|
.catch((error) => {
|
|
if (error.json != null && error.json.message != null) {
|
|
reject(error.json.message);
|
|
} else {
|
|
reject({ errors: [`Unspecified Network error`] });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
function parseJSON(response) {
|
|
return new Promise((resolve, reject) =>
|
|
response
|
|
.text()
|
|
.then((text) => {
|
|
//some responses doesn't contain a body. .json() would throw errors here...
|
|
const json = text != null && text.length > 0 ? JSON.parse(text) : {};
|
|
if (response.ok) {
|
|
resolve({
|
|
status: response.status,
|
|
json,
|
|
});
|
|
} else {
|
|
reject({
|
|
status: response.status,
|
|
json,
|
|
});
|
|
}
|
|
})
|
|
.catch((error) => reject('Error while trying to parse json.', error)),
|
|
);
|
|
}
|