Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f0a578f

Browse files
change to partial selection when pagination enabled
1 parent dc929fd commit f0a578f

File tree

5 files changed

+42
-21
lines changed

5 files changed

+42
-21
lines changed

‎packages/react-bootstrap-table2/src/bootstrap-table.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Caption from './caption';
99
import Body from './body';
1010
import PropsBaseResolver from './props-resolver';
1111
import Const from './const';
12-
import { isSelectedAll } from './store/selection';
12+
import { getSelectionSummary } from './store/selection';
1313

1414
class BootstrapTable extends PropsBaseResolver(Component) {
1515
constructor(props) {
@@ -43,7 +43,8 @@ class BootstrapTable extends PropsBaseResolver(Component) {
4343
rowStyle,
4444
rowClasses,
4545
wrapperClasses,
46-
rowEvents
46+
rowEvents,
47+
selected
4748
} = this.props;
4849

4950
const tableWrapperClass = cs('react-bootstrap-table', wrapperClasses);
@@ -59,10 +60,12 @@ class BootstrapTable extends PropsBaseResolver(Component) {
5960
onRowSelect: this.props.onRowSelect
6061
});
6162

63+
const { allRowsSelected, allRowsNotSelected } = getSelectionSummary(data, keyField, selected);
6264
const headerCellSelectionInfo = this.resolveSelectRowPropsForHeader({
6365
onAllRowsSelect: this.props.onAllRowsSelect,
64-
selected: this.props.selected,
65-
allRowsSelected: isSelectedAll(data, this.props.selected)
66+
selected,
67+
allRowsSelected,
68+
allRowsNotSelected
6669
});
6770

6871
const tableCaption = (caption && <Caption>{ caption }</Caption>);
@@ -88,7 +91,7 @@ class BootstrapTable extends PropsBaseResolver(Component) {
8891
noDataIndication={ noDataIndication }
8992
cellEdit={ this.props.cellEdit || {} }
9093
selectRow={ cellSelectionInfo }
91-
selectedRowKeys={ this.props.selected }
94+
selectedRowKeys={ selected }
9295
rowStyle={ rowStyle }
9396
rowClasses={ rowClasses }
9497
rowEvents={ rowEvents }

‎packages/react-bootstrap-table2/src/contexts/selection-context.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export default (
4747
this.setState(() => ({ selected: currSelected }));
4848
}
4949

50-
handleAllRowsSelect = (e) => {
50+
handleAllRowsSelect = (e,isUnSelect) => {
5151
const {
5252
data,
5353
keyField,
@@ -57,16 +57,17 @@ export default (
5757
}
5858
} = this.props;
5959
const { selected } = this.state;
60-
const anySelected = dataOperator.isAnySelectedRow(selected, nonSelectable);
6160

62-
constresult=!anySelected;
61+
letcurrSelected;
6362

64-
const currSelected = result ?
65-
dataOperator.selectableKeys(data, keyField, nonSelectable) :
66-
dataOperator.unSelectableKeys(selected, nonSelectable);
63+
if (!isUnSelect) {
64+
currSelected = selected.concat(dataOperator.selectableKeys(data, keyField, nonSelectable));
65+
} else {
66+
currSelected = selected.filter(s => typeof data.find(d => d[keyField] === s) === 'undefined');
67+
}
6768

6869
if (onSelectAll) {
69-
onSelectAll(result, dataOperator.getSelectedRows(data, keyField, currSelected), e);
70+
onSelectAll(!isUnSelect, dataOperator.getSelectedRows(data, keyField, currSelected), e);
7071
}
7172

7273
this.setState(() => ({ selected: currSelected }));

‎packages/react-bootstrap-table2/src/props-resolver/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export default ExtendBase =>
5151
*/
5252
resolveSelectRowPropsForHeader(options = {}) {
5353
const { selectRow } = this.props;
54-
const { allRowsSelected, selected =[], ...rest } = options;
54+
const { allRowsSelected, allRowsNotSelected, ...rest } = options;
5555
const {
5656
ROW_SELECT_DISABLED, CHECKBOX_STATUS_CHECKED,
5757
CHECKBOX_STATUS_INDETERMINATE, CHECKBOX_STATUS_UNCHECKED
@@ -62,7 +62,7 @@ export default ExtendBase =>
6262

6363
// checkbox status depending on selected rows counts
6464
if (allRowsSelected) checkedStatus = CHECKBOX_STATUS_CHECKED;
65-
else if (selected.length===0) checkedStatus = CHECKBOX_STATUS_UNCHECKED;
65+
else if (allRowsNotSelected) checkedStatus = CHECKBOX_STATUS_UNCHECKED;
6666
else checkedStatus = CHECKBOX_STATUS_INDETERMINATE;
6767

6868
return {

‎packages/react-bootstrap-table2/src/row-selection/selection-header-cell.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,12 @@ export default class SelectionHeaderCell extends Component {
4545
}
4646

4747
handleCheckBoxClick(e) {
48-
const { onAllRowsSelect } = this.props;
48+
const { onAllRowsSelect, checkedStatus } = this.props;
49+
const isUnSelect =
50+
checkedStatus === Const.CHECKBOX_STATUS_CHECKED ||
51+
checkedStatus === Const.CHECKBOX_STATUS_INDETERMINATE;
4952

50-
onAllRowsSelect(e);
53+
onAllRowsSelect(e,isUnSelect);
5154
}
5255

5356
render() {

‎packages/react-bootstrap-table2/src/store/selection.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
11
import _ from '../utils';
22
import { getRowByRowId } from './rows';
33

4-
export const isSelectedAll = (data, selected = []) => data.length === selected.length;
4+
export const getSelectionSummary = (
5+
data,
6+
keyField,
7+
selected = []
8+
) => {
9+
let allRowsSelected = true;
10+
let allRowsNotSelected = true;
511

6-
export const isAnySelectedRow = (selected, skips = []) => {
7-
if (skips.length === 0) {
8-
return selected.length > 0;
12+
const rowKeys = data.map(d => d[keyField]);
13+
for (let i = 0; i < rowKeys.length; i += 1) {
14+
const curr = rowKeys[i];
15+
if (typeof selected.find(x => x === curr) === 'undefined') {
16+
allRowsSelected = false;
17+
} else {
18+
allRowsNotSelected = false;
19+
}
920
}
10-
return selected.filter(x => !skips.includes(x)).length;
21+
return {
22+
allRowsSelected,
23+
allRowsNotSelected
24+
};
1125
};
1226

1327
export const selectableKeys = (data, keyField, skips = []) => {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /