UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

261 lines (260 loc) 17.8 kB
/** * @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=