diff --git a/packages/react-bootstrap-table2-toolkit/README.md b/packages/react-bootstrap-table2-toolkit/README.md
index 5d502e1..f26c366 100644
--- a/packages/react-bootstrap-table2-toolkit/README.md
+++ b/packages/react-bootstrap-table2-toolkit/README.md
@@ -120,4 +120,7 @@ Custom the csv file separator.
Default is `false`. Give true to avoid to attach the csv header.
#### noAutoBOM - [bool]
-Default is `true`.
\ No newline at end of file
+Default is `true`.
+
+#### exportAll - [bool]
+Default is `true`. `false` will only export current data which display on table.
\ No newline at end of file
diff --git a/packages/react-bootstrap-table2-toolkit/context.js b/packages/react-bootstrap-table2-toolkit/context.js
index 4ae5e19..386820f 100644
--- a/packages/react-bootstrap-table2-toolkit/context.js
+++ b/packages/react-bootstrap-table2-toolkit/context.js
@@ -69,7 +69,8 @@ class ToolkitProvider extends statelessDrcorator(React.Component) {
columns: this.props.columns,
data: this.props.data,
bootstrap4: this.props.bootstrap4,
- setDependencyModules: this.setDependencyModules
+ setDependencyModules: this.setDependencyModules,
+ registerExposedAPI: this.registerExposedAPI
};
if (this.props.search) {
baseProps.search = {
diff --git a/packages/react-bootstrap-table2-toolkit/src/op/csv.js b/packages/react-bootstrap-table2-toolkit/src/op/csv.js
index b3803aa..8c6ced3 100644
--- a/packages/react-bootstrap-table2-toolkit/src/op/csv.js
+++ b/packages/react-bootstrap-table2-toolkit/src/op/csv.js
@@ -4,13 +4,14 @@ const csvDefaultOptions = {
fileName: 'spreadsheet.csv',
separator: ',',
ignoreHeader: false,
- noAutoBOM: true
+ noAutoBOM: true,
+ exportAll: true
};
export default Base =>
class CSVOperation extends Base {
handleExportCSV = () => {
- const { columns, data, exportCSV } = this.props;
+ const { columns, exportCSV } = this.props;
const meta = getMetaInfo(columns);
const options = exportCSV === true ?
csvDefaultOptions :
@@ -18,6 +19,8 @@ export default Base =>
...csvDefaultOptions,
...exportCSV
};
+
+ const data = options.exportAll ? this.props.data : this.getData();
const content = transform(data, meta, this._.get, options);
save(content, options);
}
diff --git a/packages/react-bootstrap-table2-toolkit/statelessOp.js b/packages/react-bootstrap-table2-toolkit/statelessOp.js
index b39287d..6c248c1 100644
--- a/packages/react-bootstrap-table2-toolkit/statelessOp.js
+++ b/packages/react-bootstrap-table2-toolkit/statelessOp.js
@@ -1,4 +1,10 @@
import Operation from './src/op';
export default Base =>
- class StatelessOperation extends Operation.csvOperation(Base) {};
+ class StatelessOperation extends Operation.csvOperation(Base) {
+ registerExposedAPI = (...exposedFuncs) => {
+ exposedFuncs.forEach((func) => {
+ this[func.name] = func;
+ });
+ }
+ };
diff --git a/packages/react-bootstrap-table2/src/bootstrap-table.js b/packages/react-bootstrap-table2/src/bootstrap-table.js
index 9afaab0..99ef4b2 100644
--- a/packages/react-bootstrap-table2/src/bootstrap-table.js
+++ b/packages/react-bootstrap-table2/src/bootstrap-table.js
@@ -15,6 +15,15 @@ class BootstrapTable extends PropsBaseResolver(Component) {
constructor(props) {
super(props);
this.validateProps();
+ if (props.registerExposedAPI) {
+ const getData = () => this.getData();
+ props.registerExposedAPI(getData);
+ }
+ }
+
+ // Exposed APIs
+ getData = () => {
+ return this.props.data;
}
render() {
diff --git a/packages/react-bootstrap-table2/test/bootstrap-table.test.js b/packages/react-bootstrap-table2/test/bootstrap-table.test.js
index 4991018..23986a8 100644
--- a/packages/react-bootstrap-table2/test/bootstrap-table.test.js
+++ b/packages/react-bootstrap-table2/test/bootstrap-table.test.js
@@ -46,6 +46,40 @@ describe('BootstrapTable', () => {
});
});
+ describe('getData', () => {
+ let instance;
+
+ beforeEach(() => {
+ wrapper = shallow(
+ );
+ instance = wrapper.instance();
+ });
+
+ it('should return props.data', () => {
+ expect(instance.getData()).toEqual(data);
+ });
+ });
+
+ describe('when props.registerExposedAPI is defined', () => {
+ const registerExposedAPI = jest.fn();
+ beforeEach(() => {
+ registerExposedAPI.mockClear();
+ wrapper = shallow(
+
+ );
+ });
+
+ it('should call props.registerExposedAPI correctly', () => {
+ expect(registerExposedAPI).toHaveBeenCalledTimes(1);
+ expect(registerExposedAPI.mock.calls[0][0].name).toEqual('getData');
+ });
+ });
+
describe('when props.classes was defined', () => {
const classes = 'foo';