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

86 lines 12.2 kB
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==