Add Searching and Filtering page
Summary: I can't take credit for this, I found it in the internal wiki. Have just modernised it and made it public. Reviewed By: danielbuechele Differential Revision: D15165547 fbshipit-source-id: d59344aa6ad47be6ab32b88abcdfc14a7d20c775
This commit is contained in:
committed by
Facebook Github Bot
parent
608b9182ce
commit
821408056f
68
docs/extending/search-and-filter.md
Normal file
68
docs/extending/search-and-filter.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
id: search-and-filter
|
||||||
|
title: Searching and Filtering
|
||||||
|
---
|
||||||
|
|
||||||
|
## Adding Search and Filter capabilities to your plugin
|
||||||
|
Many plugins need the ability to make their content search and filterable. Flipper provides a component for this use-case called `Searchable`. This is a higher-order-component that can be used to wrap any table, list, generic react-component and adds Flippers search bar on top of it.
|
||||||
|
|
||||||
|
We differentiate between search and filter, but both functionalities are provided by the `Searchable` component. Search is a custom string entered by the user. Filters can not be added by the user directly, but are added programmatically from within your plugin.
|
||||||
|
|
||||||
|
### Filters
|
||||||
|
Every filter has a key and a value. The key represents an attribute of the items you are filtering, and the value is the value that is compared with the items to see if the attribute matches. As an example, if you were filtering rows of a table, the a filter key would be the id of a column.
|
||||||
|
|
||||||
|
There are two different types of filters:
|
||||||
|
|
||||||
|
**include/exclude filters**: An arbitrary string that must (or must not) be included in the filterable item.
|
||||||
|
|
||||||
|
**enum**: Allows the user to select one or more from a set of values, using a dropdown.
|
||||||
|
|
||||||
|
### Higher Order Component
|
||||||
|
The `Searchable()` function adds three props to a React component:
|
||||||
|
|
||||||
|
`addFilter: (filter: Filter) => void`
|
||||||
|
|
||||||
|
Function allowing the component to add filters.
|
||||||
|
|
||||||
|
`searchTerm: string`
|
||||||
|
|
||||||
|
The search term entered into the searchbar by the user.
|
||||||
|
|
||||||
|
`filters: Array<Filter>`
|
||||||
|
|
||||||
|
The list of filters that are currently applied
|
||||||
|
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
```
|
||||||
|
import type {SearchableProps} from 'sonar';
|
||||||
|
import {Searchable} from 'sonar';
|
||||||
|
|
||||||
|
class MyPluginTable extends Component<{
|
||||||
|
...SearchableProps
|
||||||
|
}> {
|
||||||
|
getRows() {
|
||||||
|
const {rows, searchTerm, filters} = this.props;
|
||||||
|
return rows.filter(row => {
|
||||||
|
// filter rows for searchTerm and applied filters
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
addFilter () {
|
||||||
|
this.props.addFilter({
|
||||||
|
type: 'include',
|
||||||
|
key: '...',
|
||||||
|
value: '...',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return <div>
|
||||||
|
<Button onClick={this.addFilter}>Filter</Button>
|
||||||
|
<Table rows={this.getRows()} />
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SearchableTable = Searchable(MyPluginTable);
|
||||||
|
```
|
||||||
@@ -37,6 +37,9 @@
|
|||||||
"extending/new-clients": {
|
"extending/new-clients": {
|
||||||
"title": "Implementing a Flipper Client"
|
"title": "Implementing a Flipper Client"
|
||||||
},
|
},
|
||||||
|
"extending/search-and-filter": {
|
||||||
|
"title": "Searching and Filtering"
|
||||||
|
},
|
||||||
"extending/send-data": {
|
"extending/send-data": {
|
||||||
"title": "Sending Data to Plugins"
|
"title": "Sending Data to Plugins"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
"extending/styling-components",
|
"extending/styling-components",
|
||||||
"extending/create-plugin",
|
"extending/create-plugin",
|
||||||
"extending/send-data",
|
"extending/send-data",
|
||||||
|
"extending/search-and-filter",
|
||||||
"extending/error-handling",
|
"extending/error-handling",
|
||||||
"extending/testing"
|
"extending/testing"
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user