This commit is contained in:
AllenFang 2019-06-08 16:47:00 +08:00
parent 4d76d88e9a
commit db612eaa99
7 changed files with 108 additions and 19 deletions

View File

@ -16,6 +16,7 @@
* [clickToEdit](#clickToEdit) * [clickToEdit](#clickToEdit)
* [onSelect](#onSelect) * [onSelect](#onSelect)
* [onSelectAll](#onSelectAll) * [onSelectAll](#onSelectAll)
* [selectColumnPosition](#selectColumnPosition)
* [hideSelectColumn](#hideSelectColumn) * [hideSelectColumn](#hideSelectColumn)
* [hideSelectAll](#hideSelectAll) * [hideSelectAll](#hideSelectAll)
* [selectionRenderer](#selectionRenderer) * [selectionRenderer](#selectionRenderer)
@ -275,6 +276,16 @@ const selectRow = {
}; };
``` ```
### <a name='selectColumnPosition'>selectRow.selectColumnPosition - [String]</a>
Default is `left`. You can give this as `right` for rendering selection column in the right side.
```js
const selectRow = {
mode: 'checkbox',
selectColumnPosition: 'right'
};
```
### <a name='hideSelectColumn'>selectRow.hideSelectColumn - [Bool]</a> ### <a name='hideSelectColumn'>selectRow.hideSelectColumn - [Bool]</a>
Default is `false`, if you don't want to have a selection column, give this prop as `true` Default is `false`, if you don't want to have a selection column, give this prop as `true`

View File

@ -0,0 +1,59 @@
import React from 'react';
import BootstrapTable from 'react-bootstrap-table-next';
import Code from 'components/common/code-block';
import { productsGenerator } from 'utils/common';
const products = productsGenerator();
const columns = [{
dataField: 'id',
text: 'Product ID'
}, {
dataField: 'name',
text: 'Product Name'
}, {
dataField: 'price',
text: 'Product Price'
}];
const selectRow = {
mode: 'checkbox',
clickToSelect: true,
selectColumnPosition: 'right'
};
const sourceCode = `\
import BootstrapTable from 'react-bootstrap-table-next';
const columns = [{
dataField: 'id',
text: 'Product ID'
}, {
dataField: 'name',
text: 'Product Name'
}, {
dataField: 'price',
text: 'Product Price'
}];
const selectRow = {
mode: 'checkbox',
clickToSelect: true,
selectColumnPosition: 'right'
};
<BootstrapTable
keyField='id'
data={ products }
columns={ columns }
selectRow={ selectRow }
/>
`;
export default () => (
<div>
<BootstrapTable keyField="id" data={ products } columns={ columns } selectRow={ selectRow } />
<Code>{ sourceCode }</Code>
</div>
);

View File

@ -150,6 +150,7 @@ import NonSelectableRowsTable from 'examples/row-selection/non-selectable-rows';
import SelectionBgColorTable from 'examples/row-selection/selection-bgcolor'; import SelectionBgColorTable from 'examples/row-selection/selection-bgcolor';
import SelectionHooks from 'examples/row-selection/selection-hooks'; import SelectionHooks from 'examples/row-selection/selection-hooks';
import HideSelectionColumnTable from 'examples/row-selection/hide-selection-column'; import HideSelectionColumnTable from 'examples/row-selection/hide-selection-column';
import SelectionColumnPositionTable from 'examples/row-selection/selection-column-position';
// work on row expand // work on row expand
import BasicRowExpand from 'examples/row-expand'; import BasicRowExpand from 'examples/row-expand';
@ -394,7 +395,8 @@ storiesOf('Row Selection', module)
.add('Selection Background Color', () => <SelectionBgColorTable />) .add('Selection Background Color', () => <SelectionBgColorTable />)
.add('Not Selectabled Rows', () => <NonSelectableRowsTable />) .add('Not Selectabled Rows', () => <NonSelectableRowsTable />)
.add('Selection Hooks', () => <SelectionHooks />) .add('Selection Hooks', () => <SelectionHooks />)
.add('Hide Selection Column', () => <HideSelectionColumnTable />); .add('Hide Selection Column', () => <HideSelectionColumnTable />)
.add('Selection Column Position', () => <SelectionColumnPositionTable />);
storiesOf('Row Expand', module) storiesOf('Row Expand', module)
.addDecorator(bootstrapStyle()) .addDecorator(bootstrapStyle())

View File

@ -168,7 +168,11 @@ BootstrapTable.propTypes = {
hideSelectColumn: PropTypes.bool, hideSelectColumn: PropTypes.bool,
selectionRenderer: PropTypes.func, selectionRenderer: PropTypes.func,
selectionHeaderRenderer: PropTypes.func, selectionHeaderRenderer: PropTypes.func,
headerColumnStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) headerColumnStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),
selectColumnPosition: PropTypes.oneOf([
Const.INDICATOR_POSITION_LEFT,
Const.INDICATOR_POSITION_RIGHT
])
}), }),
expandRow: PropTypes.shape({ expandRow: PropTypes.shape({
renderer: PropTypes.func, renderer: PropTypes.func,

View File

@ -11,9 +11,9 @@ const Footer = (props) => {
const SelectionFooterCellComp = () => <th />; const SelectionFooterCellComp = () => <th />;
const ExpansionFooterCellComp = () => <th />; const ExpansionFooterCellComp = () => <th />;
const isRenderExpandColumnInLeft = ( const isRenderFunctionColumnInLeft = (
expandColumnPosition = Const.INDICATOR_POSITION_LEFT position = Const.INDICATOR_POSITION_LEFT
) => expandColumnPosition === Const.INDICATOR_POSITION_LEFT; ) => position === Const.INDICATOR_POSITION_LEFT;
const childrens = columns.map((column, i) => { const childrens = columns.map((column, i) => {
if (column.footer === undefined || column.footer === null) { if (column.footer === undefined || column.footer === null) {
@ -33,11 +33,15 @@ const Footer = (props) => {
}); });
if (selectRow && selectRow.hideSelectColumn !== true) { if (selectRow && selectRow.hideSelectColumn !== true) {
childrens.unshift(<SelectionFooterCellComp key="selection" />); if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) {
childrens.unshift(<SelectionFooterCellComp key="selection" />);
} else {
childrens.push(<SelectionFooterCellComp key="selection" />);
}
} }
if (expandRow.showExpandColumn) { if (expandRow.showExpandColumn) {
if (isRenderExpandColumnInLeft(expandRow.expandColumnPosition)) { if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) {
childrens.unshift(<ExpansionFooterCellComp key="expansion" />); childrens.unshift(<ExpansionFooterCellComp key="expansion" />);
} else { } else {
childrens.push(<ExpansionFooterCellComp key="expansion" />); childrens.push(<ExpansionFooterCellComp key="expansion" />);

View File

@ -33,9 +33,9 @@ const Header = (props) => {
SelectionHeaderCellComp = withHeaderSelection(SelectionHeaderCell); SelectionHeaderCellComp = withHeaderSelection(SelectionHeaderCell);
} }
const isRenderExpandColumnInLeft = ( const isRenderFunctionColumnInLeft = (
expandColumnPosition = Const.INDICATOR_POSITION_LEFT position = Const.INDICATOR_POSITION_LEFT
) => expandColumnPosition === Const.INDICATOR_POSITION_LEFT; ) => position === Const.INDICATOR_POSITION_LEFT;
const childrens = [ const childrens = [
columns.map((column, i) => { columns.map((column, i) => {
@ -58,11 +58,15 @@ const Header = (props) => {
]; ];
if (!selectRow.hideSelectColumn) { if (!selectRow.hideSelectColumn) {
childrens.unshift(<SelectionHeaderCellComp key="selection" />); if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) {
childrens.unshift(<SelectionHeaderCellComp key="selection" />);
} else {
childrens.push(<SelectionHeaderCellComp key="selection" />);
}
} }
if (expandRow.showExpandColumn) { if (expandRow.showExpandColumn) {
if (isRenderExpandColumnInLeft(expandRow.expandColumnPosition)) { if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) {
childrens.unshift(<ExpansionHeaderCellComp key="expansion" />); childrens.unshift(<ExpansionHeaderCellComp key="expansion" />);
} else { } else {
childrens.push(<ExpansionHeaderCellComp key="expansion" />); childrens.push(<ExpansionHeaderCellComp key="expansion" />);

View File

@ -45,10 +45,10 @@ export default class RowAggregator extends shouldUpdater(eventDelegater(React.Co
return this.shouldUpdateRowContent; return this.shouldUpdateRowContent;
} }
isRenderExpandColumnInLeft( isRenderFunctionColumnInLeft(
expandColumnPosition = Const.INDICATOR_POSITION_LEFT position = Const.INDICATOR_POSITION_LEFT
) { ) {
return expandColumnPosition === Const.INDICATOR_POSITION_LEFT; return position === Const.INDICATOR_POSITION_LEFT;
} }
render() { render() {
@ -71,7 +71,7 @@ export default class RowAggregator extends shouldUpdater(eventDelegater(React.Co
...rest ...rest
} = this.props; } = this.props;
const key = _.get(row, keyField); const key = _.get(row, keyField);
const { hideSelectColumn, clickToSelect } = selectRow; const { hideSelectColumn, selectColumnPosition, clickToSelect } = selectRow;
const { showExpandColumn, expandColumnPosition } = expandRow; const { showExpandColumn, expandColumnPosition } = expandRow;
const newAttrs = this.delegate({ ...attrs }); const newAttrs = this.delegate({ ...attrs });
@ -95,7 +95,7 @@ export default class RowAggregator extends shouldUpdater(eventDelegater(React.Co
)]; )];
if (!hideSelectColumn) { if (!hideSelectColumn) {
childrens.unshift(( const selectCell = (
<SelectionCell <SelectionCell
{ ...selectRow } { ...selectRow }
key="selection-cell" key="selection-cell"
@ -105,7 +105,12 @@ export default class RowAggregator extends shouldUpdater(eventDelegater(React.Co
disabled={ !selectable } disabled={ !selectable }
tabIndex={ tabIndexCell ? tabIndexStart++ : -1 } tabIndex={ tabIndexCell ? tabIndexStart++ : -1 }
/> />
)); );
if (this.isRenderFunctionColumnInLeft(selectColumnPosition)) {
childrens.unshift(selectCell);
} else {
childrens.push(selectCell);
}
} }
if (showExpandColumn) { if (showExpandColumn) {
@ -120,7 +125,7 @@ export default class RowAggregator extends shouldUpdater(eventDelegater(React.Co
tabIndex={ tabIndexCell ? tabIndexStart++ : -1 } tabIndex={ tabIndexCell ? tabIndexStart++ : -1 }
/> />
); );
if (this.isRenderExpandColumnInLeft(expandColumnPosition)) { if (this.isRenderFunctionColumnInLeft(expandColumnPosition)) {
childrens.unshift(expandCell); childrens.unshift(expandCell);
} else { } else {
childrens.push(expandCell); childrens.push(expandCell);