From 094a0682f16ce6e30fd19759565f37a505e15e67 Mon Sep 17 00:00:00 2001 From: AllenFang Date: Sun, 28 Jan 2018 23:13:10 +0800 Subject: [PATCH] add select filter stories --- .../column-filter/custom-select-filter.js | 80 +++++++++++++++++++ .../select-filter-default-value.js | 70 ++++++++++++++++ .../select-filter-like-comparator.js | 69 ++++++++++++++++ .../examples/column-filter/select-filter.js | 68 ++++++++++++++++ .../src/utils/common.js | 7 ++ .../stories/index.js | 8 ++ 6 files changed, 302 insertions(+) create mode 100644 packages/react-bootstrap-table2-example/examples/column-filter/custom-select-filter.js create mode 100644 packages/react-bootstrap-table2-example/examples/column-filter/select-filter-default-value.js create mode 100644 packages/react-bootstrap-table2-example/examples/column-filter/select-filter-like-comparator.js create mode 100644 packages/react-bootstrap-table2-example/examples/column-filter/select-filter.js diff --git a/packages/react-bootstrap-table2-example/examples/column-filter/custom-select-filter.js b/packages/react-bootstrap-table2-example/examples/column-filter/custom-select-filter.js new file mode 100644 index 0000000..be7a366 --- /dev/null +++ b/packages/react-bootstrap-table2-example/examples/column-filter/custom-select-filter.js @@ -0,0 +1,80 @@ +import React from 'react'; +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { selectFilter } from 'react-bootstrap-table2-filter'; +import Code from 'components/common/code-block'; +import { productsQualityGenerator } from 'utils/common'; + +const products = productsQualityGenerator(6); + +const selectOptions = { + 0: 'good', + 1: 'Bad', + 2: 'unknown' +}; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'quality', + text: 'Product Quailty', + formatter: cell => selectOptions[cell], + filter: selectFilter({ + options: selectOptions, + withoutEmptyOption: true, + style: { + backgroundColor: 'pink' + }, + className: 'test-classname', + datamycustomattr: 'datamycustomattr' + }) +}]; + +const sourceCode = `\ +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { selectFilter } from 'react-bootstrap-table2-filter'; + +const selectOptions = { + 0: 'good', + 1: 'Bad', + 2: 'unknown' +}; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'quality', + text: 'Product Quailty', + formatter: cell => selectOptions[cell], + filter: selectFilter({ + options: selectOptions, + withoutEmptyOption: true, + style: { + backgroundColor: 'pink' + }, + className: 'test-classname', + datamycustomattr: 'datamycustomattr' + }) +}]; + + +`; + +export default () => ( +
+ + { sourceCode } +
+); diff --git a/packages/react-bootstrap-table2-example/examples/column-filter/select-filter-default-value.js b/packages/react-bootstrap-table2-example/examples/column-filter/select-filter-default-value.js new file mode 100644 index 0000000..848766a --- /dev/null +++ b/packages/react-bootstrap-table2-example/examples/column-filter/select-filter-default-value.js @@ -0,0 +1,70 @@ +import React from 'react'; +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { selectFilter } from 'react-bootstrap-table2-filter'; +import Code from 'components/common/code-block'; +import { productsQualityGenerator } from 'utils/common'; + +const products = productsQualityGenerator(6); + +const selectOptions = { + 0: 'good', + 1: 'Bad', + 2: 'unknown' +}; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'quality', + text: 'Product Quailty', + formatter: cell => selectOptions[cell], + filter: selectFilter({ + options: selectOptions, + defaultValue: 2 + }) +}]; + +const sourceCode = `\ +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { selectFilter } from 'react-bootstrap-table2-filter'; + +const selectOptions = { + 0: 'good', + 1: 'Bad', + 2: 'unknown' +}; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'quality', + text: 'Product Quailty', + formatter: cell => selectOptions[cell], + filter: selectFilter({ + options: selectOptions, + defaultValue: 2 + }) +}]; + + +`; + +export default () => ( +
+ + { sourceCode } +
+); diff --git a/packages/react-bootstrap-table2-example/examples/column-filter/select-filter-like-comparator.js b/packages/react-bootstrap-table2-example/examples/column-filter/select-filter-like-comparator.js new file mode 100644 index 0000000..306bdc8 --- /dev/null +++ b/packages/react-bootstrap-table2-example/examples/column-filter/select-filter-like-comparator.js @@ -0,0 +1,69 @@ +import React from 'react'; +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { selectFilter, Comparator } from 'react-bootstrap-table2-filter'; +import Code from 'components/common/code-block'; +import { productsGenerator } from 'utils/common'; + +const products = productsGenerator(6); + +const selectOptions = { + '03': '03', + '04': '04', + '01': '01' +}; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'price', + text: 'Product Price', + filter: selectFilter({ + options: selectOptions, + comparator: Comparator.LIKE // default is Comparator.EQ + }) +}]; + +const sourceCode = `\ +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { selectFilter } from 'react-bootstrap-table2-filter'; + +const selectOptions = { + '03': '03', + '04': '04', + '01': '01' +}; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'price', + text: 'Product Price', + filter: selectFilter({ + options: selectOptions, + comparator: Comparator.LIKE // default is Comparator.EQ + }) +}]; + + +`; + +export default () => ( +
+

Select Filter with LIKE Comparator

+ + { sourceCode } +
+); diff --git a/packages/react-bootstrap-table2-example/examples/column-filter/select-filter.js b/packages/react-bootstrap-table2-example/examples/column-filter/select-filter.js new file mode 100644 index 0000000..6acf849 --- /dev/null +++ b/packages/react-bootstrap-table2-example/examples/column-filter/select-filter.js @@ -0,0 +1,68 @@ +import React from 'react'; +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { selectFilter } from 'react-bootstrap-table2-filter'; +import Code from 'components/common/code-block'; +import { productsQualityGenerator } from 'utils/common'; + +const products = productsQualityGenerator(6); + +const selectOptions = { + 0: 'good', + 1: 'Bad', + 2: 'unknown' +}; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'quality', + text: 'Product Quailty', + formatter: cell => selectOptions[cell], + filter: selectFilter({ + options: selectOptions + }) +}]; + +const sourceCode = `\ +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { selectFilter } from 'react-bootstrap-table2-filter'; + +const selectOptions = { + 0: 'good', + 1: 'Bad', + 2: 'unknown' +}; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'quality', + text: 'Product Quailty', + formatter: cell => selectOptions[cell], + filter: selectFilter({ + options: selectOptions + }) +}]; + + +`; + +export default () => ( +
+ + { sourceCode } +
+); diff --git a/packages/react-bootstrap-table2-example/src/utils/common.js b/packages/react-bootstrap-table2-example/src/utils/common.js index 0d5ad84..0f1c9f1 100644 --- a/packages/react-bootstrap-table2-example/src/utils/common.js +++ b/packages/react-bootstrap-table2-example/src/utils/common.js @@ -20,6 +20,13 @@ export const productsGenerator = (quantity = 5, callback) => { ); }; +export const productsQualityGenerator = (quantity = 5) => + Array.from({ length: quantity }, (value, index) => ({ + id: index, + name: `Item name ${index}`, + quality: index % 3 + })); + export const jobsGenerator = (quantity = 5) => Array.from({ length: quantity }, (value, index) => ({ id: index, diff --git a/packages/react-bootstrap-table2-example/stories/index.js b/packages/react-bootstrap-table2-example/stories/index.js index 8037edb..8cf4a01 100644 --- a/packages/react-bootstrap-table2-example/stories/index.js +++ b/packages/react-bootstrap-table2-example/stories/index.js @@ -39,6 +39,10 @@ import TextFilterWithDefaultValue from 'examples/column-filter/text-filter-defau import TextFilterComparator from 'examples/column-filter/text-filter-eq-comparator'; import CustomTextFilter from 'examples/column-filter/custom-text-filter'; import CustomFilterValue from 'examples/column-filter/custom-filter-value'; +import SelectFilter from 'examples/column-filter/select-filter'; +import SelectFilterWithDefaultValue from 'examples/column-filter/select-filter-default-value'; +import SelectFilterComparator from 'examples/column-filter/select-filter-like-comparator'; +import CustomSelectFilter from 'examples/column-filter/custom-select-filter'; // work on rows import RowStyleTable from 'examples/rows/row-style'; @@ -140,6 +144,10 @@ storiesOf('Column Filter', module) .add('Text Filter with Comparator', () => ) .add('Custom Text Filter', () => ) // add another filter type example right here. + .add('Select Filter', () => ) + .add('Select Filter with Default Value', () => ) + .add('Select Filter with Comparator', () => ) + .add('Custom Select Filter', () => ) .add('Custom Filter Value', () => ); storiesOf('Work on Rows', module)