diff --git a/docs/basic-sort.md b/docs/basic-sort.md index 7ecbab0..d925d62 100644 --- a/docs/basic-sort.md +++ b/docs/basic-sort.md @@ -11,7 +11,7 @@ sidebar_label: Table Sort ----- ## Enable Sort on Column -Firstly, you need to know what column you allow user to sort and give the [`sort`](./column-props.html#columnsort-bool) as `true` in the column definitation. +Firstly, you need to know what column you allow user to sort and give the [`sort`](./column-props.html#columnsort-bool) as `true` in the column definition. ```js const columns = [{ @@ -57,7 +57,7 @@ Defined [`onSort`](./column-props.html#columnonsort-function) on target column: ## Custom the Sorting Algorithm -It's simple!! configure [`sortFunc`](./column-props.html#columnsortfunc-function) on column definitation. +It's simple!! configure [`sortFunc`](./column-props.html#columnsortfunc-function) on column definition. ```js { diff --git a/docs/filter-props.md b/docs/filter-props.md index d38666f..b9e358e 100644 --- a/docs/filter-props.md +++ b/docs/filter-props.md @@ -2,5 +2,264 @@ id: filter-props title: Column Filter Props --- +`react-bootstrap-table2` separate the filter core code base to [react-bootstrap-table2-filter](https://www.npmjs.com/package/react-bootstrap-table2-filter). The following are guideline about how to use and the details of props of [filterFactory](#filterfactory-props) and [filters](#filters-props). For more information, please take refer to the samples as [link](https://react-bootstrap-table.github.io/react-bootstrap-table2/storybook/index.html?selectedKind=Column%20Filter&selectedStory=Text%20Filter&full=0&addons=1&stories=1&panelRight=0&addonPanel=storybook%2Factions%2Factions-panel) here. -**No Any Available Props Yet** \ No newline at end of file +## **Content Table** + +* [Getting Started](#getting-started) +* [How to use](#how-to-use) +* [Props of FilterFactory](#props-of-filterfactory) +* [Props of Filters](#props-of-filters) + * [textFilter](#textfilter) + * [selectFilter](#selectFilter) + * [numberFilter](#numberFilter) +* [Comparator](#comparator) + +## **Getting Started** +``` +$ npm install react-bootstrap-table2-filter --save +``` +After installing `react-bootstrap-table2-filter`, you can configure `filter` on table as following instruction. + +## **How to use** +You should apply following **2** to enable `filter` functionality for `react-bootstrap-table2`. +* `filterFactory` +* `filters` (**3** types support) + * textFilter + * selectFilter + * numberFilter + +```js +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { textFilter } from 'react-bootstrap-table2-filter'; + +const columns = [{ + dataField: 'id', + text: 'Product ID' +}, { + dataField: 'name', + text: 'Product Name' +}, { + dataField: 'price', + text: 'Product Price', + filter: textFilter() +}]; + + +``` + +## **Props of FilterFactory** +**No Any Available Props Yet** + +## **Props of Filters** + +## textFilter + +**Required**: NONE + +**Optional**: +### textFilter.placeholder - [String] +* custom the input placeholder + +### textFilter.className - [String] +* custom class name on input + +### textFilter.defaultValue - [String] +* default filtering value + +### textFilter.comparator - [Comparator] +* Specify what kind of comparator to compare. Default is Comparator.LIKE + +### textFilter.caseSensitive - [Boolean] +* default is `false`, and `true` will only work when comparator is `LIKE`. + +### textFilter.style - [Object] +* your custom inline styles on `input` + +### textFilter.delay - [Number] +* Debounce time, which means how long will trigger filtering after user typing. Default is `500ms`. +### textFilter.getFilter - [Function] +* export `filter` function to allow users to access. For textFilter, `filter(value)` to filter columns dynamically. + +**Example** +```js +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { textFilter } from 'react-bootstrap-table2-filter'; + +const columns = [{ + dataField: 'id', + text: 'Product ID', +}, { + dataField: 'name', + text: 'Product Name', + filter: textFilter({ + placeholder: 'My Custom PlaceHolder', // custom the input placeholder + className: 'my-custom-text-filter', // custom classname on input + defaultValue: 'test', // default filtering value + comparator: Comparator.EQ, // default is Comparator.LIKE + caseSensitive: true, // default is false, and true will only work when comparator is LIKE + style: { backgroundColor: 'yellow' }, // your custom inline styles on input + delay: 1000, // how long will trigger filtering after user typing, default is 500 ms + onClick: e => console.log(e), + getFilter: (filter) => { // nameFilter was assigned once the component has been mounted. + nameFilter = filter; + } + }) +}, { + dataField: 'price', + text: 'Product Price', + filter: textFilter() +}]; + + +``` + +## selectFilter +**Required**: + +### selectFilter.options - [Object] +* (Required) the options for the list of drop down. + +**Optional**: + +### selectFilter.className - [String] +* custom class name on input + +### selectFilter.withoutEmptyOption - [Boolean] +* When it was set to `true`, the drop down list would hide the default selection. +### selectFilter.defaultValue - [String] +* default filtering value + +### selectFilter.comparator - [Comparator] +* Specify what kind of comparator to compare. Default is `Comparator.EQ` + +### selectFilter.style - [Object] +* your custom inline styles on `input` + +### selectFilter.getFilter - [Function] +* export `filter` function to allow users to access. For selectFilter, `filter(value)` to filter columns dynamically. + +**Example** +```js +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: 'quality', + text: 'Product Quailty', + formatter: cell => selectOptions[cell], + filter: selectFilter({ + options: selectOptions, + className: 'test-classname', + withoutEmptyOption: true, + defaultValue: 2, + comparator: Comparator.LIKE, // default is Comparator.EQ + style: { backgroundColor: 'pink' }, + getFilter: (filter) => { // qualityFilter was assigned once the component has been mounted. + qualityFilter = filter; + } + }) +}]; + + +``` + +## numberFilter +**Required**: NONE + +**Optional**: + +### numberFilter.options - [Array] +* Once the `options` has been defined, it will render number `select` drop down instead of number input field. + +### numberFilter.delay - [Number] +* Debounce time, which means how long will trigger filtering after user typing. Default is `500ms`. + +### numberFilter.placeholder - [String] +* customized placeholder for number input. + +### numberFilter.withoutEmptyComparatorOption - [Boolean] +* When it was set to `true`, the drop down list of `comparator` would hide the default selection. + +### numberFilter.withoutEmptyNumberOption - [Boolean] +* When it was set to `true`, the drop down list of `number` would hide the default selection. Besides, before picking up this prop, please make sure that you've defined the `props.options` correctly. + +### numberFilter.defaultValue - [Object] +* It is the default filtering value. Furthermore, it accepts **2** attributes: + * number: filter value + * comparator: what kind of comparator to compare + +### numberFilter.comparator - [[Comparator]] +* Specify what kind of comparator to compare. Default is to list `all` of comparators. + +### numberFilter.className - [String] +* custom class name on the `wrapper` of number input and comparator drop down. + +### numberFilter.comparatorClassName - [String] +* custom class name on the `comparator` drop down. + +### numberFilter.numberClassName - [String] +* custom class name on the number `input`. + +### numberFilter.style - [Object] +* custom inline styles on the `wrapper` of number input and comparator drop down. + +### numberFilter.comparatorStyle - [Object] +* custom inline styles on the `comparator` drop down. + +### numberFilter.numberStyle - [Object] +* custom inline styles on the number `input`. + +### numberFilter.getFilter - [Function] +* export `filter` function to allow users to access. For numberFilter,
`filter({ number, comparator })` to filter columns dynamically. + +**Example**: +```js +import BootstrapTable from 'react-bootstrap-table-next'; +import filterFactory, { numberFilter, Comparator } from 'react-bootstrap-table2-filter'; + +const columns = [{ ... }, { ... }, { + dataField: 'price', + text: 'Product Price', + filter: numberFilter({ + options: [2100, 2103, 2105], // if options defined, will render number select instead of number input + delay: 600, // how long will trigger filtering after user typing, default is 500 ms + placeholder: 'custom placeholder', // placeholder for number input + withoutEmptyComparatorOption: true, // dont render empty option for comparator + withoutEmptyNumberOption: true, // dont render empty option for number select if it is defined + comparators: [Comparator.EQ, Comparator.GT, Comparator.LT], // Custom the comparators + style: { display: 'inline-grid' }, // custom the style on number filter + className: 'custom-numberfilter-class', // custom the class on number filter + comparatorStyle: { backgroundColor: 'antiquewhite' }, // custom the style on comparator select + comparatorClassName: 'custom-comparator-class', // custom the class on comparator select + numberStyle: { backgroundColor: 'cadetblue', margin: '0px' }, // custom the style on number input/select + numberClassName: 'custom-number-class', // custom the class on ber input/select + defaultValue: { number: 2103, comparator: Comparator.GT }, // default value + getFilter: (filter) => { // priceFilter was assigned once the component has been mounted. + priceFilter = filter; + } + }) +}]; + + +``` + +## **Comparator** +We support the following ways to do the comparison. Each `filter` has its default comparator. For more information, please take refer to the introduction of props above. + +| | Comparator | Symbol | description | +|---|-----------------|--------|-------------------------| +| 1 | Comparator.LIKE | N/A | To include filter value | +| 2 | Comparator.EQ | = | | +| 3 | Comparator.NE | != | | +| 4 | Comparator.GT | > | | +| 5 | Comparator.GE | >= | | +| 6 | Comparator.LT | < | | +| 7 | Comparator.LE | <= | | diff --git a/docs/migration.md b/docs/migration.md index 86735c1..e069bec 100644 --- a/docs/migration.md +++ b/docs/migration.md @@ -99,7 +99,7 @@ Please see [available filter configuration](./filter-props.html). Remember to install [`react-bootstrap-table2-filter`](https://www.npmjs.com/package/react-bootstrap-table2-filter) firstly. -Due to no `TableHeaderColumn` so that no `filter` here, please add [`filter`](./column-props.html#columnfilter-object) property on column definitation and [`filter`](./table-props.html#filter-object) prop on `BootstrapTable`. +Due to no `TableHeaderColumn` so that no `filter` here, please add [`filter`](./column-props.html#columnfilter-object) property on column definition and [`filter`](./table-props.html#filter-object) prop on `BootstrapTable`. ## Cell Edit diff --git a/docs/table-props.md b/docs/table-props.md index 72cd9a0..5fe1ec6 100644 --- a/docs/table-props.md +++ b/docs/table-props.md @@ -230,30 +230,33 @@ paginationFactory({ ``` ## filter - [Object] -`filter` allow user to filter data by column. However, filter functionality is separated from core of `react-bootstrap-table2` so that you are suppose to install `react-bootstrap-table2-filter` firstly. +`filter` allows users to filter data by columns. For more information, please navigate to [filter-props](./filter-props.html). -```sh +**Getting Started** +``` $ npm install react-bootstrap-table2-filter --save ``` -After installation of `react-bootstrap-table2-filter`, you can configure filter on table easily: +After installing `react-bootstrap-table2-filter`, you could easily enable the functionality of `filter`. +**Example** ```js +import BootstrapTable from 'react-bootstrap-table-next'; import filterFactory, { textFilter } from 'react-bootstrap-table2-filter'; -// omit... -const columns = [ { - dataField: 'id', - text: 'Production ID' +const columns = [{ + dataField: 'id', + text: 'Product ID' }, { dataField: 'name', - text: 'Production Name', - filter: textFilter() // apply text filter + text: 'Product Name' }, { dataField: 'price', - text: 'Production Price' -} ]; - + text: 'Product Price', + filter: textFilter() // apply text filter +}]; + + ``` ## onTableChange - [Function] diff --git a/website/i18n/en.json b/website/i18n/en.json index 6900609..f37c450 100644 --- a/website/i18n/en.json +++ b/website/i18n/en.json @@ -40,12 +40,12 @@ "Blog": "Blog", "Basic Usage": "Basic Usage", "Remote Table": "Remote Table", - "Table Definitation": "Table Definitation", - "Column Definitation": "Column Definitation", - "Cell Editing Definitation": "Cell Editing Definitation", - "Pagination Definitation": "Pagination Definitation", - "Row Select Definitation": "Row Select Definitation", - "Column Filter Definitation": "Column Filter Definitation" + "Table Definition": "Table Definition", + "Column Definition": "Column Definition", + "Cell Editing Definition": "Cell Editing Definition", + "Pagination Definition": "Pagination Definition", + "Row Select Definition": "Row Select Definition", + "Column Filter Definition": "Column Filter Definition" }, "pages-strings": { "Help Translate|recruit community translators for your project": "Help Translate", diff --git a/website/sidebars.json b/website/sidebars.json index b911a87..92a3665 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -20,22 +20,22 @@ ] }, "api": { - "Table Definitation": [ + "Table Definition": [ "table-props" ], - "Column Definitation": [ + "Column Definition": [ "column-props" ], - "Cell Editing Definitation": [ + "Cell Editing Definition": [ "cell-edit-props" ], - "Pagination Definitation": [ + "Pagination Definition": [ "pagination-props" ], - "Row Select Definitation": [ + "Row Select Definition": [ "row-select-props" ], - "Column Filter Definitation": [ + "Column Filter Definition": [ "filter-props" ] }