UNPKG

periodicjs.ext.reactapp

Version:
89 lines (86 loc) 3.12 kB
import { _invokeWebhooks } from './webhooks'; export const checkStatus = function (response) { return new Promise((resolve, reject) => { if (response.status >= 200 && response.status < 300) { resolve(response); } else { let error = new Error(response.statusText); error.response = response; try{ response.json() .then(res => { if(res.data && res.data.error){ reject(res.data.error); } else if(res.data){ reject(JSON.stringify(res.data)); } else if (res.message) { reject(res.message); } else if (res.error && res.error.message) { reject(res.error.message); } else{ reject(error); } }) .catch(()=>{ reject(error); }) } catch(e){ reject(error); } } }); }; export const fetchComponent = function (url, options = {}) { // console.log('fetchComponent this', this,{url,options}); return function () { // console.debug('fetchComponent',{ url, options }); return fetch(url, Object.assign({}, options)) .then(checkStatus) .then(res => res.json()) .catch(e => Promise.reject(e)); }; }; export const fetchPaths = function (basename, data = {}, headers) { let result = {}; let finished = Object.keys(data).map(key => { let val; if (typeof data[key] === 'string') val = [data[key], ]; else val = [data[key].url, data[key].options, ]; let additionalParams = ''; additionalParams = (typeof window !== 'undefined' && Object.keys(window).length && window.location) ? (window.location.search.charAt(0) === '?') ? window.location.search.substr(1) : window.location.search : ''; let route = val[0] || ''; let fetchOptions = Object.assign({}, val[1], { headers, }); let { onSuccess, onError, blocking, renderOnError } = fetchOptions; delete fetchOptions.onSuccess; delete fetchOptions.onError; return fetchComponent(`${ basename }${ route }${ (route && route.indexOf('?') === -1) ? '?' : '' }${ (route && route.indexOf('?') !== -1) ? '&' : '' }${additionalParams}`, fetchOptions)() .then(response => { result[key] = response; if (typeof onSuccess === 'string' || (Array.isArray(onSuccess) && onSuccess.length)) { if (blocking) { return _invokeWebhooks.call(this, onSuccess, response); } else { _invokeWebhooks.call(this, onSuccess, response); } } }, e => { if (typeof onError === 'string' || (Array.isArray(onError) && onError.length)) { if (renderOnError === false) result.__hasError = true; if (blocking) { return _invokeWebhooks.call(this, onError, e); } else { _invokeWebhooks.call(this, onError, e); } } else return Promise.reject(e); }) .catch(e => Promise.reject(e)); }); return Promise.all(finished) .then(() => result) .catch(e => Promise.reject(e)); };