import {Component, Input} from '@angular/core'; import {FormGroup} from "@angular/forms"; import {debounceTime, distinctUntilChanged, Observable, OperatorFunction, switchMap} from "rxjs"; import {filter, map} from "rxjs/operators"; @Component({ selector: 'app-search-input', templateUrl: './search-input.component.html', styleUrl: './search-input.component.scss' }) export class SearchInputComponent { @Input() public formId!: string; @Input() public formLabelLangKey!: string; @Input() public dataField!: string; @Input() public documentForm!: FormGroup; @Input() public documentFormField!: string; @Input() public fetchFunction!: (term: string) => Observable<{ id: any; name: any }[]>; protected formatter = (apiData: any) => apiData.name; protected searchItem: OperatorFunction = (text$: Observable) => text$.pipe( debounceTime(200), distinctUntilChanged(), filter((term) => term.length >= 2), switchMap((term) => this.fetchFunction(term)), map((items: {id: any, name: any}[]) => items.slice(0, 10)), ); protected onItemSelect(selectedItem: any): void { this.documentForm.get(this.formId)?.setValue(selectedItem.item.id); } }