import { InjectionToken } from '@angular/core' ; import { Observable } from 'rxjs' ; export interface ISearchQuery { match : string ; limit : number | null ; order : string | null ; limitByType : boolean | null ; offset : number | null ; sources : string [ ] | null ; } export interface IModel { name : string ; displayName : string ; imageUrl ? : string ; icon ? : string ; } export interface IReturnType { rank : number ; source : string ; } export interface IDefaultReturnType extends IReturnType { name : string ; description : string ; } export interface ISearchService < T extends IReturnType > { searchApiRequest ( requestParameters , saveInRecents ) : Observable < T [ ] > ; recentSearchApiRequest ? ( ) : Observable < ISearchQuery [ ] > ; } export const SEARCH_SERVICE_TOKEN = new InjectionToken < ISearchService < IReturnType > > ( 'Search_Service_Token' ) ; export type RecentSearchEvent = { event ? : Event ; keyword : string ; category : string ; } ; export type ItemClickedEvent < T > = { event : MouseEvent ; item : T ; } ; export type TypeEvent = { event ? : Event ; input : string ; } ; export const DEFAULT_LIMIT = 20 ; export const DEFAULT_LIMIT_TYPE = false ; export const DEFAULT_ORDER = [ ] ; export const DEBOUNCE_TIME = 1000 ; export const DEFAULT_OFFSET = 0 ; export const DEFAULT_SAVE_IN_RECENTS = true ;