From d917651d9f844dc07abf3e817073aa1e10213b9a Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 13 Aug 2018 11:52:55 -0400 Subject: [PATCH] search pending and is searchable --- src/abstractions/search.service.ts | 1 + src/angular/components/ciphers.component.ts | 12 ++++++++++-- src/services/search.service.ts | 8 +++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/abstractions/search.service.ts b/src/abstractions/search.service.ts index 1a4aa75e4b8..4050a272309 100644 --- a/src/abstractions/search.service.ts +++ b/src/abstractions/search.service.ts @@ -2,6 +2,7 @@ import { CipherView } from '../models/view/cipherView'; export abstract class SearchService { clearIndex: () => void; + isSearchable: (query: string) => boolean; indexCiphers: () => Promise; searchCiphers: (query: string, filter?: (cipher: CipherView) => boolean) => Promise; } diff --git a/src/angular/components/ciphers.component.ts b/src/angular/components/ciphers.component.ts index 4ce7f85b6e9..916c0adce6e 100644 --- a/src/angular/components/ciphers.component.ts +++ b/src/angular/components/ciphers.component.ts @@ -22,6 +22,7 @@ export class CiphersComponent { protected allCiphers: CipherView[] = []; protected filter: (cipher: CipherView) => boolean = null; + protected searchPending = false; private searchTimeout: any = null; @@ -40,15 +41,22 @@ export class CiphersComponent { async applyFilter(filter: (cipher: CipherView) => boolean = null) { this.filter = filter; - await this.search(0); + await this.search(null); } - search(timeout: number = 0) { + async search(timeout: number = null) { + this.searchPending = false; if (this.searchTimeout != null) { clearTimeout(this.searchTimeout); } + if (timeout == null) { + this.ciphers = await this.searchService.searchCiphers(this.searchText, this.filter); + return; + } + this.searchPending = true; this.searchTimeout = setTimeout(async () => { this.ciphers = await this.searchService.searchCiphers(this.searchText, this.filter); + this.searchPending = false; }, timeout); } diff --git a/src/services/search.service.ts b/src/services/search.service.ts index 8aa5562807b..1cb1afda13e 100644 --- a/src/services/search.service.ts +++ b/src/services/search.service.ts @@ -22,6 +22,12 @@ export class SearchService implements SearchServiceAbstraction { this.index = null; } + isSearchable(query: string): boolean { + const notSearchable = query == null || (this.index == null && query.length < 2) || + (this.index != null && query.length < 2 && query.indexOf('>') !== 0); + return !notSearchable; + } + async indexCiphers(): Promise { if (this.indexing) { return; @@ -91,7 +97,7 @@ export class SearchService implements SearchServiceAbstraction { ciphers = ciphers.filter(filter); } - if (query == null || (this.index == null && query.length < 2)) { + if (!this.isSearchable(query)) { return ciphers; }