@edugouvfr/ngx-dsfr
Version:
NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).
120 lines • 15.9 kB
JavaScript
import { Component, computed, EventEmitter, inject, Input, Output, signal } from '@angular/core';
import { DsfrDataTableService } from '../service/datatable.service';
import * as i0 from "@angular/core";
/**
* Classe abstraite gestion de la pagination du tableau
* selon le nombre de lignes à afficher et nombre de pages
*/
export class BasePaginatedTableComponent {
constructor() {
/** Choix de taille de page (par défaut 10, 20, 50, 100). Pas d'affichage du select si non défini */
this.rowsPerPageOptions = [
{ label: '10 lignes par page', value: 10 },
{ label: '20 lignes par page', value: 20 },
{ label: '50 lignes par page', value: 50 },
{ label: '100 lignes par page', value: 100 },
];
/** Changement de pagination (page affichée ou taille de page) */
this.paginationChange = new EventEmitter();
/** Etat modifié */
this.stateChange = new EventEmitter();
/** @internal Total résultats */
this.totalElements = signal(0);
/** @internal Total pages */
this.totalPage = computed(() => {
if (this.totalElements() > 0 || !this.serverSide) {
return this.calculateTotalPage();
}
return 0;
});
/**@internal Service datatable pour rafraichissement des données */
this.dataTableService = inject(DsfrDataTableService);
}
/** @internal */
get serverResultsLength() {
return this._serverResultsLength;
}
/** Total du nombre de résultats (utilisé si serverSide) */
set serverResultsLength(value) {
let currentPage = this.dataTableService.tableState().page;
this._serverResultsLength = value;
if (this.serverSide) {
this.totalElements.set(this._serverResultsLength);
}
if (currentPage > this.totalPage() && this.totalPage() > 0) {
// si le nombre de pages est inférieur a la page courante, aller à la dernière page
currentPage = this.totalPage();
this.onPageSelect(currentPage);
}
else if (this.totalPage() === 0 && currentPage !== 1) {
// si une seule page, aller à la premiere page
this.onPageSelect(1);
}
}
/** Accès aux méthodes de rafraichissement de données du tableau */
getService() {
return this.dataTableService;
}
/**
* Changement du nombre de lignes affichés par page
* calcul des pages et changement des lignes affichées
* @internal
*/
onRowsPerPageChange(rowsPerPage) {
this.dataTableService.updatePagination(rowsPerPage);
if (this.dataTableService.tableState().page > this.totalPage()) {
this.onPageSelect(this.totalPage()); // aller a la derniere page si currentPage > totalPage
}
}
/**
* Au changement de page
* @param page numéro de page
* @internal
*/
onPageSelect(page) {
this.dataTableService.goToPage(page);
this.paginationChange.emit({ currentPage: page, rowsPerPage: this.dataTableService.tableState().rowsPerPage });
}
/** Calcul du total de page selon le nombre total de résultats et le nombre de lignes affichées
* @internal
*/
calculateTotalPage() {
const rowsPerPage = this.dataTableService.rowsPerPage();
return Math.ceil(this.totalElements() / rowsPerPage);
}
/**
* Après changement de page
* Mise a jour des données affichées selon l'offset et la taille de page
* @internal
* */
paginateData(rows, state) {
if (!this.serverSide && this.totalElements() !== rows.length) {
this.totalElements.set(rows.length);
}
if (!state.page || !state.rowsPerPage)
return [];
const offset = (state.page - 1) * state.rowsPerPage;
return rows.slice(offset, offset + state.rowsPerPage);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BasePaginatedTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BasePaginatedTableComponent, selector: "ng-component", inputs: { initialState: "initialState", pagination: "pagination", serverSide: "serverSide", rowsPerPageOptions: "rowsPerPageOptions", serverResultsLength: "serverResultsLength" }, outputs: { paginationChange: "paginationChange", stateChange: "stateChange" }, ngImport: i0, template: '', isInline: true }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BasePaginatedTableComponent, decorators: [{
type: Component,
args: [{ template: '' }]
}], propDecorators: { initialState: [{
type: Input
}], pagination: [{
type: Input
}], serverSide: [{
type: Input
}], rowsPerPageOptions: [{
type: Input
}], paginationChange: [{
type: Output
}], stateChange: [{
type: Output
}], serverResultsLength: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGVkLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudC9wYWdpbmF0ZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBR3BFOzs7R0FHRztBQUVILE1BQU0sT0FBZ0IsMkJBQTJCO0lBRGpEO1FBV0Usb0dBQW9HO1FBRXBHLHVCQUFrQixHQUFpQjtZQUNqQyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzFDLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDMUMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUMxQyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1NBQzdDLENBQUM7UUFFRixpRUFBaUU7UUFDdkQscUJBQWdCLEdBQTJDLElBQUksWUFBWSxFQUdqRixDQUFDO1FBRUwsbUJBQW1CO1FBQ0EsZ0JBQVcsR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFbEcsZ0NBQWdDO1FBQ2hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFCLDRCQUE0QjtRQUM1QixjQUFTLEdBQW1CLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEdB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Q0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVqRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEQsQ0FBQzsrR0ExSG1CLDJCQUEyQjttR0FBM0IsMkJBQTJCLHVUQUQxQixFQUFFOzs0RkFDSCwyQkFBMkI7a0JBRGhELFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFOzhCQUdoQixZQUFZO3NCQUFwQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFJTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBU0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQU1ZLFdBQVc7c0JBQTdCLE1BQU07Z0JBNEJNLG1CQUFtQjtzQkFBL0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHNmck9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBEc2ZyRGF0YVRhYmxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvZGF0YXRhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRHNmclRhYmxlUGFnaW5hdGlvbkV2ZW50LCBEc2ZyVGFibGVTdGF0ZSB9IGZyb20gJy4uL3RhYmxlLm1vZGVsJztcblxuLyoqXG4gKiBDbGFzc2UgYWJzdHJhaXRlIGdlc3Rpb24gZGUgbGEgcGFnaW5hdGlvbiBkdSB0YWJsZWF1XG4gKiBzZWxvbiBsZSBub21icmUgZGUgbGlnbmVzIMOgIGFmZmljaGVyIGV0IG5vbWJyZSBkZSBwYWdlc1xuICovXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVBhZ2luYXRlZFRhYmxlQ29tcG9uZW50IHtcbiAgLyoqIEV0YXQgaW5pdGlhbCBkZSBsYSB0YWJsZSDDoCBhcHBsaXF1ZXIgKHRyaSwgcGFnZSBldCBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpZXMgcGFyIHBhZ2UpICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGF0ZTogRHNmclRhYmxlU3RhdGU7XG5cbiAgLyoqIEFmZmljaGVyIGxhIHBhZ2luYXRpb24gKi9cbiAgQElucHV0KCkgcGFnaW5hdGlvbjogYm9vbGVhbjtcblxuICAvKiogQWN0aXZlciBsZSBtb2RlIHNlcnZldXIgKHBhZ2luYXRpb24sIHRyaSBldCBzw6lsZWN0aW9uIGPDtHTDqSBzZXJ2ZXVyKSAqL1xuICBASW5wdXQoKSBzZXJ2ZXJTaWRlOiBib29sZWFuO1xuXG4gIC8qKiBDaG9peCBkZSB0YWlsbGUgZGUgcGFnZSAocGFyIGTDqWZhdXQgMTAsIDIwLCA1MCwgMTAwKS4gUGFzIGQnYWZmaWNoYWdlIGR1IHNlbGVjdCBzaSBub24gZMOpZmluaSAqL1xuICBASW5wdXQoKVxuICByb3dzUGVyUGFnZU9wdGlvbnM6IERzZnJPcHRpb25bXSA9IFtcbiAgICB7IGxhYmVsOiAnMTAgbGlnbmVzIHBhciBwYWdlJywgdmFsdWU6IDEwIH0sXG4gICAgeyBsYWJlbDogJzIwIGxpZ25lcyBwYXIgcGFnZScsIHZhbHVlOiAyMCB9LFxuICAgIHsgbGFiZWw6ICc1MCBsaWduZXMgcGFyIHBhZ2UnLCB2YWx1ZTogNTAgfSxcbiAgICB7IGxhYmVsOiAnMTAwIGxpZ25lcyBwYXIgcGFnZScsIHZhbHVlOiAxMDAgfSxcbiAgXTtcblxuICAvKiogQ2hhbmdlbWVudCBkZSBwYWdpbmF0aW9uIChwYWdlIGFmZmljaMOpZSBvdSB0YWlsbGUgZGUgcGFnZSkgKi9cbiAgQE91dHB1dCgpIHBhZ2luYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxEc2ZyVGFibGVQYWdpbmF0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgICByb3dzUGVyUGFnZTogbnVtYmVyO1xuICB9PigpO1xuXG4gIC8qKiBFdGF0IG1vZGlmacOpICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBzdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERzZnJUYWJsZVN0YXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RHNmclRhYmxlU3RhdGU+KCk7XG5cbiAgLyoqIEBpbnRlcm5hbCBUb3RhbCByw6lzdWx0YXRzICovXG4gIHRvdGFsRWxlbWVudHMgPSBzaWduYWwoMCk7XG5cbiAgLyoqIEBpbnRlcm5hbCBUb3RhbCBwYWdlcyAqL1xuICB0b3RhbFBhZ2U6IFNpZ25hbDxudW1iZXI+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnRvdGFsRWxlbWVudHMoKSA+IDAgfHwgIXRoaXMuc2VydmVyU2lkZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIC8qKiBAaW50ZXJuYWwgbHNpdGUgZGVzIMOpbMOpbWVudHMgc8OpbGVjdGlvbm5hYmxlcyAqL1xuICBzZWxlY3RhYmxlUm93czogYW55W107XG5cbiAgLyoqQGludGVybmFsIFNlcnZpY2UgZGF0YXRhYmxlIHBvdXIgcmFmcmFpY2hpc3NlbWVudCBkZXMgZG9ubsOpZXMgKi9cbiAgcHVibGljIGRhdGFUYWJsZVNlcnZpY2UgPSBpbmplY3QoRHNmckRhdGFUYWJsZVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgX3NlcnZlclJlc3VsdHNMZW5ndGg6IG51bWJlcjtcblxuICAvKiogQGludGVybmFsICovXG4gIGdldCBzZXJ2ZXJSZXN1bHRzTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlclJlc3VsdHNMZW5ndGg7XG4gIH1cblxuICAvKiogVG90YWwgZHUgbm9tYnJlIGRlIHLDqXN1bHRhdHMgKHV0aWxpc8OpIHNpIHNlcnZlclNpZGUpICovXG4gIEBJbnB1dCgpIHNldCBzZXJ2ZXJSZXN1bHRzTGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICBsZXQgY3VycmVudFBhZ2UgPSB0aGlzLmRhdGFUYWJsZVNlcnZpY2UudGFibGVTdGF0ZSgpLnBhZ2U7XG4gICAgdGhpcy5fc2VydmVyUmVzdWx0c0xlbmd0aCA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZSkge1xuICAgICAgdGhpcy50b3RhbEVsZW1lbnRzLnNldCh0aGlzLl9zZXJ2ZXJSZXN1bHRzTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFBhZ2UgPiB0aGlzLnRvdGFsUGFnZSgpICYmIHRoaXMudG90YWxQYWdlKCkgPiAwKSB7XG4gICAgICAvLyBzaSBsZSBub21icmUgZGUgcGFnZXMgZXN0IGluZsOpcmlldXIgYSBsYSBwYWdlIGNvdXJhbnRlLCBhbGxlciDDoCBsYSBkZXJuacOocmUgcGFnZVxuICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLnRvdGFsUGFnZSgpO1xuICAgICAgdGhpcy5vblBhZ2VTZWxlY3QoY3VycmVudFBhZ2UpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b3RhbFBhZ2UoKSA9PT0gMCAmJiBjdXJyZW50UGFnZSAhPT0gMSkge1xuICAgICAgLy8gc2kgdW5lIHNldWxlIHBhZ2UsIGFsbGVyIMOgIGxhIHByZW1pZXJlIHBhZ2VcbiAgICAgIHRoaXMub25QYWdlU2VsZWN0KDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBY2PDqHMgYXV4IG3DqXRob2RlcyBkZSByYWZyYWljaGlzc2VtZW50IGRlIGRvbm7DqWVzIGR1IHRhYmxlYXUgKi9cbiAgcHVibGljIGdldFNlcnZpY2UoKTogRHNmckRhdGFUYWJsZVNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmRhdGFUYWJsZVNlcnZpY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlbWVudCBkdSBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpcyBwYXIgcGFnZVxuICAgKiBjYWxjdWwgZGVzIHBhZ2VzIGV0IGNoYW5nZW1lbnQgZGVzIGxpZ25lcyBhZmZpY2jDqWVzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIG9uUm93c1BlclBhZ2VDaGFuZ2Uocm93c1BlclBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0YVRhYmxlU2VydmljZS51cGRhdGVQYWdpbmF0aW9uKHJvd3NQZXJQYWdlKTtcblxuICAgIGlmICh0aGlzLmRhdGFUYWJsZVNlcnZpY2UudGFibGVTdGF0ZSgpLnBhZ2UgPiB0aGlzLnRvdGFsUGFnZSgpKSB7XG4gICAgICB0aGlzLm9uUGFnZVNlbGVjdCh0aGlzLnRvdGFsUGFnZSgpKTsgLy8gYWxsZXIgYSBsYSBkZXJuaWVyZSBwYWdlIHNpIGN1cnJlbnRQYWdlID4gdG90YWxQYWdlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1IGNoYW5nZW1lbnQgZGUgcGFnZVxuICAgKiBAcGFyYW0gcGFnZSBudW3DqXJvIGRlIHBhZ2VcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgb25QYWdlU2VsZWN0KHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0YVRhYmxlU2VydmljZS5nb1RvUGFnZShwYWdlKTtcbiAgICB0aGlzLnBhZ2luYXRpb25DaGFuZ2UuZW1pdCh7IGN1cnJlbnRQYWdlOiBwYWdlLCByb3dzUGVyUGFnZTogdGhpcy5kYXRhVGFibGVTZXJ2aWNlLnRhYmxlU3RhdGUoKS5yb3dzUGVyUGFnZSB9KTtcbiAgfVxuXG4gIC8qKiBDYWxjdWwgZHUgdG90YWwgZGUgcGFnZSBzZWxvbiBsZSBub21icmUgdG90YWwgZGUgcsOpc3VsdGF0cyBldCBsZSBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpZXNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FsY3VsYXRlVG90YWxQYWdlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgcm93c1BlclBhZ2UgPSB0aGlzLmRhdGFUYWJsZVNlcnZpY2Uucm93c1BlclBhZ2UoKTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMudG90YWxFbGVtZW50cygpIC8gcm93c1BlclBhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcsOocyBjaGFuZ2VtZW50IGRlIHBhZ2VcbiAgICogTWlzZSBhIGpvdXIgZGVzIGRvbm7DqWVzIGFmZmljaMOpZXMgc2Vsb24gbCdvZmZzZXQgZXQgbGEgdGFpbGxlIGRlIHBhZ2VcbiAgICogQGludGVybmFsXG4gICAqICovXG4gIHByb3RlY3RlZCBwYWdpbmF0ZURhdGEocm93czogYW55LCBzdGF0ZTogRHNmclRhYmxlU3RhdGUpOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLnNlcnZlclNpZGUgJiYgdGhpcy50b3RhbEVsZW1lbnRzKCkgIT09IHJvd3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLnRvdGFsRWxlbWVudHMuc2V0KHJvd3MubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRlLnBhZ2UgfHwgIXN0YXRlLnJvd3NQZXJQYWdlKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBvZmZzZXQgPSAoc3RhdGUucGFnZSAtIDEpICogc3RhdGUucm93c1BlclBhZ2U7XG4gICAgcmV0dXJuIHJvd3Muc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzdGF0ZS5yb3dzUGVyUGFnZSk7XG4gIH1cbn1cbiJdfQ==