File
Implements
upperCaseControl
|
Default value : input<UntypedFormControl | undefined>(undefined)
|
|
import { Directive, effect, input, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { UntypedFormControl } from '@angular/forms';
@Directive({
selector: '[dfUpperCase]',
standalone: false
})
export class DfUppercaseDirective implements OnDestroy {
private componentDestroyed$ = new Subject<void>();
upperCaseControl = input<UntypedFormControl | undefined>(undefined);
constructor() {
effect(() => {
const control = this.upperCaseControl();
this.handleControlValue(control);
});
}
ngOnDestroy(): void {
this.componentDestroyed$.next();
this.componentDestroyed$.unsubscribe();
}
private handleControlValue(control: UntypedFormControl | undefined): void {
if (!control) {
return;
}
control.valueChanges
.pipe(
filter((value) => typeof value === 'string'),
filter((value) => !!value),
takeUntil(this.componentDestroyed$)
)
.subscribe((value) => {
control.setValue((value as string).toUpperCase(), { emitEvent: false });
});
}
}