[App.Vue]
dataStateChange: function (state) {
if (
state.action &&
(state.action.requestType === "filterchoicerequest" ||
state.action.requestType === "filtersearchbegin" ||
state.action.requestType === "stringfilterrequest")
) {
this.orderService
.execute(state)
.then((gridData) => state.dataSource(gridData));
} else {
this.orderService.execute(state).then((gridData) => {
this.data = gridData;
});
}
},
|
[orders-service.ts]
private getData(state: DataStateChangeEventArgs): Promise<DataResult> {
let sortQuery: String = "";
const skipquery = state.skip > -1 ? `$skip=${state.skip}` : null;
let pageQuery = "";
const takeQuery = state.take > -1 ? `$top=${state.take}` : null;
if (skipquery) {
pageQuery = `${skipquery}&`;
}
if (takeQuery) {
pageQuery = `${pageQuery}${takeQuery}`;
}
let filterQuery: String = "";
if ((state.sorted || []).length) {
sortQuery =
`&$orderby=` +
state.sorted
.map((obj: Sorts) => {
return obj.direction === "descending"
? `${obj.name} desc`
: obj.name;
})
.reverse()
.join(",");
}
if (state.where) {
filterQuery =
`&$filter=` +
state.where.map((obj) => {
return (<Predicate>obj).predicates
.map((predicate) => {
return predicate.operator === "equal"
? `${predicate.field} eq ${predicate.value}`
: `${predicate.operator}(tolower(${predicate.field}),'${predicate.value}')`;
})
.reverse()
.join(" and ");
});
}
this.ajax.url = `${this.BASE_URL}?${pageQuery}${sortQuery}${filterQuery}&$count=true`;
return this.ajax.send().then((response: any) => {
let data: any = JSON.parse(response);
return state.dataSource === undefined
? <DataResult>{
result: data["value"],
count: parseInt(data["@odata.count"], 10)
}
: data["value"];
});
} |
[App.Vue]
<ejs-grid
id="Grid"
ref="grid"
:dataSource="data"
:allowPaging="true"
:allowFiltering="true"
:editSettings="editSettings"
:toolbar="toolbar"
:filterSettings="filterSettings"
>
<e-columns>
<e-column field="OrderID" headerText="Order ID" width="90"></e-column>
<e-column
field="CustomerID"
headerText="Customer ID"
:filter="customFiler"
width="120"
></e-column>
. . . .
</e-columns>
</ejs-grid>
export default {
data() {
let inputInstance = null;
return {
data: data,
customFiler: {
ui: {
create: function (args) {
let flValInput = createElement("input", { className: "flm-input" });
args.target.appendChild(flValInput);
inputInstance = new TextBox({});
inputInstance.appendTo(flValInput);
},
write: function (args) {
inputInstance.value = args.filteredValue ? args.filteredValue : "";
},
read: function (args) {
args.fltrObj.filterByColumn(
args.column.field,
args.operator,
inputInstance.value
);
},
},
},
|