Skip to content

Commit b77ff5b

Browse files
authored
Merge pull request #418 from medizininformatik-initiative/415-preload-filter-and-criteria-search-results-before-page-load
415 preload filter and criteria search results before page load
2 parents d499f2d + e17133f commit b77ff5b

File tree

8 files changed

+81
-26
lines changed

8 files changed

+81
-26
lines changed

src/app/modules/data-selection/components/search/search.component.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { TreeNode } from 'src/app/shared/models/TreeNode/TreeNodeInterface';
2222
import { DataSelectionProfile } from 'src/app/model/DataSelection/Profile/DataSelectionProfile';
2323
import { DataSelectionProviderService } from '../../services/DataSelectionProvider.service';
2424
import { NavigationHelperService } from 'src/app/service/NavigationHelper.service';
25+
import { ActivatedRoute } from '@angular/router';
2526

2627
@Component({
2728
selector: 'num-search-data-selection',
@@ -55,7 +56,8 @@ export class SearchDataSelectionComponent implements OnInit, AfterViewInit, OnDe
5556
private dataSelectionProviderService: DataSelectionProviderService,
5657
private activeDataSelectionService: ActiveDataSelectionService,
5758
private selectedDataSelectionProfileService: SelectedDataSelectionProfileService,
58-
private navigationHelperService: NavigationHelperService
59+
private navigationHelperService: NavigationHelperService,
60+
private activeRoute: ActivatedRoute
5961
) {}
6062

6163
ngOnInit(): void {
@@ -66,13 +68,9 @@ export class SearchDataSelectionComponent implements OnInit, AfterViewInit, OnDe
6668
this.selectedDataSelectionProfileService.getSelectedProfiles();
6769

6870
this.handleSelectedItemsSubscription();
69-
this.dataSelectionProfileTreeSubscription = this.dataSelectionProfileTreeService
70-
.fetchProfileTree()
71-
.subscribe((tree) => {
72-
const treeNodes = tree.getTreeNode();
73-
const rootNode = DataSelectionTreeAdapter.fromTree(tree.getTreeNode());
74-
this.trees = rootNode;
75-
});
71+
const tree = this.activeRoute.snapshot.data.preLoadDataSelectionData;
72+
const rootNode = DataSelectionTreeAdapter.fromTree(tree.getTreeNode());
73+
this.trees = rootNode;
7674
}
7775

7876
/**

src/app/modules/data-selection/data-selection-routing.module.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { NgModule } from '@angular/core';
33
import { RouterModule, Routes } from '@angular/router';
44
import { SearchDataSelectionComponent } from './components/search/search.component';
55
import { PathSegments } from 'src/app/app-paths';
6+
import { DataSelectionProfileResolverService } from 'src/app/service/Resolver/DataSelectionProfileResolver.servcie';
67

78
const routes: Routes = [
89
{
@@ -14,6 +15,9 @@ const routes: Routes = [
1415
{
1516
path: PathSegments.search,
1617
component: SearchDataSelectionComponent,
18+
resolve: {
19+
preLoadDataSelectionData: DataSelectionProfileResolverService,
20+
},
1721
data: { animation: 'Data_Selection_Search', title: 'TAB_TITLE.DATA_SELECTION.SEARCH' },
1822
},
1923
{

src/app/modules/feasibility-query/components/search/search.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<ng-container #outlet [ngTemplateOutlet]="content"></ng-container>
2424
<ng-template #content>
2525
<num-search-filter
26-
*ngFor="let searchFilter of searchFilters$ | async"
26+
*ngFor="let searchFilter of searchFilters"
2727
[filter]="searchFilter"
2828
(selectedFilterChanged)="setElasticSearchFilter($event)"
2929
></num-search-filter>

src/app/modules/feasibility-query/components/search/search.component.ts

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { CriteriaSearchFilterAdapter } from 'src/app/shared/models/SearchFilter/
22
import { FilterProvider } from 'src/app/service/Search/Filter/SearchFilterProvider.service';
33
import { InterfaceTableDataRow } from 'src/app/shared/models/TableData/InterfaceTableDataRows';
44
import { MatDrawer } from '@angular/material/sidenav';
5-
import { SearchFilter } from 'src/app/shared/models/SearchFilter/InterfaceSearchFilter';
65
import { SearchFilterService } from 'src/app/service/Search/Filter/SearchFilter.service';
76
import { SearchResultProvider } from 'src/app/service/Search/Result/SearchResultProvider';
87
import { SearchService } from 'src/app/service/Search/Search.service';
@@ -26,8 +25,8 @@ import {
2625
ViewContainerRef,
2726
TemplateRef,
2827
} from '@angular/core';
29-
import { DataSelectionMainProfileInitializerService } from 'src/app/service/DataSelectionMainProfileInitializerService';
30-
import { DataSelectionProviderService } from 'src/app/modules/data-selection/services/DataSelectionProvider.service';
28+
import { ActivatedRoute } from '@angular/router';
29+
import { SearchFilter } from 'src/app/shared/models/SearchFilter/InterfaceSearchFilter';
3130

3231
@Component({
3332
selector: 'num-feasibility-query-search',
@@ -42,14 +41,15 @@ export class FeasibilityQuerySearchComponent implements OnInit, OnDestroy, After
4241
searchtext = '';
4342
adaptedData: TableData;
4443
private subscription: Subscription;
45-
private isInitialized = false;
4644
isOpen = false;
4745

46+
private isInitialized = false;
47+
4848
elasticSearchEnabled = false;
4949

5050
selectedDetails$: Observable<SearchTermDetails>;
5151

52-
searchFilters$: Observable<SearchFilter[]>;
52+
searchFilters: SearchFilter[] = [];
5353

5454
searchText$: Observable<string>;
5555

@@ -69,8 +69,7 @@ export class FeasibilityQuerySearchComponent implements OnInit, OnDestroy, After
6969
private searchTermDetailsService: SearchTermDetailsService,
7070
private searchResultProviderService: SearchResultProvider,
7171
private searchTermDetailsProviderService: SearchTermDetailsProviderService,
72-
private dataSelectionMainProfileInitializerService: DataSelectionMainProfileInitializerService,
73-
private dataSelectionProviderService: DataSelectionProviderService
72+
private activatedRoute: ActivatedRoute
7473
) {
7574
this.subscription = this.searchResultProviderService
7675
.getCriteriaSearchResults()
@@ -101,6 +100,8 @@ export class FeasibilityQuerySearchComponent implements OnInit, OnDestroy, After
101100
}
102101

103102
ngOnInit() {
103+
const t = this.activatedRoute.snapshot.data.preLoadCriteriaData;
104+
console.log('Preloaded data:', t);
104105
this.selectedDetails$ = this.searchTermDetailsProviderService.getSearchTermDetails$();
105106
this.handleSelectedItemsSubscription();
106107
this.getElasticSearchFilter();
@@ -184,16 +185,16 @@ export class FeasibilityQuerySearchComponent implements OnInit, OnDestroy, After
184185
}
185186

186187
public getElasticSearchFilter(): void {
187-
this.searchFilters$ = this.filterService.fetchFilters().pipe(
188-
map((searchFilters: SearchTermFilter[]) =>
189-
searchFilters.map((searchFilter) => {
190-
searchFilter.setSelectedValues(
191-
this.searchFilterProvider.getSelectedValuesOfType(searchFilter.getName())
192-
);
193-
return CriteriaSearchFilterAdapter.convertToFilterValues(searchFilter);
194-
})
195-
)
196-
);
188+
const searchFilters: Array<SearchTermFilter> =
189+
this.activatedRoute.snapshot.data.preLoadCriteriaFilter;
190+
if (searchFilters && searchFilters.length > 0) {
191+
this.searchFilters = searchFilters.map((searchFilter: SearchTermFilter) => {
192+
searchFilter.setSelectedValues(
193+
this.searchFilterProvider.getSelectedValuesOfType(searchFilter.getName())
194+
);
195+
return CriteriaSearchFilterAdapter.convertToFilterValues(searchFilter);
196+
});
197+
}
197198
}
198199

199200
public setElasticSearchFilter(filter: any) {

src/app/modules/feasibility-query/feasibility-query-routing.module.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import { NgModule } from '@angular/core';
44
import { PathSegments } from 'src/app/app-paths';
55
import { ResultComponent } from './components/result/result.component';
66
import { RouterModule, Routes } from '@angular/router';
7+
import { CriteriaSearchDataResolverService } from 'src/app/service/Resolver/CriteriaSearchDataResolver.service';
8+
import { CriteriaSearchFilterResolverService } from 'src/app/service/Resolver/CriteriaSearchFilterResolver.service';
79

810
const routes: Routes = [
911
{
1012
path: '',
1113
redirectTo: PathSegments.search,
1214
pathMatch: 'full',
15+
1316
data: {
1417
animation: 'Feasibility_Search',
1518
title: 'TAB_TITLE.FEASIBILITY_QUERY.SEARCH',
@@ -34,6 +37,10 @@ const routes: Routes = [
3437
{
3538
path: PathSegments.search,
3639
component: FeasibilityQuerySearchComponent,
40+
resolve: {
41+
preLoadCriteriaData: CriteriaSearchDataResolverService,
42+
preLoadCriteriaFilter: CriteriaSearchFilterResolverService,
43+
},
3744
data: {
3845
animation: 'Feasibility_Search',
3946
title: 'TAB_TITLE.FEASIBILITY_QUERY.SEARCH',
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Injectable } from '@angular/core';
2+
import { SearchService } from '../Search/Search.service';
3+
import { SearchTermResultList } from 'src/app/model/ElasticSearch/ElasticSearchResult/ElasticSearchList/ResultList/SearchTermResultList';
4+
import { Observable } from 'rxjs';
5+
6+
@Injectable({
7+
providedIn: 'root',
8+
})
9+
export class CriteriaSearchDataResolverService {
10+
constructor(private searchService: SearchService) {}
11+
12+
public resolve(): Observable<SearchTermResultList> {
13+
return this.searchService.searchCriteria('');
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Injectable } from '@angular/core';
2+
import { Observable } from 'rxjs';
3+
import { SearchFilterService } from '../Search/Filter/SearchFilter.service';
4+
import { SearchTermFilter } from 'src/app/model/ElasticSearch/ElasticSearchFilter/SearchTermFilter';
5+
6+
@Injectable({
7+
providedIn: 'root',
8+
})
9+
export class CriteriaSearchFilterResolverService {
10+
constructor(private searchFilterService: SearchFilterService) {}
11+
12+
public resolve(): Observable<Array<SearchTermFilter>> {
13+
return this.searchFilterService.fetchFilters();
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { DataSelectionProfileTree } from 'src/app/model/DataSelection/ProfileTree/DataSelectionProfileTree';
2+
import { DataSelectionProfileTreeService } from '../DataSelection/CreateDataselectionProfileTree';
3+
import { Injectable } from '@angular/core';
4+
import { Observable } from 'rxjs';
5+
6+
@Injectable({
7+
providedIn: 'root',
8+
})
9+
export class DataSelectionProfileResolverService {
10+
constructor(private dataSelectionProfileTreeService: DataSelectionProfileTreeService) {}
11+
12+
public resolve(): Observable<DataSelectionProfileTree> {
13+
return this.dataSelectionProfileTreeService.fetchProfileTree();
14+
}
15+
}

0 commit comments

Comments
 (0)