export function Api(ajaxOption){
ajaxOption = Api.preFetch(ajaxOption);
const method = ajaxOption.method.toLocaleUpperCase();
let headers;
if(ajaxOption.headers){
if(ajaxOption.headers.target){
headers = Object.assign({}, ajaxOption.headers);
headers.target = substitute(headers.target, ajaxOption.data, true);
}else{
headers = ajaxOption.headers;
}
}
ajaxOption.headers = headers;
ajaxOption.credential = ajaxOption.withCredentials ? 'INCLUDE' : 'SAME_ORIGIN';
const uri = substitute(ajaxOption.url, ajaxOption.data, true);
switch(method){
case 'POST':
case 'PUT':
return Api.postput(uri, method, ajaxOption.data, ajaxOption);
case 'DELETE':
return Api.delete(getUrl(uri, ajaxOption.data), ajaxOption)
case 'GET':
default:
return Api.get(getUrl(uri, ajaxOption.data), ajaxOption)
}
}
function getUrl(uri, data){
if(data){
const idx = uri.indexOf('?');
if(idx > -1){
if(idx > (uri.length - 1)){
return uri + param(data);
}else{
return uri + '&' + param(data);
}
}else{
return uri + '?' + param(data);
}
}else{
return uri;
}
}
Api.headers = Object.assign(window.ajaxHeader || {}, {
'Accept': constants.APP_JSON_HEADER,
'Content-Type': constants.APP_JSON_HEADER
});
Api.fetch = fetch;
Api.preFetch = d => d;
Object.assign(Api, {
success(res){
return Promise.resolve(res);
},
error(err){
return Promise.reject(err);
},
get(uri, ajaxOption = {}){
return fetch(uri,
{
method: 'GET',
credentials: constants[ajaxOption.credential],
headers: ajaxOption.headers || Api.headers
})
.then(response => checkStatus(response, ajaxOption))
.then(response => parseJSON(response, ajaxOption));
},
delete(uri, ajaxOption = {}){
return fetch(uri,
{
method: 'DELETE',
credentials: constants[ajaxOption.credential],
headers: ajaxOption.headers || Api.headers
})
.then(response => checkStatus(response, ajaxOption))
.then(response => parseJSON(response, ajaxOption));
},
postput(uri, method, data, ajaxOption = {}){
return fetch(uri,
{
method: method,
credentials: constants[ajaxOption.credential],
headers: ajaxOption.headers || Api.headers,
body: JSON.stringify(data)
})
.then(response => checkStatus(response, ajaxOption))
.then(response => parseJSON(response, ajaxOption));
},
post(uri, data, ajaxOption = {}){
return Api.postput(uri, 'POST', data, ajaxOption);
},
put(uri, data, ajaxOption = {}){
return Api.postput(uri, 'PUT', data, ajaxOption);
}
});