/* eslint guard-for-in: 0 */ /* eslint no-restricted-syntax: 0 */ import React from 'react'; import PropTypes from 'prop-types'; import BootstrapTable from 'react-bootstrap-table-next'; 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-table-next'; 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;