Skip to content

Commit df7f410

Browse files
committed
Merge branch 'RxNT-master'
2 parents 5b56791 + 7123c60 commit df7f410

File tree

6 files changed

+108
-13
lines changed

6 files changed

+108
-13
lines changed

css/react-bootstrap-table.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,11 @@ td.react-bs-table-expand-cell {
261261
cursor: pointer;
262262
}
263263

264+
th.react-bs-table-expand-cell > div {
265+
cursor: pointer;
266+
}
267+
268+
264269
@keyframes shake {
265270
from, to {
266271
transform: translate3d(0, 0, 0);

examples/js/expandRow/custom-expand-indicator.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,19 @@ export default class ExpandRow extends React.Component {
8181
);
8282
}
8383

84+
expandedColumnHeaderComponent({ anyExpand }) {
85+
const content = (anyExpand ? '(-)' : '(+)' );
86+
return (
87+
<div>
88+
{ content }
89+
</div>
90+
);
91+
}
92+
8493
render() {
8594
const options = {
86-
expandRowBgColor: 'rgb(242, 255, 163)'
95+
expandRowBgColor: 'rgb(242, 255, 163)',
96+
expandAll: true
8797
};
8898
return (
8999
<BootstrapTable data={ products }
@@ -93,7 +103,8 @@ export default class ExpandRow extends React.Component {
93103
expandColumnOptions={ {
94104
expandColumnVisible: true,
95105
expandColumnComponent: this.expandColumnComponent,
96-
columnWidth: 50
106+
columnWidth: 50,
107+
expandedColumnHeaderComponent: this.expandedColumnHeaderComponent
97108
} }
98109
search>
99110
<TableHeaderColumn dataField='id' isKey={ true }>Product ID</TableHeaderColumn>

examples/js/expandRow/expand-indicator.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ export default class ExpandRow extends React.Component {
7070

7171
render() {
7272
const options = {
73-
expandRowBgColor: 'rgb(242, 255, 163)'
73+
expandRowBgColor: 'rgb(242, 255, 163)',
74+
expandAll: true
7475
};
7576
return (
7677
<BootstrapTable data={ products }

src/BootstrapTable.js

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,20 @@ class BootstrapTable extends Component {
4444
this._adjustHeaderWidth = this._adjustHeaderWidth.bind(this);
4545
this._adjustHeight = this._adjustHeight.bind(this);
4646
this._adjustTable = this._adjustTable.bind(this);
47+
this.toggleExpandAllChilds = this.toggleExpandAllChilds.bind(this);
48+
49+
let expandedKeys = [];
50+
if (this.props.options.expandAllChilds !== null &&
51+
this.props.options.expandAllChilds !== undefined && this.props.options.expandAllChilds) {
52+
expandedKeys = this.store.getAllRowkey();
53+
} else if (this.props.options.expanding !== undefined && this.props.options.expanding !== null) {
54+
expandedKeys = this.props.options.expanding;
55+
}
4756

4857
this.state = {
4958
data: this.getTableData(),
5059
currPage: currPage,
51-
expanding: this.props.options.expanding || [],
60+
expanding: expandedKeys,
5261
sizePerPage: this.props.options.sizePerPage || Const.SIZE_PER_PAGE_LIST[0],
5362
selectedRowKeys: this.store.getSelectedRowKeys(),
5463
reset: false,
@@ -477,6 +486,10 @@ class BootstrapTable extends Component {
477486
reset={ this.state.reset }
478487
expandColumnVisible={ expandColumnOptions.expandColumnVisible }
479488
expandColumnComponent={ expandColumnOptions.expandColumnComponent }
489+
expandedColumnHeaderComponent={ expandColumnOptions.expandedColumnHeaderComponent }
490+
noAnyExpand={ this.state.expanding.length === 0 }
491+
expandAll={ this.props.options.expandAll }
492+
toggleExpandAllChilds={ this.toggleExpandAllChilds }
480493
expandColumnBeforeSelectColumn={ expandColumnOptions.expandColumnBeforeSelectColumn }>
481494
{ this.props.children }
482495
</TableHeader>
@@ -627,6 +640,25 @@ class BootstrapTable extends Component {
627640
});
628641
}
629642

643+
toggleExpandAllChilds() {
644+
const { expanding } = this.state;
645+
if (expanding.length > 0) {
646+
this.setState(() => {
647+
return {
648+
expanding: [],
649+
reset: false
650+
};
651+
});
652+
} else {
653+
this.setState(() => {
654+
return {
655+
expanding: this.store.getAllRowkey(),
656+
reset: false
657+
};
658+
});
659+
}
660+
}
661+
630662
handlePaginationData = (page, sizePerPage) => {
631663
const { onPageChange, pageStartIndex } = this.props.options;
632664
const emptyTable = this.store.isEmpty();
@@ -1704,7 +1736,8 @@ BootstrapTable.propTypes = {
17041736
beforeShowError: PropTypes.func,
17051737
printToolBar: PropTypes.bool,
17061738
insertFailIndicator: PropTypes.string,
1707-
noAutoBOM: PropTypes.bool
1739+
noAutoBOM: PropTypes.bool,
1740+
expandAll: PropTypes.bool
17081741
}),
17091742
fetchInfo: PropTypes.shape({
17101743
dataTotalSize: PropTypes.number
@@ -1724,6 +1757,7 @@ BootstrapTable.propTypes = {
17241757
columnWidth: PropTypes.oneOfType([ PropTypes.number, PropTypes.string ]),
17251758
expandColumnVisible: PropTypes.bool,
17261759
expandColumnComponent: PropTypes.func,
1760+
expandedColumnHeaderComponent: PropTypes.func,
17271761
expandColumnBeforeSelectColumn: PropTypes.bool
17281762
}),
17291763
footer: PropTypes.bool
@@ -1737,6 +1771,7 @@ BootstrapTable.defaultProps = {
17371771
expandColumnOptions: {
17381772
expandColumnVisible: false,
17391773
expandColumnComponent: undefined,
1774+
expandedColumnHeaderComponent: undefined,
17401775
expandColumnBeforeSelectColumn: true
17411776
},
17421777
height: '100%',
@@ -1872,7 +1907,8 @@ BootstrapTable.defaultProps = {
18721907
beforeShowError: undefined,
18731908
printToolBar: true,
18741909
insertFailIndicator: Const.INSERT_FAIL_INDICATOR,
1875-
noAutoBOM: true
1910+
noAutoBOM: true,
1911+
expandAll: false
18761912
},
18771913
fetchInfo: {
18781914
dataTotalSize: 0

src/ExpandRowHeaderColumn.js

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,46 @@ import PropTypes from 'prop-types';
33

44
class ExpandRowHeaderColumn extends Component {
55

6+
constructor(props) {
7+
super(props);
8+
this.toggleExpandAllChilds = this.toggleExpandAllChilds.bind(this);
9+
}
10+
11+
toggleExpandAllChilds() {
12+
this.props.toggleExpandAllChilds();
13+
}
14+
615
render() {
16+
const {
17+
expandedColumnHeaderComponent,
18+
noAnyExpand,
19+
expandAll
20+
} = this.props;
21+
const expandedHeaderComponent = noAnyExpand ?
22+
<span className='fa fa-plus glyphicon glyphicon-plus'></span> :
23+
<span className='fa fa-minus glyphicon glyphicon-minus'></span>;
24+
const ExpandedColumnHeaderComponent = expandedColumnHeaderComponent;
25+
726
return (
827
<th rowSpan={ this.props.rowCount } style={ { textAlign: 'center' } }
928
className='react-bs-table-expand-cell'
1029
data-is-only-head={ false }>
11-
{ this.props.children }
30+
{
31+
expandAll ? <div onClick={ this.toggleExpandAllChilds }>
32+
{ expandedColumnHeaderComponent ?
33+
<ExpandedColumnHeaderComponent
34+
anyExpand={ !noAnyExpand } /> : expandedHeaderComponent }
35+
</div> : null
36+
}
1237
</th>
1338
);
1439
}
1540
}
1641
ExpandRowHeaderColumn.propTypes = {
17-
children: PropTypes.node,
18-
rowCount: PropTypes.number
42+
expandedColumnHeaderComponent: PropTypes.func,
43+
rowCount: PropTypes.number,
44+
noAnyExpand: PropTypes.bool,
45+
expandAll: PropTypes.bool,
46+
toggleExpandAllChilds: PropTypes.func
1947
};
2048
export default ExpandRowHeaderColumn;

src/TableHeader.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ function getSortOrder(sortList, field, enableSort) {
3838
class TableHeader extends Component {
3939

4040
render() {
41-
const { sortIndicator, sortList, onSort, reset, version, condensed, bordered } = this.props;
41+
const { sortIndicator, sortList, onSort, reset, version, condensed, bordered,
42+
expandedColumnHeaderComponent, noAnyExpand, toggleExpandAllChilds, expandAll
43+
} = this.props;
4244
const containerClasses = classSet(
4345
'react-bs-container-header',
4446
'table-header-wrapper',
@@ -64,13 +66,21 @@ class TableHeader extends Component {
6466
rows[0].push( [
6567
this.props.expandColumnVisible &&
6668
this.props.expandColumnBeforeSelectColumn &&
67-
<ExpandRowHeaderColumn key='expandCol' rowCount={ rowCount + 1 }/>
69+
<ExpandRowHeaderColumn key='expandCol' rowCount={ rowCount + 1 }
70+
expandedColumnHeaderComponent={ expandedColumnHeaderComponent }
71+
noAnyExpand={ noAnyExpand }
72+
expandAll={ expandAll }
73+
toggleExpandAllChilds={ toggleExpandAllChilds }/>
6874
], [
6975
this.renderSelectRowHeader(rowCount + 1, rowKey++)
7076
], [
7177
this.props.expandColumnVisible &&
7278
!this.props.expandColumnBeforeSelectColumn &&
73-
<ExpandRowHeaderColumn key='expandCol' rowCount={ rowCount + 1 }/>
79+
<ExpandRowHeaderColumn key='expandCol' rowCount={ rowCount + 1 }
80+
expandedColumnHeaderComponent={ expandedColumnHeaderComponent }
81+
noAnyExpand={ noAnyExpand }
82+
expandAll={ expandAll }
83+
toggleExpandAllChilds={ toggleExpandAllChilds }/>
7484
]);
7585

7686
React.Children.forEach(this.props.children, (elm) => {
@@ -169,8 +179,12 @@ TableHeader.propTypes = {
169179
reset: PropTypes.bool,
170180
expandColumnVisible: PropTypes.bool,
171181
expandColumnComponent: PropTypes.func,
182+
expandedColumnHeaderComponent: PropTypes.func,
172183
expandColumnBeforeSelectColumn: PropTypes.bool,
173-
version: PropTypes.string
184+
version: PropTypes.string,
185+
noAnyExpand: PropTypes.bool,
186+
expandAll: PropTypes.bool,
187+
toggleExpandAllChilds: PropTypes.func
174188
};
175189

176190
export default TableHeader;

0 commit comments

Comments
 (0)