I'm trying to add a control for the operator. The example in documentation shows that I can modify the entire rule template, but doesn't give a clear example of how to include an operator field. Currently when I try to use it with notifyChange and 'operator' type it does not propagate up to parent. How do I go about connecting the operator parameter?
Attachment: querybuilder_f19833fd.7z
dropDownTemplate: () => {
return {
template: Vue.component("ruleTemplate", {
template: `<div class="e-rule e-rule-template">
<div class="e-rule-filter e-custom-filter">
<div class="e-rule-filter e-custom-filter">
<ejs-dropdownlist :change='fieldChange' :value="data.rule.field" :dataSource="data.columns" :fields="data.fields">
</ejs-dropdownlist>
</div>
</div>
<div class="e-rule-operator e-operator">
<ejs-dropdownlist :change='operatorChange' :dataSource="operators" :fields='fields' :value='data.rule.operator'>
</ejs-dropdownlist>
</div>
<div class="e-rule-value e-value">
<input class="e-input" type="text" v-on:keyup="onKeyPressBtwn" />
</div>
<div class="e-rule-btn e-rule-value-delete">
<button class="e-removerule e-rule-delete e-css e-btn e-small e-round">
<span class="e-btn-icon e-icons e-delete-icon"/>
</button>
</div>
</div>`,
data(args) {
return {
qryBldrObj: getComponent(
document.getElementById("querybuilder"),
"query-builder"
),
};
},
computed: {
operators: function () {
return [
{ key: "Equal", value: "equal" },
{ key: "Not equal", value: "notequal" },
{ key: "Greater than", value: "greaterthan" },
{ key: "Less than", value: "lessthan" },
{ key: "Less than or equal", value: "lessthanorequal" },
{ key: "Greater than or equal", value: "greaterthanorequal" },
];
},
fields: function () {
return { text: "key", value: "value" };
},
menuItems: function () {
return [
{ iconCss: "",
items: [
{ text: "IndexField", items: [
{ text: "CompanyId" },
{ text: "Status" },
{ text: "Total" },
] }
]}
];
},
valueID: function () {
return `${this.data.ruleID}_menuId`;
},
inputID: function () {
return `${this.data.ruleID}_inputId`;
},
},
methods: {
fieldChange: function(args) {
this.qryBldrObj.notifyChange(args.value, args.element, 'field');
},
operatorChange: function (args) {
this.qryBldrObj.notifyChange(
args.value,
args.element,
"operator"
);
},
onKeyPressBtwn: function(args) {
this.qryBldrObj.notifyChange(args.target.value, args.target, "value");
},
},
}),
};
},
|
was able to get it working using your example and by also listening on the querybuilder element using operatorChange <ejs-queryBuilder :operatorChange='onChange'></ejs-queryBuilder>