UNPKG

@syncfusion/ej2-base

Version:

A common package of Essential JS 2 base libraries, methods and class definitions

178 lines (177 loc) 6.42 kB
/* 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 };