|
<div class="col-lg-8 control-section">
<ejs-querybuilder id="querybuilder" #querybuilder cssClass="row" [dataSource]="dataSource" [columns]="filter"
width="100%" (ruleChange)="updateRule($event)" (created)="change()">
</ejs-querybuilder>
</div>
|
|
import { Component, ViewChild, ViewEncapsulation } from "@angular/core";
import { RadioButtonComponent } from "@syncfusion/ej2-angular-buttons";
import {
QueryBuilderComponent,
TemplateColumn,
ColumnsModel,
RuleChangeEventArgs
} from "@syncfusion/ej2-angular-querybuilder";
import { getComponent, createElement } from "@syncfusion/ej2-base";
import { DropDownList } from "@syncfusion/ej2-dropdowns";
import { expenseData } from "./data-source";
@Component({
selector: "app-root",
templateUrl: "app.component.html",
styleUrls: ["app.component.css"],
encapsulation: ViewEncapsulation.None
})
export class AppComponent {
@ViewChild("querybuilder") qryBldrObj: QueryBuilderComponent;
@ViewChild("radio") radioButton: RadioButtonComponent;
dataSource: Object[] = expenseData;
incomeTemplate: TemplateColumn = {
create: () => {
return createElement("input", { attrs: { type: "text" } });
},
destroy: (args: { elementId: string }) => {
let dropdown: DropDownList = getComponent(
document.getElementById(args.elementId),
"dropdownlist"
) as DropDownList;
if (dropdown) {
dropdown.destroy();
}
},
write: (args: {
elements: Element;
values: string[] | string;
operator: string;
}) => {
let column: string[] = [];
for (let x in this.filter) column.push(this.filter[x].field);
let dropDownObj: DropDownList = new DropDownList({
dataSource: column,
value: args.values as string,
change: (e: any) => {
this.qryBldrObj.notifyChange(e.itemData.value, e.element);
}
});
dropDownObj.appendTo("#" + args.elements.id);
}
};
incomeOperators = [
{ 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" }
];
filter: ColumnsModel[] = [
{
field: "Expense",
label: "Expense",
type: "number"
},
{
field: "Income",
label: "Income",
type: "number",
operators: this.incomeOperators,
template: this.incomeTemplate
},
{ field: "Description", label: "Description", type: "string" }
];
displayRule: any = "";
updateRule(args: RuleChangeEventArgs): void {
if (this.radioButton.checked) {
this.displayRule = this.qryBldrObj.getSqlFromRules(args.rule);
} else {
this.displayRule = JSON.stringify(args.rule, null, 4);
}
}
change(): void {
this.updateRule({
rule: this.qryBldrObj.getValidRules(this.qryBldrObj.rule)
});
}
setRule(): void {
this.qryBldrObj.setRulesFromSql("Income > 'Expense'");
this.change();
}
}
|