From 1c68892a7b877931e5296069809bb8646f23ee76 Mon Sep 17 00:00:00 2001 From: AllenFang Date: Sun, 20 Jan 2019 17:15:54 +0800 Subject: [PATCH] fix #751 --- .../react-bootstrap-table2-toolkit/context.js | 8 ++- .../src/search/SearchBar.js | 70 ++++++++++++------- .../src/search/clear-button.js | 20 ++++++ .../src/search/index.js | 3 +- 4 files changed, 73 insertions(+), 28 deletions(-) create mode 100644 packages/react-bootstrap-table2-toolkit/src/search/clear-button.js diff --git a/packages/react-bootstrap-table2-toolkit/context.js b/packages/react-bootstrap-table2-toolkit/context.js index 0bf29b8..c1664c3 100644 --- a/packages/react-bootstrap-table2-toolkit/context.js +++ b/packages/react-bootstrap-table2-toolkit/context.js @@ -46,6 +46,7 @@ class ToolkitProvider extends statelessDrcorator(React.Component) { searchText: typeof props.search === 'object' ? (props.search.defaultSearch || '') : '' }; this._ = null; + this.onClear = this.onClear.bind(this); this.onSearch = this.onSearch.bind(this); this.setDependencyModules = this.setDependencyModules.bind(this); } @@ -56,6 +57,10 @@ class ToolkitProvider extends statelessDrcorator(React.Component) { } } + onClear() { + this.setState({ searchText: '' }); + } + /** * * @param {*} _ @@ -87,7 +92,8 @@ class ToolkitProvider extends statelessDrcorator(React.Component) { { }; }; -const SearchBar = ({ - delay, - onSearch, - className, - style, - placeholder, - searchText, - ...rest -}) => { - let input; - const debounceCallback = handleDebounce(() => { - onSearch(input.value); - }, delay); +class SearchBar extends React.Component { + constructor(props) { + super(props); + this.state = { + value: props.searchText + }; + } - return ( - input = n } - type="text" - style={ style } - onKeyUp={ () => debounceCallback() } - className={ `form-control ${className}` } - defaultValue={ searchText } - placeholder={ placeholder || SearchBar.defaultProps.placeholder } - { ...rest } - /> - ); -}; + componentWillReceiveProps(nextProps) { + this.setState({ value: nextProps.searchText }); + } + + onChangeValue = (e) => { + this.setState({ value: e.target.value }); + } + + onKeyup = () => { + const { delay, onSearch } = this.props; + const debounceCallback = handleDebounce(() => { + onSearch(this.input.value); + }, delay); + debounceCallback(); + } + + render() { + const { + className, + style, + placeholder + } = this.props; + + return ( + this.input = n } + type="text" + style={ style } + onKeyUp={ () => this.onKeyup() } + onChange={ this.onChangeValue } + className={ `form-control ${className}` } + value={ this.state.value } + placeholder={ placeholder || SearchBar.defaultProps.placeholder } + /> + ); + } +} SearchBar.propTypes = { onSearch: PropTypes.func.isRequired, diff --git a/packages/react-bootstrap-table2-toolkit/src/search/clear-button.js b/packages/react-bootstrap-table2-toolkit/src/search/clear-button.js new file mode 100644 index 0000000..291f900 --- /dev/null +++ b/packages/react-bootstrap-table2-toolkit/src/search/clear-button.js @@ -0,0 +1,20 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +const ClearButton = ({ + onClear, + text +}) => ( + +); + +ClearButton.propTypes = { + onClear: PropTypes.func.isRequired, + text: PropTypes.string +}; + +ClearButton.defaultProps = { + text: 'Clear' +}; + +export default ClearButton; diff --git a/packages/react-bootstrap-table2-toolkit/src/search/index.js b/packages/react-bootstrap-table2-toolkit/src/search/index.js index c905897..7f92f43 100644 --- a/packages/react-bootstrap-table2-toolkit/src/search/index.js +++ b/packages/react-bootstrap-table2-toolkit/src/search/index.js @@ -1,3 +1,4 @@ import SearchBar from './SearchBar'; +import ClearSearchButton from './clear-button'; -export default { SearchBar }; +export default { SearchBar, ClearSearchButton };