Skip to content

Commit b03a52d

Browse files
authored
Fix x-mask triggering update requests on load (#4481)
* Add fix * Add a test
1 parent 36110b6 commit b03a52d

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

packages/mask/src/index.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,16 @@ export default function (Alpine) {
4040
}
4141

4242
// Override x-model's initial value...
43-
if (el._x_model) el._x_model.set(el.value)
43+
if (el._x_model) {
44+
// If the x-model value is the same, don't override it as that will trigger updates...
45+
if (el._x_model.get() === el.value) return
46+
47+
// If the x-model value is `null` and the input value is an empty
48+
// string, don't override it as that will trigger updates...
49+
if (el._x_model.get() === null && el.value === '') return
50+
51+
el._x_model.set(el.value)
52+
}
4453
})
4554

4655
const controller = new AbortController()

tests/cypress/integration/plugins/mask.spec.js

+15
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,21 @@ test('x-mask with x-model with initial value',
8989
},
9090
)
9191

92+
test('x-mask with x-model if initial value is null it should remain null',
93+
[html`
94+
<div x-data="{ value: null }">
95+
<input x-mask="(999) 999-9999" x-model="value" id="1">
96+
<input id="2" x-model="value">
97+
<span id="3" x-text="value === null ? 'NULL' : value"></span>
98+
</div>
99+
`],
100+
({ get }) => {
101+
get('#1').should(haveValue(''))
102+
get('#2').should(haveValue(''))
103+
get('#3').contains('NULL')
104+
},
105+
)
106+
92107
test('x-mask with a falsy input',
93108
[html`<input x-data x-mask="">`],
94109
({ get }) => {

0 commit comments

Comments
 (0)