UNPKG

@jcbautistam/custom-table

Version:

Librería de tabla reutilizable con acciones, filtros, exportación y más.

55 lines 7.48 kB
import { Directive, ElementRef, ChangeDetectorRef, } from '@angular/core'; import { MatSelect } from '@angular/material/select'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/select"; export class AutoSelectOptionDirective { // constructor(private matSelect: MatSelect) { } // ngAfterViewInit() { // // Nos suscribimos a los cambios en las opciones // this.matSelect.options.changes.subscribe(() => { // if (this.matSelect.options.length === 1) { // // Si solo hay una opción, la seleccionamos // this.matSelect.writeValue(this.matSelect.options.first.value); // this.matSelect._onChange(this.matSelect.options.first.value); // } // }); // } constructor(matSelect, cdRef, el) { this.matSelect = matSelect; this.cdRef = cdRef; this.el = el; } ngAfterViewInit() { // Suscribirse a los cambios en las opciones del select this.matSelect.options.changes.subscribe(() => { this.autoSelectIfSingleOption(); }); // Evaluar inmediatamente después de cargar las opciones this.autoSelectIfSingleOption(); } autoSelectIfSingleOption() { if (this.matSelect.options.length === 1) { setTimeout(() => { const value = this.matSelect.options.first.value; this.el.nativeElement.value = value; this.matSelect.writeValue(value); // Emitir el valorChange para actualizar el estado this.matSelect.valueChange.emit(value); // Forzar la detección de cambios this.cdRef.detectChanges(); // Disparar manualmente el evento change en el select const event = new Event('selectionChange', { bubbles: true }); this.el.nativeElement.dispatchEvent(event); }); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: AutoSelectOptionDirective, deps: [{ token: i1.MatSelect }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: AutoSelectOptionDirective, selector: "[autoSelect]", ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: AutoSelectOptionDirective, decorators: [{ type: Directive, args: [{ selector: '[autoSelect]', }] }], ctorParameters: function () { return [{ type: i1.MatSelect }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0b1NlbGVjdE9wdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jdXN0b20tdGFibGUvc3JjL2xpYi9EaXJlY3RpdmVzL0F1dG9TZWxlY3RPcHRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsVUFBVSxFQUNWLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQUtyRCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLGdEQUFnRDtJQUVoRCxzQkFBc0I7SUFFdEIscURBQXFEO0lBQ3JELHFEQUFxRDtJQUVyRCxpREFBaUQ7SUFDakQsb0RBQW9EO0lBQ3BELHVFQUF1RTtJQUN2RSxzRUFBc0U7SUFDdEUsUUFBUTtJQUNSLFFBQVE7SUFDUixJQUFJO0lBRUosWUFDVSxTQUFvQixFQUNwQixLQUF3QixFQUN4QixFQUFjO1FBRmQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFZO0lBQ3JCLENBQUM7SUFFSixlQUFlO1FBQ2IsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzVDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDakQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRWpDLGtEQUFrRDtnQkFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxpQ0FBaUM7Z0JBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBRTNCLHFEQUFxRDtnQkFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzhHQWpEVSx5QkFBeUI7a0dBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFIckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERpcmVjdGl2ZSxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1thdXRvU2VsZWN0XScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvU2VsZWN0T3B0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgLy8gY29uc3RydWN0b3IocHJpdmF0ZSBtYXRTZWxlY3Q6IE1hdFNlbGVjdCkgeyB9XHJcblxyXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgLy8gICAvLyBOb3Mgc3VzY3JpYmltb3MgYSBsb3MgY2FtYmlvcyBlbiBsYXMgb3BjaW9uZXNcclxuICAvLyAgIHRoaXMubWF0U2VsZWN0Lm9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAvLyAgICAgaWYgKHRoaXMubWF0U2VsZWN0Lm9wdGlvbnMubGVuZ3RoID09PSAxKSB7XHJcbiAgLy8gICAgICAgLy8gU2kgc29sbyBoYXkgdW5hIG9wY2nDs24sIGxhIHNlbGVjY2lvbmFtb3NcclxuICAvLyAgICAgICB0aGlzLm1hdFNlbGVjdC53cml0ZVZhbHVlKHRoaXMubWF0U2VsZWN0Lm9wdGlvbnMuZmlyc3QudmFsdWUpO1xyXG4gIC8vICAgICAgIHRoaXMubWF0U2VsZWN0Ll9vbkNoYW5nZSh0aGlzLm1hdFNlbGVjdC5vcHRpb25zLmZpcnN0LnZhbHVlKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWF0U2VsZWN0OiBNYXRTZWxlY3QsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcclxuICApIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIFN1c2NyaWJpcnNlIGEgbG9zIGNhbWJpb3MgZW4gbGFzIG9wY2lvbmVzIGRlbCBzZWxlY3RcclxuICAgIHRoaXMubWF0U2VsZWN0Lm9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmF1dG9TZWxlY3RJZlNpbmdsZU9wdGlvbigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRXZhbHVhciBpbm1lZGlhdGFtZW50ZSBkZXNwdcOpcyBkZSBjYXJnYXIgbGFzIG9wY2lvbmVzXHJcbiAgICB0aGlzLmF1dG9TZWxlY3RJZlNpbmdsZU9wdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdXRvU2VsZWN0SWZTaW5nbGVPcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tYXRTZWxlY3Qub3B0aW9ucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm1hdFNlbGVjdC5vcHRpb25zLmZpcnN0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0LndyaXRlVmFsdWUodmFsdWUpO1xyXG5cclxuICAgICAgICAvLyBFbWl0aXIgZWwgdmFsb3JDaGFuZ2UgcGFyYSBhY3R1YWxpemFyIGVsIGVzdGFkb1xyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0LnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICAgIC8vIEZvcnphciBsYSBkZXRlY2Npw7NuIGRlIGNhbWJpb3NcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgLy8gRGlzcGFyYXIgbWFudWFsbWVudGUgZWwgZXZlbnRvIGNoYW5nZSBlbiBlbCBzZWxlY3RcclxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnc2VsZWN0aW9uQ2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pO1xyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==