| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /**
- * DevExtreme (ui/editor/ui.data_expression.js)
- * Version: 19.1.16
- * Build date: Tue Oct 18 2022
- *
- * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
- * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
- */
- "use strict";
- function _typeof(obj) {
- "@babel/helpers - typeof";
- return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
- return typeof obj
- } : function(obj) {
- return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
- }, _typeof(obj)
- }
- var variableWrapper = require("../../core/utils/variable_wrapper");
- var dataCoreUtils = require("../../core/utils/data");
- var commonUtils = require("../../core/utils/common");
- var typeUtils = require("../../core/utils/type");
- var extend = require("../../core/utils/extend").extend;
- var DataHelperMixin = require("../../data_helper");
- var DataSourceModule = require("../../data/data_source/data_source");
- var ArrayStore = require("../../data/array_store");
- var Deferred = require("../../core/utils/deferred").Deferred;
- var DataExpressionMixin = extend({}, DataHelperMixin, {
- _dataExpressionDefaultOptions: function() {
- return {
- items: [],
- dataSource: null,
- itemTemplate: "item",
- value: null,
- valueExpr: "this",
- displayExpr: void 0
- }
- },
- _initDataExpressions: function() {
- this._compileValueGetter();
- this._compileDisplayGetter();
- this._initDynamicTemplates();
- this._initDataSource();
- this._itemsToDataSource()
- },
- _itemsToDataSource: function() {
- if (!this.option("dataSource")) {
- this._dataSource = new DataSourceModule.DataSource({
- store: new ArrayStore(this.option("items")),
- pageSize: 0
- })
- }
- },
- _compileDisplayGetter: function() {
- this._displayGetter = dataCoreUtils.compileGetter(this._displayGetterExpr())
- },
- _displayGetterExpr: function() {
- return this.option("displayExpr")
- },
- _compileValueGetter: function() {
- this._valueGetter = dataCoreUtils.compileGetter(this._valueGetterExpr())
- },
- _valueGetterExpr: function() {
- return this.option("valueExpr") || "this"
- },
- _loadValue: function(value) {
- var deferred = new Deferred;
- value = this._unwrappedValue(value);
- if (!typeUtils.isDefined(value)) {
- return deferred.reject().promise()
- }
- this._loadSingle(this._valueGetterExpr(), value).done(function(item) {
- this._isValueEquals(this._valueGetter(item), value) ? deferred.resolve(item) : deferred.reject()
- }.bind(this)).fail(function() {
- deferred.reject()
- });
- return deferred.promise()
- },
- _getCurrentValue: function() {
- return this.option("value")
- },
- _unwrappedValue: function(value) {
- value = typeUtils.isDefined(value) ? value : this._getCurrentValue();
- if (value && this._dataSource && "this" === this._valueGetterExpr()) {
- value = this._getItemKey(value)
- }
- return variableWrapper.unwrap(value)
- },
- _getItemKey: function(value) {
- var key = this._dataSource.key();
- if (Array.isArray(key)) {
- var result = {};
- for (var i = 0, n = key.length; i < n; i++) {
- result[key[i]] = value[key[i]]
- }
- return result
- }
- if (key && "object" === _typeof(value)) {
- value = value[key]
- }
- return value
- },
- _isValueEquals: function(value1, value2) {
- var dataSourceKey = this._dataSource && this._dataSource.key();
- var isDefined = typeUtils.isDefined;
- var result = this._compareValues(value1, value2);
- if (!result && dataSourceKey && isDefined(value1) && isDefined(value2)) {
- if (Array.isArray(dataSourceKey)) {
- result = this._compareByCompositeKey(value1, value2, dataSourceKey)
- } else {
- result = this._compareByKey(value1, value2, dataSourceKey)
- }
- }
- return result
- },
- _compareByCompositeKey: function(value1, value2, key) {
- var isObject = typeUtils.isObject;
- if (!isObject(value1) || !isObject(value2)) {
- return false
- }
- for (var i = 0, n = key.length; i < n; i++) {
- if (value1[key[i]] !== value2[key[i]]) {
- return false
- }
- }
- return true
- },
- _compareByKey: function(value1, value2, key) {
- var ensureDefined = commonUtils.ensureDefined;
- var unwrapObservable = variableWrapper.unwrap;
- var valueKey1 = ensureDefined(unwrapObservable(value1[key]), value1);
- var valueKey2 = ensureDefined(unwrapObservable(value2[key]), value2);
- return this._compareValues(valueKey1, valueKey2)
- },
- _compareValues: function(value1, value2) {
- return dataCoreUtils.toComparable(value1, true) === dataCoreUtils.toComparable(value2, true)
- },
- _initDynamicTemplates: commonUtils.noop,
- _setCollectionWidgetItemTemplate: function() {
- this._initDynamicTemplates();
- this._setCollectionWidgetOption("itemTemplate", this.option("itemTemplate"))
- },
- _getCollectionKeyExpr: function() {
- var valueExpr = this.option("valueExpr");
- var isValueExprField = typeUtils.isString(valueExpr) && "this" !== valueExpr || typeUtils.isFunction(valueExpr);
- return isValueExprField ? valueExpr : null
- },
- _dataExpressionOptionChanged: function(args) {
- switch (args.name) {
- case "items":
- this._itemsToDataSource();
- this._setCollectionWidgetOption("items");
- break;
- case "dataSource":
- this._initDataSource();
- break;
- case "itemTemplate":
- this._setCollectionWidgetItemTemplate();
- break;
- case "valueExpr":
- this._compileValueGetter();
- break;
- case "displayExpr":
- this._compileDisplayGetter();
- this._initDynamicTemplates();
- this._setCollectionWidgetOption("displayExpr")
- }
- }
- });
- module.exports = DataExpressionMixin;
|