devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
102 lines (101 loc) • 3.56 kB
JavaScript
/**
* DevExtreme (esm/core/options/option_manager.js)
* Version: 21.1.4
* Build date: Mon Jun 21 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
compileGetter,
compileSetter
} from "../utils/data";
import {
noop
} from "../utils/common";
import {
equals
} from "../utils/comparator";
import {
extend
} from "../utils/extend";
import {
isDefined,
isPlainObject
} from "../utils/type";
import {
normalizeOptions
} from "./utils";
var cachedGetters = {};
var cachedSetters = {};
export class OptionManager {
constructor(options, optionsByReference) {
this._options = options;
this._optionsByReference = optionsByReference;
this._changingCallback;
this._changedCallback;
this._namePreparedCallbacks
}
_setByReference(options, rulesOptions) {
extend(true, options, rulesOptions);
for (var fieldName in this._optionsByReference) {
if (Object.prototype.hasOwnProperty.call(rulesOptions, fieldName)) {
options[fieldName] = rulesOptions[fieldName]
}
}
}
_setPreparedValue(name, value, merge, silent) {
var previousValue = this.get(this._options, name, false);
if (!equals(previousValue, value)) {
var path = name.split(/[.[]/);
!silent && this._changingCallback(name, previousValue, value);
cachedSetters[name] = cachedSetters[name] || compileSetter(name);
cachedSetters[name](this._options, value, {
functionsAsIs: true,
merge: isDefined(merge) ? merge : !this._optionsByReference[name],
unwrapObservables: path.length > 1 && !!this._optionsByReference[path[0]]
});
!silent && this._changedCallback(name, value, previousValue)
}
}
_prepareRelevantNames(options, name, value, silent) {
if (isPlainObject(value)) {
for (var valueName in value) {
this._prepareRelevantNames(options, "".concat(name, ".").concat(valueName), value[valueName])
}
}
this._namePreparedCallbacks(options, name, value, silent)
}
get() {
var options = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this._options;
var name = arguments.length > 1 ? arguments[1] : void 0;
var unwrapObservables = arguments.length > 2 ? arguments[2] : void 0;
cachedGetters[name] = cachedGetters[name] || compileGetter(name);
return cachedGetters[name](options, {
functionsAsIs: true,
unwrapObservables: unwrapObservables
})
}
set(options, value, merge, silent) {
options = normalizeOptions(options, value);
for (var name in options) {
this._prepareRelevantNames(options, name, options[name], silent)
}
for (var _name in options) {
this._setPreparedValue(_name, options[_name], merge, silent)
}
}
onRelevantNamesPrepared(callBack) {
this._namePreparedCallbacks = callBack
}
onChanging(callBack) {
this._changingCallback = callBack
}
onChanged(callBack) {
this._changedCallback = callBack
}
dispose() {
this._changingCallback = noop;
this._changedCallback = noop
}
}