UNPKG

tui-grid

Version:

TOAST UI Grid : Powerful data grid control supported by TOAST UI

138 lines (117 loc) 3.48 kB
/** * @fileoverview TreeRow data model implementation * @author NHN. FE Development Lab <dl_javascript@nhn.com> */ 'use strict'; var _ = require('underscore'); var Row = require('./row'); var treeState = require('../../common/constMap').treeState; var PRIVATE_PROPERTIES = [ '_button', '_number', '_extraData', '_treeData', '_children' ]; /** * TreeRow class implementation * @module model/data/columnModel * @extends module:base/model * @ignore */ var TreeRow = Row.extend(/** @lends module:model/data/treeRow.prototype */{ /** * Returns the Array of private property names * @returns {array} An array of private property names */ getPrivateProperties: function() { return PRIVATE_PROPERTIES; }, /** * set tree state * @param {boolean} state - true if expanded */ setTreeExpanded: function(state) { var prevState = this.getTreeExpanded(); this.extraDataManager.setTreeState(state ? treeState.EXPAND : treeState.COLLAPSE); if (state !== prevState) { this._triggerExtraDataChangeEvent(); } }, /** * get tree state * @returns {boolean} - true if expanded */ getTreeExpanded: function() { return this.extraDataManager.getTreeState() === treeState.EXPAND; }, /** * get tree data * @returns {Object} - tree data * @private */ _getTreeData: function() { return this.get('_treeData'); }, /** * get tree depth of this row * @returns {number} - depth of this row */ getTreeDepth: function() { return this.hasTreeNextSibling().length; }, /** * check whether this row has one or more children * @returns {boolean} - true if it has children */ hasTreeChildren: function() { var childrenRowKeys = this._getTreeData().childrenRowKeys; var hasChildren = _.isArray(childrenRowKeys) && !!childrenRowKeys.length; if (this.get('_children')) { hasChildren = true; } return hasChildren; }, /** * gets children row keys * @returns {Array.<number|string>} - array of children row keys */ getTreeChildrenRowKeys: function() { return this._getTreeData().childrenRowKeys || []; }, /** * sets children row keys * @param {Array.<number|string>} rowKeys - array of children row keys */ setTreeChildrenRowKeys: function(rowKeys) { this._getTreeData().childrenRowKeys = rowKeys; }, /** * remove a child key from children row keys * @param {Array.<number|string>} rowKey - the key of the row to be removed */ removeTreeChildrenRowKey: function(rowKey) { var treeData = this._getTreeData(); treeData.childrenRowKeys = _.filter(treeData.childrenRowKeys, function(childRowKey) { return childRowKey !== rowKey; }, this); }, /** * check whether this row has one or more next sibling * @returns {boolean} - true if this row has siblings */ hasTreeNextSibling: function() { return this._getTreeData().hasNextSibling; }, /** * gets parent row key * @returns {number|string} - parent row key */ getTreeParentRowKey: function() { return this._getTreeData().parentRowKey; } }, { privateProperties: PRIVATE_PROPERTIES, treeState: treeState }); module.exports = TreeRow;