UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

164 lines (146 loc) 4.93 kB
"use strict"; var Class = require("../../core/class"), extend = require("../../core/utils/extend").extend, typeUtils = require("../../core/utils/type"), each = require("../../core/utils/iterator").each, errorsModule = require("../errors"), ODataStore = require("./store"), mixins = require("./mixins"), deferredUtils = require("../../core/utils/deferred"), when = deferredUtils.when, Deferred = deferredUtils.Deferred; require("./query_adapter"); /** * @name ODataContext * @publicName ODataContext * @type object * @module data/odata/context * @export default */ var ODataContext = Class.inherit({ ctor: function ctor(options) { var that = this; /** * @name ODataContextOptions.url * @publicName url * @type string */ /** * @name ODataContextOptions.beforeSend * @publicName beforeSend * @type function * @type_function_param1 options:object * @type_function_param1_field1 url:string * @type_function_param1_field2 async:boolean * @type_function_param1_field3 method:string * @type_function_param1_field4 timeout:number * @type_function_param1_field5 params:object * @type_function_param1_field6 payload:object * @type_function_param1_field7 headers:object */ /** * @name ODataContextOptions.jsonp * @publicName jsonp * @type boolean * @default false */ /** * @name ODataContextOptions.version * @publicName version * @type number * @default 2 * @acceptValues 2|3|4 */ /** * @name ODataContextOptions.withCredentials * @publicName withCredentials * @type boolean * @default false */ /** * @name ODataContextOptions.deserializeDates * @publicName deserializeDates * @type boolean */ that._extractServiceOptions(options); /** * @name ODataContextOptions.errorHandler * @publicName errorHandler * @type function */ that._errorHandler = options.errorHandler; /** * @name ODataContextOptions.entities * @publicName entities * @type object */ each(options.entities || [], function (entityAlias, entityOptions) { that[entityAlias] = new ODataStore(extend({}, options, { url: that._url + "/" + encodeURIComponent(entityOptions.name || entityAlias) }, entityOptions)); }); }, /** * @name ODataContextmethods.get * @publicName get(operationName, params) * @param1 operationName:string * @param2 params:object * @return Promise<any> */ get: function get(operationName, params) { return this.invoke(operationName, params, "GET"); }, /** * @name ODataContextmethods.invoke * @publicName invoke(operationName, params, httpMethod) * @param1 operationName:string * @param2 params:object * @param3 httpMethod:object * @return Promise<void> */ invoke: function invoke(operationName, params, httpMethod) { params = params || {}; httpMethod = (httpMethod || "POST").toLowerCase(); var d = new Deferred(), url = this._url + "/" + encodeURIComponent(operationName), payload; if (this.version() === 4) { if (httpMethod === "get") { url = mixins.formatFunctionInvocationUrl(url, mixins.escapeServiceOperationParams(params, this.version())); params = null; } else if (httpMethod === "post") { payload = params; params = null; } } when(this._sendRequest(url, httpMethod, mixins.escapeServiceOperationParams(params, this.version()), payload)).done(function (r) { if (typeUtils.isPlainObject(r) && operationName in r) { r = r[operationName]; } d.resolve(r); }).fail(this._errorHandler).fail(errorsModule._errorHandler).fail(d.reject); return d.promise(); }, /** * @name ODataContextmethods.objectLink * @publicName objectLink(entityAlias, key) * @param1 entityAlias:string * @param2 key:object|string|number * @return object */ objectLink: function objectLink(entityAlias, key) { var store = this[entityAlias]; if (!store) { throw errorsModule.errors.Error("E4015", entityAlias); } if (!typeUtils.isDefined(key)) { return null; } return { __metadata: { uri: store._byKeyUrl(key, true) } }; } }).include(mixins.SharedMethods); module.exports = ODataContext;