import { ElementRef, EventEmitter, OnInit, TemplateRef } from '@angular/core';
import { DsfrI18nService, DsfrOption, DsfrTableState } from '@edugouvfr/ngx-dsfr';
import { AgGridAngular } from 'ag-grid-angular';
import { CellClickedEvent, CellEditingStoppedEvent, ColDef, FilterChangedEvent, GridApi, GridOptions, GridPreDestroyedEvent, GridReadyEvent, GridState, IGetRowsParams, IRowNode, RowSelectedEvent, SelectionChangedEvent, SortChangedEvent } from 'ag-grid-community';
import { Observable } from 'rxjs';
import { DsfrGridMode, DsfrGridParams, DsfrRemoteGridResult, EduRemoteAgGridApi } from './interfaces/remote-ag-grid-api';
import * as i0 from "@angular/core";
/** Représentation d'un évènement selectionChange ou rowSelect */
export interface DsfrGridSelectionEvent {
    /** type d'évènement ag-grid */
    event: RowSelectedEvent<any> | SelectionChangedEvent<any>;
    /** liste des noeuds ag-grid IRowNode */
    selectedNodes: IRowNode<any>[];
}
export declare class DsfrGridComponent implements EduRemoteAgGridApi, OnInit {
    private i18n;
    /** @internal **/
    grid: ElementRef;
    /** Template personnalisé pour afficher le total de lignes */
    footerResultsTemplate: TemplateRef<any>;
    /** Template pour les groupes de boutons d'actions du footer */
    footerActionsTemplate: TemplateRef<any>;
    /** Template pour les groupes de boutons d'actions du header. (dsfr-button-group) */
    headerActionsTemplate: TemplateRef<any>;
    /** Id du composant, généré par défaut */
    gridId: string;
    columnDefs: ColDef[];
    caption: string;
    /** Nombre d'éléments affichés par page */
    pageSize: number;
    /** Traductions des éléments de agGrid. Français par défaut, anglais si valeur nulle. */
    localeText: any;
    /** Mode de la grid: données côté client ou serveur (défaut client) */
    mode: DsfrGridMode;
    /** Données locale dans le cas de clientSide */
    rowData: any[];
    /** Options des colonnes par défaut (cf. https://www.ag-grid.com/angular-data-grid/column-properties/ ) */
    defaultColDef: ColDef;
    /** Etat initial du tableau (ex. page courante, filtres..) */
    initialState: GridState;
    /** Classes personnalisées pour la grid. Prédéfinies : "fr-table-bordered", "fr-table-no-strip".  */
    customClass: string;
    /** Afficher un texte par-dessus la grid pendant le chargement */
    showLoadingOverlay: boolean;
    /** Redéfinir le template de chargement */
    loadingOverlayTemplate: string | undefined;
    /** Redéfinir le template aucun résultat. /!\ L'id de ce container doit être passé à idNoRowsTemplate */
    overlayNoRowsTemplate: string | undefined;
    /** Id du template overlayNoRowsTemplate contenant le texte utilisé pour le aria-describedby */
    idNoRowsTemplate: string;
    /** Hauteur fixe (scroll vertical si nécessaire) */
    fixedHeight: string;
    /** Calcul dynamique de la hauteur des lignes pour afficher le contenu des cellules sur plusieurs lignes (uniquement utilisé en serverSide).
     * Déconseillé d'utiliser si le nombre de lignes par pages est élevé, peut causer des problèmes de performance d'affichage.
     */
    autoRowsHeight: boolean;
    /** Surcharge d'options supplémentaires pour agGrid (optionnel) */
    gridOptions: GridOptions<any>;
    /** Afficher le bouton d'action exporter au format CSV (uniqument si headerActionsTemplate non défini) */
    showExportCsv: boolean;
    /** Champ qui correspond à l'identifiant de la donnée (optionnel) */
    rowId: string;
    /** Afficher la pagination */
    showPagination: boolean;
    /** Afficher le total de lignes */
    showFooterResult: boolean;
    /** Mise à jour et application du tri des colonnes */
    sortChanged: EventEmitter<SortChangedEvent<any>>;
    /** Callback apres l'initialisation de la grid, retourne l'accès à l'API de agGrid */
    gridReady: EventEmitter<GridApi<any>>;
    /** Callback avant la destruction de la grid (destruction du composant), permet de récuperer le state */
    gridPreDestroyed: EventEmitter<GridPreDestroyedEvent<any>>;
    /** Mise à jour et application des filtres */
    filterChanged: EventEmitter<FilterChangedEvent<any>>;
    /** Sélection d'une cellule du tableau */
    cellSelect: EventEmitter<CellClickedEvent<any>>;
    /** Sélection ou déselection d'une ligne du tableau. Emission de l'évènement (RowSelectedEvent) et des noeuds sélectionnés (IRowNode[]) */
    rowSelect: EventEmitter<DsfrGridSelectionEvent>;
    /** La sélection des lignes a changé. Emission de l'évènement (SelectionChangedEvent) et des noeuds sélectionnés (IRowNode[]) */
    selectionChange: EventEmitter<DsfrGridSelectionEvent>;
    /** Indique une mise à jour nécessaire des données suite à un changement d'affichage (pagination, tri ou filtres). Si données côté serveur. */
    dataChange: EventEmitter<DsfrGridParams>;
    /** Callback après chaque changement des lignes affichées (modelUpdated) */
    dataRender: EventEmitter<void>;
    /** Callback après appel à l'api en cas d'erreur de celle-ci */
    dataFail: EventEmitter<any>;
    /** Evenement de fin d'édition d'une cellule */
    cellEditingStopped: EventEmitter<CellEditingStoppedEvent<any>>;
    /** @internal Pour acceder a Grid API */
    agGrid: AgGridAngular;
    /** Pagination */
    /** Choix de taille de page (par défaut 10, 20, 50, 100). Pas d'affichage du select si non défini */
    pageSizes: DsfrOption[];
    /** @internal Total résultats*/
    totalElements: number;
    /** @internal  Page courante*/
    currentPage: number | undefined;
    /** @internal Total pages */
    totalPage: number;
    /**@internal Id généré du titre du tableau */
    captionId: string;
    /** @internal Index de la première ligne affichée */
    startRow: number;
    /** @internal Index de la première ligne affichée */
    endRow: number;
    /** @internal */
    isLoadingServerSide: boolean;
    /** @internal en cas d'initalState avec pagination en mode serveur */
    initialPagination: number;
    protected initialStatePagination: DsfrTableState;
    protected loading: boolean;
    protected selectable: boolean;
    /** @internal */
    private resultSubject$;
    constructor(i18n: DsfrI18nService);
    /** @internal */
    get result$(): Observable<DsfrRemoteGridResult>;
    /** Données renvoyées par l'API */
    set result(value: DsfrRemoteGridResult);
    ngOnInit(): void;
    /**
     * Au changement de paramètres des lignes affichées (pagination, filtre etc.), préparation des query params et envoi de l'evenement updateData
     * @param params IGetRowsParams paramètres modifiés
     * @internal
     */
    prepareUpdateData(params: IGetRowsParams): void;
    /**
     * Erreur au retour de l'appel à l'api
     * @internal
     */
    getDataError(err: any): void;
    /**
     * Modification et application du tri
     * @internal
     */
    onSortChange(e: any): void;
    /**
     * Modification et application des filtres
     * @internal
     */
    onFilterChange(e: any): void;
    /**@internal */
    onCellEditingStop(e: any): void;
    /**
     * Après mise à jour des données
     * @internal
     */
    onModelUpdated(e: any): void;
    /**
     * Au redimensionnement de la fenêtre
     * @internal
     */
    onGridSizeChanged(e: any): void;
    /**
     * Au redimensionnement d'une colonne
     * @internal
     */
    onColumnResized(): void;
    /**
     * Premier affichage des données
     * /!\ bug connu ag-grid, firstDataRendered on infite mode is fired before data is rendered (AG-8812)
     * @internal
     */
    onFirstDataRendered(): void;
    /**
     * Initialisation de la grid
     * @param params
     * @internal
     */
    onGridReady(params: GridReadyEvent): void;
    /**
     * Evenement clic sur une cellule
     * @internal
     */
    onCellClicked(e: CellClickedEvent<any>): void;
    /**
     * Evenement à la sélection ou déselection d'une ligne
     * @internal
     */
    onRowSelected(e: RowSelectedEvent<any>): void;
    /**
     * Evenement au changement de sélection
     * @internal
     */
    onSelectionChanged(e: SelectionChangedEvent<any>): void;
    /**
     * Changement de page
     * @param e numéro de page
     * @internal
     */
    onPage(e: number): void;
    /**
     * @internal
     */
    onClickExportCsv(): void;
    /**
     * @internal
     */
    onChangePageSize(pageSize: number): void;
    /**
     * @internal
     */
    onGridPreDestroyed(e: GridPreDestroyedEvent): void;
    private updateFooterPagination;
    private updatePagination;
    private calculateTotalPage;
    private getRowNodeId;
    /** Ajout du tri aux query params */
    private addSort;
    /**
     * Ajout des filtres aux query params
     * @internal */
    private addFilters;
    /**
     * Remettre manuellement les paramètres de query en cas d'initialState
     * @param params query params
     */
    private restoreInitialStateServer;
    /**
     * Détection du changement de langue depuis le service i18n (display)
     * @param code
     */
    private onLangChange;
    /**
     * Permettre d'afficher sur plusieurs lignes en mode serveur (equivalent autoHeight en mode client)
     * Calculer la dimension de chaque row par rapport à son contenu et recalculer la taille de la grille
     * globale (limitation ag-grid sur le mode infinite)
     */
    private setHeightOnRows;
    /**
     * Get max cell height needed on row
     * @param nodesCell each cells on row
     * @returns max height
     */
    private getMaxHeightOnRow;
    /**
     * Redéfinir le focus pour les cellules possédant des éléments interactifs (focusables, ex. buttons)
     * Suppression de la gestion du focus par défaut de ag grid lorsque c'est le cas
     */
    private suppressCellKeyboardEvent;
    /**
     * Redéfinir le focus pour les cellules d'en-tête possédant des floatings filters avec éléments interactifs (focusables, ex. buttons)
     * Suppression de la gestion du focus par défaut de ag grid lorsque c'est le cas
     */
    private suppressHeaderKeyboardEvent;
    private suppressDefaultKeyboardEvent;
    private forceReloadOnNoData;
    private initPagination;
    static ɵfac: i0.ɵɵFactoryDeclaration<DsfrGridComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DsfrGridComponent, "dsfr-ext-ag-grid, dsfrx-ag-grid", never, { "gridId": { "alias": "gridId"; "required": false; }; "columnDefs": { "alias": "columnDefs"; "required": false; }; "caption": { "alias": "caption"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "localeText": { "alias": "localeText"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; "defaultColDef": { "alias": "defaultColDef"; "required": false; }; "initialState": { "alias": "initialState"; "required": false; }; "customClass": { "alias": "customClass"; "required": false; }; "showLoadingOverlay": { "alias": "showLoadingOverlay"; "required": false; }; "loadingOverlayTemplate": { "alias": "loadingOverlayTemplate"; "required": false; }; "overlayNoRowsTemplate": { "alias": "overlayNoRowsTemplate"; "required": false; }; "idNoRowsTemplate": { "alias": "idNoRowsTemplate"; "required": false; }; "fixedHeight": { "alias": "fixedHeight"; "required": false; }; "autoRowsHeight": { "alias": "autoRowsHeight"; "required": false; }; "gridOptions": { "alias": "gridOptions"; "required": false; }; "showExportCsv": { "alias": "showExportCsv"; "required": false; }; "rowId": { "alias": "rowId"; "required": false; }; "showPagination": { "alias": "showPagination"; "required": false; }; "showFooterResult": { "alias": "showFooterResult"; "required": false; }; "pageSizes": { "alias": "pageSizes"; "required": false; }; "result": { "alias": "result"; "required": false; }; }, { "sortChanged": "sortChanged"; "gridReady": "gridReady"; "gridPreDestroyed": "gridPreDestroyed"; "filterChanged": "filterChanged"; "cellSelect": "cellSelect"; "rowSelect": "rowSelect"; "selectionChange": "selectionChange"; "dataChange": "dataChange"; "dataRender": "dataRender"; "dataFail": "dataFail"; "cellEditingStopped": "cellEditingStopped"; }, ["footerResultsTemplate", "footerActionsTemplate", "headerActionsTemplate"], ["[caption]"], false, never>;
}
