/** * The axis has items that are generated when the records are processed. * * This class stores info about such an item. */Ext.define('Ext.pivot.axis.Item', { alternateClassName: [ 'Mz.aggregate.axis.Item' ], /** * @property {Number} level The tree level this item belongs to * @readonly * */ level: 0, /** * @cfg {String} key * * The key that uniquely identifies this item in the tree. The key is a string compound of * all parent items keys separated by the matrix keysSeparator * */ key: '', /** * @cfg {String/Number} value The item value as it appears in the store * */ value: '', /** * @cfg {String/Number} sortValue The item sort value as it appears in the store. This value will be used when sorting results. * */ sortValue: '', /** * @cfg {String} name The item name after the grouperFn was applied to the {@link #value} * */ name: '', /** * @cfg {String} id Id of the dimension this item refers to. * */ dimensionId: '', /** * @property {Ext.pivot.dimension.Item} dimension The dimension instance * @readonly * */ dimension: null, /** * @property {Ext.pivot.axis.Item[]} children Array of children items this item has * */ children: null, /** * @property {Ext.data.Model} record * @readonly * * When the {@link Ext.pivot.matrix.Local Local} matrix is used this is the pivot store record generated for this axis item. * Only bottom level items belonging to the leftAxis have this property. * */ record: null, records: null, /** * @property {Ext.pivot.axis.Base} axis Parent axis instance * @readonly * */ axis: null, /** * Object that stores all values from all axis items parents * * @private */ data: null, /** * @property {Boolean} expanded Is this item expanded or collapsed? * */ expanded: false, constructor: function(config){ var me = this; Ext.apply(me, config || {}); if(Ext.isEmpty(me.sortValue)){ me.sortValue = me.value; } me.callParent(arguments); }, destroy: function(){ var me = this; Ext.destroy(me.children); me.axis = me.data = me.dimension = me.record = me.children = me.records = null; me.callParent(arguments); }, /** * Returns the group total text formatted according to the template defined in the matrix * */ getTextTotal: function(){ var me = this, groupHeaderTpl = Ext.XTemplate.getTpl(me.axis.matrix, 'textTotalTpl'); return groupHeaderTpl.apply({ groupField: me.dimension.dataIndex, columnName: me.dimension.dataIndex, name: me.name, rows: me.children || [] }); }, /** * Expand this item and fire the groupexpand event on the matrix * * @param {Boolean} includeChildren Expand the children tree too? */ expand: function(includeChildren){ var me = this; me.expanded = true; if(includeChildren === true){ me.expandCollapseChildrenTree(true); } me.axis.matrix.fireEvent('groupexpand', me.axis.matrix, (me.axis.isLeftAxis ? 'row' : 'col'), me); }, /** * Collapse this item and fire the groupcollapse event on the matrix * * @param {Boolean} includeChildren Collapse the children tree too? */ collapse: function(includeChildren){ var me = this; me.expanded = false; if(includeChildren === true){ me.expandCollapseChildrenTree(false); } me.axis.matrix.fireEvent('groupcollapse', me.axis.matrix, (me.axis.isLeftAxis ? 'row' : 'col'), me); }, /** * Expand or collapse all children tree of the specified item * * @private */ expandCollapseChildrenTree: function(state){ var me = this, i; me.expanded = state; if(Ext.isArray(me.children)){ for(i = 0; i < me.children.length; i++){ me.children[i].expandCollapseChildrenTree(state); } } }});