Skip to content

Commit

Permalink
Fix x-mask triggering update requests on load (alpinejs#4481)
Browse files Browse the repository at this point in the history
* Add fix

* Add a test
  • Loading branch information
joshhanley authored Dec 23, 2024
1 parent 36110b6 commit b03a52d
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
11 changes: 10 additions & 1 deletion packages/mask/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,16 @@ export default function (Alpine) {
}

// Override x-model's initial value...
if (el._x_model) el._x_model.set(el.value)
if (el._x_model) {
// If the x-model value is the same, don't override it as that will trigger updates...
if (el._x_model.get() === el.value) return

// If the x-model value is `null` and the input value is an empty
// string, don't override it as that will trigger updates...
if (el._x_model.get() === null && el.value === '') return

el._x_model.set(el.value)
}
})

const controller = new AbortController()
Expand Down
15 changes: 15 additions & 0 deletions tests/cypress/integration/plugins/mask.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,21 @@ test('x-mask with x-model with initial value',
},
)

test('x-mask with x-model if initial value is null it should remain null',
[html`
<div x-data="{ value: null }">
<input x-mask="(999) 999-9999" x-model="value" id="1">
<input id="2" x-model="value">
<span id="3" x-text="value === null ? 'NULL' : value"></span>
</div>
`],
({ get }) => {
get('#1').should(haveValue(''))
get('#2').should(haveValue(''))
get('#3').contains('NULL')
},
)

test('x-mask with a falsy input',
[html`<input x-data x-mask="">`],
({ get }) => {
Expand Down

0 comments on commit b03a52d

Please sign in to comment.