com.phloxui
Version:
PhloxUI Ng2+ Framework
261 lines (260 loc) • 17.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { TableRowController } from './TableRowController';
var ExpandableTableRowController = /** @class */ (function (_super) {
tslib_1.__extends(ExpandableTableRowController, _super);
function ExpandableTableRowController(table, data, parent) {
var _this = _super.call(this, table, data) || this;
_this.children = [];
_this.setParent(parent);
_this.expanding = false;
return _this;
}
/**
* @param {?} row
* @param {?} show
* @param {?=} recursive
* @return {?}
*/
ExpandableTableRowController.prototype.setShowing = /**
* @param {?} row
* @param {?} show
* @param {?=} recursive
* @return {?}
*/
function (row, show, recursive) {
if (recursive === void 0) { recursive = true; }
if (row.instance !== null && typeof row.instance !== 'undefined' && typeof row.instance.setShowing === 'function') {
row.instance.setShowing(show);
}
if (recursive) {
try {
for (var _a = tslib_1.__values(row.getChildren()), _b = _a.next(); !_b.done; _b = _a.next()) {
var child = _b.value;
this.setShowing(child, show && row.isExpanding(), recursive);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_1) throw e_1.error; }
}
}
var e_1, _c;
};
/**
* @param {?} child
* @return {?}
*/
ExpandableTableRowController.prototype.addChild = /**
* @param {?} child
* @return {?}
*/
function (child) {
if (child === null || typeof child === 'undefined') {
return false;
}
if (this.hasChild(child)) {
return false;
}
this.children.push(child);
// Auto expand this node
this.expand();
return true;
};
/**
* @param {?} child
* @return {?}
*/
ExpandableTableRowController.prototype.removeChild = /**
* @param {?} child
* @return {?}
*/
function (child) {
if (child === null || typeof child === 'undefined') {
return false;
}
var /** @type {?} */ idx = this.children.indexOf(child);
if (idx < 0) {
return false;
}
this.children.splice(idx, 1);
if (this.children.length <= 0) {
// If it is last child, auto contract this node
this.contract();
}
return true;
};
/**
* @return {?}
*/
ExpandableTableRowController.prototype.getParent = /**
* @return {?}
*/
function () {
return this.parent;
};
/**
* @param {?} parent
* @return {?}
*/
ExpandableTableRowController.prototype.setParent = /**
* @param {?} parent
* @return {?}
*/
function (parent) {
if (this.parent === parent) {
// If the same value is being set, do nothing.
return;
}
if (this.parent !== null && typeof this.parent !== 'undefined' && typeof this.parent['removeChild'] === 'function') {
// Remove "this" from parent's children[] first.
(/** @type {?} */ (this.parent)).removeChild(this);
}
this.parent = parent;
if (this.parent !== null && typeof this.parent !== 'undefined' && typeof this.parent['addChild'] === 'function') {
// Add "this" into new parent's children[].
(/** @type {?} */ (this.parent)).addChild(this);
}
};
/**
* @return {?}
*/
ExpandableTableRowController.prototype.getChildren = /**
* @return {?}
*/
function () {
return [].concat(this.children);
};
/**
* @return {?}
*/
ExpandableTableRowController.prototype.hasChildren = /**
* @return {?}
*/
function () {
return this.children.length > 0;
};
/**
* @param {?} child
* @return {?}
*/
ExpandableTableRowController.prototype.hasChild = /**
* @param {?} child
* @return {?}
*/
function (child) {
if (child === null || typeof child === 'undefined') {
return false;
}
return this.children.indexOf(child) >= 0;
};
/**
* @return {?}
*/
ExpandableTableRowController.prototype.expand = /**
* @return {?}
*/
function () {
this.setExpanding(true);
};
/**
* @return {?}
*/
ExpandableTableRowController.prototype.contract = /**
* @return {?}
*/
function () {
this.setExpanding(false);
};
/**
* @return {?}
*/
ExpandableTableRowController.prototype.toggleExpand = /**
* @return {?}
*/
function () {
this.setExpanding(!this.expanding);
};
/**
* @param {?} expand
* @return {?}
*/
ExpandableTableRowController.prototype.setExpanding = /**
* @param {?} expand
* @return {?}
*/
function (expand) {
this.expanding = expand;
try {
// Set all of its children to be hidden/shown.
for (var _a = tslib_1.__values(this.children), _b = _a.next(); !_b.done; _b = _a.next()) {
var child = _b.value;
this.setShowing(child, expand);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_2) throw e_2.error; }
}
var e_2, _c;
};
/**
* @return {?}
*/
ExpandableTableRowController.prototype.isExpanding = /**
* @return {?}
*/
function () {
return this.expanding;
};
/**
* @param {?} oldState
* @return {?}
*/
ExpandableTableRowController.prototype.loadState = /**
* @param {?} oldState
* @return {?}
*/
function (oldState) {
_super.prototype.loadState.call(this, oldState);
if (oldState === null || typeof oldState === 'undefined') {
return;
}
this.setExpanding(oldState.isExpanding());
};
/**
* @return {?}
*/
ExpandableTableRowController.prototype.getExpandLevel = /**
* @return {?}
*/
function () {
var /** @type {?} */ result = 0;
var /** @type {?} */ parent = this.getParent();
while (parent !== null && typeof parent !== 'undefined') {
result++;
parent = parent.getParent();
}
return result;
};
return ExpandableTableRowController;
}(TableRowController));
export { ExpandableTableRowController };
function ExpandableTableRowController_tsickle_Closure_declarations() {
/** @type {?} */
ExpandableTableRowController.prototype.parent;
/** @type {?} */
ExpandableTableRowController.prototype.children;
/** @type {?} */
ExpandableTableRowController.prototype.expanding;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC90YWJsZS9FeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHMUQsSUFBQTtJQUFrRCx3REFBa0I7MENBTS9DLEtBQWlCLEVBQUUsSUFBVSxFQUFFLE1BQXNDO29CQUN0RixrQkFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBRWxCLEtBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLEtBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsS0FBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Ozs7Ozs7OztJQUdqQixpREFBVTs7Ozs7O2NBQUMsR0FBUSxFQUFFLElBQWEsRUFBRSxTQUF5QjtRQUF6QiwwQkFBQSxFQUFBLGdCQUF5QjtRQUNuRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNsSCxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtRQUVELEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O2dCQUNkLEdBQUcsQ0FBQyxDQUFjLElBQUEsS0FBQSxpQkFBQSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUEsZ0JBQUE7b0JBQTlCLElBQUksS0FBSyxXQUFBO29CQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxF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QUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3hELE1BQU0sRUFBRSxDQUFDO1lBRVQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUM3QjtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUM7O3VDQXhKbEI7RUFJa0Qsa0JBQWtCLEVBdUpuRSxDQUFBO0FBdkpELHdDQXVKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBobG94VGFibGUgfSBmcm9tICcuL1BobG94VGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93Q29udHJvbGxlciB9IGZyb20gJy4vVGFibGVSb3dDb250cm9sbGVyJztcbmltcG9ydCB7IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyIH0gZnJvbSAnLi9JRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcic7XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyIGV4dGVuZHMgVGFibGVSb3dDb250cm9sbGVyIGltcGxlbWVudHMgSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXIge1xuXG4gIHByb3RlY3RlZCBwYXJlbnQ6IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgY2hpbGRyZW46IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyW107XG4gIHByb3RlY3RlZCBleHBhbmRpbmc6IGJvb2xlYW47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRhYmxlOiBQaGxveFRhYmxlLCBkYXRhPzogYW55LCBwYXJlbnQ/OiBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcikge1xuICAgIHN1cGVyKHRhYmxlLCBkYXRhKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLnNldFBhcmVudChwYXJlbnQpO1xuICAgIHRoaXMuZXhwYW5kaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldFNob3dpbmcocm93OiBhbnksIHNob3c6IGJvb2xlYW4sIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAocm93Lmluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiByb3cuaW5zdGFuY2UgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiByb3cuaW5zdGFuY2Uuc2V0U2hvd2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcm93Lmluc3RhbmNlLnNldFNob3dpbmcoc2hvdyk7XG4gICAgfVxuXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygcm93LmdldENoaWxkcmVuKCkpIHtcbiAgICAgICAgdGhpcy5zZXRTaG93aW5nKGNoaWxkLCBzaG93ICYmIHJvdy5pc0V4cGFuZGluZygpLCByZWN1cnNpdmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRDaGlsZChjaGlsZDogSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXIpOiBib29sZWFuIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNDaGlsZChjaGlsZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgLy8gQXV0byBleHBhbmQgdGhpcyBub2RlXG4gICAgdGhpcy5leHBhbmQoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZUNoaWxkKGNoaWxkOiBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcik6IGJvb2xlYW4ge1xuICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGlkeDogbnVtYmVyID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XG5cbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMCkge1xuICAgICAgLy8gSWYgaXQgaXMgbGFzdCBjaGlsZCwgYXV0byBjb250cmFjdCB0aGlzIG5vZGVcbiAgICAgIHRoaXMuY29udHJhY3QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJlbnQoKTogSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRQYXJlbnQocGFyZW50OiBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gcGFyZW50KSB7XG4gICAgICAvLyBJZiB0aGUgc2FtZSB2YWx1ZSBpcyBiZWluZyBzZXQsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnBhcmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMucGFyZW50WydyZW1vdmVDaGlsZCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBSZW1vdmUgXCJ0aGlzXCIgZnJvbSBwYXJlbnQncyBjaGlsZHJlbltdIGZpcnN0LlxuICAgICAgKDxhbnk+dGhpcy5wYXJlbnQpLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnBhcmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMucGFyZW50WydhZGRDaGlsZCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGQgXCJ0aGlzXCIgaW50byBuZXcgcGFyZW50J3MgY2hpbGRyZW5bXS5cbiAgICAgICg8YW55PnRoaXMucGFyZW50KS5hZGRDaGlsZCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2hpbGRyZW4oKTogSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXJbXSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCh0aGlzLmNoaWxkcmVuKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIGhhc0NoaWxkKGNoaWxkOiBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcik6IGJvb2xlYW4ge1xuICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCkgPj0gMDtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRFeHBhbmRpbmcodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY29udHJhY3QoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRFeHBhbmRpbmcoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUV4cGFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEV4cGFuZGluZyghdGhpcy5leHBhbmRpbmcpO1xuICB9XG5cbiAgcHVibGljIHNldEV4cGFuZGluZyhleHBhbmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGluZyA9IGV4cGFuZDtcblxuICAgIC8vIFNldCBhbGwgb2YgaXRzIGNoaWxkcmVuIHRvIGJlIGhpZGRlbi9zaG93bi5cbiAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLnNldFNob3dpbmcoY2hpbGQsIGV4cGFuZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRXhwYW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGluZztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlXG4gIHB1YmxpYyBsb2FkU3RhdGUob2xkU3RhdGU6IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyKTogdm9pZCB7XG4gICAgc3VwZXIubG9hZFN0YXRlKG9sZFN0YXRlKTtcblxuICAgIGlmIChvbGRTdGF0ZSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2xkU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRFeHBhbmRpbmcob2xkU3RhdGUuaXNFeHBhbmRpbmcoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwYW5kTGV2ZWwoKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSAwO1xuXG4gICAgbGV0IHBhcmVudDogYW55ID0gdGhpcy5nZXRQYXJlbnQoKTtcblxuICAgIHdoaWxlIChwYXJlbnQgIT09IG51bGwgJiYgdHlwZW9mIHBhcmVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc3VsdCsrO1xuXG4gICAgICBwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG4iXX0=