@jcbautistam/custom-table
Version:
Librería de tabla reutilizable con acciones, filtros, exportación y más.
55 lines • 7.48 kB
JavaScript
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==