import type React from 'react';
import type { Observable } from 'rxjs';
import type { ISearchResultSet } from '../infrastructure/infrastructureSearch.service';
import type { ISearchParams, ISearchResult, ISearchResults } from '../search.service';
export interface ISearchResultSetProps<T extends ISearchResult> {
    resultSet: ISearchResultSet<T>;
}
export interface ISearchResultTabProps<T extends ISearchResult> {
    resultSet: ISearchResultSet<T>;
    isActive: boolean;
}
export declare abstract class SearchResultType<T extends ISearchResult = ISearchResult> {
    /** The unique key for the type, i.e., 'applications', 'serverGroup' */
    abstract id: string;
    /** search fields necessary when searching for this type, i.e., ['key'] for instance search */
    fieldsRequired: string[];
    /** The order to appear in the search result tabs */
    abstract order: number;
    /** The display name in the search result tabs */
    abstract displayName: string;
    /** The icon class in the search result tabs */
    abstract iconClass: string;
    TabComponent: React.ComponentType<ISearchResultTabProps<T>>;
    HeaderComponent: React.ComponentType<ISearchResultSetProps<T>>;
    DataComponent: React.ComponentType<ISearchResultSetProps<T>>;
    hideIfEmpty?: boolean;
    displayFormatter?(entry: ISearchResult, fromRoute?: boolean): string;
    /** Override this method as necessary */
    search(params: ISearchParams, _otherResults?: Observable<ISearchResultSet>): Observable<ISearchResults<T>>;
}
