UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

174 lines (172 loc) 6.67 kB
/** * DevExtreme (cjs/__internal/ui/editor/m_data_expression.js) * Version: 24.2.6 * Build date: Mon Mar 17 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _array_store = _interopRequireDefault(require("../../../common/data/array_store")); var _data_source = _interopRequireDefault(require("../../../common/data/data_source")); var _common = require("../../../core/utils/common"); var _data = require("../../../core/utils/data"); var _deferred = require("../../../core/utils/deferred"); var _extend = require("../../../core/utils/extend"); var _type = require("../../../core/utils/type"); var _variable_wrapper = _interopRequireDefault(require("../../../core/utils/variable_wrapper")); var _data_helper = _interopRequireDefault(require("../../../data_helper")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } const DataExpressionMixin = (0, _extend.extend)({}, _data_helper.default, { _dataExpressionDefaultOptions: () => ({ items: [], dataSource: null, itemTemplate: "item", value: null, valueExpr: "this", displayExpr: void 0 }), _initDataExpressions() { this._compileValueGetter(); this._compileDisplayGetter(); this._initDynamicTemplates(); this._initDataSource(); this._itemsToDataSource() }, _itemsToDataSource() { if (!this.option("dataSource")) { this._dataSource = new _data_source.default({ store: new _array_store.default(this.option("items")), pageSize: 0 }); this._initDataController() } }, _compileDisplayGetter() { this._displayGetter = (0, _data.compileGetter)(this._displayGetterExpr()) }, _displayGetterExpr() { return this.option("displayExpr") }, _compileValueGetter() { this._valueGetter = (0, _data.compileGetter)(this._valueGetterExpr()) }, _valueGetterExpr() { return this.option("valueExpr") || "this" }, _loadValue(value) { const deferred = (0, _deferred.Deferred)(); value = this._unwrappedValue(value); if (!(0, _type.isDefined)(value)) { return deferred.reject().promise() } this._loadSingle(this._valueGetterExpr(), value).done((item => { this._isValueEquals(this._valueGetter(item), value) ? deferred.resolve(item) : deferred.reject() })).fail((() => { deferred.reject() })); this._loadValueDeferred = deferred; return deferred.promise() }, _rejectValueLoading() { var _this$_loadValueDefer; null === (_this$_loadValueDefer = this._loadValueDeferred) || void 0 === _this$_loadValueDefer || _this$_loadValueDefer.reject({ shouldSkipCallback: true }) }, _getCurrentValue() { return this.option("value") }, _unwrappedValue(value) { value = value ?? this._getCurrentValue(); if (value && this._dataSource && "this" === this._valueGetterExpr()) { value = this._getItemKey(value) } return _variable_wrapper.default.unwrap(value) }, _getItemKey(value) { const key = this._dataSource.key(); if (Array.isArray(key)) { const result = {}; for (let 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(value1, value2) { const dataSourceKey = this._dataSource && this._dataSource.key(); let result = this._compareValues(value1, value2); if (!result && dataSourceKey && (0, _type.isDefined)(value1) && (0, _type.isDefined)(value2)) { if (Array.isArray(dataSourceKey)) { result = this._compareByCompositeKey(value1, value2, dataSourceKey) } else { result = this._compareByKey(value1, value2, dataSourceKey) } } return result }, _compareByCompositeKey(value1, value2, key) { const isObject = _type.isObject; if (!isObject(value1) || !isObject(value2)) { return false } for (let i = 0, n = key.length; i < n; i++) { if (value1[key[i]] !== value2[key[i]]) { return false } } return true }, _compareByKey(value1, value2, key) { const unwrapObservable = _variable_wrapper.default.unwrap; const valueKey1 = (0, _common.ensureDefined)(unwrapObservable(value1[key]), value1); const valueKey2 = (0, _common.ensureDefined)(unwrapObservable(value2[key]), value2); return this._compareValues(valueKey1, valueKey2) }, _compareValues: (value1, value2) => (0, _data.toComparable)(value1, true) === (0, _data.toComparable)(value2, true), _initDynamicTemplates: _common.noop, _setCollectionWidgetItemTemplate() { this._initDynamicTemplates(); this._setCollectionWidgetOption("itemTemplate", this.option("itemTemplate")) }, _getCollectionKeyExpr() { const valueExpr = this.option("valueExpr"); const isValueExprField = (0, _type.isString)(valueExpr) && "this" !== valueExpr || (0, _type.isFunction)(valueExpr); return isValueExprField ? valueExpr : null }, _dataExpressionOptionChanged(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") } } }); var _default = exports.default = DataExpressionMixin;