diff --git a/src/numberInput.ts b/src/numberInput.ts index 6126e52..7f26bba 100644 --- a/src/numberInput.ts +++ b/src/numberInput.ts @@ -1,5 +1,5 @@ import { DECIMAL_SEPARATORS, NumberFormat } from './numberFormat' -import { AutoDecimalModeNumberMask, DefaultNumberMask, NumberMask } from './numberMask' +import { AutoDecimalDigitsNumberMask, DefaultNumberMask, NumberMask } from './numberMask' import { NumberFormatStyle, NumberInputConstructorArgs, NumberInputOptions, NumberInputValue } from './api' import { count } from './utils' @@ -67,7 +67,7 @@ export class NumberInput { this.el.setAttribute('inputmode', 'decimal') } this.numberFormat = new NumberFormat(this.options) - this.numberMask = this.options.autoDecimalDigits ? new AutoDecimalModeNumberMask(this.numberFormat) : new DefaultNumberMask(this.numberFormat) + this.numberMask = this.options.autoDecimalDigits ? new AutoDecimalDigitsNumberMask(this.numberFormat) : new DefaultNumberMask(this.numberFormat) this.step = options.step && options.step > 0 ? Math.max(options.step, this.toFloat(1)) : this.toFloat(1) this.minValue = this.getMinValue() this.maxValue = this.getMaxValue() diff --git a/src/numberMask.ts b/src/numberMask.ts index a3e26d8..54010fb 100644 --- a/src/numberMask.ts +++ b/src/numberMask.ts @@ -58,7 +58,7 @@ export class DefaultNumberMask extends AbstractNumberMask implements NumberMask } } -export class AutoDecimalModeNumberMask extends AbstractNumberMask implements NumberMask { +export class AutoDecimalDigitsNumberMask extends AbstractNumberMask implements NumberMask { conformToMask(str: string, previousConformedValue = ''): string | { fractionDigits: string; numberValue: number } { if ( str === '' || @@ -71,10 +71,10 @@ export class AutoDecimalModeNumberMask extends AbstractNumberMask implements Num const numberValue = this.numberFormat.stripMinusSymbol(str) === '' ? -0 - : Number(`${negative ? '-' : ''}${removeLeadingZeros(this.numberFormat.onlyDigits(str))}`) / Math.pow(10, this.numberFormat.minimumFractionDigits) + : Number(`${negative ? '-' : ''}${removeLeadingZeros(this.numberFormat.onlyDigits(str))}`) / Math.pow(10, this.numberFormat.maximumFractionDigits) return { numberValue, - fractionDigits: numberValue.toFixed(this.numberFormat.minimumFractionDigits).slice(-this.numberFormat.minimumFractionDigits) + fractionDigits: numberValue.toFixed(this.numberFormat.maximumFractionDigits).slice(-this.numberFormat.maximumFractionDigits) } } } diff --git a/tests/unit/numberMask.spec.ts b/tests/unit/numberMask.spec.ts new file mode 100644 index 0000000..1d8f2c4 --- /dev/null +++ b/tests/unit/numberMask.spec.ts @@ -0,0 +1,12 @@ +import { AutoDecimalDigitsNumberMask } from '../../src/numberMask' +import { NumberFormat } from '../../src/numberFormat' +import { NumberFormatStyle } from '../../src' + +describe('AutoDecimalDigitsNumberMask', () => { + it('should use the maximumFractionDigits of the number format', () => { + const numberFormat = new NumberFormat({ formatStyle: NumberFormatStyle.Decimal, locale: 'en' }) + const autoDecimalDigitsNumberMask = new AutoDecimalDigitsNumberMask(numberFormat) + + expect(autoDecimalDigitsNumberMask.conformToMask('1000')).toEqual({ fractionDigits: '000', numberValue: 1 }) + }) +})