mirror of
https://github.com/gosticks/react-bootstrap-table2.git
synced 2025-10-16 11:55:39 +00:00
parent
22cc79961f
commit
782c630e58
@ -25,13 +25,19 @@ export default Base =>
|
||||
let data;
|
||||
if (typeof source !== 'undefined') {
|
||||
data = source;
|
||||
} else if (options.exportAll) {
|
||||
data = this.props.data;
|
||||
} else {
|
||||
data = options.exportAll ? this.props.data : this.getData();
|
||||
const payload = {};
|
||||
this.tableExposedAPIEmitter.emit('get.table.data', payload);
|
||||
data = payload.result;
|
||||
}
|
||||
|
||||
// filter data
|
||||
if (options.onlyExportSelection) {
|
||||
const selections = this.getSelected();
|
||||
const payload = {};
|
||||
this.tableExposedAPIEmitter.emit('get.selected.rows', payload);
|
||||
const selections = payload.result;
|
||||
data = data.filter(row => !!selections.find(sel => row[keyField] === sel));
|
||||
}
|
||||
const content = transform(data, meta, this._.get, options);
|
||||
|
||||
@ -2,9 +2,7 @@ import Operation from './src/op';
|
||||
|
||||
export default Base =>
|
||||
class StatelessOperation extends Operation.csvOperation(Base) {
|
||||
registerExposedAPI = (...exposedFuncs) => {
|
||||
exposedFuncs.forEach((func) => {
|
||||
this[func.name] = func;
|
||||
});
|
||||
registerExposedAPI = (tableExposedAPIEmitter) => {
|
||||
this.tableExposedAPIEmitter = tableExposedAPIEmitter;
|
||||
}
|
||||
};
|
||||
|
||||
@ -14,13 +14,10 @@ class BootstrapTable extends PropsBaseResolver(Component) {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.validateProps();
|
||||
if (props.registerExposedAPI) {
|
||||
props.registerExposedAPI(this.getData);
|
||||
}
|
||||
}
|
||||
|
||||
// Exposed APIs
|
||||
getData() {
|
||||
getData = () => {
|
||||
return this.visibleRows();
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
/* eslint no-return-assign: 0 */
|
||||
/* eslint no-param-reassign: 0 */
|
||||
/* eslint class-methods-use-this: 0 */
|
||||
import React, { Component } from 'react';
|
||||
import EventEmitter from 'events';
|
||||
import _ from '../utils';
|
||||
import createDataContext from './data-context';
|
||||
import createSortContext from './sort-context';
|
||||
@ -16,6 +18,13 @@ const withContext = Base =>
|
||||
super(props);
|
||||
this.DataContext = createDataContext();
|
||||
|
||||
if (props.registerExposedAPI) {
|
||||
const exposedAPIEmitter = new EventEmitter();
|
||||
exposedAPIEmitter.on('get.table.data', payload => payload.result = this.table.getData());
|
||||
exposedAPIEmitter.on('get.selected.rows', payload => payload.result = this.selectionContext.getSelected());
|
||||
props.registerExposedAPI(exposedAPIEmitter);
|
||||
}
|
||||
|
||||
if (props.columns.filter(col => col.sort).length > 0) {
|
||||
this.SortContext = createSortContext(
|
||||
dataOperator, this.isRemoteSort, this.handleRemoteSortChange);
|
||||
@ -255,9 +264,8 @@ const withContext = Base =>
|
||||
}
|
||||
|
||||
render() {
|
||||
const { keyField, columns, bootstrap4, registerExposedAPI } = this.props;
|
||||
const { keyField, columns, bootstrap4 } = this.props;
|
||||
const baseProps = { keyField, columns };
|
||||
if (registerExposedAPI) baseProps.registerExposedAPI = registerExposedAPI;
|
||||
|
||||
let base = this.renderBase();
|
||||
|
||||
|
||||
@ -14,14 +14,6 @@ class SelectionProvider extends React.Component {
|
||||
keyField: PropTypes.string.isRequired
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
if (props.registerExposedAPI) {
|
||||
const getSelected = () => this.getSelected();
|
||||
props.registerExposedAPI(getSelected);
|
||||
}
|
||||
}
|
||||
|
||||
state = { selected: this.props.selectRow.selected || [] };
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
|
||||
@ -60,26 +60,6 @@ describe('BootstrapTable', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('when props.registerExposedAPI is defined', () => {
|
||||
const registerExposedAPI = jest.fn();
|
||||
beforeEach(() => {
|
||||
registerExposedAPI.mockClear();
|
||||
wrapper = shallow(
|
||||
<BootstrapTable
|
||||
keyField="id"
|
||||
columns={ columns }
|
||||
data={ data }
|
||||
registerExposedAPI={ registerExposedAPI }
|
||||
/>
|
||||
);
|
||||
});
|
||||
|
||||
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';
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user