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 574a314

Browse files
funcaitonal store (#146)
1 parent ff31b2f commit 574a314

File tree

24 files changed

+500
-430
lines changed

24 files changed

+500
-430
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
export const getByCurrPage = store => (page, sizePerPage, pageStartIndex) => {
2+
const getNormalizedPage = () => {
3+
const offset = Math.abs(1 - pageStartIndex);
4+
return page + offset;
5+
};
6+
const end = (getNormalizedPage() * sizePerPage) - 1;
7+
const start = end - (sizePerPage - 1);
8+
const dataSize = store.data.length;
9+
10+
const result = [];
11+
for (let i = start; i <= end; i += 1) {
12+
result.push(store.data[i]);
13+
if (i + 1 === dataSize) break;
14+
}
15+
return result;
16+
};

‎packages/react-bootstrap-table2-paginator/src/wrapper.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import React, { Component } from 'react';
55
import PropTypes from 'prop-types';
66

77
import Const from './const';
8+
import { getByCurrPage } from './page';
89

910
const wrapperFactory = baseElement =>
1011
class PaginationWrapper extends Component {
@@ -98,7 +99,7 @@ const wrapperFactory = baseElement =>
9899

99100
const data = this.isRemote() ?
100101
this.props.data :
101-
store.getByCurrPage(currPage, currSizePerPage, pageStartIndex);
102+
getByCurrPage(store)(currPage, currSizePerPage, pageStartIndex);
102103

103104
const base = baseElement({
104105
...this.props,
@@ -110,7 +111,7 @@ const wrapperFactory = baseElement =>
110111
base,
111112
<Pagination
112113
key="pagination"
113-
dataSize={ options.totalSize || store.getDataSize() }
114+
dataSize={ options.totalSize || store.data.length }
114115
currPage={ currPage }
115116
currSizePerPage={ currSizePerPage }
116117
onPageChange={ this.handleChangePage }
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import Store from 'react-bootstrap-table2/src/store';
2+
import { getByCurrPage } from '../src/page';
3+
4+
describe('Page Functions', () => {
5+
let data;
6+
let store;
7+
8+
describe('getByCurrPage', () => {
9+
beforeEach(() => {
10+
data = [];
11+
for (let i = 0; i < 100; i += 1) {
12+
data.push({ id: i, name: `test_name${i}` });
13+
}
14+
store = new Store('id');
15+
store.data = data;
16+
});
17+
18+
it('should always return correct data', () => {
19+
[
20+
// [page, sizePerPage, pageStartIndex]
21+
[1, 10, 1],
22+
[1, 25, 1],
23+
[1, 30, 1],
24+
[3, 30, 1],
25+
[4, 30, 1],
26+
[10, 10, 1],
27+
[0, 10, 0],
28+
[1, 10, 0],
29+
[9, 10, 0]
30+
].forEach(([page, sizePerPage, pageStartIndex]) => {
31+
const rows = getByCurrPage(store)(page, sizePerPage, pageStartIndex);
32+
expect(rows).toBeDefined();
33+
expect(Array.isArray(rows)).toBeTruthy();
34+
expect(rows.every(row => !!row)).toBeTruthy();
35+
});
36+
});
37+
});
38+
});

‎packages/react-bootstrap-table2-paginator/test/wrapper.test.js

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { shallow } from 'enzyme';
44

55

66
import BootstrapTable from 'react-bootstrap-table2/src/bootstrap-table';
7-
import Store from 'react-bootstrap-table2/src/store/base';
7+
import Store from 'react-bootstrap-table2/src/store';
88
import paginator from '../src';
99
import wrapperFactory from '../src/wrapper';
1010
import Pagination from '../src/pagination';
@@ -23,19 +23,23 @@ describe('Wrapper', () => {
2323
let wrapper;
2424
let instance;
2525

26-
const createTableProps = (props = {}) => ({
27-
keyField: 'id',
28-
columns: [{
29-
dataField: 'id',
30-
text: 'ID'
31-
}, {
32-
dataField: 'name',
33-
text: 'Name'
34-
}],
35-
data,
36-
pagination: paginator(props.options),
37-
store: new Store({ data })
38-
});
26+
const createTableProps = (props = {}) => {
27+
const tableProps = {
28+
keyField: 'id',
29+
columns: [{
30+
dataField: 'id',
31+
text: 'ID'
32+
}, {
33+
dataField: 'name',
34+
text: 'Name'
35+
}],
36+
data,
37+
pagination: paginator(props.options),
38+
store: new Store('id')
39+
};
40+
tableProps.store.data = data;
41+
return tableProps;
42+
};
3943

4044
const pureTable = props => (<BootstrapTable { ...props } />);
4145

@@ -76,7 +80,7 @@ describe('Wrapper', () => {
7680
it('should rendering Pagination correctly', () => {
7781
const pagination = wrapper.find(Pagination);
7882
expect(pagination.length).toBe(1);
79-
expect(pagination.prop('dataSize')).toEqual(props.store.getDataSize());
83+
expect(pagination.prop('dataSize')).toEqual(props.store.data.length);
8084
expect(pagination.prop('currPage')).toEqual(instance.state.currPage);
8185
expect(pagination.prop('currSizePerPage')).toEqual(instance.state.currSizePerPage);
8286
expect(pagination.prop('onPageChange')).toEqual(instance.handleChangePage);

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +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';
1213

1314
class BootstrapTable extends PropsBaseResolver(Component) {
1415
constructor(props) {
@@ -73,7 +74,7 @@ class BootstrapTable extends PropsBaseResolver(Component) {
7374
const headerCellSelectionInfo = this.resolveSelectRowPropsForHeader({
7475
onAllRowsSelect: this.props.onAllRowsSelect,
7576
selected: store.selected,
76-
allRowsSelected: store.isAllRowsSelected()
77+
allRowsSelected: isSelectedAll(store)
7778
});
7879

7980
return (
@@ -96,7 +97,7 @@ class BootstrapTable extends PropsBaseResolver(Component) {
9697
noDataIndication={ noDataIndication }
9798
cellEdit={ cellEditInfo }
9899
selectRow={ cellSelectionInfo }
99-
selectedRowKeys={ store.getSelectedRowKeys() }
100+
selectedRowKeys={ store.selected }
100101
rowStyle={ rowStyle }
101102
rowClasses={ rowClasses }
102103
rowEvents={ rowEvents }

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint no-return-assign: 0 */
22
/* eslint react/prop-types: 0 */
33
import React, { Component } from 'react';
4-
import Store from './store/base';
4+
import Store from './store';
55

66
import {
77
wrapWithCellEdit,
@@ -16,13 +16,14 @@ const withDataStore = Base =>
1616
class BootstrapTableContainer extends Component {
1717
constructor(props) {
1818
super(props);
19-
this.store = new Store(props);
19+
this.store = new Store(props.keyField);
20+
this.store.data = props.data;
2021
this.handleUpdateCell = this.handleUpdateCell.bind(this);
2122
this.onRemotePageChange = this.onRemotePageChange.bind(this);
2223
}
2324

2425
componentWillReceiveProps(nextProps) {
25-
this.store.set(nextProps.data);
26+
this.store.data=nextProps.data;
2627
}
2728

2829
onRemotePageChange(page, sizePerPage) {

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

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,21 @@ import PropTypes from 'prop-types';
55
import { selectionElement } from '../table-factory';
66

77
import Const from '../const';
8+
import {
9+
isAnySelectedRow,
10+
selectableKeys,
11+
unSelectableKeys,
12+
getSelectedRows
13+
} from '../store/selection';
14+
import { getRowByRowId } from '../store/rows';
815

916
class RowSelectionWrapper extends Component {
1017
constructor(props) {
1118
super(props);
1219
this.handleRowSelect = this.handleRowSelect.bind(this);
1320
this.handleAllRowsSelect = this.handleAllRowsSelect.bind(this);
1421
this.state = {
15-
selectedRowKeys: props.store.getSelectedRowKeys()
22+
selectedRowKeys: props.store.selected
1623
};
1724
}
1825

@@ -25,7 +32,7 @@ class RowSelectionWrapper extends Component {
2532
const { selectRow: { mode, onSelect }, store } = this.props;
2633
const { ROW_SELECT_SINGLE } = Const;
2734

28-
let currSelected = [...store.getSelectedRowKeys()];
35+
let currSelected = [...store.selected];
2936

3037
if (mode === ROW_SELECT_SINGLE) { // when select mode is radio
3138
currSelected = [rowKey];
@@ -35,10 +42,10 @@ class RowSelectionWrapper extends Component {
3542
currSelected = currSelected.filter(value => value !== rowKey);
3643
}
3744

38-
store.setSelectedRowKeys(currSelected);
45+
store.selected=currSelected;
3946

4047
if (onSelect) {
41-
const row = store.getRowByRowId(rowKey);
48+
const row = getRowByRowId(store)(rowKey);
4249
onSelect(row, checked, rowIndex);
4350
}
4451

@@ -56,20 +63,20 @@ class RowSelectionWrapper extends Component {
5663
onSelectAll,
5764
nonSelectable
5865
} } = this.props;
59-
const selected = store.isAnySelectedRow(nonSelectable);
66+
const selected = isAnySelectedRow(store)(nonSelectable);
6067

6168
// set next status of all row selected by store.selected or customizing by user.
6269
const result = option || !selected;
6370

6471
const currSelected = result ?
65-
store.selectAllRows(nonSelectable) :
66-
store.cleanSelectedRows(nonSelectable);
72+
selectableKeys(store)(nonSelectable) :
73+
unSelectableKeys(store)(nonSelectable);
6774

6875

69-
store.setSelectedRowKeys(currSelected);
76+
store.selected=currSelected;
7077

7178
if (onSelectAll) {
72-
onSelectAll(result, store.getSelectedRows());
79+
onSelectAll(result, getSelectedRows(store));
7380
}
7481

7582
this.setState(() => ({

‎packages/react-bootstrap-table2/src/sort/wrapper.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,15 @@ class SortWrapper extends Component {
3030
const { store } = this.props;
3131
store.sortBy(column);
3232

33-
this.table.setState({
34-
data: store.get()
35-
});
33+
this.table.setState({ data: store.data });
3634
}
3735

3836
render() {
3937
return paginationElement({
4038
...this.props,
4139
ref: node => this.table = node,
4240
onSort: this.handleSort,
43-
data: this.props.store.get()
41+
data: this.props.store.data
4442
});
4543
}
4644
}

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

Lines changed: 0 additions & 110 deletions
This file was deleted.

0 commit comments

Comments
(0)

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