Skip to content

Commit 6b699c0

Browse files
author
Dipak Sarkar
committed
updated component and example
1 parent 1dac074 commit 6b699c0

File tree

4 files changed

+17
-22
lines changed

4 files changed

+17
-22
lines changed

docs/.vuepress/components/Example.vue

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@
88
:dark="false"
99
dense
1010
outlined
11+
v-model="price"
1112
>
12-
<template v-slot:control>
13+
<template v-slot:control="{ id, floatingLabel, value, emitValue }">
1314
<number
15+
:id="id"
1416
class="q-field__input"
15-
v-model="price"
17+
:value="value"
18+
@input="emitValue"
1619
v-bind="config"
20+
v-show="floatingLabel"
1721
/>
1822
</template>
1923
</q-field>
@@ -89,8 +93,8 @@ export default {
8993
priceDirective: null,
9094
priceUnmasked: 6789.10,
9195
config: {
92-
decimal: ',',
93-
separator: '.',
96+
decimal: '.',
97+
separator: ',',
9498
prefix: '$',
9599
suffix: ' %',
96100
precision: 2,

src/component.vue

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,6 @@ export default {
6262
unmaskedValue: null
6363
}
6464
},
65-
watch: {
66-
masked() {
67-
this.$emit('input', this.emittedValue)
68-
}
69-
},
7065
methods: {
7166
input({ target }) {
7267
this.maskedValue = target.value

src/core.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export function updateValue(el, vnode, { emit = true, force = false, clean = fal
7777

7878
const number = new NumberFormat(config).clean(clean)
7979
let masked = number.format(currentValue)
80-
let unmasked = number.unformat(currentValue)
80+
let unmasked = number.clean(true).unformat(currentValue)
8181

8282
// check value with in range max and min value
8383
if (clean) {
@@ -128,13 +128,6 @@ export function inputHandler(event) {
128128
positionFromEnd = Math.max(positionFromEnd, config.suffix.length)
129129
positionFromEnd = target.value.length - positionFromEnd
130130
positionFromEnd = Math.max(positionFromEnd, config.prefix.length + 1)
131-
const decimalPosition = target.value.indexOf(config.decimal)
132-
const diff = positionFromEnd - decimalPosition
133-
const maxLength = target.value.length - config.suffix.length
134-
const positionAfterDecimal = positionFromEnd + 1
135-
if (decimalPosition > 0 && diff > 0 && positionAfterDecimal <= maxLength) {
136-
positionFromEnd = positionAfterDecimal
137-
}
138131
updateCursor(target, positionFromEnd)
139132

140133
if (oldValue !== target.value) {

src/directive.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable prefer-object-spread */
12
import * as core from './core'
23
import defaults from './options'
34

@@ -6,10 +7,10 @@ const CONFIG_KEY = core.CONFIG_KEY
67
export default {
78
bind: (el, { value, modifiers }, vnode) => {
89
el = core.getInputElement(el)
9-
const config = core.normalizeConfig(defaults, Object.assign(value, modifiers))
10+
const config = Object.assign({}, defaults, value, modifiers)
1011
el[CONFIG_KEY] = { config }
1112
// set initial value
12-
core.updateValue(el, vnode, { force: config.prefill })
13+
core.updateValue(el, vnode, { force: config.prefill, clean: true })
1314
},
1415

1516
inserted: (el) => {
@@ -30,11 +31,13 @@ export default {
3031
// check decimal key and insert to current element
3132
// updated cursor position after format the value
3233
el.onkeydown = (e) => {
33-
if ([110, 190].includes(e.keyCode) || e.key === config.decimal) {
34+
if (([110, 190].includes(e.keyCode) || e.key === config.decimal) && !el.value.includes(config.decimal)) {
3435
e.preventDefault()
3536
el.setRangeText(config.decimal)
3637
el.dispatchEvent(new Event('input'))
3738
core.updateCursor(el, el.value.indexOf(config.decimal) + 1)
39+
} else if (([110, 190].includes(e.keyCode) || e.key === config.decimal) && el.value.includes(config.decimal)) {
40+
e.preventDefault()
3841
}
3942
}
4043

@@ -45,8 +48,8 @@ export default {
4548
el = core.getInputElement(el)
4649
if (value !== oldValue) {
4750
const { config } = el[CONFIG_KEY]
48-
el[CONFIG_KEY].config = core.normalizeConfig(config, Object.assign(value, modifiers))
49-
core.updateValue(el, vnode, { force: true })
51+
el[CONFIG_KEY].config = Object.assign({}, config, value, modifiers)
52+
core.updateValue(el, vnode, { force: true, clean: true })
5053
} else {
5154
core.updateValue(el, vnode)
5255
}

0 commit comments

Comments
 (0)