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