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).

73 lines 10.7 kB
import { Directive, HostBinding, inject, } from '@angular/core'; import { DsfrCellCheckboxComponent } from '../component/cell-checkbox.component'; import { DsfrTableComponent } from '../table.component'; import * as i0 from "@angular/core"; /** * Directive pour la checkbox d'en-tête de colonne (tout sélectionner/déselectionner) */ export class DsfrSelectAllDirective { constructor(element, viewContainer) { this.element = element; this.viewContainer = viewContainer; this.fixedClass = true; this.table = inject(DsfrTableComponent); } // Ajout de l'attribut scope si ce n'est pas un tableau complexe (pas de summary) get scope() { return this.table.headerSummaryTemplate ? null : 'col'; } ngOnInit() { this.componentRef = this.viewContainer.createComponent(DsfrCellCheckboxComponent); this.componentRef.instance.row = { index: 'all' }; this.componentRef.instance.showSelectAll = true; this.componentRef.instance.tableId = this.table.tableId; this.subscription1$ = this.addSubscriptionClickEvent(); /** Ecoute de l'evenement isAllChecked : toutes les cases sont cochées ou une seule case est décochée */ this.subscription2$ = this.table.isAllChecked$.subscribe((isAllChecked) => { this.simulateClick(isAllChecked); }); this.element.nativeElement?.appendChild(this.componentRef.location.nativeElement); } /** * Apres désélection/selection d'une case * Simuler le clic sur la case à cocher globale si la valeur doit changer * Interrompre l'ecoute de l'evenement pour ne pas lancer toggleshowSelectAll() */ simulateClick(checked) { this.subscription1$.unsubscribe(); // interrompre select row const checkbox = this.componentRef.location?.nativeElement?.getElementsByTagName('input')[0]; if (checkbox && checkbox.checked !== checked) { checkbox.click(); // simulation du clic uniquement si la valeur doit changer } this.subscription1$ = this.addSubscriptionClickEvent(); // replacer l'evenement selectRow } ngOnDestroy() { if (this.subscription1$) { this.subscription1$.unsubscribe(); } if (this.subscription2$) { this.subscription2$.unsubscribe(); } } addSubscriptionClickEvent() { return this.componentRef.instance.selectRow.subscribe((checked) => { this.table.toggleshowSelectAll(checked); }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrSelectAllDirective, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DsfrSelectAllDirective, isStandalone: true, selector: "[dsfrSelectAll]", host: { properties: { "class.fr-cell--fixed": "this.fixedClass", "attr.scope": "this.scope" } }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrSelectAllDirective, decorators: [{ type: Directive, args: [{ selector: '[dsfrSelectAll]', standalone: true, }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }], propDecorators: { fixedClass: [{ type: HostBinding, args: ['class.fr-cell--fixed'] }], scope: [{ type: HostBinding, args: ['attr.scope'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXNlbGVjdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9kaXJlY3RpdmUvaGVhZGVyLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxXQUFXLEVBSVgsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUV4RDs7R0FFRztBQUtILE1BQU0sT0FBTyxzQkFBc0I7SUFTakMsWUFDVSxPQUFtQixFQUNuQixhQUErQjtRQUQvQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQVZKLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFJL0MsVUFBSyxHQUF1QixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQU81RCxDQUFDO0lBRUosaUZBQWlGO0lBQ2pGLElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekQsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUE0Qix5QkFBeUIsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRWhELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRXZELHdHQUF3RztRQUN4RyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3hFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsT0FBZ0I7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QjtRQUU1RCxNQUFNLFFBQVEsR0FBcUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9HLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDN0MsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsMERBQTBEO1FBQzlFLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsaUNBQWlDO0lBQzNGLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBbEVVLHNCQUFzQjttR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4R0FFc0MsVUFBVTtzQkFBOUMsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBZS9CLEtBQUs7c0JBRFIsV0FBVzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRHNmckNlbGxDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudC9jZWxsLWNoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEc2ZyVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS5jb21wb25lbnQnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSBwb3VyIGxhIGNoZWNrYm94IGQnZW4tdMOqdGUgZGUgY29sb25uZSAodG91dCBzw6lsZWN0aW9ubmVyL2TDqXNlbGVjdGlvbm5lcilcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RzZnJTZWxlY3RBbGxdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmclNlbGVjdEFsbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mci1jZWxsLS1maXhlZCcpIGZpeGVkQ2xhc3MgPSB0cnVlO1xuXG4gIHB1YmxpYyBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxEc2ZyQ2VsbENoZWNrYm94Q29tcG9uZW50PjtcblxuICBwcml2YXRlIHRhYmxlOiBEc2ZyVGFibGVDb21wb25lbnQgPSBpbmplY3QoRHNmclRhYmxlQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24xJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjIkOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgKSB7fVxuXG4gIC8vIEFqb3V0IGRlIGwnYXR0cmlidXQgc2NvcGUgc2kgY2Ugbidlc3QgcGFzIHVuIHRhYmxlYXUgY29tcGxleGUgKHBhcyBkZSBzdW1tYXJ5KVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuc2NvcGUnKVxuICBnZXQgc2NvcGUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuaGVhZGVyU3VtbWFyeVRlbXBsYXRlID8gbnVsbCA6ICdjb2wnO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEc2ZyQ2VsbENoZWNrYm94Q29tcG9uZW50PihEc2ZyQ2VsbENoZWNrYm94Q29tcG9uZW50KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5yb3cgPSB7IGluZGV4OiAnYWxsJyB9O1xuICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnNob3dTZWxlY3RBbGwgPSB0cnVlO1xuXG4gICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudGFibGVJZCA9IHRoaXMudGFibGUudGFibGVJZDtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbjEkID0gdGhpcy5hZGRTdWJzY3JpcHRpb25DbGlja0V2ZW50KCk7XG5cbiAgICAvKiogRWNvdXRlIGRlIGwnZXZlbmVtZW50IGlzQWxsQ2hlY2tlZCA6IHRvdXRlcyBsZXMgY2FzZXMgc29udCBjb2Now6llcyBvdSB1bmUgc2V1bGUgY2FzZSBlc3QgZMOpY29jaMOpZSAqL1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uMiQgPSB0aGlzLnRhYmxlLmlzQWxsQ2hlY2tlZCQuc3Vic2NyaWJlKChpc0FsbENoZWNrZWQpID0+IHtcbiAgICAgIHRoaXMuc2ltdWxhdGVDbGljayhpc0FsbENoZWNrZWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LmFwcGVuZENoaWxkKHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcmVzIGTDqXPDqWxlY3Rpb24vc2VsZWN0aW9uIGQndW5lIGNhc2VcbiAgICogU2ltdWxlciBsZSBjbGljIHN1ciBsYSBjYXNlIMOgIGNvY2hlciBnbG9iYWxlIHNpIGxhIHZhbGV1ciBkb2l0IGNoYW5nZXJcbiAgICogSW50ZXJyb21wcmUgbCdlY291dGUgZGUgbCdldmVuZW1lbnQgcG91ciBuZSBwYXMgbGFuY2VyIHRvZ2dsZXNob3dTZWxlY3RBbGwoKVxuICAgKi9cbiAgcHVibGljIHNpbXVsYXRlQ2xpY2soY2hlY2tlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uMSQudW5zdWJzY3JpYmUoKTsgLy8gaW50ZXJyb21wcmUgc2VsZWN0IHJvd1xuXG4gICAgY29uc3QgY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbj8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07XG5cbiAgICBpZiAoY2hlY2tib3ggJiYgY2hlY2tib3guY2hlY2tlZCAhPT0gY2hlY2tlZCkge1xuICAgICAgY2hlY2tib3guY2xpY2soKTsgLy8gc2ltdWxhdGlvbiBkdSBjbGljIHVuaXF1ZW1lbnQgc2kgbGEgdmFsZXVyIGRvaXQgY2hhbmdlclxuICAgIH1cblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uMSQgPSB0aGlzLmFkZFN1YnNjcmlwdGlvbkNsaWNrRXZlbnQoKTsgLy8gcmVwbGFjZXIgbCdldmVuZW1lbnQgc2VsZWN0Um93XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uMSQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uMSQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uMiQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uMiQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFN1YnNjcmlwdGlvbkNsaWNrRXZlbnQoKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VsZWN0Um93LnN1YnNjcmliZSgoY2hlY2tlZCkgPT4ge1xuICAgICAgdGhpcy50YWJsZS50b2dnbGVzaG93U2VsZWN0QWxsKGNoZWNrZWQpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=