mirror of
https://github.com/gosticks/react-bootstrap-table2.git
synced 2026-08-11 11:40:22 +00:00
refine row selection
* adjust propType order * rename for resolving selectRow prop * refine row selection * refine document
This commit is contained in:
+4
-1
@@ -38,4 +38,7 @@ Same as `.table-hover` class for adding a hover effect (grey background color) o
|
||||
Same as `.table-condensed` class for makeing a table more compact by cutting cell padding in half
|
||||
|
||||
### <a name='cellEdit'>cellEdit - [Object]</a>
|
||||
`cellEdit` props accept an object, please see [cellEdit definition](./cell-edit-prop.md) for more detail.
|
||||
`cellEdit` allow you to enable cell editing on table, please see [cellEdit definition](./cell-edit.md) for more detail.
|
||||
|
||||
### <a name='selectRow'>selectRow - [Object]</a>
|
||||
`selectRow` allow you to have a mechanism to select rows, please see [selectRow definition](./row-selection.md) for more detail.
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
# Row selection
|
||||
`react-bootstrap-table2` supports the row selection feature. By passing prop `selectRow ` to enable row selection. When you enable this feature, `react-bootstrap-table2` will append a new selection column at first.
|
||||
`react-bootstrap-table2` supports the row selection feature. By passing prop `selectRow` to enable row selection. When you enable this feature, `react-bootstrap-table2` will append a new selection column at first.
|
||||
|
||||
|
||||
## Available properties
|
||||
@@ -8,7 +8,7 @@
|
||||
The following are available properties in `selectRow`:
|
||||
|
||||
#### Required
|
||||
* [mode (required)](#mode)
|
||||
* [mode (**required**)](#mode)
|
||||
|
||||
#### Optional
|
||||
|
||||
@@ -23,7 +23,7 @@ Specifying the selection way for `single(radio)` or `multiple(checkbox)`. If `ra
|
||||
#### examples
|
||||
|
||||
```js
|
||||
const selectRowProp = {
|
||||
const selectRow = {
|
||||
mode: 'radio' // single row selection
|
||||
};
|
||||
<BootstrapTable
|
||||
@@ -35,7 +35,7 @@ const selectRowProp = {
|
||||
```
|
||||
|
||||
```js
|
||||
const selectRowProp = {
|
||||
const selectRow = {
|
||||
mode: 'checkbox' // multiple row selection
|
||||
};
|
||||
|
||||
|
||||
+8
-8
@@ -52,11 +52,11 @@ class BootstrapTable extends PropsBaseResolver(Component) {
|
||||
currEditCell: this.props.currEditCell
|
||||
});
|
||||
|
||||
const cellSelectionInfo = this.resolveCellSelectionProps({
|
||||
const cellSelectionInfo = this.resolveSelectRowProps({
|
||||
onRowSelect: this.props.onRowSelect
|
||||
});
|
||||
|
||||
const headerCellSelectionInfo = this.resolveHeaderCellSelectionProps({
|
||||
const headerCellSelectionInfo = this.resolveSelectRowPropsForHeader({
|
||||
onAllRowsSelect: this.props.onAllRowsSelect,
|
||||
selected: store.selected,
|
||||
allRowsSelected: store.isAllRowsSelected()
|
||||
@@ -117,11 +117,6 @@ BootstrapTable.propTypes = {
|
||||
timeToCloseMessage: PropTypes.number,
|
||||
errorMessage: PropTypes.string
|
||||
}),
|
||||
selectRow: PropTypes.shape({
|
||||
mode: PropTypes.oneOf([Const.ROW_SELECT_SINGLE, Const.ROW_SELECT_MULTIPLE]).isRequired
|
||||
}),
|
||||
onRowSelect: PropTypes.func,
|
||||
onAllRowsSelect: PropTypes.func,
|
||||
onCellUpdate: PropTypes.func,
|
||||
onStartEditing: PropTypes.func,
|
||||
onEscapeEditing: PropTypes.func,
|
||||
@@ -130,7 +125,12 @@ BootstrapTable.propTypes = {
|
||||
cidx: PropTypes.number,
|
||||
message: PropTypes.string,
|
||||
editing: PropTypes.bool
|
||||
})
|
||||
}),
|
||||
selectRow: PropTypes.shape({
|
||||
mode: PropTypes.oneOf([Const.ROW_SELECT_SINGLE, Const.ROW_SELECT_MULTIPLE]).isRequired
|
||||
}),
|
||||
onRowSelect: PropTypes.func,
|
||||
onAllRowsSelect: PropTypes.func
|
||||
};
|
||||
|
||||
BootstrapTable.defaultProps = {
|
||||
|
||||
@@ -47,7 +47,7 @@ export default ExtendBase =>
|
||||
* @returns {Object} result - props for cell selections
|
||||
* @returns {String} result.mode - input type of row selection or disabled.
|
||||
*/
|
||||
resolveCellSelectionProps(options) {
|
||||
resolveSelectRowProps(options) {
|
||||
const { selectRow } = this.props;
|
||||
const { ROW_SELECT_DISABLED } = Const;
|
||||
|
||||
@@ -71,7 +71,7 @@ export default ExtendBase =>
|
||||
* @returns {String} result.mode - input type of row selection or disabled.
|
||||
* @returns {String} result.checkedStatus - checkbox status depending on selected rows counts
|
||||
*/
|
||||
resolveHeaderCellSelectionProps(options = {}) {
|
||||
resolveSelectRowPropsForHeader(options = {}) {
|
||||
const { selectRow } = this.props;
|
||||
const { allRowsSelected, selected = [], ...rest } = options;
|
||||
const {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* eslint react/require-default-props: 0 */
|
||||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import Constant from '../const';
|
||||
import Const from '../const';
|
||||
|
||||
export const CheckBox = ({ checked, indeterminate }) => (
|
||||
<input
|
||||
@@ -36,7 +36,7 @@ export default class SelectionHeaderCell extends Component {
|
||||
* 2. status was not changed.
|
||||
*/
|
||||
shouldComponentUpdate(nextProps) {
|
||||
const { ROW_SELECT_SINGLE } = Constant;
|
||||
const { ROW_SELECT_SINGLE } = Const;
|
||||
const { mode, checkedStatus } = this.props;
|
||||
|
||||
if (mode === ROW_SELECT_SINGLE) return false;
|
||||
@@ -53,7 +53,7 @@ export default class SelectionHeaderCell extends Component {
|
||||
render() {
|
||||
const {
|
||||
CHECKBOX_STATUS_CHECKED, CHECKBOX_STATUS_INDETERMINATE, ROW_SELECT_SINGLE
|
||||
} = Constant;
|
||||
} = Const;
|
||||
|
||||
const { mode, checkedStatus } = this.props;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import Body from '../src/body';
|
||||
import Row from '../src/row';
|
||||
import Const from '../src/const';
|
||||
import RowSection from '../src/row-section';
|
||||
import mockBodyResolvedProps from '../test/mock-data/body-resolved-props';
|
||||
import mockBodyResolvedProps from './test-helpers/mock/body-resolved-props';
|
||||
|
||||
describe('Body', () => {
|
||||
let wrapper;
|
||||
|
||||
@@ -5,7 +5,7 @@ import HeaderCell from '../src/header-cell';
|
||||
import SelectionHeaderCell from '../src//row-selection/selection-header-cell';
|
||||
import Header from '../src/header';
|
||||
import Const from '../src/const';
|
||||
import mockHeaderResolvedProps from '../test/mock-data/header-resolved-props';
|
||||
import mockHeaderResolvedProps from './test-helpers/mock/header-resolved-props';
|
||||
|
||||
describe('Header', () => {
|
||||
let wrapper;
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
import Const from '../../src/const';
|
||||
|
||||
const { ROW_SELECT_DISABLED } = Const;
|
||||
|
||||
export const headerCellSelectionResolvedProps = {
|
||||
mode: ROW_SELECT_DISABLED
|
||||
};
|
||||
|
||||
export default {
|
||||
selectRow: headerCellSelectionResolvedProps
|
||||
};
|
||||
@@ -131,7 +131,7 @@ describe('TableResolver', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolveCellSelectionProps', () => {
|
||||
describe('resolveSelectRowProps', () => {
|
||||
let cellSelectionInfo;
|
||||
let selectRow;
|
||||
|
||||
@@ -141,7 +141,7 @@ describe('TableResolver', () => {
|
||||
data, keyField, columns
|
||||
}, null);
|
||||
wrapper = shallow(mockElement);
|
||||
cellSelectionInfo = wrapper.instance().resolveCellSelectionProps();
|
||||
cellSelectionInfo = wrapper.instance().resolveSelectRowProps();
|
||||
});
|
||||
|
||||
it('should return object', () => {
|
||||
@@ -162,7 +162,7 @@ describe('TableResolver', () => {
|
||||
data, keyField, columns, selectRow
|
||||
}, null);
|
||||
wrapper = shallow(mockElement);
|
||||
cellSelectionInfo = wrapper.instance().resolveCellSelectionProps();
|
||||
cellSelectionInfo = wrapper.instance().resolveSelectRowProps();
|
||||
|
||||
expect(cellSelectionInfo).toBeDefined();
|
||||
expect(cellSelectionInfo.constructor).toEqual(Object);
|
||||
@@ -175,7 +175,7 @@ describe('TableResolver', () => {
|
||||
data, keyField, columns, selectRow
|
||||
}, null);
|
||||
wrapper = shallow(mockElement);
|
||||
cellSelectionInfo = wrapper.instance().resolveCellSelectionProps();
|
||||
cellSelectionInfo = wrapper.instance().resolveSelectRowProps();
|
||||
|
||||
expect(cellSelectionInfo).toBeDefined();
|
||||
expect(cellSelectionInfo.constructor).toEqual(Object);
|
||||
@@ -194,7 +194,7 @@ describe('TableResolver', () => {
|
||||
data, keyField, columns, selectRow
|
||||
}, null);
|
||||
wrapper = shallow(mockElement);
|
||||
cellSelectionInfo = wrapper.instance().resolveCellSelectionProps(mockOptions);
|
||||
cellSelectionInfo = wrapper.instance().resolveSelectRowProps(mockOptions);
|
||||
});
|
||||
|
||||
it('should return object which contain options', () => {
|
||||
@@ -207,7 +207,7 @@ describe('TableResolver', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolveHeaderCellSelectionProps', () => {
|
||||
describe('resolveSelectRowPropsForHeader', () => {
|
||||
let headerCellSelectionInfo;
|
||||
let selectRow;
|
||||
|
||||
@@ -216,7 +216,7 @@ describe('TableResolver', () => {
|
||||
data, keyField, columns
|
||||
}, null);
|
||||
wrapper = shallow(mockElement);
|
||||
headerCellSelectionInfo = wrapper.instance().resolveHeaderCellSelectionProps();
|
||||
headerCellSelectionInfo = wrapper.instance().resolveSelectRowPropsForHeader();
|
||||
});
|
||||
|
||||
describe('if selectRow was not defined', () => {
|
||||
@@ -239,7 +239,7 @@ describe('TableResolver', () => {
|
||||
data, keyField, columns, selectedRowKeys, selectRow
|
||||
}, null);
|
||||
wrapper = shallow(mockElement);
|
||||
headerCellSelectionInfo = wrapper.instance().resolveHeaderCellSelectionProps();
|
||||
headerCellSelectionInfo = wrapper.instance().resolveSelectRowPropsForHeader();
|
||||
|
||||
expect(headerCellSelectionInfo).toBeDefined();
|
||||
expect(headerCellSelectionInfo.constructor).toEqual(Object);
|
||||
@@ -253,7 +253,7 @@ describe('TableResolver', () => {
|
||||
data, keyField, columns, selectedRowKeys, selectRow
|
||||
}, null);
|
||||
wrapper = shallow(mockElement);
|
||||
headerCellSelectionInfo = wrapper.instance().resolveHeaderCellSelectionProps();
|
||||
headerCellSelectionInfo = wrapper.instance().resolveSelectRowPropsForHeader();
|
||||
|
||||
expect(headerCellSelectionInfo).toBeDefined();
|
||||
expect(headerCellSelectionInfo.constructor).toEqual(Object);
|
||||
@@ -275,7 +275,7 @@ describe('TableResolver', () => {
|
||||
data, keyField, columns, selectedRowKeys, selectRow
|
||||
}, null);
|
||||
wrapper = shallow(mockElement);
|
||||
headerCellSelectionInfo = wrapper.instance().resolveHeaderCellSelectionProps(mockOptions);
|
||||
headerCellSelectionInfo = wrapper.instance().resolveSelectRowPropsForHeader(mockOptions);
|
||||
});
|
||||
|
||||
it('should return object which contain specified options', () => {
|
||||
@@ -304,7 +304,7 @@ describe('TableResolver', () => {
|
||||
|
||||
wrapper = shallow(mockElement);
|
||||
|
||||
headerCellSelectionInfo = wrapper.instance().resolveHeaderCellSelectionProps({
|
||||
headerCellSelectionInfo = wrapper.instance().resolveSelectRowPropsForHeader({
|
||||
allRowsSelected: true,
|
||||
selected: selectedRowKeys
|
||||
});
|
||||
@@ -326,7 +326,7 @@ describe('TableResolver', () => {
|
||||
}, null);
|
||||
|
||||
wrapper = shallow(mockElement);
|
||||
headerCellSelectionInfo = wrapper.instance().resolveHeaderCellSelectionProps({
|
||||
headerCellSelectionInfo = wrapper.instance().resolveSelectRowPropsForHeader({
|
||||
allRowsSelected: false,
|
||||
selected: selectedRowKeys
|
||||
});
|
||||
@@ -349,7 +349,7 @@ describe('TableResolver', () => {
|
||||
|
||||
wrapper = shallow(mockElement);
|
||||
|
||||
headerCellSelectionInfo = wrapper.instance().resolveHeaderCellSelectionProps({
|
||||
headerCellSelectionInfo = wrapper.instance().resolveSelectRowPropsForHeader({
|
||||
allRowsSelected: false,
|
||||
selected: selectedRowKeys
|
||||
});
|
||||
|
||||
@@ -2,7 +2,7 @@ import React from 'react';
|
||||
import { shallow } from 'enzyme';
|
||||
import sinon from 'sinon';
|
||||
|
||||
import Constant from '../../src/const';
|
||||
import Const from '../../src/const';
|
||||
import SelectionHeaderCell, { CheckBox } from '../../src/row-selection/selection-header-cell';
|
||||
|
||||
let wrapper;
|
||||
@@ -20,7 +20,7 @@ describe('<SelectionHeaderCell />', () => {
|
||||
describe('when props.mode is checkbox', () => {
|
||||
describe('if checkedStatus prop has not been changed', () => {
|
||||
it('should not update component', () => {
|
||||
const checkedStatus = Constant.CHECKBOX_STATUS_CHECKED;
|
||||
const checkedStatus = Const.CHECKBOX_STATUS_CHECKED;
|
||||
const nextProps = { checkedStatus };
|
||||
|
||||
wrapper = shallow(
|
||||
@@ -32,7 +32,7 @@ describe('<SelectionHeaderCell />', () => {
|
||||
|
||||
describe('if checkedStatus prop has been changed', () => {
|
||||
it('should update component', () => {
|
||||
const { CHECKBOX_STATUS_INDETERMINATE, CHECKBOX_STATUS_CHECKED } = Constant;
|
||||
const { CHECKBOX_STATUS_INDETERMINATE, CHECKBOX_STATUS_CHECKED } = Const;
|
||||
const checkedStatus = CHECKBOX_STATUS_CHECKED;
|
||||
const nextProps = { checkedStatus };
|
||||
|
||||
@@ -60,7 +60,7 @@ describe('<SelectionHeaderCell />', () => {
|
||||
wrapper = shallow(
|
||||
<SelectionHeaderCell
|
||||
mode="radio"
|
||||
checkedStatus={Constant.CHECKBOX_STATUS_CHECKED}
|
||||
checkedStatus={Const.CHECKBOX_STATUS_CHECKED}
|
||||
onAllRowsSelect={mockOnAllRowsSelect}
|
||||
/>);
|
||||
});
|
||||
@@ -78,7 +78,7 @@ describe('<SelectionHeaderCell />', () => {
|
||||
wrapper = shallow(
|
||||
<SelectionHeaderCell
|
||||
mode="checkbox"
|
||||
checkedStatus={Constant.CHECKBOX_STATUS_CHECKED}
|
||||
checkedStatus={Const.CHECKBOX_STATUS_CHECKED}
|
||||
onAllRowsSelect={mockOnAllRowsSelect}
|
||||
/>);
|
||||
});
|
||||
@@ -96,7 +96,7 @@ describe('<SelectionHeaderCell />', () => {
|
||||
describe('render', () => {
|
||||
describe('when props.mode is radio', () => {
|
||||
beforeEach(() => {
|
||||
const checkedStatus = Constant.CHECKBOX_STATUS_CHECKED;
|
||||
const checkedStatus = Const.CHECKBOX_STATUS_CHECKED;
|
||||
|
||||
wrapper = shallow(<SelectionHeaderCell mode="radio" checkedStatus={checkedStatus} />);
|
||||
});
|
||||
@@ -109,15 +109,15 @@ describe('<SelectionHeaderCell />', () => {
|
||||
});
|
||||
|
||||
describe('when props.mode is checkbox', () => {
|
||||
const checkedStatus = Constant.CHECKBOX_STATUS_CHECKED;
|
||||
const checkedStatus = Const.CHECKBOX_STATUS_CHECKED;
|
||||
|
||||
beforeEach(() => {
|
||||
wrapper = shallow(<SelectionHeaderCell mode="checkbox" checkedStatus={checkedStatus} />);
|
||||
});
|
||||
|
||||
it('should render checkbox', () => {
|
||||
const checked = checkedStatus === Constant.CHECKBOX_STATUS_CHECKED;
|
||||
const indeterminate = checkedStatus === Constant.CHECKBOX_STATUS_INDETERMINATE;
|
||||
const checked = checkedStatus === Const.CHECKBOX_STATUS_CHECKED;
|
||||
const indeterminate = checkedStatus === Const.CHECKBOX_STATUS_INDETERMINATE;
|
||||
|
||||
expect(wrapper.find('th').length).toBe(1);
|
||||
expect(wrapper.find('th[data-row-selection]').length).toBe(1);
|
||||
|
||||
@@ -7,7 +7,7 @@ import Row from '../src/row';
|
||||
import Const from '../src/const';
|
||||
import EditingCell from '../src/cell-edit/editing-cell';
|
||||
import SelectionCell from '../src//row-selection/selection-cell';
|
||||
import mockBodyResolvedProps from '../test/mock-data/body-resolved-props';
|
||||
import mockBodyResolvedProps from './test-helpers/mock/body-resolved-props';
|
||||
|
||||
const defaultColumns = [{
|
||||
dataField: 'id',
|
||||
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
import Const from '../../src/const';
|
||||
import Const from '../../../src/const';
|
||||
|
||||
const { ROW_SELECT_DISABLED, UNABLE_TO_CELL_EDIT } = Const;
|
||||
|
||||
export const cellSelectionResolvedProps = {
|
||||
export const rowSelectionResolvedProps = {
|
||||
mode: ROW_SELECT_DISABLED
|
||||
};
|
||||
|
||||
@@ -12,5 +12,5 @@ export const cellEditResolvedProps = {
|
||||
|
||||
export default {
|
||||
cellEdit: cellEditResolvedProps,
|
||||
selectRow: cellSelectionResolvedProps
|
||||
selectRow: rowSelectionResolvedProps
|
||||
};
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
import Const from '../../../src/const';
|
||||
|
||||
const { ROW_SELECT_DISABLED } = Const;
|
||||
|
||||
export const rowSelectionResolvedProps = {
|
||||
mode: ROW_SELECT_DISABLED
|
||||
};
|
||||
|
||||
export default {
|
||||
selectRow: rowSelectionResolvedProps
|
||||
};
|
||||
Reference in New Issue
Block a user