Skip to content

Commit 50143a4

Browse files
authored
pushes search text to a subject (#14880)
use distinctUntilChanged to prevent duplicate filtering operations Run filtering outside angular zone to prevent change detection issues
1 parent cb770f5 commit 50143a4

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

apps/browser/src/vault/popup/components/vault-v2/vault-search/vault-v2-search.component.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { CommonModule } from "@angular/common";
2-
import { Component } from "@angular/core";
2+
import { Component, NgZone } from "@angular/core";
33
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
44
import { FormsModule } from "@angular/forms";
5-
import { Subject, Subscription, debounceTime, filter } from "rxjs";
5+
import { Subject, Subscription, debounceTime, distinctUntilChanged, filter } from "rxjs";
66

77
import { JslibModule } from "@bitwarden/angular/jslib.module";
88
import { SearchModule } from "@bitwarden/components";
@@ -22,13 +22,16 @@ export class VaultV2SearchComponent {
2222

2323
private searchText$ = new Subject<string>();
2424

25-
constructor(private vaultPopupItemsService: VaultPopupItemsService) {
25+
constructor(
26+
private vaultPopupItemsService: VaultPopupItemsService,
27+
private ngZone: NgZone,
28+
) {
2629
this.subscribeToLatestSearchText();
2730
this.subscribeToApplyFilter();
2831
}
2932

3033
onSearchTextChanged() {
31-
this.vaultPopupItemsService.applyFilter(this.searchText);
34+
this.searchText$.next(this.searchText);
3235
}
3336

3437
subscribeToLatestSearchText(): Subscription {
@@ -44,9 +47,13 @@ export class VaultV2SearchComponent {
4447

4548
subscribeToApplyFilter(): Subscription {
4649
return this.searchText$
47-
.pipe(debounceTime(SearchTextDebounceInterval), takeUntilDestroyed())
50+
.pipe(debounceTime(SearchTextDebounceInterval), distinctUntilChanged(), takeUntilDestroyed())
4851
.subscribe((data) => {
49-
this.vaultPopupItemsService.applyFilter(data);
52+
this.ngZone.runOutsideAngular(() => {
53+
this.ngZone.run(() => {
54+
this.vaultPopupItemsService.applyFilter(data);
55+
});
56+
});
5057
});
5158
}
5259
}

0 commit comments

Comments
 (0)