From 2b744664db978ab115d44030a8c2accfa2d5a06c Mon Sep 17 00:00:00 2001 From: Leandro Candeias Date: Thu, 4 Sep 2025 18:06:28 +0100 Subject: [PATCH] Add Infinite Scroll to extensible-table --- .../extensible-table.component.html | 5 +++++ .../extensible-table.component.ts | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html index bfedbe8a44..e614dbc74c 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html @@ -7,6 +7,11 @@ (activate)="tableActivate.emit($event)" (select)="onSelect($event)" [selected]="selected" + (scroll)="onScroll($event)" + [scrollbarV]="infiniteScroll" + [style.height]="infiniteScroll ? '300px' : 'auto'" + [loadingIndicator]="infiniteScroll && isLoading" + [footerHeight]="infiniteScroll ? false : 50" > @if(selectable) { diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts index fdb19e553d..285a63872d 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts @@ -118,6 +118,10 @@ export class ExtensibleTableComponent implements OnChanges, AfterViewIn @Input() selected: any[] = []; @Output() selectionChange = new EventEmitter(); + @Input() infiniteScroll = false; + @Input() isLoading = false; + @Output() loadMore = new EventEmitter(); + hasAtLeastOnePermittedAction: boolean; readonly propList: EntityPropList; @@ -247,10 +251,23 @@ export class ExtensibleTableComponent implements OnChanges, AfterViewIn this.selectionChange.emit(selected); } + onScroll(scrollEvent) { + if ( + this.infiniteScroll && + !this.isLoading && + scrollEvent?.target?.offsetHeight + scrollEvent?.target?.scrollTop >= + scrollEvent?.target?.scrollHeight - 1 + ) { + this.loadMore.emit(); + } + } + ngAfterViewInit(): void { - this.list?.requestStatus$?.pipe(filter(status => status === 'loading')).subscribe(() => { + if (!this.infiniteScroll) { + this.list?.requestStatus$?.pipe(filter(status => status === 'loading')).subscribe(() => { this.data = []; this.cdr.markForCheck(); }); + } } }