import { Directive } from '@angular/core'; import { AbstractControl, UntypedFormControl, ValidationErrors, Validator, ValidatorFn } from '@angular/forms'; import { CommonUtils } from '../commons/commonUtils'; @Directive({ // eslint-disable-next-line @angular-eslint/directive-selector selector: '[rutValidator]', standalone: true }) export class RutValidator implements Validator { validate(c: UntypedFormControl): ValidationErrors | null { return RutValidator.validateRut(c); } static validateRut(control: UntypedFormControl): ValidationErrors | null{ if (control.value && !CommonUtils.validRut(CommonUtils.formatRut(control.value, true))) { return { 'invalidRut' : control.value }; } return null; } validateRutWithPartyType(tipo: string): ValidatorFn | null{ return (control: AbstractControl): (ValidationErrors | null) => { if (control.value && !CommonUtils.validRut(CommonUtils.formatRut(control.value, true))) { return { 'invalidRut' : control.value }; } else if (control.value && tipo) { const formattedRut = CommonUtils.formatRut(control.value, false); const intRut = parseInt(formattedRut.substring(0,formattedRut.indexOf('-'))); if (tipo === 'ORGANIZATION' && intRut < 50000000) { return { 'invalidRutForType' : control.value }; } else if (tipo === 'PERSON' && intRut > 50000000) { return { 'invalidRutForType' : control.value }; } } return null; }; } }