diff --git a/packages/react-bootstrap-table2-example/examples/remote/remote-all.js b/packages/react-bootstrap-table2-example/examples/remote/remote-all.js
new file mode 100644
index 0000000..c23d690
--- /dev/null
+++ b/packages/react-bootstrap-table2-example/examples/remote/remote-all.js
@@ -0,0 +1,202 @@
+/* eslint guard-for-in: 0 */
+/* eslint no-restricted-syntax: 0 */
+import React from 'react';
+import PropTypes from 'prop-types';
+import BootstrapTable from 'react-bootstrap-table2';
+import paginator from 'react-bootstrap-table2-paginator';
+import filterFactory, { textFilter, Comparator } from 'react-bootstrap-table2-filter';
+import Code from 'components/common/code-block';
+import { productsGenerator } from 'utils/common';
+
+const products = productsGenerator(87);
+
+const columns = [{
+ dataField: 'id',
+ text: 'Product ID'
+}, {
+ dataField: 'name',
+ text: 'Product Name',
+ filter: textFilter()
+}, {
+ dataField: 'price',
+ text: 'Product Price',
+ filter: textFilter()
+}];
+
+const sourceCode = `\
+import BootstrapTable from 'react-bootstrap-table2';
+import paginator from 'react-bootstrap-table2-paginator';
+import filterFactory, { textFilter, Comparator } from 'react-bootstrap-table2-filter';
+// ...
+
+const columns = [{
+ dataField: 'id',
+ text: 'Product ID'
+}, {
+ dataField: 'name',
+ text: 'Product Name',
+ filter: textFilter()
+}, {
+ dataField: 'price',
+ text: 'Product Price',
+ filter: textFilter()
+}];
+
+const RemoteAll = ({ data, page, sizePerPage, onTableChange, totalSize }) => (
+
+
+ { sourceCode }
+
+);
+
+RemoteAll.propTypes = {
+ data: PropTypes.array.isRequired,
+ page: PropTypes.number.isRequired,
+ totalSize: PropTypes.number.isRequired,
+ sizePerPage: PropTypes.number.isRequired,
+ onTableChange: PropTypes.func.isRequired
+};
+
+class Container extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ page: 1,
+ data: products.slice(0, 10),
+ totalSize: products.length,
+ sizePerPage: 10
+ };
+ this.handleTableChange = this.handleTableChange.bind(this);
+ }
+
+ handleTableChange = (type, { page, sizePerPage, filters }) => {
+ const currentIndex = (page - 1) * sizePerPage;
+ setTimeout(() => {
+ const result = products.filter((row) => {
+ let valid = true;
+ for (const dataField in filters) {
+ const { filterVal, filterType, comparator } = filters[dataField];
+
+ if (filterType === 'TEXT') {
+ if (comparator === Comparator.LIKE) {
+ valid = row[dataField].toString().indexOf(filterVal) > -1;
+ } else {
+ valid = row[dataField] === filterVal;
+ }
+ }
+ if (!valid) break;
+ }
+ return valid;
+ });
+ this.setState(() => ({
+ page,
+ data: result.slice(currentIndex, currentIndex + sizePerPage),
+ totalSize: result.length,
+ sizePerPage
+ }));
+ }, 2000);
+ }
+
+ render() {
+ const { data, sizePerPage, page } = this.state;
+ return (
+
+ );
+ }
+}
+`;
+
+const RemoteAll = ({ data, page, sizePerPage, onTableChange, totalSize }) => (
+
+
When remote.pagination is enabled, the filtering,
+ sorting and searching will also change to remote mode automatically
+
+ { sourceCode }
+
+);
+
+RemoteAll.propTypes = {
+ data: PropTypes.array.isRequired,
+ page: PropTypes.number.isRequired,
+ totalSize: PropTypes.number.isRequired,
+ sizePerPage: PropTypes.number.isRequired,
+ onTableChange: PropTypes.func.isRequired
+};
+
+class Container extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ page: 1,
+ data: products.slice(0, 10),
+ totalSize: products.length,
+ sizePerPage: 10
+ };
+ this.handleTableChange = this.handleTableChange.bind(this);
+ }
+
+ handleTableChange = (type, { page, sizePerPage, filters }) => {
+ const currentIndex = (page - 1) * sizePerPage;
+ setTimeout(() => {
+ const result = products.filter((row) => {
+ let valid = true;
+ for (const dataField in filters) {
+ const { filterVal, filterType, comparator } = filters[dataField];
+
+ if (filterType === 'TEXT') {
+ if (comparator === Comparator.LIKE) {
+ valid = row[dataField].toString().indexOf(filterVal) > -1;
+ } else {
+ valid = row[dataField] === filterVal;
+ }
+ }
+ if (!valid) break;
+ }
+ return valid;
+ });
+ this.setState(() => ({
+ page,
+ data: result.slice(currentIndex, currentIndex + sizePerPage),
+ totalSize: result.length,
+ sizePerPage
+ }));
+ }, 2000);
+ }
+
+ render() {
+ const { data, sizePerPage, page } = this.state;
+ return (
+
+ );
+ }
+}
+
+export default Container;
diff --git a/packages/react-bootstrap-table2-example/examples/remote/remote-filter.js b/packages/react-bootstrap-table2-example/examples/remote/remote-filter.js
new file mode 100644
index 0000000..d2b37b6
--- /dev/null
+++ b/packages/react-bootstrap-table2-example/examples/remote/remote-filter.js
@@ -0,0 +1,105 @@
+/* eslint guard-for-in: 0 */
+/* eslint no-restricted-syntax: 0 */
+import React from 'react';
+import PropTypes from 'prop-types';
+import BootstrapTable from 'react-bootstrap-table2';
+import filterFactory, { textFilter, Comparator } from 'react-bootstrap-table2-filter';
+import Code from 'components/common/code-block';
+import { productsGenerator } from 'utils/common';
+
+const products = productsGenerator(17);
+
+const columns = [{
+ dataField: 'id',
+ text: 'Product ID'
+}, {
+ dataField: 'name',
+ text: 'Product Name',
+ filter: textFilter()
+}, {
+ dataField: 'price',
+ text: 'Product Price',
+ filter: textFilter()
+}];
+
+const sourceCode = `\
+import filterFactory, { textFilter } from 'react-bootstrap-table2-filter';
+
+const columns = [{
+ dataField: 'id',
+ text: 'Product ID',
+}, {
+ dataField: 'name',
+ text: 'Product Name',
+ filter: textFilter()
+}, {
+ dataField: 'price',
+ text: 'Product Price',
+ filter: textFilter()
+}];
+
+
+`;
+
+const RemoteFilter = props => (
+
+
+ { sourceCode }
+
+);
+
+RemoteFilter.propTypes = {
+ data: PropTypes.array.isRequired,
+ onTableChange: PropTypes.func.isRequired
+};
+
+class Container extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ data: products
+ };
+ }
+
+ handleTableChange = (type, { filters }) => {
+ setTimeout(() => {
+ const result = products.filter((row) => {
+ let valid = true;
+ for (const dataField in filters) {
+ const { filterVal, filterType, comparator } = filters[dataField];
+
+ if (filterType === 'TEXT') {
+ if (comparator === Comparator.LIKE) {
+ valid = row[dataField].toString().indexOf(filterVal) > -1;
+ } else {
+ valid = row[dataField] === filterVal;
+ }
+ }
+ if (!valid) break;
+ }
+ return valid;
+ });
+ this.setState(() => ({
+ data: result
+ }));
+ }, 2000);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+export default Container;
diff --git a/packages/react-bootstrap-table2-example/examples/pagination/remote-pagination.js b/packages/react-bootstrap-table2-example/examples/remote/remote-pagination.js
similarity index 98%
rename from packages/react-bootstrap-table2-example/examples/pagination/remote-pagination.js
rename to packages/react-bootstrap-table2-example/examples/remote/remote-pagination.js
index ccae5c7..050dc4d 100644
--- a/packages/react-bootstrap-table2-example/examples/pagination/remote-pagination.js
+++ b/packages/react-bootstrap-table2-example/examples/remote/remote-pagination.js
@@ -105,7 +105,7 @@ class Container extends React.Component {
};
}
- handleTableChange = ({ page, sizePerPage }) => {
+ handleTableChange = (type, { page, sizePerPage }) => {
const currentIndex = (page - 1) * sizePerPage;
setTimeout(() => {
this.setState(() => ({
diff --git a/packages/react-bootstrap-table2-example/stories/index.js b/packages/react-bootstrap-table2-example/stories/index.js
index 012cfc8..36abbb0 100644
--- a/packages/react-bootstrap-table2-example/stories/index.js
+++ b/packages/react-bootstrap-table2-example/stories/index.js
@@ -82,12 +82,16 @@ import HideSelectionColumnTable from 'examples/row-selection/hide-selection-colu
import PaginationTable from 'examples/pagination';
import PaginationHooksTable from 'examples/pagination/pagination-hooks';
import CustomPaginationTable from 'examples/pagination/custom-pagination';
-import RemotePaginationTable from 'examples/pagination/remote-pagination';
// loading overlay
import EmptyTableOverlay from 'examples/loading-overlay/empty-table-overlay';
import TableOverlay from 'examples/loading-overlay/table-overlay';
+// remote
+import RemoteFilter from 'examples/remote/remote-filter';
+import RemotePaginationTable from 'examples/remote/remote-pagination';
+import RemoteAll from 'examples/remote/remote-all';
+
// css style
import 'bootstrap/dist/css/bootstrap.min.css';
import 'stories/stylesheet/tomorrow.min.css';
@@ -179,9 +183,13 @@ storiesOf('Row Selection', module)
storiesOf('Pagination', module)
.add('Basic Pagination Table', () => )
.add('Pagination Hooks', () => )
- .add('Custom Pagination', () => )
- .add('Remote Pagination', () => );
+ .add('Custom Pagination', () => );
storiesOf('EmptyTableOverlay', module)
.add('Empty Table Overlay', () => )
.add('Table Overlay', () => );
+
+storiesOf('Remote', module)
+ .add('Remote Filter', () => )
+ .add('Remote Pagination', () => )
+ .add('Remote All', () => );