/**
 * Component Base Class
 *
 * Clase base para componentes que muestran datos en formato de listas o tablas
 * cargando datos desde el servidor.
 *
 * @author Jaime Cruz.
 */
import { OnInit, Injector, AfterViewInit, EventEmitter } from '@angular/core';
import { NotificationsService } from './services/notifications.service';
import { HttpClient } from '@angular/common/http';
import { MatDialog } from '@angular/material/dialog';
import { MatTable } from '@angular/material/table';
import { DialogService } from './services/dialog.service';
import { MatSort } from '@angular/material/sort';
import { MatPaginator } from '@angular/material/paginator';
import { SelectionModel } from '@angular/cdk/collections';
import { ActivatedRoute, Router } from '@angular/router';
import { HttpCollectionService, CollectionQueryParams, QueryFilter } from 'ngx-core-business/http';
import { DataErrorViewComponent } from './data-error-view/data-error-view.component';
import { Subscription } from 'rxjs';
import * as i0 from "@angular/core";
export declare class TableViewComponent<T> implements OnInit, AfterViewInit {
    protected injector: Injector;
    selectionChange: EventEmitter<any[]>;
    /**
     * Tipo de componente
     *  - page: Si el componente que extiende está asociado con una ruta.
     *  - component: Si el componente extendido esta dentro de otro componente
     *
     */
    protected type: string;
    autoload: boolean;
    apiUrl: string;
    sendModelOnDelete: boolean;
    requestParams: {
        [key: string]: string | number | boolean;
    };
    dataPath: string;
    displayedColumns: string[];
    itemSingularName: string;
    itemPluralName: string;
    itemSingularArticle: string;
    confirmDeleteTitle: string;
    confirmDeleteTitleTpl: string;
    deleteItemQuestionText: string;
    deleteItemQuestionTextTpl: string;
    deleteItemConfirmDialogContentTpl: string;
    deleteItemConfirmButtonText: string;
    successfullyDeletedItemNotificationTpl: string;
    protected editorClass: any;
    protected editionDisabled: boolean;
    pageSize: number;
    pageIndex: number;
    _rawData: T[];
    _rawTransformedData: T[];
    data: T[];
    selectedRow: any;
    totalRecords: number;
    selectedRowIndex: number;
    selection: SelectionModel<any>;
    selectionMultiple: boolean;
    modelIdProperty: string;
    modelNameProperty: string;
    protected notifications: NotificationsService;
    protected http: HttpClient;
    protected matDialog: MatDialog;
    protected dialogService: DialogService;
    protected httpGetList: HttpCollectionService;
    protected router: Router;
    protected route: ActivatedRoute;
    table?: MatTable<any>;
    sort?: MatSort;
    paginator?: MatPaginator;
    errorView?: DataErrorViewComponent;
    filters: QueryFilter[];
    $fields: string;
    localSearchFilter: QueryFilter;
    searchFilter: QueryFilter;
    _isLoadingData: boolean;
    _didLoadDataFailed: boolean;
    _loadSubcription?: Subscription;
    clearDataOnFail: boolean;
    private loadObs;
    load: import("rxjs").Observable<unknown>;
    private errorStatus;
    constructor(injector: Injector);
    keyEvent(e: KeyboardEvent): void;
    loadData(): void;
    _subscribeLoadEvent(): void;
    onDataServiceResponse(res: any): void;
    transformServiceResponseData(data: any[]): any[];
    /**
     * Hook
     * Es llamado antes de solicitar datos al servidor
     */
    beforeLoad(): void;
    getSelection(): any[];
    recordExists(rec: any): boolean;
    getRecordByIndex(idx: number): NonNullable<T> | null;
    getRecordIndex(rec: any): number;
    selectNext(): void;
    selectPrevious(): void;
    validIndex(index: number): boolean;
    getBaseRequestParams(): CollectionQueryParams;
    getApiUrl(): string;
    getDataPath(): string;
    getCollectionUrl(): string;
    getDeleteResourceUrl(model: T): string;
    getRequestUrl(): string;
    getRequestParams(): {
        [key: string]: number | string | boolean;
    };
    /**
     * ACTION HANDLERS
     */
    addItemHandler(): void;
    editItemHandler(rec: any): void;
    deleteItemHandler(model: any): void;
    deleteResource(model: T): void;
    getEditorData(rec?: T): {
        [key: string]: any;
        model?: T;
    };
    updateRecord(rec: T): void;
    removeRecord(model: T): void;
    /**
     * Este metodo puede ser sobre escrito para evitar el comportamiento por defecto.
     */
    afterCreateEditorClosed(model: T): void;
    /**
     * Este metodo puede ser sobre escrito para evitar el comportamiento por defecto.
     */
    afterUpdateEditorClosed(model: any): void;
    /**
     * Nota: Sobrescribir este metodo para titulos personalizados.
     */
    getDeleteItemConfirmDialogTitle(model: any): string;
    /**
     * Nota: Sobrescribir este metodo para mensajes personalizados
     */
    getDeleteItemConfirmDialogContent(model: T): string;
    getDeleteItemConfirmDialogTplData(model: T): any;
    /**
     * Nota: Sobrescribir este metodo para mensajes personalizados
     */
    getSuccessfullyDeletedItemNotificationContent(model: T): string;
    getSuccessfullyDeletedItemNotificationTplData(model: T): any;
    getItemIdentificationName(model: T): string;
    reloadHandler(): void;
    ngOnInit(): void;
    subscribeRouteParams(): void;
    loadDatasets(): void;
    _createSelectionModel(): void;
    ngAfterViewInit(): void;
    /**
     * Solo notificará los errores de servidor componentes tipo component
     */
    handleServerError(xhr: any): void;
    updateView(): void;
    applyFilters(filters: QueryFilter[]): void;
    resetPageIndex(): void;
    getFilters(): QueryFilter[];
    applySearchFilter(filter: QueryFilter): void;
    applyLocalSearchFilter(filter: QueryFilter): void;
    /**
     * Determina si se debería o no mostrar el mensaje de cargando
     */
    shouldShowProgressView(): false;
    shouldShowErrorView(): boolean;
    shouldShowTitleBar(): boolean;
    shouldShowContent(): boolean;
    /** Whether the number of selected elements matches the total number of rows. */
    isAllSelected(): boolean;
    /** Selects all rows if they are not all selected; otherwise clear selection. */
    masterToggle(): void;
    ngOnDestroy(): void;
    updateValue(model: any, fieldName: string, newValue: string | number | boolean): void;
    afterValueUpdated(model: T, fieldName: string, newValue: any, oldValue: any): void;
    navigateToItemView(id: number): void;
    getBaseHref(): string;
    getPageIndex(): number;
    getPageSize(): number;
    getItemNumber(index: number): number;
    /**
     * Filtra por todas las columnas
     * @param text Texto buscado
     */
    filterData(text: string): void;
    getErrorStatus(): number;
    static ɵfac: i0.ɵɵFactoryDeclaration<TableViewComponent<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<TableViewComponent<any>, never, never, {}, { "selectionChange": "selectionChange"; }, never, never, true, never>;
}
