Skip to content

Commit 912322f

Browse files
committed
added infinite scroll to references
1 parent e6569a0 commit 912322f

File tree

3 files changed

+62
-27
lines changed

3 files changed

+62
-27
lines changed

src/app/modules/feasibility-query/components/editor/reference-criteria-modal/reference/reference.component.html

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
<div fxLayout="column" class="container">
22
<div class="attribute-code-display">{{ attributeCode.getDisplay() }}</div>
33
<num-searchbar icon="search" (searchTextChange)="startElasticSearch($event)"> </num-searchbar>
4-
<num-table
5-
*ngIf="listItems.length > 0 && adaptedData"
6-
class="result-list-container"
7-
[tableData]="adaptedData"
8-
[searchTermResultList]="listItems"
9-
(selectedRow)="setSelectedRowItem($event)"
10-
></num-table>
4+
<div
5+
class="infinite-scroll"
6+
infiniteScroll
7+
[infiniteScrollDistance]="0.5"
8+
[infiniteScrollThrottle]="50"
9+
[scrollWindow]="false"
10+
(scrolled)="loadMoreCriteriaSetResults()"
11+
>
12+
<num-table
13+
*ngIf="listItems.length > 0 && adaptedData"
14+
class="result-list-container"
15+
[tableData]="adaptedData"
16+
[searchTermResultList]="listItems"
17+
(selectedRow)="setSelectedRowItem($event)"
18+
></num-table>
19+
</div>
1120
<num-placeholder-box class="no-results-text" *ngIf="!searchResultsFound"
1221
>{{ 'FEASIBILITY.SEARCH.EMPTY' | translate }} "<strong>{{ searchText$ | async }}</strong
1322
>"</num-placeholder-box

src/app/modules/feasibility-query/components/editor/reference-criteria-modal/reference/reference.component.scss

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
width: fit-content;
1515
padding: 10px 18px;
1616
}
17+
1718
.selectedFilterBox {
1819
height: 85%;
1920
}
21+
2022
.selectedFilter {
2123
width: 100%;
2224
height: 40px;
@@ -29,7 +31,8 @@
2931
padding-left: 10px;
3032
overflow: hidden;
3133
display: -webkit-box;
32-
-webkit-line-clamp: 2; /* number of lines to show */
34+
-webkit-line-clamp: 2;
35+
/* number of lines to show */
3336
line-clamp: 2;
3437
-webkit-box-orient: vertical;
3538
}
@@ -55,6 +58,13 @@
5558
color: #6a7483;
5659
padding-bottom: 5px;
5760
}
61+
5862
.filter-selection {
5963
height: 30%;
6064
}
65+
66+
.infinite-scroll {
67+
height: 70%;
68+
overflow: scroll;
69+
overflow-x: hidden;
70+
}

