react-querybuilder
Credits
This component was inspired by prior work from:
Getting Started
npm install react-querybuilder --save
Demo
Open <path-to-project>/node_modules/react-querybuilder/demo/index.html
in your browser.
OR
See live Demo.
Usage
import {QueryBuilder} from 'react-querybuilder';
const fields = [
{name: 'firstName', label: 'First Name'},
{name: 'lastName', label: 'Last Name'},
{name: 'age', label: 'Age'},
{name: 'address', label: 'Address'},
{name: 'phone', label: 'Phone'},
{name: 'email', label: 'Email'},
{name: 'twitter', label: 'Twitter'},
{name: 'isDev', label: 'Is a Developer?', value: false},
];
const dom = <QueryBuilder fields={fields}
onQueryChange={logQuery}/>
function logQuery(query) {
console.log(query);
}
API
<QueryBuilder />
is the only top-level component exposed from this library. It supports the following properties:
fields (Required)
[ {name:String, label:String} ]
The array of fields that should be used. Each field should be an object with
{name:String, label:String}
|
operators (Optional)
[ {name:String, label:String} ]
The array of operators that should be used. The default operators include:
[
{name: 'null', label: 'Is Null'},
{name: 'notNull', label: 'Is Not Null'},
{name: 'in', label: 'In'},
{name: 'notIn', label: 'Not In'},
{name: '=', label: '='},
{name: '!=', label: '!='},
{name: '<', label: '<'},
{name: '>', label: '>'},
{name: '<=', label: '<='},
{name: '>=', label: '>='},
]
combinators (Optional)
[ {name:String, label:String} ]
The array of combinators that should be used for RuleGroups.
The default set includes:
[
{name: 'and', label: 'AND'},
{name: 'or', label: 'OR'},
]
controlElements (Optional)
React.PropTypes.shape({
addGroupAction: React.PropTypes.func,
removeGroupAction: React.PropTypes.func,
addRuleAction: React.PropTypes.func,
removeRuleAction: React.PropTypes.func,
combinatorSelector: React.PropTypes.func,
fieldSelector: React.PropTypes.func,
operatorSelector: React.PropTypes.func,
valueEditor: React.PropTypes.func
})
This is a custom controls object that allows you to override the control elements used.
The following control overrides are supported:
-
addGroupAction
: By default a <button />
is used. The following props are passed:
{
label: React.PropTypes.string,
className: React.PropTypes.string,
handleOnClick: React.PropTypes.func
}
-
removeGroupAction
: By default a <button />
is used. The following props are passed:
{
label: React.PropTypes.string,
className: React.PropTypes.string,
handleOnClick: React.PropTypes.func
}
-
addRuleAction
: By default a <button />
is used. The following props are passed:
{
label: React.PropTypes.string,
className: React.PropTypes.string,
handleOnClick: React.PropTypes.func
}
-
removeRuleAction
: By default a <button />
is used. The following props are passed:
{
label: React.PropTypes.string,
className: React.PropTypes.string,
handleOnClick: React.PropTypes.func
}
-
combinatorSelector
: By default a <select />
is used. The following props are passed:
{
options: React.PropTypes.array.isRequired,
value: React.PropTypes.string,
className: React.PropTypes.string,
handleOnChange: React.PropTypes.func
}
-
fieldSelector
: By default a <select />
is used. The following props are passed:
{
options: React.PropTypes.array.isRequired,
value: React.PropTypes.string,
className: React.PropTypes.string,
handleOnChange: React.PropTypes.func
}
-
operatorSelector
: By default a <select />
is used. The following props are passed:
{
options: React.PropTypes.array.isRequired,
value: React.PropTypes.string,
className: React.PropTypes.string,
handleOnChange: React.PropTypes.func
}
-
valueEditor
: By default a <input type="text" />
is used. The following props are passed:
{
field: React.PropTypes.string,
operator: React.PropTypes.string,
value: React.PropTypes.string,
handleOnChange: React.PropTypes.func
}
getOperators (Optional)
function(field):[]
This is a callback function invoked to get the list of allowed operators
for the given field
onQueryChange (Optional)
function(queryJSON):void
This is a notification that is invoked anytime the query configuration changes. The
query is provided as a JSON structure, as shown below:
{
"combinator": "and",
"rules": [
{
"field": "firstName",
"operator": "null",
"value": ""
},
{
"field": "lastName",
"operator": "null",
"value": ""
},
{
"combinator": "and",
"rules": [
{
"field": "age",
"operator": ">",
"value": "30"
}
]
}
]
}
controlClassnames (Optional)
This can be used to assign specific CSS
classes to various controls
that are created by the <QueryBuilder />
. This is an object
with the following properties:
{
queryBuilder:String,
ruleGroup:String,
combinators:String,
addRule:String,
addGroup:String,
removeGroup:String,
rule:String,
fields:String,
operators:String,
value:String,
removeRule:String
}
Development
Changelog Generation
We are using github-changes to generate the changelog.
To use it:
- tag your commit using semantic versioning
- run
npm run generate-changelog
- enter your github credentials at the prompt
- commit
- push your commit and tags