@@ -429,9 +429,16 @@ class BootstrapTable extends Component {
429429
430430 isSelectAll ( ) {
431431 if ( this . store . isEmpty ( ) ) return false ;
432- const unselectable = this . props . selectRow . unselectable ;
433- const defaultSelectRowKeys = this . store . getSelectedRowKeys ( ) ;
434- const allRowKeys = this . store . getAllRowkey ( ) ;
432+ const { selectRow : { unselectable, onlyUnselectVisible } } = this . props ;
433+ const keyField = this . store . getKeyField ( ) ;
434+ const allRowKeys = onlyUnselectVisible ?
435+ this . store . get ( ) . map ( r => r [ keyField ] ) :
436+ this . store . getAllRowkey ( ) ;
437+ let defaultSelectRowKeys = this . store . getSelectedRowKeys ( ) ;
438+
439+ if ( onlyUnselectVisible ) {
440+ defaultSelectRowKeys = defaultSelectRowKeys . filter ( x => x !== allRowKeys ) ;
441+ }
435442
436443 if ( defaultSelectRowKeys . length === 0 ) return false ;
437444 let match = 0 ;
@@ -645,9 +652,17 @@ class BootstrapTable extends Component {
645652
646653 if ( typeof result == 'undefined' || result !== false ) {
647654 if ( isSelected ) {
648- selectedRowKeys = Array . isArray ( result ) ?
649- result :
650- rows . map ( r => r [ keyField ] ) ;
655+ if ( Array . isArray ( result ) ) {
656+ selectedRowKeys = result ;
657+ } else {
658+ const currentRowKeys = rows . map ( r => r [ keyField ] ) ;
659+ // onlyUnselectVisible default is false, #1276
660+ if ( onlyUnselectVisible ) {
661+ selectedRowKeys = selectedRowKeys . concat ( currentRowKeys ) ;
662+ } else {
663+ selectedRowKeys = currentRowKeys ;
664+ }
665+ }
651666 } else {
652667 if ( unselectable && selected ) {
653668 selectedRowKeys = selected . filter ( r => unselectable . indexOf ( r ) > - 1 ) ;
0 commit comments