UNPKG

breeze-client

Version:

Breeze data management for JavaScript clients

115 lines (111 loc) 4.1 kB
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