UNPKG

@edugouvfr/ngx-dsfr-ext

Version:

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

353 lines (346 loc) 16.4 kB
import { DsfrSize, DsfrPosition, DsfrOption, DsfrTableState } from '@edugouvfr/ngx-dsfr'; import { ICellRendererAngularComp, IFloatingFilterAngularComp, AgGridAngular } from 'ag-grid-angular'; import * as i0 from '@angular/core'; import { OnInit, ElementRef, TemplateRef, EventEmitter } from '@angular/core'; import { IFloatingFilterParams, ISimpleFilter, GridApi, IGetRowsParams, SortModelItem, ColDef, GridState, GridOptions, SortChangedEvent, GridPreDestroyedEvent, FilterChangedEvent, CellClickedEvent, RowSelectedEvent, SelectionChangedEvent, IRowNode, PaginationChangedEvent, CellEditingStoppedEvent, GridReadyEvent } from 'ag-grid-community'; import { Observable } from 'rxjs'; declare class DsfrButtonCellGridComponent implements ICellRendererAngularComp { id?: string; params: any; label: string; size?: DsfrSize; icon?: string; iconPosition?: DsfrPosition; ariaLabel?: string; customClass?: string; tooltipMessage?: string; ariaControls?: string; agInit(params: any): void; refresh(params?: any): boolean; /** * Permet d'appeler la méthode définie sur le bouton en passant les données de la ligne * @param $event Event lié au clic sur le bouton */ onClick($event: any): void; static ɵfac: i0.ɵɵFactoryDeclaration<DsfrButtonCellGridComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<DsfrButtonCellGridComponent, "dsfr-button-cell-grid", never, {}, {}, never, never, true, never>; } interface DsfrFilterSelectParams { label: string; id: string; options: DsfrOption[]; compareFn?: any; placeholder?: string; } declare class DsfrSelectFilterComponent<T> implements IFloatingFilterAngularComp { params: IFloatingFilterParams<ISimpleFilter> & DsfrFilterSelectParams; currentValue?: T; style: any; options: DsfrOption[]; label?: string; compareFn: any; agInit(params: IFloatingFilterParams<ISimpleFilter> & DsfrFilterSelectParams): void; onParentModelChanged(parentModel: any): void; onSelectChanged(): void; static ɵfac: i0.ɵɵFactoryDeclaration<DsfrSelectFilterComponent<any>, never>; static ɵcmp: i0.ɵɵComponentDeclaration<DsfrSelectFilterComponent<any>, "ng-component", never, {}, {}, never, never, true, never>; } declare enum DsfrGridModeConst { CLIENT = "client", SERVER = "server" } type DsfrGridMode = `${DsfrGridModeConst}`; /** Données retournées par la grid */ interface DsfrRemoteGridResult { data: any[]; totalRecords: number; } /** Mapper le modèle de l'API par rapport aux query params utilisés par la grid */ interface DsfrGridParams { /** nombre de résultat à retourner (taille de la page) */ limit: number; /** Index du premier résultat à afficher */ offset: number; /** Tri */ sort?: SortModelItem[]; /** Filtres */ filters?: any[]; } /** Mapper les résultats de la grid par rapport au résultat retournés par l'API */ interface DsfrGridResultModel { /** données */ data: string; /** total de résultats */ totalRecords: string; /** fonction de mapping optionnelle des données */ mappingFunction?: (e: any) => void; } /** * Datasource pour implémentation de la pagination coté backend de Ag-grid community * cf: https://medium.com/weekly-webtips/tech-building-reusable-server-side-pagination-for-ag-grid-in-angular-c8127e2da346 * et https://www.ag-grid.com/javascript-data-grid/infinite-scrolling/ * */ declare abstract class EduRemoteAgGridApi { getDataError?: (err: any) => void; gridApi?: GridApi | undefined; prepareUpdateData: (params: IGetRowsParams) => void; result$: Observable<DsfrRemoteGridResult> | undefined; } /** Représentation d'un évènement selectionChange ou rowSelect */ interface DsfrGridSelectionEvent { /** type d'évènement ag-grid */ event: RowSelectedEvent<any> | SelectionChangedEvent<any>; /** liste des noeuds ag-grid IRowNode */ selectedNodes: IRowNode<any>[]; } declare class DsfrGridComponent implements EduRemoteAgGridApi, OnInit { grid?: ElementRef; /** Template personnalisé pour afficher le total de lignes */ footerResultsTemplate?: TemplateRef<void>; /** Template pour les groupes de boutons d'actions du footer */ footerActionsTemplate?: TemplateRef<void>; /** Template pour les groupes de boutons d'actions du header. (dsfr-button-group) */ headerActionsTemplate?: TemplateRef<void>; /** 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; /** Redéfinir le template aucun résultat. /!\ L'id de ce container doit être passé à idNoRowsTemplate */ overlayNoRowsTemplate?: string; /** 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 changement de page */ paginationChange: EventEmitter<PaginationChangedEvent>; /** 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; protected initialStatePagination: DsfrTableState | undefined; protected loading: boolean; protected selectable: boolean; /** @internal */ private _resultSubject$; /** Nombre d'éléments visuellement affichés en mode serveur */ private _nbElementsDisplayed; private i18n; constructor(); /** @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 ag-grid: en mode infite + pagination + initialPagination, si le nombre de lignes a afficher est < a pageSize * des lignes vides s'affichent. Execution d'un double appel avec paginationGoToPage pour forcer un rendu correct * @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; protected onPaginationChanged(e: PaginationChangedEvent): void; 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; private transformRowHeight; private getRowElementFromNode; /** * 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": true; }; "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"; "paginationChange": "paginationChange"; "dataRender": "dataRender"; "dataFail": "dataFail"; "cellEditingStopped": "cellEditingStopped"; }, ["footerResultsTemplate", "footerActionsTemplate", "headerActionsTemplate"], ["[caption]"], true, never>; static ngAcceptInputType_autoRowsHeight: unknown; static ngAcceptInputType_showExportCsv: unknown; static ngAcceptInputType_showPagination: unknown; static ngAcceptInputType_showFooterResult: unknown; } declare class DsfrGridModule { static ɵfac: i0.ɵɵFactoryDeclaration<DsfrGridModule, never>; static ɵmod: i0.ɵɵNgModuleDeclaration<DsfrGridModule, never, [typeof DsfrGridComponent], [typeof DsfrGridComponent]>; static ɵinj: i0.ɵɵInjectorDeclaration<DsfrGridModule>; } export { DsfrButtonCellGridComponent, DsfrGridComponent, DsfrGridModule, DsfrSelectFilterComponent }; export type { DsfrGridParams, DsfrGridResultModel, DsfrGridSelectionEvent, DsfrRemoteGridResult };