UNPKG

@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
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