import { Store } from '@ngrx/store';
import { MonkeyEcxConfigStore, MonkeyEcxControlStore, MonkeyEcxLinks, MonkeyEcxPage, MonkeyEcxPagination } from '../../interfaces';
import { MonkeyEcxCommonsService } from '../commons';
import { MonkeyEcxService } from '../monkeyecx-service.service';
import { MonkeyEcxTokenStorageService } from '../storage';
/**
 * Classe genérica que recebe duas interfaces como tipos genéricos.
 *
 * @typeparam T deve ser a mesma interface utilizada na Entity da Store
 * @typeparam K faz referência ao tipo de configuração.
 *
 * @description interfaces de configuração:
 * ```
 * MonkeyEcxCollectionStore e MonkeyEcxEntityStore
 * ```
 */
export declare abstract class MonkeyEcxCommonsStoreBaseService<T, K extends MonkeyEcxConfigStore> extends MonkeyEcxCommonsService {
    protected store: Store;
    private action;
    private selector;
    constructor(monkeyecxService: MonkeyEcxService, tokenStorage: MonkeyEcxTokenStorageService, store: Store, config: K);
    private handleResponseData;
    protected updateControl(data: MonkeyEcxControlStore): void;
    protected mappingData(args: T | T[]): T | T[];
    protected update?(args: T | T[]): void;
    protected updatePage?(data: MonkeyEcxPage): void;
    protected updateLinks?(data: MonkeyEcxLinks): void;
    protected loadData(url: string, updateLinks?: boolean): Promise<void>;
    protected loadPageData(pagination: MonkeyEcxPagination): Promise<void>;
    /**
     * @description Neste método precisamos incluir a lógica para conferir se precisa limpar a
     * entidade ou não
     * E depois precisa invocar o método loadData
     * @param (url) ou de acordo com a action criada
     * @example
     * ```
     * const hasDifference = .....
     * if(hasDifference) {
     *    store.dispatch(clear)
     * }
     *
     * this.loadData(...)
     * ```
     */
    load?(args: any): void;
    loadPage?(args: any): void;
}
