breeze-client
Version:
Breeze data management for JavaScript clients
115 lines (111 loc) • 4.1 kB
JavaScript
import { config, core } from 'breeze-client';
class AjaxJQueryAdapter {
name;
defaultSettings;
requestInterceptor;
jQuery;
constructor() {
this.name = "jQuery";
this.defaultSettings = {};
this.requestInterceptor = undefined;
}
static register(breezeConfig) {
breezeConfig = breezeConfig || config;
breezeConfig.registerAdapter("ajax", AjaxJQueryAdapter);
return breezeConfig.initializeAdapterInstance("ajax", "jQuery", true);
}
initialize() {
this.jQuery = jQuery;
// look for the jQuery lib but don't fail immediately if not found
if (!jQuery) {
this.jQuery = core.requireLib("jQuery;jquery");
}
}
ajax(config) {
if (!this.jQuery) {
throw new Error("Unable to locate jQuery");
}
let jqConfig = {
type: config.type,
url: config.url,
data: config.params || config.data,
dataType: config.dataType,
contentType: config.contentType,
crossDomain: config.crossDomain,
headers: config.headers || {}
};
if (!core.isEmpty(this.defaultSettings)) {
let compositeConfig = core.extend({}, this.defaultSettings);
jqConfig = core.extend(compositeConfig, jqConfig);
// extend is shallow; extend headers separately
let headers = core.extend({}, this.defaultSettings.headers); // copy default headers 1st
jqConfig.headers = core.extend(headers, jqConfig.headers);
}
let requestInfo = {
adapter: this,
config: jqConfig,
dsaConfig: config,
success: successFn,
error: errorFn, // adapter's error callback
};
if (core.isFunction(this.requestInterceptor)) {
let ri = this.requestInterceptor;
ri(requestInfo);
if (ri.oneTime) {
this.requestInterceptor = undefined;
}
}
if (requestInfo.config) { // exists unless requestInterceptor killed it.
requestInfo.jqXHR = this.jQuery.ajax(requestInfo.config)
.done(requestInfo.success)
.fail(requestInfo.error);
}
function successFn(data, statusText, jqXHR) {
let httpResponse = {
config: config,
data: data,
getHeaders: getHeadersFn(jqXHR),
status: jqXHR.status,
statusText: statusText
};
config.success(httpResponse);
// TODO: not sure how to do this or if needed.
// jqXHR.onreadystatechange = null;
// jqXHR.abort = null;
}
function errorFn(jqXHR, statusText, errorThrown) {
let httpResponse = {
config: config,
data: jqXHR.responseText,
error: errorThrown,
getHeaders: getHeadersFn(jqXHR),
status: jqXHR.status,
statusText: statusText
};
config.error(httpResponse);
// TODO: not sure how to do this or if needed.
// jqXHR.onreadystatechange = null;
// jqXHR.abort = null;
}
}
}
config.registerAdapter("ajax", AjaxJQueryAdapter);
function getHeadersFn(jqXHR) {
if (jqXHR.status === 0) { // timeout or abort; no headers
return function (headerName) {
return (headerName && headerName.length > 0) ? "" : {};
};
}
else { // jqXHR should have header functions
return function (headerName) {
return (headerName && headerName.length > 0) ?
jqXHR.getResponseHeader(headerName) :
jqXHR.getAllResponseHeaders();
};
}
}
/**
* Generated bundle index. Do not edit.
*/
export { AjaxJQueryAdapter };
//# sourceMappingURL=breeze-client-adapter-ajax-jquery.mjs.map