|
|
|
@ -4,6 +4,7 @@ import {ApiService} from '../../service/api.service';
|
|
|
|
|
import {BehaviorSubject} from 'rxjs';
|
|
|
|
|
import {Router} from '@angular/router';
|
|
|
|
|
import {NodeTypeIcons} from '../../structures/node-types';
|
|
|
|
|
import {debounce} from "../../utility";
|
|
|
|
|
|
|
|
|
|
export interface SearchResult {
|
|
|
|
|
title: string;
|
|
|
|
@ -26,9 +27,16 @@ export class SearchComponent implements OnInit {
|
|
|
|
|
@ViewChild('ionInput') ionInput: IonInput;
|
|
|
|
|
@Input() query = '';
|
|
|
|
|
public results: BehaviorSubject<SearchResult[]> = new BehaviorSubject<SearchResult[]>([]);
|
|
|
|
|
public loading = false;
|
|
|
|
|
|
|
|
|
|
public typeIcons = NodeTypeIcons;
|
|
|
|
|
|
|
|
|
|
protected searchChangeDebounce = debounce(async ($event) => {
|
|
|
|
|
const query = $event.detail.value;
|
|
|
|
|
this.results.next(await this.search(query));
|
|
|
|
|
this.loading = false;
|
|
|
|
|
}, 1000);
|
|
|
|
|
|
|
|
|
|
constructor(
|
|
|
|
|
protected modal: ModalController,
|
|
|
|
|
protected api: ApiService,
|
|
|
|
@ -46,8 +54,8 @@ export class SearchComponent implements OnInit {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async onSearchChange($event) {
|
|
|
|
|
const query = $event.detail.value;
|
|
|
|
|
this.results.next(await this.search(query));
|
|
|
|
|
this.loading = true;
|
|
|
|
|
this.searchChangeDebounce($event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async search(query): Promise<SearchResult[]> {
|
|
|
|
|