com.phloxui
Version:
PhloxUI Ng2+ Framework
184 lines (183 loc) • 15 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { TableRowController } from './TableRowController';
export class ExpandableTableRowController extends TableRowController {
/**
* @param {?} table
* @param {?=} data
* @param {?=} parent
*/
constructor(table, data, parent) {
super(table, data);
this.children = [];
this.setParent(parent);
this.expanding = false;
}
/**
* @param {?} row
* @param {?} show
* @param {?=} recursive
* @return {?}
*/
setShowing(row, show, recursive = true) {
if (row.instance !== null && typeof row.instance !== 'undefined' && typeof row.instance.setShowing === 'function') {
row.instance.setShowing(show);
}
if (recursive) {
for (let /** @type {?} */ child of row.getChildren()) {
this.setShowing(child, show && row.isExpanding(), recursive);
}
}
}
/**
* @param {?} child
* @return {?}
*/
addChild(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 {?}
*/
removeChild(child) {
if (child === null || typeof child === 'undefined') {
return false;
}
let /** @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 {?}
*/
getParent() {
return this.parent;
}
/**
* @param {?} parent
* @return {?}
*/
setParent(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 {?}
*/
getChildren() {
return [].concat(this.children);
}
/**
* @return {?}
*/
hasChildren() {
return this.children.length > 0;
}
/**
* @param {?} child
* @return {?}
*/
hasChild(child) {
if (child === null || typeof child === 'undefined') {
return false;
}
return this.children.indexOf(child) >= 0;
}
/**
* @return {?}
*/
expand() {
this.setExpanding(true);
}
/**
* @return {?}
*/
contract() {
this.setExpanding(false);
}
/**
* @return {?}
*/
toggleExpand() {
this.setExpanding(!this.expanding);
}
/**
* @param {?} expand
* @return {?}
*/
setExpanding(expand) {
this.expanding = expand;
// Set all of its children to be hidden/shown.
for (let /** @type {?} */ child of this.children) {
this.setShowing(child, expand);
}
}
/**
* @return {?}
*/
isExpanding() {
return this.expanding;
}
/**
* @param {?} oldState
* @return {?}
*/
loadState(oldState) {
super.loadState(oldState);
if (oldState === null || typeof oldState === 'undefined') {
return;
}
this.setExpanding(oldState.isExpanding());
}
/**
* @return {?}
*/
getExpandLevel() {
let /** @type {?} */ result = 0;
let /** @type {?} */ parent = this.getParent();
while (parent !== null && typeof parent !== 'undefined') {
result++;
parent = parent.getParent();
}
return result;
}
}
function ExpandableTableRowController_tsickle_Closure_declarations() {
/** @type {?} */
ExpandableTableRowController.prototype.parent;
/** @type {?} */
ExpandableTableRowController.prototype.children;
/** @type {?} */
ExpandableTableRowController.prototype.expanding;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC90YWJsZS9FeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUcxRCxNQUFNLG1DQUFvQyxTQUFRLGtCQUFrQjs7Ozs7O2dCQU0vQyxLQUFpQixFQUFFLElBQVUsRUFBRSxNQUFzQztRQUN0RixLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Ozs7Ozs7O0lBR2pCLFVBQVUsQ0FBQyxHQUFRLEVBQUUsSUFBYSxFQUFFLFlBQXFCLElBQUk7UUFDbkUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsUUFBUSxLQUFLLFdBQVcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDbEgsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7UUFFRCxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2QsR0FBRyxDQUFDLENBQUMscUJBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFD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b250ZW50IjpbImltcG9ydCB7IFBobG94VGFibGUgfSBmcm9tICcuL1BobG94VGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93Q29udHJvbGxlciB9IGZyb20gJy4vVGFibGVSb3dDb250cm9sbGVyJztcbmltcG9ydCB7IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyIH0gZnJvbSAnLi9JRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcic7XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyIGV4dGVuZHMgVGFibGVSb3dDb250cm9sbGVyIGltcGxlbWVudHMgSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXIge1xuXG4gIHByb3RlY3RlZCBwYXJlbnQ6IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgY2hpbGRyZW46IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyW107XG4gIHByb3RlY3RlZCBleHBhbmRpbmc6IGJvb2xlYW47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRhYmxlOiBQaGxveFRhYmxlLCBkYXRhPzogYW55LCBwYXJlbnQ/OiBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcikge1xuICAgIHN1cGVyKHRhYmxlLCBkYXRhKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLnNldFBhcmVudChwYXJlbnQpO1xuICAgIHRoaXMuZXhwYW5kaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldFNob3dpbmcocm93OiBhbnksIHNob3c6IGJvb2xlYW4sIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAocm93Lmluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiByb3cuaW5zdGFuY2UgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiByb3cuaW5zdGFuY2Uuc2V0U2hvd2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcm93Lmluc3RhbmNlLnNldFNob3dpbmcoc2hvdyk7XG4gICAgfVxuXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygcm93LmdldENoaWxkcmVuKCkpIHtcbiAgICAgICAgdGhpcy5zZXRTaG93aW5nKGNoaWxkLCBzaG93ICYmIHJvdy5pc0V4cGFuZGluZygpLCByZWN1cnNpdmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRDaGlsZChjaGlsZDogSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXIpOiBib29sZWFuIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNDaGlsZChjaGlsZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuXG4gICAgLy8gQXV0byBleHBhbmQgdGhpcyBub2RlXG4gICAgdGhpcy5leHBhbmQoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZUNoaWxkKGNoaWxkOiBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcik6IGJvb2xlYW4ge1xuICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGlkeDogbnVtYmVyID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XG5cbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMCkge1xuICAgICAgLy8gSWYgaXQgaXMgbGFzdCBjaGlsZCwgYXV0byBjb250cmFjdCB0aGlzIG5vZGVcbiAgICAgIHRoaXMuY29udHJhY3QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJlbnQoKTogSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRQYXJlbnQocGFyZW50OiBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gcGFyZW50KSB7XG4gICAgICAvLyBJZiB0aGUgc2FtZSB2YWx1ZSBpcyBiZWluZyBzZXQsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnBhcmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMucGFyZW50WydyZW1vdmVDaGlsZCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBSZW1vdmUgXCJ0aGlzXCIgZnJvbSBwYXJlbnQncyBjaGlsZHJlbltdIGZpcnN0LlxuICAgICAgKDxhbnk+dGhpcy5wYXJlbnQpLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnBhcmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMucGFyZW50WydhZGRDaGlsZCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGQgXCJ0aGlzXCIgaW50byBuZXcgcGFyZW50J3MgY2hpbGRyZW5bXS5cbiAgICAgICg8YW55PnRoaXMucGFyZW50KS5hZGRDaGlsZCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2hpbGRyZW4oKTogSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXJbXSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCh0aGlzLmNoaWxkcmVuKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIGhhc0NoaWxkKGNoaWxkOiBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcik6IGJvb2xlYW4ge1xuICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCkgPj0gMDtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRFeHBhbmRpbmcodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY29udHJhY3QoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRFeHBhbmRpbmcoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUV4cGFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEV4cGFuZGluZyghdGhpcy5leHBhbmRpbmcpO1xuICB9XG5cbiAgcHVibGljIHNldEV4cGFuZGluZyhleHBhbmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGluZyA9IGV4cGFuZDtcblxuICAgIC8vIFNldCBhbGwgb2YgaXRzIGNoaWxkcmVuIHRvIGJlIGhpZGRlbi9zaG93bi5cbiAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLnNldFNob3dpbmcoY2hpbGQsIGV4cGFuZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRXhwYW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGluZztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlXG4gIHB1YmxpYyBsb2FkU3RhdGUob2xkU3RhdGU6IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyKTogdm9pZCB7XG4gICAgc3VwZXIubG9hZFN0YXRlKG9sZFN0YXRlKTtcblxuICAgIGlmIChvbGRTdGF0ZSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2xkU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRFeHBhbmRpbmcob2xkU3RhdGUuaXNFeHBhbmRpbmcoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwYW5kTGV2ZWwoKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSAwO1xuXG4gICAgbGV0IHBhcmVudDogYW55ID0gdGhpcy5nZXRQYXJlbnQoKTtcblxuICAgIHdoaWxlIChwYXJlbnQgIT09IG51bGwgJiYgdHlwZW9mIHBhcmVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc3VsdCsrO1xuXG4gICAgICBwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG4iXX0=