@syncfusion/ej2-base
Version:
A common package of Essential JS 2 base libraries, methods and class definitions
178 lines (177 loc) • 6.42 kB
JavaScript
/* eslint-disable @typescript-eslint/no-explicit-any */
import { getValue, setValue, merge, isBlazor } from './util';
import { Base } from './base';
/**
* To detect the changes for inner properties.
*
* @private
* @returns {void} ?
*/
var ChildProperty = /** @class */ (function () {
function ChildProperty(parent, propName, defaultValue, isArray) {
this.isComplexArraySetter = false;
this.properties = {};
this.changedProperties = {};
this.childChangedProperties = {};
this.oldProperties = {};
this.finalUpdate = function () { };
this.callChildDataBind = getValue('callChildDataBind', Base);
this.parentObj = parent;
this.controlParent = this.parentObj.controlParent || this.parentObj;
this.propName = propName;
this.isParentArray = isArray;
this.setProperties(defaultValue, true);
}
/**
* Updates the property changes
*
* @param {boolean} val ?
* @param {string} propName ?
* @returns {void} ?
*/
ChildProperty.prototype.updateChange = function (val, propName) {
if (val === true) {
this.parentObj.childChangedProperties["" + propName] = val;
}
else {
delete this.parentObj.childChangedProperties["" + propName];
}
if (this.parentObj.updateChange) {
this.parentObj.updateChange(val, this.parentObj.propName);
}
};
/**
* Updates time out duration
*
* @returns {void} ?
*/
ChildProperty.prototype.updateTimeOut = function () {
if (this.parentObj.updateTimeOut) {
this.parentObj.finalUpdate();
this.parentObj.updateTimeOut();
}
else {
var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));
var clearUpdate = function () {
clearTimeout(changeTime_1);
};
this.finalUpdate = clearUpdate;
}
};
/**
* Clears changed properties
*
* @returns {void} ?
*/
ChildProperty.prototype.clearChanges = function () {
this.finalUpdate();
this.updateChange(false, this.propName);
this.oldProperties = {};
this.changedProperties = {};
};
/**
* Set property changes
*
* @param {Object} prop ?
* @param {boolean} muteOnChange ?
* @returns {void} ?
*/
ChildProperty.prototype.setProperties = function (prop, muteOnChange) {
if (muteOnChange === true) {
merge(this, prop);
this.updateChange(false, this.propName);
this.clearChanges();
}
else {
merge(this, prop);
}
};
/**
* Binds data
*
* @returns {void} ?
*/
ChildProperty.prototype.dataBind = function () {
this.callChildDataBind(this.childChangedProperties, this);
if (this.isParentArray) {
var curIndex = this.parentObj[this.propName].indexOf(this);
if (Object.keys(this.changedProperties).length) {
setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);
setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);
}
}
else {
this.parentObj.changedProperties[this.propName] = this.changedProperties;
this.parentObj.oldProperties[this.propName] = this.oldProperties;
}
this.clearChanges();
};
/**
* Saves changes to newer values
*
* @param {string} key ?
* @param {Object} newValue ?
* @param {Object} oldValue ?
* @param {boolean} restrictServerDataBind ?
* @returns {void} ?
*/
ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {
if (this.controlParent.isProtectedOnChange) {
return;
}
if (!restrictServerDataBind) {
this.serverDataBind(key, newValue, true);
}
this.oldProperties["" + key] = oldValue;
this.changedProperties["" + key] = newValue;
this.updateChange(true, this.propName);
this.finalUpdate();
this.updateTimeOut();
};
ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {
if (isBlazor() && !this.parentObj.isComplexArraySetter) {
var parent_1;
var newChanges = {};
var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;
/* istanbul ignore else */
if (parentKey.indexOf('.') !== -1) {
var complexKeys = parentKey.split('.');
parent_1 = newChanges;
for (var i = 0; i < complexKeys.length; i++) {
var isFinal = i === complexKeys.length - 1;
parent_1[complexKeys[parseInt(i.toString(), 10)]] = isFinal ? value : {};
parent_1 = isFinal ? parent_1 : parent_1[complexKeys[parseInt(i.toString(), 10)]];
}
}
else {
newChanges["" + parentKey] = {};
parent_1 = newChanges["" + parentKey];
newChanges["" + parentKey]["" + key] = value;
}
/* istanbul ignore next */
if (this.isParentArray) {
var actionProperty = 'ejsAction';
parent_1["" + actionProperty] = action ? action : 'none';
}
this.controlParent.serverDataBind(newChanges);
}
};
ChildProperty.prototype.getParentKey = function (isSaveChanges) {
var index = '';
var propName = this.propName;
/* istanbul ignore next */
if (this.isParentArray) {
index = this.parentObj[this.propName].indexOf(this);
var valueLength = this.parentObj[this.propName].length;
valueLength = isSaveChanges ? valueLength : (valueLength > 0 ? valueLength - 1 : 0);
index = index !== -1 ? '-' + index : '-' + valueLength;
propName = propName + index;
}
if (this.controlParent !== this.parentObj) {
propName = this.parentObj.getParentKey() + '.' + this.propName + index;
}
return propName;
};
return ChildProperty;
}());
export { ChildProperty };