declare var window: any; const defaultBasePath = ''; export function fetchAsync(method: 'GET' | 'POST' | 'DELETE' | 'PUT', url: string, body?: any) { const headers = { 'Content-Type': 'application/json; charset=utf-8' }; // if (access_token) headers['Authorization'] = `Token ${access_token}`; return window.fetch(`${defaultBasePath}${url}`, { method, headers, body: body && JSON.stringify(body) }).then((response: any) => { if (response.status === 401) { window.location.href = '/auth/login'; // throw new Error('401'); } if (response.status === 403 && url === '/api/v1/organization/') { // this indicates a user that is not supposed to be in bx-console window.location.href = '/auth/logout'; } const result = response.json(); if (!response.ok) throw result; return result; }); } export function get(url: string): Promise { return fetchAsync('GET', url); } export function post(url: string, body?: any): Promise { return fetchAsync('POST', url, body); } export function postWithFile(url: string, body?: any): Promise { return fetchWithFile('POST', url, body); } export function putWithFile(url: string, body?: any): Promise { return fetchWithFile('PUT', url, body); } export function fetchWithFile(method: string, url: string, body?: any): Promise { return window.fetch(`${defaultBasePath}${url}`, { method: method, body: body }).then((response: any) => { if (response.status === 401) { window.location.href = '/auth/login'; // throw new Error('401'); } const result = response.json(); if (!response.ok) throw result; return result; }) } export function del(url: string) { return fetchAsync('DELETE', url); } export function put(url: string, body?: any) { return fetchAsync('PUT', url, body); } export function toQueryString(obj: any) { const parts = []; for (var i in obj) { if (obj.hasOwnProperty(i)) { parts.push(encodeURIComponent(i) + "=" + encodeURIComponent(obj[i])); } } return parts.join("&"); } export function serializeObject(form: any) { let obj: {[key: string]: any} = {}; if (typeof form == 'object' && form.nodeName == "FORM") { for (let i = 0; i < form.elements.length; i++) { const field = form.elements[i]; if (field.name && field.type != 'file' && field.type != 'reset' && field.type != 'submit' && field.type != 'button') { if (field.type == 'select-multiple') { obj[field.name] = ''; let tempvalue = ''; for (let j = 0; j < form.elements[i].options.length; j++) { if (field.options[j].selected) tempvalue += field.options[j].value + ';'; } if (tempvalue.charAt(tempvalue.length - 1) === ';') obj[field.name] = tempvalue.substring(0, tempvalue.length - 1); } else if ((field.type != 'checkbox' && field.type != 'radio') || field.checked) { obj[field.name] = field.value; } } } } return obj as T; }