mirror of
https://github.com/gosticks/react-bootstrap-table2.git
synced 2026-08-16 05:30:18 +00:00
Implement stateful layer (#48)
* implement an internal stateful layer for data change(update/insert/delete) * BootstrapTable -> BootstrapTableful
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -31,7 +31,7 @@ const columns = [{
|
||||
}];
|
||||
|
||||
const sourceCode = `\
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
@@ -41,7 +41,7 @@ const sourceCode = `\
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -42,12 +42,12 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const columns = [{
|
||||
@@ -15,7 +15,7 @@ const columns = [{
|
||||
}];
|
||||
|
||||
const sourceCode = `\
|
||||
<BootstrapTable keyField='id' data={ [] } columns={ columns } noDataIndication="Table is Empty" />
|
||||
<BootstrapTableful keyField='id' data={ [] } columns={ columns } noDataIndication="Table is Empty" />
|
||||
|
||||
// Following is more customizable example
|
||||
|
||||
@@ -23,12 +23,12 @@ function indication() {
|
||||
// return something here
|
||||
}
|
||||
|
||||
<BootstrapTable keyField='id' data={ [] } columns={ columns } noDataIndication={ indication } />
|
||||
<BootstrapTableful keyField='id' data={ [] } columns={ columns } noDataIndication={ indication } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ [] } columns={ columns } noDataIndication="Table is Empty" />
|
||||
<BootstrapTableful keyField="id" data={ [] } columns={ columns } noDataIndication="Table is Empty" />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -31,7 +31,7 @@ const columns = [{
|
||||
}];
|
||||
|
||||
const sourceCode = `\
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
@@ -43,7 +43,7 @@ const sourceCode = `\
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -53,12 +53,12 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -53,12 +53,12 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -2,7 +2,7 @@
|
||||
/* eslint no-alert: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -50,13 +50,13 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<h3>Try to Click on Product ID columns</h3>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -67,7 +67,7 @@ const columns = [
|
||||
formatter: priceFormatter
|
||||
}];
|
||||
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
@@ -76,7 +76,7 @@ const columns = [
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
|
||||
Vendored
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-console: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -60,7 +60,7 @@ const columns = [
|
||||
down: 'glyphicon glyphicon-chevron-down'
|
||||
}];
|
||||
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
@@ -69,7 +69,7 @@ const columns = [
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -41,12 +41,12 @@ const columns = [{
|
||||
// omit...
|
||||
];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -71,12 +71,12 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -47,12 +47,12 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -58,12 +58,12 @@ const columns = [{
|
||||
text: 'PostCode'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -47,12 +47,12 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -53,12 +53,12 @@ const columns = [{
|
||||
}
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -2,7 +2,7 @@
|
||||
/* eslint no-alert: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -50,13 +50,13 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<h3>Try to Click on Product ID header column</h3>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -54,7 +54,7 @@ const columns = [
|
||||
headerFormatter: priceFormatter
|
||||
}];
|
||||
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
@@ -63,7 +63,7 @@ const columns = [
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable
|
||||
<BootstrapTableful
|
||||
keyField="id"
|
||||
data={ products }
|
||||
columns={ columns }
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -69,12 +69,12 @@ const columns = [{
|
||||
}
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/* eslint no-unused-vars: 0 */
|
||||
import React from 'react';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
import Code from 'common/codeBlock';
|
||||
|
||||
const products = [];
|
||||
@@ -47,12 +47,12 @@ const columns = [{
|
||||
text: 'Product Price'
|
||||
}];
|
||||
|
||||
<BootstrapTable keyField='id' data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField='id' data={ products } columns={ columns } />
|
||||
`;
|
||||
|
||||
export default () => (
|
||||
<div>
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />
|
||||
<Code>{ sourceCode }</Code>
|
||||
</div>
|
||||
);
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import ReactDom from 'react-dom';
|
||||
|
||||
import { BootstrapTable } from 'react-bootstrap-table2';
|
||||
import { BootstrapTableful } from 'react-bootstrap-table2';
|
||||
|
||||
const products = [];
|
||||
|
||||
@@ -62,5 +62,5 @@ const columns = [{
|
||||
|
||||
|
||||
ReactDom.render(
|
||||
<BootstrapTable keyField="id" data={ products } columns={ columns } />,
|
||||
<BootstrapTableful keyField="id" data={ products } columns={ columns } />,
|
||||
document.getElementById('example'));
|
||||
|
||||
+6
-3
@@ -11,11 +11,13 @@ class BootstrapTable extends PropsBaseResolver(Component) {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.validateProps();
|
||||
this.store = new Store(props);
|
||||
const { store } = this.props;
|
||||
this.store = !store ? new Store(props) : store;
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
data,
|
||||
columns,
|
||||
keyField,
|
||||
striped,
|
||||
@@ -37,10 +39,10 @@ class BootstrapTable extends PropsBaseResolver(Component) {
|
||||
<table className={ tableClass }>
|
||||
<Header columns={ columns } />
|
||||
<Body
|
||||
data={ this.store.data }
|
||||
data={ data }
|
||||
keyField={ keyField }
|
||||
columns={ columns }
|
||||
isEmpty={ this.store.isEmpty() }
|
||||
isEmpty={ this.isEmpty() }
|
||||
visibleColumnSize={ this.visibleColumnSize() }
|
||||
noDataIndication={ noDataIndication }
|
||||
/>
|
||||
@@ -54,6 +56,7 @@ BootstrapTable.propTypes = {
|
||||
keyField: PropTypes.string.isRequired,
|
||||
data: PropTypes.array.isRequired,
|
||||
columns: PropTypes.array.isRequired,
|
||||
store: PropTypes.object,
|
||||
noDataIndication: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
|
||||
striped: PropTypes.bool,
|
||||
bordered: PropTypes.bool,
|
||||
|
||||
+5
-1
@@ -1,5 +1,9 @@
|
||||
import BootstrapTable from './bootstrap-table';
|
||||
import withStateful from './stateful-layer';
|
||||
|
||||
const BootstrapTableful = withStateful(BootstrapTable);
|
||||
|
||||
export {
|
||||
BootstrapTable
|
||||
BootstrapTable,
|
||||
BootstrapTableful
|
||||
};
|
||||
|
||||
@@ -11,4 +11,8 @@ export default ExtendBase =>
|
||||
throw new Error('No any visible columns detect');
|
||||
}
|
||||
}
|
||||
|
||||
isEmpty() {
|
||||
return this.props.data.length === 0;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/* eslint arrow-body-style: 0 */
|
||||
import React, { Component } from 'react';
|
||||
import Store from './store/base';
|
||||
|
||||
const withStateful = (Base) => {
|
||||
class StatefulComponent extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.store = new Store(props);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { props } = this;
|
||||
return <Base { ...props } store={ this.store } />;
|
||||
}
|
||||
}
|
||||
return StatefulComponent;
|
||||
};
|
||||
|
||||
export default withStateful;
|
||||
Reference in New Issue
Block a user