[ADF-3930] fix infinite pagination (#4275)

* refactoring infinite pagination

* fix lint

* fix import reuqest pagination from core

* fix failing unit test
This commit is contained in:
Eugenio Romano
2019-02-06 14:40:38 +00:00
committed by GitHub
parent 3a9958988a
commit d6b8e85c35
20 changed files with 198 additions and 109 deletions

View File

@@ -27,6 +27,7 @@ import { PaginatedComponent } from './paginated-component.interface';
import { Subscription } from 'rxjs';
import { PaginationComponentInterface } from './pagination-component.interface';
import { PaginationModel } from '../models/pagination.model';
import { RequestPaginationModel } from '../models/request-pagination.model';
import { UserPreferencesService, UserPreferenceValues } from '../services/user-preferences.service';
@Component({
@@ -39,12 +40,6 @@ import { UserPreferencesService, UserPreferenceValues } from '../services/user-p
})
export class InfinitePaginationComponent implements OnInit, OnDestroy, PaginationComponentInterface {
static DEFAULT_PAGINATION: PaginationModel = {
skipCount: 0,
hasMoreItems: false,
merge: true
};
/** Component that provides custom pagination support. */
@Input()
target: PaginatedComponent;
@@ -59,10 +54,15 @@ export class InfinitePaginationComponent implements OnInit, OnDestroy, Paginatio
/** Emitted when the "Load More" button is clicked. */
@Output()
loadMore: EventEmitter<PaginationModel> = new EventEmitter<PaginationModel>();
loadMore: EventEmitter<RequestPaginationModel> = new EventEmitter<RequestPaginationModel>();
pagination: PaginationModel;
requestPaginationModel: RequestPaginationModel = {
skipCount: 0,
merge: true
};
private paginationSubscription: Subscription;
constructor(private cdr: ChangeDetectorRef, private userPreferencesService: UserPreferencesService) {
@@ -73,6 +73,11 @@ export class InfinitePaginationComponent implements OnInit, OnDestroy, Paginatio
this.paginationSubscription = this.target.pagination.subscribe((pagination) => {
this.isLoading = false;
this.pagination = pagination;
if (!this.pagination.hasMoreItems) {
this.pagination.hasMoreItems = false;
}
this.cdr.detectChanges();
});
}
@@ -80,26 +85,18 @@ export class InfinitePaginationComponent implements OnInit, OnDestroy, Paginatio
this.userPreferencesService.select(UserPreferenceValues.PaginationSize).subscribe((pagSize) => {
this.pageSize = this.pageSize || pagSize;
});
if (!this.pagination) {
this.pagination = InfinitePaginationComponent.DEFAULT_PAGINATION;
}
}
onLoadMore() {
this.pagination.skipCount += this.pageSize;
this.pagination.merge = true;
this.loadMore.next(this.pagination);
this.requestPaginationModel.skipCount += this.pageSize;
this.requestPaginationModel.merge = true;
this.requestPaginationModel.maxItems = this.pageSize;
if (this.pagination.skipCount >= this.pagination.totalItems || !this.pagination.hasMoreItems) {
this.pagination.hasMoreItems = false;
}
this.loadMore.next(this.requestPaginationModel);
if (this.target) {
this.target.pagination.value.merge = this.pagination.merge;
this.target.pagination.value.skipCount = this.pagination.skipCount;
this.isLoading = true;
this.target.updatePagination(<PaginationModel> this.pagination);
this.target.updatePagination(<RequestPaginationModel> this.requestPaginationModel);
}
}