45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import { CommonModule } from '@angular/common';
|
|
import { Component, forwardRef, Input } from '@angular/core';
|
|
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
import { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';
|
|
import { BaseInputComponent } from '../base-input/base-input.component';
|
|
import { TooltipComponent } from '../tooltip/tooltip.component';
|
|
import { ValidationMessagesService } from '../validation-messages.service';
|
|
|
|
@Component({
|
|
selector: 'app-validated-input',
|
|
templateUrl: './validated-input.component.html',
|
|
standalone: true,
|
|
imports: [CommonModule, FormsModule, TooltipComponent, NgxMaskDirective],
|
|
providers: [
|
|
{
|
|
provide: NG_VALUE_ACCESSOR,
|
|
useExisting: forwardRef(() => ValidatedInputComponent),
|
|
multi: true,
|
|
},
|
|
provideNgxMask(),
|
|
],
|
|
})
|
|
export class ValidatedInputComponent extends BaseInputComponent {
|
|
@Input() kind: 'text' | 'number' | 'email' = 'text';
|
|
@Input() mask: string;
|
|
constructor(validationMessagesService: ValidationMessagesService) {
|
|
super(validationMessagesService);
|
|
}
|
|
|
|
onInputChange(event: string | number): void {
|
|
if (this.kind === 'number') {
|
|
if (typeof event === 'number') {
|
|
this.value = event;
|
|
} else {
|
|
this.value = parseFloat(event);
|
|
}
|
|
} else {
|
|
const text = event as string;
|
|
this.value = text?.length > 0 ? event : null;
|
|
}
|
|
// this.value = event?.length > 0 ? (this.kind === 'number' ? parseFloat(event) : event) : null;
|
|
this.onChange(this.value);
|
|
}
|
|
}
|