Skip to content

Commit 873f629

Browse files
committed
fix(use-mask): changing mask breaks the model #18128
1 parent 211a131 commit 873f629

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

ui/playground/src/pages/form/input-mask.vue

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,16 @@
33
<div style="max-width: 600px" class="q-gutter-y-md">
44
<h1>Input Mask</h1>
55

6-
<div>Model: {{ text1 }}</div>
7-
<q-input mask="date" v-model="text1" filled hint="Date ####/##/##" label="Label" />
6+
<div>Model: {{ text1 }} | {{ maskedOrNotValue }}</div>
7+
<q-toggle v-model="maskedOrNot" @update:model-value="toggleMask" label="Masked or not" />
8+
<q-input :mask="maskedOrNotValue" v-model="text1" filled hint="Date ####/##/##" label="Label" />
9+
<q-input
10+
filled
11+
v-model="id"
12+
label="Special ID"
13+
mask="#:0:0:##"
14+
hint="Mask: #:0:0:##"
15+
></q-input>
816

917
<div>Model: {{ text2 }}</div>
1018
<q-input mask="((###) ### - ####)" v-model="text2" filled hint="Phone ((###) ### - ####)" counter label="Label" />
@@ -108,7 +116,10 @@
108116
export default {
109117
data () {
110118
return {
111-
text1: '',
119+
maskedOrNot: true,
120+
maskedOrNotValue: '##/##/####',
121+
text1: '12/12/2023',
122+
id: null,
112123
text2: '',
113124
text3: '',
114125
text4: '',
@@ -163,6 +174,12 @@ export default {
163174
return '###.#.###'
164175
}
165176
}
177+
},
178+
179+
methods: {
180+
toggleMask () {
181+
this.maskedOrNotValue = this.maskedOrNotValue ? '' : '##/##/####'
182+
}
166183
}
167184
}
168185
</script>

ui/src/components/input/use-mask.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ export default function (props, emit, emitValue, inputRef) {
226226
updateMaskInternalsFlag === true && updateMaskInternals()
227227

228228
const
229-
preMasked = maskValue(unmasked),
229+
preMasked = maskValue(unmasked, updateMaskInternalsFlag),
230230
masked = props.fillMask !== false
231231
? fillWithMask(preMasked)
232232
: preMasked,
@@ -481,11 +481,11 @@ export default function (props, emit, emitValue, inputRef) {
481481
}
482482
}
483483

484-
function maskValue (val) {
484+
function maskValue (val, updateMaskInternalsFlag) {
485485
if (val === void 0 || val === null || val === '') { return '' }
486486

487487
if (props.reverseFillMask === true) {
488-
return maskValueReverse(val)
488+
return maskValueReverse(val, updateMaskInternalsFlag)
489489
}
490490

491491
const mask = computedMask
@@ -499,6 +499,10 @@ export default function (props, emit, emitValue, inputRef) {
499499

500500
if (typeof maskDef === 'string') {
501501
output += maskDef
502+
503+
if (updateMaskInternalsFlag === true && valChar === maskDef) {
504+
valIndex++
505+
}
502506
}
503507
else if (valChar !== void 0 && maskDef.regex.test(valChar)) {
504508
output += maskDef.transform !== void 0
@@ -514,7 +518,7 @@ export default function (props, emit, emitValue, inputRef) {
514518
return output
515519
}
516520

517-
function maskValueReverse (val) {
521+
function maskValueReverse (val, updateMaskInternalsFlag) {
518522
const
519523
mask = computedMask,
520524
firstTokenIndex = maskMarked.indexOf(MARKER)
@@ -528,6 +532,10 @@ export default function (props, emit, emitValue, inputRef) {
528532

529533
if (typeof maskDef === 'string') {
530534
output = maskDef + output
535+
536+
if (updateMaskInternalsFlag === true && valChar === maskDef) {
537+
valIndex--
538+
}
531539
}
532540
else if (valChar !== void 0 && maskDef.regex.test(valChar)) {
533541
do {

0 commit comments

Comments
 (0)