@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).
86 lines • 12.2 kB
JavaScript
import { Directive, HostBinding, Input, inject, } from '@angular/core';
import { DsfrCellCheckboxComponent } from '../component/cell-checkbox.component';
import { DsfrTableComponent } from '../table.component';
import * as i0 from "@angular/core";
/**
* Directive checkbox sur la première cellule (Selectionner/Déselectionner la ligne)
*/
export class DsfrSelectRowDirective {
constructor(element, viewContainer) {
this.element = element;
this.viewContainer = viewContainer;
this.fixedClass = true;
this.table = inject(DsfrTableComponent);
}
/** ajouter l'attribut scope si ce n'est pas un tableau complexe (pas de summary) */
get scope() {
return this.table.headerSummaryTemplate ? undefined : 'row';
}
ngOnChanges() {
if (!this.disableSelect && !this.componentRef) {
this.componentRef = this.viewContainer.createComponent(DsfrCellCheckboxComponent);
this.componentRef.instance.row = this.row;
this.componentRef.instance.checked = this.checked;
this.componentRef.instance.tableId = this.table.tableId;
this.subscription = this.addSubscriptionClickEvent();
this.element.nativeElement?.insertBefore(this.componentRef.location.nativeElement, this.element.nativeElement.firstChild);
}
else if (this.disableSelect && this.componentRef) {
// detruire la checkbox et le composant si le disabledSelect a été ajouté
this.simulateClick(false); // décocher la ligne
this.componentRef.location.nativeElement.remove();
this.componentRef.destroy();
this.componentRef = undefined;
}
}
/**
* Apres désélection/selection de toutes les cases a cocher
* Simuler le clic sur les cases à cocher pour lancer le script DSFR (appliquer le style sur la ligne)
* Interrompre l'ecoute de l'evenement pour ne pas lancer selectRow()
*/
simulateClick(toSelect) {
if (this.componentRef) {
this.subscription.unsubscribe(); // interrompre select row
const checkbox = this.componentRef.location?.nativeElement?.getElementsByTagName('input')[0];
if (checkbox && checkbox.checked !== toSelect) {
checkbox.click(); // simulation du clic uniquement si la valeur doit changer
}
this.subscription = this.addSubscriptionClickEvent(); // replacer l'evenement selectRow
}
}
ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
addSubscriptionClickEvent() {
//@ts-ignore
return this.componentRef.instance.selectRow.subscribe(() => {
this.table.selectRow(this.row);
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrSelectRowDirective, 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: DsfrSelectRowDirective, isStandalone: true, selector: "[dsfrSelectRow]", inputs: { row: ["dsfrSelectRow", "row"], disableSelect: "disableSelect" }, host: { properties: { "class.fr-cell--fixed": "this.fixedClass", "attr.aria-selected": "this.checked", "attr.scope": "this.scope" } }, usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrSelectRowDirective, decorators: [{
type: Directive,
args: [{
selector: '[dsfrSelectRow]',
standalone: true,
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }], propDecorators: { row: [{
type: Input,
args: ['dsfrSelectRow']
}], disableSelect: [{
type: Input
}], fixedClass: [{
type: HostBinding,
args: ['class.fr-cell--fixed']
}], checked: [{
type: HostBinding,
args: ['attr.aria-selected']
}], scope: [{
type: HostBinding,
args: ['attr.scope']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LXNlbGVjdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9kaXJlY3RpdmUvcm93LXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFFeEQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sc0JBQXNCO0lBYWpDLFlBQ1UsT0FBbUIsRUFDbkIsYUFBK0I7UUFEL0IsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFYSixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBTS9DLFVBQUssR0FBdUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFNNUQsQ0FBQztJQUVKLG9GQUFvRjtJQUNwRixJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQTRCLHlCQUF5QixDQUFDLENBQUM7WUFDN0csSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBRXhELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFFckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FDdEMsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25ELHlFQUF5RTtZQUN6RSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1lBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGFBQWEsQ0FBQyxRQUFpQjtRQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMseUJBQXlCO1lBQzFELE1BQU0sUUFBUSxHQUFxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0csSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDOUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsMERBQTBEO1lBQzlFLENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsaUNBQWlDO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBM0VVLHNCQUFzQjttR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4R0FFeUIsR0FBRztzQkFBMUIsS0FBSzt1QkFBQyxlQUFlO2dCQUNiLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRStCLFVBQVU7c0JBQTlDLFdBQVc7dUJBQUMsc0JBQXNCO2dCQUVBLE9BQU87c0JBQXpDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQWM3QixLQUFLO3NCQURSLFdBQVc7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEc2ZyQ2VsbENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50L2NlbGwtY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IERzZnJUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLmNvbXBvbmVudCc7XG5cbi8qKlxuICogRGlyZWN0aXZlIGNoZWNrYm94IHN1ciBsYSBwcmVtacOocmUgY2VsbHVsZSAoU2VsZWN0aW9ubmVyL0TDqXNlbGVjdGlvbm5lciBsYSBsaWduZSlcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RzZnJTZWxlY3RSb3ddJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmclNlbGVjdFJvd0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCdkc2ZyU2VsZWN0Um93Jykgcm93OiBhbnk7XG4gIEBJbnB1dCgpIGRpc2FibGVTZWxlY3Q6IGJvb2xlYW47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mci1jZWxsLS1maXhlZCcpIGZpeGVkQ2xhc3MgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJykgY2hlY2tlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8RHNmckNlbGxDaGVja2JveENvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSB0YWJsZTogRHNmclRhYmxlQ29tcG9uZW50ID0gaW5qZWN0KERzZnJUYWJsZUNvbXBvbmVudCk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgKSB7fVxuXG4gIC8qKiBham91dGVyIGwnYXR0cmlidXQgc2NvcGUgc2kgY2Ugbidlc3QgcGFzIHVuIHRhYmxlYXUgY29tcGxleGUgKHBhcyBkZSBzdW1tYXJ5KSAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc2NvcGUnKVxuICBnZXQgc2NvcGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuaGVhZGVyU3VtbWFyeVRlbXBsYXRlID8gdW5kZWZpbmVkIDogJ3Jvdyc7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVTZWxlY3QgJiYgIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8RHNmckNlbGxDaGVja2JveENvbXBvbmVudD4oRHNmckNlbGxDaGVja2JveENvbXBvbmVudCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5yb3cgPSB0aGlzLnJvdztcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XG5cbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRhYmxlSWQgPSB0aGlzLnRhYmxlLnRhYmxlSWQ7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5hZGRTdWJzY3JpcHRpb25DbGlja0V2ZW50KCk7XG5cbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50Py5pbnNlcnRCZWZvcmUoXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpcnN0Q2hpbGQsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kaXNhYmxlU2VsZWN0ICYmIHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAvLyBkZXRydWlyZSBsYSBjaGVja2JveCBldCBsZSBjb21wb3NhbnQgc2kgbGUgZGlzYWJsZWRTZWxlY3QgYSDDqXTDqSBham91dMOpXG4gICAgICB0aGlzLnNpbXVsYXRlQ2xpY2soZmFsc2UpOyAvLyBkw6ljb2NoZXIgbGEgbGlnbmVcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXByZXMgZMOpc8OpbGVjdGlvbi9zZWxlY3Rpb24gZGUgdG91dGVzIGxlcyBjYXNlcyBhIGNvY2hlclxuICAgKiBTaW11bGVyIGxlIGNsaWMgc3VyIGxlcyBjYXNlcyDDoCBjb2NoZXIgcG91ciBsYW5jZXIgbGUgc2NyaXB0IERTRlIgKGFwcGxpcXVlciBsZSBzdHlsZSBzdXIgbGEgbGlnbmUpXG4gICAqIEludGVycm9tcHJlIGwnZWNvdXRlIGRlIGwnZXZlbmVtZW50IHBvdXIgbmUgcGFzIGxhbmNlciBzZWxlY3RSb3coKVxuICAgKi9cbiAgcHVibGljIHNpbXVsYXRlQ2xpY2sodG9TZWxlY3Q6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IC8vIGludGVycm9tcHJlIHNlbGVjdCByb3dcbiAgICAgIGNvbnN0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5jb21wb25lbnRSZWYubG9jYXRpb24/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdO1xuICAgICAgaWYgKGNoZWNrYm94ICYmIGNoZWNrYm94LmNoZWNrZWQgIT09IHRvU2VsZWN0KSB7XG4gICAgICAgIGNoZWNrYm94LmNsaWNrKCk7IC8vIHNpbXVsYXRpb24gZHUgY2xpYyB1bmlxdWVtZW50IHNpIGxhIHZhbGV1ciBkb2l0IGNoYW5nZXJcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFkZFN1YnNjcmlwdGlvbkNsaWNrRXZlbnQoKTsgLy8gcmVwbGFjZXIgbCdldmVuZW1lbnQgc2VsZWN0Um93XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFN1YnNjcmlwdGlvbkNsaWNrRXZlbnQoKTogU3Vic2NyaXB0aW9uIHtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VsZWN0Um93LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnRhYmxlLnNlbGVjdFJvdyh0aGlzLnJvdyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==