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) }
>