@@ -69,6 +69,8 @@ export class TableModel implements PaginationModel {
6969 dataChange = new EventEmitter ( ) ;
7070 rowsSelectedChange = new EventEmitter < number > ( ) ;
7171 rowsExpandedChange = new EventEmitter < number > ( ) ;
72+ rowsExpandedAllChange = new EventEmitter ( ) ;
73+ rowsCollapsedAllChange = new EventEmitter ( ) ;
7274 /**
7375 * Gets emitted when `selectAll` is called. Emits false if all rows are deselected and true if
7476 * all rows are selected.
@@ -413,6 +415,18 @@ export class TableModel implements PaginationModel {
413415 return this . data . some ( data => data . some ( d => d && d . expandedData ) ) ; // checking for some in 2D array
414416 }
415417
418+ /**
419+ * Number of rows that can be expanded.
420+ *
421+ * @returns number
422+ */
423+ expandableRowsCount ( ) {
424+ return this . data . reduce ( ( counter , _ , index ) => {
425+ counter = ( this . isRowExpandable ( index ) ) ? counter + 1 : counter ;
426+ return counter ;
427+ } , 0 ) ;
428+ }
429+
416430 isRowExpandable ( index : number ) {
417431 return this . data [ index ] . some ( d => d && d . expandedData ) ;
418432 }
@@ -705,6 +719,27 @@ export class TableModel implements PaginationModel {
705719 this . rowsExpandedChange . emit ( index ) ;
706720 }
707721
722+ /**
723+ * Expands / collapses all rows
724+ *
725+ * @param value expanded state of the rows. `true` is expanded and `false` is collapsed
726+ */
727+ expandAllRows ( value = true ) {
728+ if ( this . data . length > 0 ) {
729+ for ( let i = 0 ; i < this . data . length ; i ++ ) {
730+ if ( this . isRowExpandable ( i ) ) {
731+ this . rowsExpanded [ i ] = value ;
732+ }
733+ }
734+
735+ if ( value ) {
736+ this . rowsExpandedAllChange . emit ( ) ;
737+ } else {
738+ this . rowsCollapsedAllChange . emit ( ) ;
739+ }
740+ }
741+ }
742+
708743 /**
709744 * Gets the true index of a row based on it's relative position.
710745 * Like in Python, positive numbers start from the top and
0 commit comments