@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).
103 lines • 12.2 kB
JavaScript
import { computed, Injectable, signal } from '@angular/core';
import { BehaviorSubject, Subject } from 'rxjs';
import { updateOrAddProperty } from '../table.utils';
import * as i0 from "@angular/core";
/**
* Service pour la datatable
* Gestion du rafraichissement des données
*/
export class DsfrDataTableService {
/* eslint-enable @typescript-eslint/member-ordering */
constructor() {
/* eslint-disable @typescript-eslint/member-ordering */
/** @internal Etat du tableau (tri, page courante, page size) */
this.tableState = computed(() => {
return {
page: this._currentPage(),
rowsPerPage: this._rowsPerPage(),
sort: this._activeSort(),
};
});
/** Page courante */
this._currentPage = signal(1);
/** Tri courant */
this._activeSort = signal(null);
this.activeSort = this._activeSort.asReadonly();
/** Nombre de lignes à afficher par page */
this._rowsPerPage = signal(10);
this.rowsPerPage = this._rowsPerPage.asReadonly();
/** Données de la table */
this._dataSubject = new Subject();
this.data$ = this._dataSubject.asObservable();
/** Options de la table */
this._tableOptionsSubject = new BehaviorSubject({});
this.tableOptions$ = this._tableOptionsSubject.asObservable();
/** Lignes sélectionnées */
this._selectionSubject = new Subject();
this.selection$ = this._selectionSubject.asObservable();
}
/**
* Mise à jour des données avec rafraichissement du tableau
* @param newData nouvelles données du tableau
* @returns void
*/
refreshData(newData) {
this.setData(newData);
}
/**
* Aller à une page donnée
* @param page
*/
goToPage(page) {
this._currentPage.set(page);
}
updatePagination(rowsPerPage) {
this._rowsPerPage.set(rowsPerPage);
}
/**
* Trier la table
* @param sort DsfrSortColumn
*/
sortTable(sort) {
this._activeSort.set(sort);
}
/**
* Mise à jour de l'état d'affichage de la table (tri, page courante, nombre de lignes par page)
* @param state
*/
setState(state) {
this._activeSort.set(state.sort ?? null);
this._currentPage.set(state.page ?? 1);
this._rowsPerPage.set(state.rowsPerPage ?? 10);
}
/**
* Met à jour une propriété spécifique de l'objet `tableOptions`.
* @param key Le nom de la propriété de l'interface `tableOptions` à mettre à jour.
* @param newValue La nouvelle valeur de la propriété spécifiée par `key`
* @returns void
*/
updateTableOptions(key, newValue) {
const newTableOptions = updateOrAddProperty(this._tableOptionsSubject.getValue(), key, newValue);
this.setTableOptions(newTableOptions);
}
/**
* Sélectionner les lignes programmatiquement
* @param selectedRows la liste des identifiants des lignes qui seront sélectionnées
**/
setSelectedRows(selectedRows) {
this._selectionSubject.next(selectedRows);
}
/** @internal */
setTableOptions(tableOptions) {
this._tableOptionsSubject.next(tableOptions);
}
setData(data) {
this._dataSubject.next(data);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrDataTableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrDataTableService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrDataTableService, decorators: [{
type: Injectable
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9zZXJ2aWNlL2RhdGF0YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFVLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXJEOzs7R0FHRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFtQy9CLHNEQUFzRDtJQUV0RDtRQXBDQSx1REFBdUQ7UUFFdkQsZ0VBQWdFO1FBQ3ZELGVBQVUsR0FBMkIsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxRCxPQUFPO2dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7YUFDekIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ0gsaUJBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsa0JBQWtCO1FBQ0QsZ0JBQVcsR0FBMEMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFFLGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXBELDJDQUEyQztRQUMxQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdEQsMEJBQTBCO1FBQ1QsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO1FBQzVDLFVBQUssR0FBc0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVyRSwwQkFBMEI7UUFDVCx5QkFBb0IsR0FBc0MsSUFBSSxlQUFlLENBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzVHLGtCQUFhLEdBQWlDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoRywyQkFBMkI7UUFDVixzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO1FBQ2pELGVBQVUsR0FBc0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBSWhFLENBQUM7SUFFaEI7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxPQUFjO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUFDLElBQW9CO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxRQUFRLENBQUMsS0FBcUI7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksa0JBQWtCLENBQUMsR0FBMkIsRUFBRSxRQUFhO1FBQ2xFLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztRQUdJO0lBQ0csZUFBZSxDQUFDLFlBQW1CO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGdCQUFnQjtJQUNULGVBQWUsQ0FBQyxZQUE4QjtRQUNuRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDOytHQXhHVSxvQkFBb0I7bUhBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBJbmplY3RhYmxlLCBTaWduYWwsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRHNmclNvcnRDb2x1bW4sIERzZnJUYWJsZU9wdGlvbnMsIERzZnJUYWJsZVN0YXRlIH0gZnJvbSAnLi4vdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgdXBkYXRlT3JBZGRQcm9wZXJ0eSB9IGZyb20gJy4uL3RhYmxlLnV0aWxzJztcblxuLyoqXG4gKiBTZXJ2aWNlIHBvdXIgbGEgZGF0YXRhYmxlXG4gKiBHZXN0aW9uIGR1IHJhZnJhaWNoaXNzZW1lbnQgZGVzIGRvbm7DqWVzXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEc2ZyRGF0YVRhYmxlU2VydmljZSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cblxuICAvKiogQGludGVybmFsIEV0YXQgZHUgdGFibGVhdSAodHJpLCBwYWdlIGNvdXJhbnRlLCBwYWdlIHNpemUpICovXG4gIHJlYWRvbmx5IHRhYmxlU3RhdGU6IFNpZ25hbDxEc2ZyVGFibGVTdGF0ZT4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2U6IHRoaXMuX2N1cnJlbnRQYWdlKCksXG4gICAgICByb3dzUGVyUGFnZTogdGhpcy5fcm93c1BlclBhZ2UoKSxcbiAgICAgIHNvcnQ6IHRoaXMuX2FjdGl2ZVNvcnQoKSxcbiAgICB9O1xuICB9KTtcblxuICAvKiogUGFnZSBjb3VyYW50ZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50UGFnZSA9IHNpZ25hbCgxKTtcblxuICAvKiogVHJpIGNvdXJhbnQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlU29ydDogV3JpdGFibGVTaWduYWw8RHNmclNvcnRDb2x1bW4gfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgcmVhZG9ubHkgYWN0aXZlU29ydCA9IHRoaXMuX2FjdGl2ZVNvcnQuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBOb21icmUgZGUgbGlnbmVzIMOgIGFmZmljaGVyIHBhciBwYWdlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jvd3NQZXJQYWdlID0gc2lnbmFsKDEwKTtcbiAgcmVhZG9ubHkgcm93c1BlclBhZ2UgPSB0aGlzLl9yb3dzUGVyUGFnZS5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIERvbm7DqWVzIGRlIGxhIHRhYmxlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55W10+KCk7XG4gIHJlYWRvbmx5IGRhdGEkOiBPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMuX2RhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBPcHRpb25zIGRlIGxhIHRhYmxlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlT3B0aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxEc2ZyVGFibGVPcHRpb25zPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RHNmclRhYmxlT3B0aW9ucz4oe30pO1xuICByZWFkb25seSB0YWJsZU9wdGlvbnMkOiBPYnNlcnZhYmxlPERzZnJUYWJsZU9wdGlvbnM+ID0gdGhpcy5fdGFibGVPcHRpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvKiogTGlnbmVzIHPDqWxlY3Rpb25uw6llcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55W10+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbiQ6IE9ic2VydmFibGU8YW55W10+ID0gdGhpcy5fc2VsZWN0aW9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIE1pc2Ugw6Agam91ciBkZXMgZG9ubsOpZXMgYXZlYyByYWZyYWljaGlzc2VtZW50IGR1IHRhYmxlYXVcbiAgICogQHBhcmFtIG5ld0RhdGEgbm91dmVsbGVzIGRvbm7DqWVzIGR1IHRhYmxlYXVcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHJlZnJlc2hEYXRhKG5ld0RhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRhKG5ld0RhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbGVyIMOgIHVuZSBwYWdlIGRvbm7DqWVcbiAgICogQHBhcmFtIHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50UGFnZS5zZXQocGFnZSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUGFnaW5hdGlvbihyb3dzUGVyUGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcm93c1BlclBhZ2Uuc2V0KHJvd3NQZXJQYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmllciBsYSB0YWJsZVxuICAgKiBAcGFyYW0gc29ydCBEc2ZyU29ydENvbHVtblxuICAgKi9cbiAgcHVibGljIHNvcnRUYWJsZShzb3J0OiBEc2ZyU29ydENvbHVtbik6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZVNvcnQuc2V0KHNvcnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pc2Ugw6Agam91ciBkZSBsJ8OpdGF0IGQnYWZmaWNoYWdlIGRlIGxhIHRhYmxlICh0cmksIHBhZ2UgY291cmFudGUsIG5vbWJyZSBkZSBsaWduZXMgcGFyIHBhZ2UpXG4gICAqIEBwYXJhbSBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHNldFN0YXRlKHN0YXRlOiBEc2ZyVGFibGVTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZVNvcnQuc2V0KHN0YXRlLnNvcnQgPz8gbnVsbCk7XG4gICAgdGhpcy5fY3VycmVudFBhZ2Uuc2V0KHN0YXRlLnBhZ2UgPz8gMSk7XG4gICAgdGhpcy5fcm93c1BlclBhZ2Uuc2V0KHN0YXRlLnJvd3NQZXJQYWdlID8/IDEwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXQgw6Agam91ciB1bmUgcHJvcHJpw6l0w6kgc3DDqWNpZmlxdWUgZGUgbCdvYmpldCBgdGFibGVPcHRpb25zYC5cbiAgICogQHBhcmFtIGtleSBMZSBub20gZGUgbGEgcHJvcHJpw6l0w6kgZGUgbCdpbnRlcmZhY2UgYHRhYmxlT3B0aW9uc2Agw6AgbWV0dHJlIMOgIGpvdXIuXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSBMYSBub3V2ZWxsZSB2YWxldXIgZGUgbGEgcHJvcHJpw6l0w6kgc3DDqWNpZmnDqWUgcGFyIGBrZXlgXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVUYWJsZU9wdGlvbnMoa2V5OiBrZXlvZiBEc2ZyVGFibGVPcHRpb25zLCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgbmV3VGFibGVPcHRpb25zID0gdXBkYXRlT3JBZGRQcm9wZXJ0eSh0aGlzLl90YWJsZU9wdGlvbnNTdWJqZWN0LmdldFZhbHVlKCksIGtleSwgbmV3VmFsdWUpO1xuICAgIHRoaXMuc2V0VGFibGVPcHRpb25zKG5ld1RhYmxlT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU8OpbGVjdGlvbm5lciBsZXMgbGlnbmVzIHByb2dyYW1tYXRpcXVlbWVudFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRSb3dzIGxhIGxpc3RlIGRlcyBpZGVudGlmaWFudHMgZGVzIGxpZ25lcyBxdWkgc2Vyb250IHPDqWxlY3Rpb25uw6llc1xuICAgKiovXG4gIHB1YmxpYyBzZXRTZWxlY3RlZFJvd3Moc2VsZWN0ZWRSb3dzOiBhbnlbXSkge1xuICAgIHRoaXMuX3NlbGVjdGlvblN1YmplY3QubmV4dChzZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgc2V0VGFibGVPcHRpb25zKHRhYmxlT3B0aW9uczogRHNmclRhYmxlT3B0aW9ucykge1xuICAgIHRoaXMuX3RhYmxlT3B0aW9uc1N1YmplY3QubmV4dCh0YWJsZU9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXRhKGRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YVN1YmplY3QubmV4dChkYXRhKTtcbiAgfVxufVxuIl19