import { Settings } from 'Common/Globals'; import { i18n } from 'Common/Translator'; import { root } from 'Common/Links'; import { isArray } from 'Common/Utils'; const FormDataToObject = formData => { var object = {}; formData.forEach((value, key) => { if (!Reflect.has(object, key)){ object[key] = value; } else { isArray(object[key]) || (object[key] = [object[key]]); object[key].push(value); } }); return object; }; export default App => { rl.app = App; rl.logoutReload = App.logoutReload; rl.i18n = i18n; rl.Enums = { StorageResultType: { Success: 0, Error: 1, Abort: 2 } }; rl.route = { root: () => { rl.route.off(); hasher.setHash(root()); }, reload: () => { rl.route.root(); setTimeout(() => (Settings.app('inIframe') ? parent : window).location.reload(), 100); }, off: () => hasher.active = false, on: () => hasher.active = true }; rl.fetch = (resource, init, postData) => { init = Object.assign({ mode: 'same-origin', cache: 'no-cache', redirect: 'error', referrerPolicy: 'no-referrer', credentials: 'same-origin', headers: {} }, init); if (postData) { init.method = 'POST'; init.headers['Content-Type'] = 'application/json'; postData = (postData instanceof FormData) ? FormDataToObject(postData) : postData; postData.XToken = Settings.app('token'); init.body = JSON.stringify(postData); } return fetch(resource, init); }; rl.fetchJSON = (resource, init, postData) => { init = Object.assign({ headers: {} }, init); init.headers.Accept = 'application/json'; return rl.fetch(resource, init, postData).then(response => { if (!response.ok) { return Promise.reject('Network response error: ' + response.status); } /* TODO: use this for non-developers? response.clone() let data = response.text(); try { return JSON.parse(data); } catch (e) { console.error(e); // console.log(data); return Promise.reject(Notification.JsonParse); return { Result: false, ErrorCode: 952, // Notification.JsonParse ErrorMessage: e.message, ErrorMessageAdditional: data } } */ return response.json(); }); }; };