168 lines
6.0 KiB
JavaScript
168 lines
6.0 KiB
JavaScript
import DOM from './dom.js';
|
|
|
|
export default class API {
|
|
|
|
static getCsrfToken() {
|
|
return document.querySelector(idCSRFToken).getAttribute('content');
|
|
}
|
|
|
|
static async request(hashEndpoint, method = 'GET', data = null, params = null) {
|
|
const url = API.getUrlFromHash(hashEndpoint, params);
|
|
const csrfToken = API.getCsrfToken();
|
|
const options = {
|
|
method,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
[flagCsrfToken]: csrfToken,
|
|
}
|
|
};
|
|
|
|
if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {
|
|
data = {
|
|
...data,
|
|
[flagCsrfToken]: csrfToken,
|
|
};
|
|
options.body = JSON.stringify(data);
|
|
}
|
|
|
|
try {
|
|
const response = await fetch(url, options);
|
|
if (!response.ok) {
|
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
}
|
|
return await response.json();
|
|
} catch (error) {
|
|
console.error('API request failed:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
static getUrlFromHash(hash, params = null) {
|
|
if (hash == null) hash = hashPageHome;
|
|
let url = API.parameteriseUrl(_pathHost + hash, params);
|
|
return url;
|
|
}
|
|
static parameteriseUrl(url, params) {
|
|
if (params) {
|
|
url += '?' + new URLSearchParams(params).toString();
|
|
}
|
|
return url;
|
|
}
|
|
static goToUrl(url) {
|
|
window.location.href = url;
|
|
}
|
|
static goToHash(hash, params = null) {
|
|
const url = API.getUrlFromHash(hash, params);
|
|
API.goToUrl(url);
|
|
}
|
|
|
|
// specific api calls
|
|
/* Example:
|
|
getUsers: () => request('/users'),
|
|
getUserById: (id) => request(`/users/${id}`),
|
|
createUser: (userData) => request('/users', 'POST', userData),
|
|
updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),
|
|
deleteUser: (id) => request(`/users/${id}`, 'DELETE'),
|
|
*/
|
|
|
|
// User
|
|
// user
|
|
static async loginUser() {
|
|
let callback = {};
|
|
callback[flagCallback] = DOM.getHashPageCurrent();
|
|
return await API.request(hashPageUserLogin, 'POST', callback);
|
|
}
|
|
static async saveUsers(users, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagUser] = users;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveUserUser, 'POST', dataRequest);
|
|
}
|
|
// company
|
|
static async saveCompanies(companies, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagCompany] = companies;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveUserCompany, 'POST', dataRequest);
|
|
}
|
|
|
|
|
|
// dog
|
|
// Command categories
|
|
static async saveCommandCategories(commandCategories, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagCommandCategory] = commandCategories;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveDogCommandCategory, 'POST', dataRequest);
|
|
}
|
|
|
|
// Commands
|
|
static async saveCommands(commands, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagCommand] = commands;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveDogCommand, 'POST', dataRequest);
|
|
}
|
|
|
|
// Dog Command Links
|
|
static async saveDogCommandLinks(dogCommandLinks, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagDogCommandLink] = dogCommandLinks;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);
|
|
}
|
|
|
|
// Locations
|
|
static async saveLocations(locations, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagLocation] = locations;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveDogLocation, 'POST', dataRequest);
|
|
}
|
|
|
|
// Button Icons
|
|
static async saveButtonIcons(buttonIcons, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagButtonIcon] = buttonIcons;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveDogButtonIcon, 'POST', dataRequest);
|
|
}
|
|
|
|
// Command Button Links
|
|
static async saveCommandButtonLinks(links, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagCommandButtonLink] = links;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveDogCommandButtonLink, 'POST', dataRequest);
|
|
}
|
|
|
|
// Assessments
|
|
static async saveAssessments(assessments, formFilters, comment) {
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
|
dataRequest[flagAssessment] = assessments;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveDogAssessment, 'POST', dataRequest);
|
|
}
|
|
|
|
// Assessments
|
|
static async saveAssessmentsDistractionsAndResponses(assessments, formFilters, comment) {
|
|
let filtersJson = DOM.convertForm2JSON(formFilters);
|
|
filtersJson[attrIdAssessment] = null;
|
|
let dataRequest = {};
|
|
dataRequest[flagFormFilters] = filtersJson;
|
|
dataRequest[flagAssessment] = assessments;
|
|
dataRequest[flagComment] = comment;
|
|
return await API.request(hashSaveDogAssessmentDistractionAndResponse, 'POST', dataRequest);
|
|
}
|
|
|
|
}
|