From 8b8f3368788c31d186db255d2e2784a69042cf0f Mon Sep 17 00:00:00 2001 From: Allen Date: Sat, 6 Oct 2018 17:29:24 +0800 Subject: [PATCH] fix #585 (#592) --- .../examples/basic/exposed-function.js | 181 ++++++++++++++++++ .../stories/index.js | 4 +- .../src/contexts/index.js | 3 + 3 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 packages/react-bootstrap-table2-example/examples/basic/exposed-function.js diff --git a/packages/react-bootstrap-table2-example/examples/basic/exposed-function.js b/packages/react-bootstrap-table2-example/examples/basic/exposed-function.js new file mode 100644 index 0000000..08cf588 --- /dev/null +++ b/packages/react-bootstrap-table2-example/examples/basic/exposed-function.js @@ -0,0 +1,181 @@ +/* eslint no-return-assign: 0 */ +import React from 'react'; + +import BootstrapTable from 'react-bootstrap-table-next'; +import paginationFactory from 'react-bootstrap-table2-paginator'; +import filterFactory, { textFilter } from 'react-bootstrap-table2-filter'; +import Code from 'components/common/code-block'; +import { productsGenerator } from 'utils/common'; + +const products = productsGenerator(63); + +const columns = [{ + dataField: 'id', + text: 'Product ID', + sort: true +}, { + dataField: 'name', + text: 'Product Name', + sort: true, + filter: textFilter() +}, { + dataField: 'price', + text: 'Product Price', + sort: true, + filter: textFilter() +}]; + +const sourceCode = `\ +import BootstrapTable from 'react-bootstrap-table-next'; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'price', + text: 'Product Price' +}]; + +class ExposedFunctionTable extends React.Component { + handleGetCurrentData = () => { + console.log(this.node.table.props.data); + } + + handleGetSelectedData = () => { + console.log(this.node.selectionContext.state.selected); + } + + handleGetExpandedData = () => { + console.log(this.node.rowExpandContext.state.expanded); + } + + handleGetCurrentPage = () => { + console.log(this.node.paginationContext.currPage); + } + + handleGetCurrentSizePerPage = () => { + console.log(this.node.paginationContext.currSizePerPage); + } + + handleGetCurrentSortColumn = () => { + console.log(this.node.sortContext.state.sortColumn); + } + + handleGetCurrentSortOrder = () => { + console.log(this.node.sortContext.state.sortOrder); + } + + handleGetCurrentFilter = () => { + console.log(this.node.filterContext.currFilters); + } + + render() { + const expandRow = { + renderer: row => ( +
+

.....

+

You can render anything here, also you can add additional data on every row object

+

expandRow.renderer callback will pass the origin row object to you

+
+ ), + showExpandColumn: true + }; + return ( +
+ + + + + + + + + this.node = n } + keyField="id" + data={ products } + columns={ columns } + filter={ filterFactory() } + pagination={ paginationFactory() } + selectRow={ { mode: 'checkbox', clickToSelect: true } } + expandRow={ expandRow } + /> + { sourceCode } +
+ ); + } +} +`; + +export default class ExposedFunctionTable extends React.Component { + handleGetCurrentData = () => { + console.log(this.node.table.props.data); + } + + handleGetSelectedData = () => { + console.log(this.node.selectionContext.state.selected); + } + + handleGetExpandedData = () => { + console.log(this.node.rowExpandContext.state.expanded); + } + + handleGetCurrentPage = () => { + console.log(this.node.paginationContext.currPage); + } + + handleGetCurrentSizePerPage = () => { + console.log(this.node.paginationContext.currSizePerPage); + } + + handleGetCurrentSortColumn = () => { + console.log(this.node.sortContext.state.sortColumn); + } + + handleGetCurrentSortOrder = () => { + console.log(this.node.sortContext.state.sortOrder); + } + + handleGetCurrentFilter = () => { + console.log(this.node.filterContext.currFilters); + } + + render() { + const expandRow = { + renderer: row => ( +
+

{ `This Expand row is belong to rowKey ${row.id}` }

+

You can render anything here, also you can add additional data on every row object

+

expandRow.renderer callback will pass the origin row object to you

+
+ ), + showExpandColumn: true + }; + return ( +
+ + + + + + + + + this.node = n } + keyField="id" + data={ products } + columns={ columns } + filter={ filterFactory() } + pagination={ paginationFactory() } + selectRow={ { mode: 'checkbox', clickToSelect: true } } + expandRow={ expandRow } + /> + { sourceCode } +
+ ); + } +} diff --git a/packages/react-bootstrap-table2-example/stories/index.js b/packages/react-bootstrap-table2-example/stories/index.js index 771655f..d254bb2 100644 --- a/packages/react-bootstrap-table2-example/stories/index.js +++ b/packages/react-bootstrap-table2-example/stories/index.js @@ -13,6 +13,7 @@ import NoDataTable from 'examples/basic/no-data-table'; import CustomizedIdClassesTable from 'examples/basic/customized-id-classes'; import CaptionTable from 'examples/basic/caption-table'; import LargeTable from 'examples/basic/large-table'; +import ExposedAPITable from 'examples/basic/exposed-function'; // bootstrap 4 import Bootstrap4DefaultSortTable from 'examples/bootstrap4/sort'; @@ -189,7 +190,8 @@ storiesOf('Basic Table', module) .add('Indication For Empty Table', () => ) .add('Customized id and class table', () => ) .add('Table with caption', () => ) - .add('Large Table', () => ); + .add('Large Table', () => ) + .add('Exposed API', () => ); storiesOf('Bootstrap 4', module) .addDecorator(bootstrapStyle(BOOTSTRAP_VERSION.FOUR)) diff --git a/packages/react-bootstrap-table2/src/contexts/index.js b/packages/react-bootstrap-table2/src/contexts/index.js index 60c3a55..72436ce 100644 --- a/packages/react-bootstrap-table2/src/contexts/index.js +++ b/packages/react-bootstrap-table2/src/contexts/index.js @@ -66,6 +66,7 @@ const withContext = Base => selectionProps ) => ( this.table = n } { ...this.props } { ...selectionProps } { ...sortProps } @@ -91,6 +92,7 @@ const withContext = Base => ) => ( this.selectionContext = n } selectRow={ this.props.selectRow } data={ rootProps.getData(filterProps, searchProps, sortProps, paginationProps) } > @@ -123,6 +125,7 @@ const withContext = Base => ) => ( this.rowExpandContext = n } expandRow={ this.props.expandRow } data={ rootProps.getData(filterProps, searchProps, sortProps, paginationProps) } >