src/app/modules/feasibility-query/components/editor/reference-criteria-modal/reference/reference.component.ts

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { ActiveSearchTermService } from 'src/app/service/Search/ActiveSearchTerm
22
import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';
33
import { CriteriaSetSearchService } from 'src/app/service/Search/SearchTypes/CriteriaSet/CriteriaSetSearch.service';
44
import { Display } from 'src/app/model/DataSelection/Profile/Display';
5+
import { filter, Observable, Subscription, tap } from 'rxjs';
56
import { InterfaceTableDataRow } from 'src/app/shared/models/TableData/InterfaceTableDataRows';
6-
import { Observable, Subscription } from 'rxjs';
77
import { ReferenceCriteriaListEntry } from 'src/app/model/Search/ListEntries/ReferenceCriteriaListEntry';
88
import { ReferenceCriteriaListEntryAdapter } from 'src/app/shared/models/TableData/Adapter/ReferenceCriteriaListEntryAdapter';
9+
import { ReferenceCriteriaResultList } from 'src/app/model/Search/ResultList/ReferenceCriteriaResultList';
910
import { SelectedTableItemsService } from 'src/app/service/SearchTermListItemService.service';
1011
import { TableData } from 'src/app/shared/models/TableData/InterfaceTableData';
1112
import { TerminologyCode } from 'src/app/model/Terminology/TerminologyCode';
@@ -36,6 +37,8 @@ export class ReferenceComponent implements OnInit, OnDestroy {
3637

3738
private subscription: Subscription;
3839

40+
private loadNextPageSubscription: Subscription;
41+
3942
adaptedData: TableData;
4043

4144
isTableItemsSelected = false;
@@ -46,25 +49,30 @@ export class ReferenceComponent implements OnInit, OnDestroy {
4649

4750
searchResultsFound = false;
4851

52+
searchtText: string;
53+
4954
constructor(
5055
private activeSearchTermService: ActiveSearchTermService,
51-
private searchService: CriteriaSetSearchService,
56+
private criteriaSetSearchService: CriteriaSetSearchService,
5257
private selectedTableItemsService: SelectedTableItemsService<ReferenceCriteriaListEntry>
5358
) {}
5459

5560
ngOnInit() {
5661
this.startElasticSearch('');
57-
this.subscription = this.searchService
62+
this.subscription = this.criteriaSetSearchService
5863
.getSearchResults([this.referenceFilterUri])
59-
.subscribe((searchTermResults) => {
60-
if (searchTermResults) {
61-
this.listItems = searchTermResults.getResults();
62-
this.adaptedData = ReferenceCriteriaListEntryAdapter.adapt(this.listItems);
63-
if (this.adaptedData.body.rows.length > 0) {
64-
this.searchResultsFound = true;
65-
} else {
66-
this.searchResultsFound = false;
67-
}
64+
.pipe(
65+
filter(
66+
(searchResult: ReferenceCriteriaResultList) => searchResult?.getResults()?.length > 0
67+
)
68+
)
69+
.subscribe((searchTermResults: ReferenceCriteriaResultList) => {
70+
this.listItems = searchTermResults.getResults();
71+
this.adaptedData = ReferenceCriteriaListEntryAdapter.adapt(this.listItems);
72+
if (this.adaptedData.body.rows.length > 0) {
73+
this.searchResultsFound = true;
74+
} else {
75+
this.searchResultsFound = false;
6876
}
6977
});
7078
this.searchText$ = this.activeSearchTermService.getActiveSearchTerm();
@@ -73,6 +81,7 @@ export class ReferenceComponent implements OnInit, OnDestroy {
7381

7482
ngOnDestroy() {
7583
this.subscription?.unsubscribe();
84+
this.loadNextPageSubscription?.unsubscribe();
7685
}
7786

7887
private handleSelectedItemsSubscription(): void {
@@ -105,16 +114,16 @@ export class ReferenceComponent implements OnInit, OnDestroy {
105114

106115
public startElasticSearch(searchtext: string) {
107116
if (this.referenceFilterUri?.length > 0) {
108-
this.searchService.search(searchtext, [this.referenceFilterUri]).subscribe((test) => {
109-
this.listItems = test.getResults();
110-
});
117+
this.searchtText = searchtext;
118+
this.subscription = this.criteriaSetSearchService
119+
.search(searchtext, [this.referenceFilterUri])
120+
.subscribe();
111121
} else {
112122
console.warn('No referenceCriteriaUrl was provided');
113123
}
114124
}
115125

116126
setSelectedReferenceCriteria() {
117-
const ids = this.selectedTableItemsService.getSelectedIds();
118127
this.selectedTableItemsService
119128
.getSelectedTableItems()
120129
.subscribe((items) => {
@@ -129,7 +138,7 @@ export class ReferenceComponent implements OnInit, OnDestroy {
129138
})
130139
.unsubscribe();
131140

132-
this.emitIDs();
141+
this.emitIds();
133142
this.selectedTableItemsService.clearSelection();
134143
}
135144

@@ -149,10 +158,17 @@ export class ReferenceComponent implements OnInit, OnDestroy {
149158

150159
public removeSelectedReference(index: number): void {
151160
this.arrayOfSelectedReferences.splice(index, 1);
152-
this.emitIDs();
161+
this.emitIds();
153162
}
154163

155-
private emitIDs(): void {
164+
private emitIds(): void {
156165
this.selectedReferenceIds.emit(this.arrayOfSelectedReferences.map((items) => items.id));
157166
}
167+
168+
public loadMoreCriteriaSetResults(): void {
169+
this.loadNextPageSubscription?.unsubscribe();
170+
this.loadNextPageSubscription = this.criteriaSetSearchService
171+
.loadNextPage(this.searchtText, [this.referenceFilterUri])
172+
.subscribe();
173+
}
158174
}

0 commit comments

Comments
 (0)