import { OnDestroy } from "@angular/core";
import { BehaviorSubject, Observable, Subject } from "rxjs";
import { DataSourceService } from "./data-source.service";
import { IFilteringOutputs, IFilters } from "./public-api";
import * as i0 from "@angular/core";
/**
 * <example-url>./../examples/index.html#/common/server-side-data-source</example-url>
 */
export declare abstract class ServerSideDataSource<T, F extends IFilters = IFilters, D = any> extends DataSourceService<T> implements OnDestroy {
    busy: BehaviorSubject<boolean>;
    protected applyFilters$: Subject<F>;
    protected destroy$: Subject<void>;
    constructor();
    protected setupFilters(): void;
    ngOnDestroy(): void;
    protected beforeApplyFilters(filters: F): void;
    protected afterApplyFilters(data: D): Promise<void>;
    applyFilters(): Promise<void>;
    abstract getFilteredData(data: D): Promise<IFilteringOutputs>;
    protected abstract getBackendData(filters: F): Observable<D>;
    static ɵfac: i0.ɵɵFactoryDeclaration<ServerSideDataSource<any, any, any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ServerSideDataSource<any, any, any>>;
}
