Skip to content

Commit d9be2c2

Browse files
committed
seperate sorting style and header into two props
1 parent 17a2b16 commit d9be2c2

File tree

8 files changed

+61
-94
lines changed

8 files changed

+61
-94
lines changed

docs/README.md

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
* [rowClasses](#rowClasses)
2020
* [rowEvents](#rowEvents)
2121
* [defaultSorted](#defaultSorted)
22-
* [sortedHeader](#sortedHeader)
22+
* [sortingHeaderClasses](#sortingHeaderClasses)
23+
* [sortingHeaderStyle](#sortingHeaderStyle)
2324

2425
### <a name='keyField'>keyField(**required**) - [String]</a>
2526
Tells `react-bootstrap-table2` which column is unique.
@@ -104,40 +105,29 @@ const defaultSorted = [{
104105
}];
105106
```
106107

107-
### <a name='sortedHeader'>sortedHeader - [Object]</a>
108+
### <a name='sortingHeaderClasses'>sortingHeaderClasses - [String | Function]</a>
108109

109-
`sortedHeader` allows you to customize `class` or `style` for `header cell` which is currently sorting. `sortedHeader` accepts two `attributes`, `classes` and `style`.
110-
111-
* classes
112-
* style
113-
114-
**sortedHeader.classes - [String | Function]**
115-
116-
Append customized classes for `header cell` which the table was sorting based on.
110+
`sortingHeaderClasses` allows you to customize `class` for `header cell` which the table was sorting based on.
117111

118112
```js
119-
const sortedHeader = {
120-
classes: 'demo-sorted'
121-
};
113+
const sortingHeaderClasses = 'demo-sorted';
122114
```
123115

124116
Furthermore, it also accepts a callback function which takes `2` arguments and `String` is expected to return:
125117

126118
```js
127-
const sortedHeader = {
128-
classes: function callback(column, colIndex) { ... }
129-
}
119+
const sortingHeaderClasses = function callback(column, colIndex) { ... }
130120
```
131121

132122
* column: The value of current column.
133123
* colIndex: The index of the current column being processed in BootstrapTable.
134124

135-
**sortedHeader.style - [Object | Function]**
125+
### <a name='sortingHeaderStyle'>sortingHeaderStyle - [Object | Function]</a>
136126

137-
It's similiar to `sortedHeader.classes`. It allows to customize style of `header cell` which is sorting based on. `Object` and `callback` function are acceptable. `callback` takes `2` arguments and an `Object` is expected to return:
127+
It's similiar to `sortingHeaderClasses`. It allows to customize style of `header cell` which is sorting based on. `Object` and `callback` function are acceptable. `callback` takes `2` arguments and an `Object` is expected to return:
138128

139129
```js
140-
const sortedHeader = {
141-
style: { backgroundColor: 'red' }
130+
const sortingHeaderStyle = {
131+
backgroundColor: 'red'
142132
};
143-
```
133+
```

packages/react-bootstrap-table2-example/examples/sort/sorted-header-classes.js renamed to packages/react-bootstrap-table2-example/examples/sort/sorting-header-classes.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ const columns = [{
2020
text: 'Product Price'
2121
}];
2222

23-
const sortedHeader = {
24-
classes: (column, colIndex) => 'demo-sorted'
25-
};
23+
const sortingHeaderClasses = (column, colIndex) => 'demo-sorted';
2624

2725
const sourceCode = `\
2826
const columns = [{
@@ -38,16 +36,14 @@ const columns = [{
3836
text: 'Product Price'
3937
}];
4038
41-
const sortedHeader = {
42-
classes: (column, colIndex) => 'demo-sorted'
43-
};
39+
const sortingHeaderClasses = (column, colIndex) => 'demo-sorted';
4440
45-
<BootstrapTable keyField="id" data={ products } columns={ columns } sortedHeader={ sortedHeader } />
41+
<BootstrapTable keyField="id" data={ products } columns={ columns } sortingHeaderClasses={ sortingHeaderClasses } />
4642
`;
4743

4844
export default () => (
4945
<div>
50-
<BootstrapTable keyField="id" data={ products } columns={ columns } sortedHeader={ sortedHeader } />
46+
<BootstrapTable keyField="id" data={ products } columns={ columns } sortingHeaderClasses={ sortingHeaderClasses } />
5147
<Code>{ sourceCode }</Code>
5248
</div>
5349
);

packages/react-bootstrap-table2-example/examples/sort/sorted-header-style.js renamed to packages/react-bootstrap-table2-example/examples/sort/sorting-header-style.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ const columns = [{
2020
text: 'Product Price'
2121
}];
2222

23-
const sortedHeader = {
24-
style: { backgroundColor: '#c8e6c9' }
25-
};
23+
const sortingHeaderStyle = { backgroundColor: '#c8e6c9' };
2624

2725
const sourceCode = `\
2826
const columns = [{
@@ -38,16 +36,14 @@ const columns = [{
3836
text: 'Product Price'
3937
}];
4038
41-
const sortedHeader = {
42-
style: { backgroundColor: '#c8e6c9' }
43-
};
39+
const sortingHeaderStyle = { backgroundColor: '#c8e6c9' };
4440
45-
<BootstrapTable keyField="id" data={ products } columns={ columns } sortedHeader={ sortedHeader } />
41+
<BootstrapTable keyField="id" data={ products } columns={ columns } sortingHeaderStyle={ sortingHeaderStyle } />
4642
`;
4743

4844
export default () => (
4945
<div>
50-
<BootstrapTable keyField="id" data={ products } columns={ columns } sortedHeader={ sortedHeader } />
46+
<BootstrapTable keyField="id" data={ products } columns={ columns } sortingHeaderStyle={ sortingHeaderStyle } />
5147
<Code>{ sourceCode }</Code>
5248
</div>
5349
);

packages/react-bootstrap-table2-example/stories/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ import RowEventTable from 'examples/rows/row-event';
4141
import EnableSortTable from 'examples/sort/enable-sort-table';
4242
import DefaultSortTable from 'examples/sort/default-sort-table';
4343
import CustomSortTable from 'examples/sort/custom-sort-table';
44-
import SortedHeaderClassesTable from 'examples/sort/sorted-header-classes';
45-
import SortedHeaderStyleTable from 'examples/sort/sorted-header-style';
44+
import SortingHeaderClassesTable from 'examples/sort/sorting-header-classes';
45+
import SortingHeaderStyleTable from 'examples/sort/sorting-header-style';
4646

4747
// cell editing
4848
import ClickToEditTable from 'examples/cell-edit/click-to-edit-table';
@@ -119,8 +119,8 @@ storiesOf('Sort Table', module)
119119
.add('Enable Sort', () => <EnableSortTable />)
120120
.add('Default Sort Table', () => <DefaultSortTable />)
121121
.add('Custom Sort Fuction', () => <CustomSortTable />)
122-
.add('Sorted header classes', () => <SortedHeaderClassesTable />)
123-
.add('Sorted header style', () => <SortedHeaderStyleTable />);
122+
.add('Sorting header classes', () => <SortingHeaderClassesTable />)
123+
.add('Sorting header style', () => <SortingHeaderStyleTable />);
124124

125125
storiesOf('Cell Editing', module)
126126
.add('Click to Edit', () => <ClickToEditTable />)

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ class BootstrapTable extends PropsBaseResolver(Component) {
3939
rowStyle,
4040
rowClasses,
4141
rowEvents,
42-
sortedHeader
42+
sortingHeaderClasses,
43+
sortingHeaderStyle
4344
} = this.props;
4445

4546
const tableClass = cs('table', {
@@ -76,7 +77,8 @@ class BootstrapTable extends PropsBaseResolver(Component) {
7677
sortOrder={ store.sortOrder }
7778
onSort={ this.props.onSort }
7879
selectRow={ headerCellSelectionInfo }
79-
sortedHeader={ sortedHeader }
80+
sortingHeaderClasses={ sortingHeaderClasses }
81+
sortingHeaderStyle={ sortingHeaderStyle }
8082
/>
8183
<Body
8284
data={ this.state.data }
@@ -155,10 +157,8 @@ BootstrapTable.propTypes = {
155157
dataField: PropTypes.string.isRequired,
156158
order: PropTypes.oneOf([Const.SORT_DESC, Const.SORT_ASC]).isRequired
157159
})),
158-
sortedHeader: PropTypes.shape({
159-
classes: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
160-
style: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
161-
})
160+
sortingHeaderClasses: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
161+
sortingHeaderStyle: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
162162
};
163163

164164
BootstrapTable.defaultProps = {

packages/react-bootstrap-table2/src/header-cell.js

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ const HeaderCell = (props) => {
1616
onSort,
1717
sorting,
1818
sortOrder,
19-
sortedHeader
19+
sortingHeaderClasses,
20+
sortingHeaderStyle
2021
} = props;
2122

2223
const {
@@ -32,11 +33,6 @@ const HeaderCell = (props) => {
3233
headerAttrs
3334
} = column;
3435

35-
const {
36-
classes: sortedHeaderClasses,
37-
style: sortedHeaderStyle
38-
} = sortedHeader;
39-
4036
const cellAttrs = {
4137
..._.isFunction(headerAttrs) ? headerAttrs(column, index) : headerAttrs,
4238
...headerEvents
@@ -77,16 +73,16 @@ const HeaderCell = (props) => {
7773
// append customized classes or style if table was sorting based on the current column.
7874
cellClasses = cs(
7975
cellClasses,
80-
_.isFunction(sortedHeaderClasses)
81-
? sortedHeaderClasses(column, index)
82-
: sortedHeaderClasses
76+
_.isFunction(sortingHeaderClasses)
77+
? sortingHeaderClasses(column, index)
78+
: sortingHeaderClasses
8379
);
8480

8581
cellStyle = {
8682
...cellStyle,
87-
..._.isFunction(sortedHeaderStyle)
88-
? sortedHeaderStyle(column, index)
89-
: sortedHeaderStyle
83+
..._.isFunction(sortingHeaderStyle)
84+
? sortingHeaderStyle(column, index)
85+
: sortingHeaderStyle
9086
};
9187
} else {
9288
sortSymbol = <SortSymbol />;
@@ -135,10 +131,8 @@ HeaderCell.propTypes = {
135131
onSort: PropTypes.func,
136132
sorting: PropTypes.bool,
137133
sortOrder: PropTypes.oneOf([Const.SORT_ASC, Const.SORT_DESC]),
138-
sortedHeader: PropTypes.shape({
139-
classes: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
140-
style: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
141-
})
134+
sortingHeaderClasses: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
135+
sortingHeaderStyle: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
142136
};
143137

144138
HeaderCell.defaultProps = {

packages/react-bootstrap-table2/src/header.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ const Header = (props) => {
1414
onSort,
1515
sortField,
1616
sortOrder,
17-
sortedHeader,
17+
sortingHeaderClasses,
18+
sortingHeaderStyle,
1819
selectRow
1920
} = props;
2021

@@ -36,7 +37,8 @@ const Header = (props) => {
3637
onSort={ onSort }
3738
sorting={ currSort }
3839
sortOrder={ sortOrder }
39-
sortedHeader={ sortedHeader }
40+
sortingHeaderClasses={ sortingHeaderClasses }
41+
sortingHeaderStyle={ sortingHeaderStyle }
4042
/>);
4143
})
4244
}
@@ -51,7 +53,8 @@ Header.propTypes = {
5153
sortField: PropTypes.string,
5254
sortOrder: PropTypes.string,
5355
selectRow: PropTypes.object,
54-
sortedHeader: PropTypes.object
56+
sortingHeaderClasses: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
57+
sortingHeaderStyle: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
5558
};
5659

5760
export default Header;

packages/react-bootstrap-table2/test/header-cell.test.js

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -437,49 +437,46 @@ describe('HeaderCell', () => {
437437
});
438438
});
439439

440-
describe('when sortedHeader.classes was defined ', () => {
441-
let sortedHeader;
440+
describe('when sortingHeaderClasses was defined ', () => {
441+
const classes = 'foo';
442442

443-
describe('if sortedHeader.classes is a string', () => {
443+
describe('if sortingHeaderClasses is a string', () => {
444444
beforeEach(() => {
445-
sortedHeader = { classes: 'foo' };
446445
wrapper = shallow(
447446
<HeaderCell
448447
column={ column }
449448
index={ index }
450449
sorting
451450
sortOrder={ Const.SORT_DESC }
452-
sortedHeader={ sortedHeader }
451+
sortingHeaderClasses={ classes }
453452
/>);
454453
});
455454

456455
it('should append classes correcly', () => {
457456
expect(wrapper.length).toBe(1);
458-
expect(wrapper.hasClass(sortedHeader.classes)).toBe(true);
457+
expect(wrapper.hasClass(classes)).toBe(true);
459458
});
460459

461460
it('should have sortable class on header cell', () => {
462461
expect(wrapper.hasClass('sortable')).toBe(true);
463462
});
464463
});
465464

466-
describe('if sortedHeader.classes is a function', () => {
465+
describe('if sortingHeaderClasses is a function', () => {
467466
let classesCallBack;
468-
const classes = 'foo';
469467

470468
beforeEach(() => {
471469
classesCallBack = sinon.stub()
472470
.withArgs(column, index)
473471
.returns(classes);
474472

475-
sortedHeader = { classes: classesCallBack };
476473
wrapper = shallow(
477474
<HeaderCell
478475
column={ column }
479476
index={ index }
480477
sorting
481478
sortOrder={ Const.SORT_DESC }
482-
sortedHeader={ sortedHeader }
479+
sortingHeaderClasses={ classesCallBack }
483480
/>);
484481
});
485482

@@ -499,7 +496,7 @@ describe('HeaderCell', () => {
499496
});
500497
});
501498

502-
describe('when sortedHeader.classes was not defined', () => {
499+
describe('when sortingHeaderClasses was not defined', () => {
503500
it('should do nothing and keep the same on classes of header cell', () => {
504501
column.headerClasses = 'td-test-class';
505502

@@ -517,51 +514,42 @@ describe('HeaderCell', () => {
517514
});
518515
});
519516

520-
describe('when sortedHeader.style was defined', () => {
521-
let sortedHeader;
517+
describe('when sortingHeaderStyle was defined', () => {
518+
const style = { backgroundColor: 'red' };
522519

523-
describe('if sortedHeader.style is an object', () => {
520+
describe('if sortingHeaderStyle is an object', () => {
524521
beforeEach(() => {
525-
sortedHeader = {
526-
style: { backgroundColor: 'red' }
527-
};
528-
529522
wrapper = shallow(
530523
<HeaderCell
531524
column={ column }
532525
index={ index }
533526
sorting
534527
sortOrder={ Const.SORT_DESC }
535-
sortedHeader={ sortedHeader }
528+
sortingHeaderStyle={ style }
536529
/>);
537530
});
538531

539532
it('should append style correcly', () => {
540533
expect(wrapper.length).toBe(1);
541-
expect(wrapper.find('th').prop('style')).toEqual(sortedHeader.style);
534+
expect(wrapper.find('th').prop('style')).toEqual(style);
542535
});
543536
});
544537

545-
describe('if sortedHeader.style is a function', () => {
546-
const style = { backgroundColor: 'red' };
538+
describe('if sortingHeaderStyle is a function', () => {
547539
let styleCallBack;
548540

549541
beforeEach(() => {
550542
styleCallBack = sinon.stub()
551543
.withArgs(column, index)
552544
.returns(style);
553545

554-
sortedHeader = {
555-
style: styleCallBack
556-
};
557-
558546
wrapper = shallow(
559547
<HeaderCell
560548
column={ column }
561549
index={ index }
562550
sorting
563551
sortOrder={ Const.SORT_DESC }
564-
sortedHeader={ sortedHeader }
552+
sortingHeaderStyle={ styleCallBack }
565553
/>);
566554
});
567555

@@ -577,7 +565,7 @@ describe('HeaderCell', () => {
577565
});
578566
});
579567

580-
describe('when sortedHeader.style was not defined', () => {
568+
describe('when sortingHeaderStyle was not defined', () => {
581569
it('should do nothing and keep the same on style of header cell', () => {
582570
column.headerStyle = { backgroundColor: 'red' };
583571

0 commit comments

Comments
 (0)