Eu tenho um componente de pesquisa funcionando como deveria. É dedicado a buscar e filtrar uma lista de usuários que, após seleção, serão definidos como membros. É configurável quanto à configuração do cabeçalho, espaço reservado, etc., bem como um modelo que estou passando para renderizar cada linha dos candidatos. Nota. É o próprio lookup o responsável por obter a lista de alternativas - a entrada do pai consiste apenas na consulta: um nome parcial passado ao serviço.
@Component({ selector: 'app-lookup', ... })
export class LookupComponent {
constructor(private service: MembershipService) { }
@ViewChild("lookup") lookup: ElementRef;
@ContentChild(TemplateRef) content: TemplateRef<unknown>;
@Input() data = {} as LookupVm;
@Output() selection = new EventEmitter<User>();
...
onKeyUp(event: KeyboardEvent) {
const query = (event.target as HTMLInputElement).value; ...
this.service.getUsers(query).subscribe( ... );
}
onClick(input: User) {
...
this.selection.emit(input);
}
}
Agora, estou prestes a criar uma pesquisa para outros tipos: projetos, membros existentes, atividades etc. Obviamente, uma maneira de fazer isso é implementar um componente de pesquisa dedicado para cada fonte. Eu gostaria de torná-lo genérico, já que a maior parte do comportamento é o mesmo: apenas a fonte e a saída são diferentes.
Para transformar seu componente em genérico você pode fazer o seguinte: