From 081939b701a890b1de05326134ff91426521c82d Mon Sep 17 00:00:00 2001
From: pgiertych <pgiertych@man.poznan.pl>
Date: Thu, 23 Nov 2023 09:34:47 +0100
Subject: [PATCH] add searching on domain switcher

---
 .../domainfilter/domainfilter.component.html     |  3 ++-
 .../domainfilter/domainfilter.component.ts       | 16 +++++++++++++++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/app/shared/common/domainfilter/domainfilter.component.html b/src/app/shared/common/domainfilter/domainfilter.component.html
index 125559e1..c5d9e8c0 100644
--- a/src/app/shared/common/domainfilter/domainfilter.component.html
+++ b/src/app/shared/common/domainfilter/domainfilter.component.html
@@ -3,7 +3,8 @@
 			<span style="color: gray;">{{ "FILTER.DOMAIN" | translate }}: {{ getCurrent() }}<span class="caret"></span></span>
 		</a>
 		<ul class="dropdown-menu">
-			<li *ngFor="let domain of domains | async; let last = isLast" [ngClass]="{'active': getCurrent() == domain?.name}">
+			<input type="text" [(ngModel)]="searchTerm" placeholder="Search by name" (input)="updateFilter()">
+			<li *ngFor="let domain of filteredDomains | async; let last = isLast" [ngClass]="{'active': getCurrent() == domain?.name}">
 				<a (click)="changeDomain(domain?.id, domain?.name)">
 					<span>{{domain?.name}}</span>
 				</a>
diff --git a/src/app/shared/common/domainfilter/domainfilter.component.ts b/src/app/shared/common/domainfilter/domainfilter.component.ts
index bf919399..f71a06af 100644
--- a/src/app/shared/common/domainfilter/domainfilter.component.ts
+++ b/src/app/shared/common/domainfilter/domainfilter.component.ts
@@ -3,7 +3,7 @@ import {Domain} from '../../../model/domain';
 import {DomainService} from '../../../service';
 import {UserDataService} from '../../../service/userdata.service';
 import {Component, OnInit} from '@angular/core';
-import {Subscription, Observable, of, interval} from 'rxjs';
+import {BehaviorSubject, interval, Observable, of, Subscription} from 'rxjs';
 
 import {map} from 'rxjs/operators';
 import {ProfileService} from '../../../service/profile.service';
@@ -26,6 +26,12 @@ export class DomainFilterComponent implements OnInit {
 
     public profile: User;
 
+    public searchTerm = '';
+
+    private filteredDomainsSub = new BehaviorSubject<any[]>([]);
+
+    public filteredDomains = this.filteredDomainsSub.asObservable();
+
     constructor(private authService: AuthService,
                 private domainService: DomainService,
                 private userData: UserDataService,
@@ -49,6 +55,7 @@ export class DomainFilterComponent implements OnInit {
                 this.domains.subscribe(domain => {
                     this.domainName = domain[0].name;
                     this.userData.selectDomainId(domain[0].id)
+                    this.filteredDomainsSub.next(domain);
                 });
             }
         );
@@ -56,6 +63,13 @@ export class DomainFilterComponent implements OnInit {
         this.userData.selectedDomainId.subscribe(id => this.domainId = id);
     }
 
+    public updateFilter() {
+        this.domains.subscribe(data => {
+            const filtered = data.filter(obj => obj.name.toLowerCase().includes(this.searchTerm.toLowerCase()));
+            this.filteredDomainsSub.next(filtered);
+        });
+    }
+
     public updateDomains(): void {
         if (this.authService.hasRole('ROLE_SYSTEM_ADMIN')) {
             this.domains = this.domainService.getAll();
-- 
GitLab