From d4fa9a84e38d2f2d0a63595b63ace6c6612b295f Mon Sep 17 00:00:00 2001 From: Allen Date: Sat, 29 Sep 2018 14:00:33 +0800 Subject: [PATCH] fix #538 (#570) --- .../src/contexts/selection-context.js | 10 +++- .../test/contexts/selection-context.test.js | 52 +++++++++++++------ 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/packages/react-bootstrap-table2/src/contexts/selection-context.js b/packages/react-bootstrap-table2/src/contexts/selection-context.js index 631ffe5..12a7af8 100644 --- a/packages/react-bootstrap-table2/src/contexts/selection-context.js +++ b/packages/react-bootstrap-table2/src/contexts/selection-context.js @@ -80,7 +80,15 @@ export default ( } if (onSelectAll) { - onSelectAll(!isUnSelect, dataOperator.getSelectedRows(data, keyField, currSelected), e); + onSelectAll( + !isUnSelect, + dataOperator.getSelectedRows( + data, + keyField, + isUnSelect ? this.state.selected : currSelected + ), + e + ); } this.setState(() => ({ selected: currSelected })); diff --git a/packages/react-bootstrap-table2/test/contexts/selection-context.test.js b/packages/react-bootstrap-table2/test/contexts/selection-context.test.js index 819fada..f53432e 100644 --- a/packages/react-bootstrap-table2/test/contexts/selection-context.test.js +++ b/packages/react-bootstrap-table2/test/contexts/selection-context.test.js @@ -220,6 +220,25 @@ describe('DataContext', () => { it('should set state.selected correctly', () => { expect(wrapper.state('selected')).toEqual(data.map(d => d[keyField])); }); + + describe('when selectRow.onSelectAll is defined', () => { + const onSelectAll = jest.fn(); + beforeEach(() => { + wrapper = shallow(shallowContext({ + ...defaultSelectRow, + onSelectAll + })); + wrapper.instance().handleAllRowsSelect(e, false); + }); + + it('should call selectRow.onSelectAll correctly', () => { + expect(onSelectAll).toHaveBeenCalledWith( + true, + dataOperator.getSelectedRows(data, keyField, wrapper.state('selected')), + e + ); + }); + }); }); describe('when isUnSelect argument is true', () => { @@ -234,24 +253,25 @@ describe('DataContext', () => { it('should set state.selected correctly', () => { expect(wrapper.state('selected')).toEqual([]); }); - }); - describe('when selectRow.onSelectAll is defined', () => { - const onSelectAll = jest.fn(); - beforeEach(() => { - wrapper = shallow(shallowContext({ - ...defaultSelectRow, - onSelectAll - })); - wrapper.instance().handleAllRowsSelect(e, false); - }); + describe('when selectRow.onSelectAll is defined', () => { + const onSelectAll = jest.fn(); + beforeEach(() => { + wrapper = shallow(shallowContext({ + ...defaultSelectRow, + selected: data.map(d => d[keyField]), + onSelectAll + })); + wrapper.instance().handleAllRowsSelect(e, true); + }); - it('should call selectRow.onSelectAll correctly', () => { - expect(onSelectAll).toHaveBeenCalledWith( - true, - dataOperator.getSelectedRows(data, keyField, wrapper.state('selected')), - e - ); + it('should call selectRow.onSelectAll correctly', () => { + expect(onSelectAll).toHaveBeenCalledWith( + false, + dataOperator.getSelectedRows(data, keyField, data.map(d => d[keyField])), + e + ); + }); }); }); });