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