UNPKG

@edugouvfr/ngx-dsfr-ext

Version:

NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)

252 lines (251 loc) 12.4 kB
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>; }