diff --git a/projects/angular/src/lib/maskito.cva.ts b/projects/angular/src/lib/maskito.cva.ts index a38772b34..8a0080df8 100644 --- a/projects/angular/src/lib/maskito.cva.ts +++ b/projects/angular/src/lib/maskito.cva.ts @@ -20,8 +20,16 @@ import {MASKITO_DEFAULT_OPTIONS, MaskitoOptions, maskitoTransform} from '@maskit }, }) export class MaskitoCva { + private options?: MaskitoOptions | null; + @Input() - maskito: MaskitoOptions = MASKITO_DEFAULT_OPTIONS; + set maskito(options: MaskitoOptions | null | undefined) { + this.options = options; + } + + get maskito() { + return this.options ?? MASKITO_DEFAULT_OPTIONS; + } constructor(readonly accessor: DefaultValueAccessor) { const original = accessor.writeValue.bind(accessor); diff --git a/projects/angular/src/lib/maskito.directive.ts b/projects/angular/src/lib/maskito.directive.ts index 0c5af25a5..b69830ce2 100644 --- a/projects/angular/src/lib/maskito.directive.ts +++ b/projects/angular/src/lib/maskito.directive.ts @@ -23,7 +23,7 @@ export class MaskitoDirective implements OnDestroy, OnChanges { private maskedElement: Maskito | null = null; @Input() - maskito: MaskitoOptions = MASKITO_DEFAULT_OPTIONS; + maskito?: MaskitoOptions | null = MASKITO_DEFAULT_OPTIONS; @Input() maskitoElement: MaskitoElementPredicate | MaskitoElementPredicateAsync = @@ -47,7 +47,10 @@ export class MaskitoDirective implements OnDestroy, OnChanges { } this.ngZone.runOutsideAngular(() => { - this.maskedElement = new Maskito(predicateResult, this.maskito); + this.maskedElement = new Maskito( + predicateResult, + this.maskito ?? MASKITO_DEFAULT_OPTIONS, + ); }); } diff --git a/projects/angular/src/lib/maskito.pipe.ts b/projects/angular/src/lib/maskito.pipe.ts index 1781be337..25e91f354 100644 --- a/projects/angular/src/lib/maskito.pipe.ts +++ b/projects/angular/src/lib/maskito.pipe.ts @@ -5,7 +5,7 @@ import {MaskitoOptions, maskitoTransform} from '@maskito/core'; name: 'maskito', }) export class MaskitoPipe implements PipeTransform { - transform(value: unknown, maskitoOptions: MaskitoOptions): string { + transform(value: unknown, maskitoOptions?: MaskitoOptions | null): string { return maskitoTransform(String(value ?? ''), maskitoOptions); } } diff --git a/projects/angular/src/lib/maskito.spec.ts b/projects/angular/src/lib/maskito.spec.ts index e2fa631c1..34cddd0df 100644 --- a/projects/angular/src/lib/maskito.spec.ts +++ b/projects/angular/src/lib/maskito.spec.ts @@ -17,7 +17,7 @@ describe('Maskito Angular package', () => { }) class TestComponent { readonly control = new FormControl(); - readonly options: MaskitoOptions = { + options: MaskitoOptions | null = { mask: /^\d+(,\d{0,2})?$/, preprocessors: [ ({elementState, data}) => { @@ -58,6 +58,15 @@ describe('Maskito Angular package', () => { expect(getText()).toBe('12345,67'); expect(getValue()).toBe('12345,67'); + + fixture.componentInstance.options = null; + fixture.detectChanges(); + + fixture.componentInstance.control.setValue(123456.9999); + fixture.detectChanges(); + + expect(getText()).toBe('123456.9999'); + expect(getValue()).toBe('123456.9999'); }); function getText(): string { diff --git a/projects/core/src/lib/utils/transform.ts b/projects/core/src/lib/utils/transform.ts index 6771a3668..c3932c2ef 100644 --- a/projects/core/src/lib/utils/transform.ts +++ b/projects/core/src/lib/utils/transform.ts @@ -3,6 +3,10 @@ import {MASKITO_DEFAULT_OPTIONS} from '../constants'; import {ElementState, MaskitoOptions} from '../types'; import {maskitoPipe} from './pipe'; +export function maskitoTransform( + value: string, + maskitoOptions?: MaskitoOptions | null, +): string; export function maskitoTransform(value: string, maskitoOptions: MaskitoOptions): string; export function maskitoTransform( state: ElementState, @@ -11,7 +15,7 @@ export function maskitoTransform( export function maskitoTransform( valueOrState: ElementState | string, - maskitoOptions: MaskitoOptions, + maskitoOptions?: MaskitoOptions | null, ): ElementState | string { const options: Required = { ...MASKITO_DEFAULT_OPTIONS,