react-querybuilder
Advanced tools
Comparing version 3.0.0 to 3.0.1
## Change Log | ||
### v3.0.0 (2019/11/29) | ||
- [#115](https://github.com/sapientglobalmarkets/react-querybuilder/pull/115) Add ruleGroup-header div (@jakeboone02) | ||
### v2.5.1 (2019/11/11) | ||
@@ -4,0 +7,0 @@ - [#113](https://github.com/sapientglobalmarkets/react-querybuilder/pull/113) Bugfix/not property (@romanlamsal) |
{ | ||
"name": "react-querybuilder", | ||
"version": "3.0.0", | ||
"version": "3.0.1", | ||
"description": "The React <QueryBuilder /> component for constructing queries", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -237,2 +237,24 @@ import cloneDeep from 'lodash/cloneDeep'; | ||
/** | ||
* @param {RuleType} rule | ||
* @returns {string|boolean} | ||
*/ | ||
const getRuleDefaultValue = (rule) => { | ||
let value = ''; | ||
const values = getValues(rule.field, rule.operator); | ||
if (values.length) { | ||
value = values[0].name; | ||
} else { | ||
const editorType = getValueEditorType(rule.field, rule.operator); | ||
if (editorType === 'checkbox') { | ||
value = false; | ||
} | ||
} | ||
return value; | ||
} | ||
/** | ||
* Adds a rule to the query | ||
@@ -245,3 +267,6 @@ * @param {RuleType} rule Rule to add | ||
const parent = findRule(parentId, rootCopy); | ||
parent.rules.push(rule); | ||
parent.rules.push({ | ||
...rule, | ||
value: getRuleDefaultValue(rule), | ||
}); | ||
setRoot(rootCopy); | ||
@@ -274,5 +299,8 @@ _notifyQueryChange(rootCopy); | ||
// Reset operator and value for field change | ||
// Reset operator and set default value for field change | ||
if (prop === 'field') { | ||
Object.assign(rule, { operator: getOperators(rule.field)[0].name, value: '' }); | ||
Object.assign(rule, { | ||
operator: getOperators(rule.field)[0].name, | ||
value: getRuleDefaultValue(rule), | ||
}); | ||
} | ||
@@ -279,0 +307,0 @@ |
@@ -429,3 +429,3 @@ import { mount } from 'enzyme'; | ||
let wrapper, onQueryChange; | ||
const fields = [{ name: 'Field 1', value: 'field1' }, { name: 'Field 2', value: 'field2' }]; | ||
const fields = [{ name: 'field1', label: 'Field1' }, { name: 'field2', label: 'Field 2' }]; | ||
@@ -516,3 +516,59 @@ beforeEach(() => { | ||
}); | ||
it('should set default value for a rule', () => { | ||
wrapper.setProps({ | ||
fields, | ||
onQueryChange, | ||
getValues: (field) => { | ||
if (field === 'field1') { | ||
return [ | ||
{ name: 'value1', label: 'Value 1'}, | ||
{ name: 'value2', label: 'Value 2'}, | ||
] | ||
}; | ||
return []; | ||
}, | ||
getValueEditorType: (field) => { | ||
if (field === 'field2') return 'checkbox'; | ||
return 'text'; | ||
} | ||
}); | ||
wrapper | ||
.find('.ruleGroup-addRule') | ||
.first() | ||
.simulate('click'); | ||
expect(onQueryChange.getCall(1).args[0].rules).to.have.length(1); | ||
expect(onQueryChange.getCall(1).args[0].rules[0].value).to.equal('value1'); | ||
wrapper | ||
.find('.rule-fields') | ||
.first() | ||
.simulate('change', { target: { value: 'field2' } }); | ||
expect(onQueryChange.getCall(2).args[0].rules[0].field).to.equal('field2'); | ||
expect(onQueryChange.getCall(2).args[0].rules[0].value).to.equal(false); | ||
wrapper.setProps({ | ||
fields: fields.slice(1), | ||
onQueryChange, | ||
getValueEditorType: (field) => { | ||
if (field === 'field2') return 'checkbox'; | ||
return 'text'; | ||
} | ||
}); | ||
wrapper | ||
.find('.ruleGroup-addRule') | ||
.first() | ||
.simulate('click'); | ||
expect(onQueryChange.getCall(3).args[0].rules).to.have.length(2); | ||
expect(onQueryChange.getCall(3).args[0].rules[0].value).to.equal(false); | ||
}); | ||
}); | ||
}); |
2963999
34963