Hi I am using Angular Grid for one of my use case which has infinity scroll enabled. my problem is when server returns me empty array as a result, and if i pass the same to grid(using observable)
as below , the grid wipes out all the previous data loaded in the UI. https://ej2.syncfusion.com/angular/documentation/grid/observables/ <-I have implemented this approach in the code.
Order.service.ts
export class OrdersService extends Subject<DataStateChangeEventArgs> {
private BASE_URL =
constructor(private http: Http) {
super();
}
public execute(state: any) {
this.getData(state).subscribe(x => super.next(x));
}
public getData(
state: DataStateChangeEventArgs
): Observable<DataStateChangeEventArgs> {
let pageQuery = "";
let filterQuery = "";
// debugger;
if (state.take === undefined) {
pageQuery = "";
} else {
pageQuery = `$skip=${state.skip}&$top=${state.take}`;
} // handled the page query
let sortQuery = "";
if ((state.sorted || []).length) {
sortQuery =
`&$orderby=` +
state.sorted
.map((obj: Sorts) => {
return obj.direction === "descending"
? `${obj.name} desc`
: obj.name;
})
.reverse()
.join(",");
}
// handle the filterQuery
if (state.where) {
debugger;
filterQuery =
`&$filter=` +
state.where.map(obj => {
return obj.predicates
.map(predicate => {
debugger;
return predicate.operator === "equal"
? `${predicate.field} eq ${predicate.value}`
: `${predicate.operator}(tolower(${predicate.field}),'${
predicate.value
}')`;
})
.reverse()
.join(" and ");
});
}
return this.http
.get(
`${
this.BASE_URL
}?${pageQuery}${filterQuery}${sortQuery}&$inlinecount=allpages&$format=json`
)
.pipe(map((response: any) => response.json()))
.pipe(
map(
(response: any) =>
<DataResult>{
result: response["d"]["results"], // data to be shown in the grid
count: parseInt(response["d"]["__count"], 10) // total data count
}
)
)
.pipe((data: any) => data);
}
}
|
ok so you mean if :
1) I received 100 records in first fetch I will send