From 65a596a0e95e0b524c096c8f764d683833501c5c Mon Sep 17 00:00:00 2001 From: makenova Date: Sat, 10 Feb 2018 00:17:45 -0800 Subject: [PATCH] case insensitive text filter (#190) * case insensitive text filter * optional case insensitive filter --- .../examples/column-filter/custom-text-filter.js | 4 ++-- .../src/components/text.js | 16 +++++++++++++--- .../react-bootstrap-table2-filter/src/filter.js | 7 +++++-- .../react-bootstrap-table2-filter/src/wrapper.js | 7 +++++-- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/packages/react-bootstrap-table2-example/examples/column-filter/custom-text-filter.js b/packages/react-bootstrap-table2-example/examples/column-filter/custom-text-filter.js index e4be0a8..10e97d8 100644 --- a/packages/react-bootstrap-table2-example/examples/column-filter/custom-text-filter.js +++ b/packages/react-bootstrap-table2-example/examples/column-filter/custom-text-filter.js @@ -13,7 +13,7 @@ const columns = [{ }, { dataField: 'name', text: 'Product Name', - filter: textFilter() + filter: textFilter({ caseSensitive: true }) }, { dataField: 'price', text: 'Product Price', @@ -38,7 +38,7 @@ const columns = [{ }, { dataField: 'name', text: 'Product Name', - filter: textFilter() + filter: textFilter({ caseSensitive: true }) }, { dataField: 'price', text: 'Product Price', diff --git a/packages/react-bootstrap-table2-filter/src/components/text.js b/packages/react-bootstrap-table2-filter/src/components/text.js index 1c102c3..caa8199 100644 --- a/packages/react-bootstrap-table2-filter/src/components/text.js +++ b/packages/react-bootstrap-table2-filter/src/components/text.js @@ -69,7 +69,15 @@ class TextFilter extends Component { } render() { - const { placeholder, column: { text }, style, className, onFilter, ...rest } = this.props; + const { + placeholder, + column: { text }, + style, + className, + onFilter, + caseSensitive, + ...rest + } = this.props; // stopPropagation for onClick event is try to prevent sort was triggered. return ( ( data, dataField, - { filterVal, comparator = LIKE }, + { filterVal, comparator = LIKE, caseSensitive }, customFilterValue ) => data.filter((row) => { @@ -18,7 +18,10 @@ export const filterByText = _ => ( if (comparator === EQ) { return cellStr === filterVal; } - return cellStr.indexOf(filterVal) > -1; + if (caseSensitive) { + return cellStr.toLocaleUpperCase().includes(filterVal.toLocaleUpperCase()); + } + return cellStr.includes(filterVal); }); export const filterByNumber = _ => ( diff --git a/packages/react-bootstrap-table2-filter/src/wrapper.js b/packages/react-bootstrap-table2-filter/src/wrapper.js index 3e6822a..f48e031 100644 --- a/packages/react-bootstrap-table2-filter/src/wrapper.js +++ b/packages/react-bootstrap-table2-filter/src/wrapper.js @@ -49,8 +49,11 @@ export default (Base, { delete currFilters[dataField]; } else { // select default comparator is EQ, others are LIKE - const { comparator = (filterType === FILTER_TYPE.SELECT ? EQ : LIKE) } = filter.props; - currFilters[dataField] = { filterVal, filterType, comparator }; + const { + comparator = (filterType === FILTER_TYPE.SELECT ? EQ : LIKE), + caseSensitive = false + } = filter.props; + currFilters[dataField] = { filterVal, filterType, comparator, caseSensitive }; } store.filters = currFilters;