Skip to content

Commit

Permalink
Only accept numerical characters if the input type is number (#112)
Browse files Browse the repository at this point in the history
Co-authored-by: Paulo Ragonha <paulo@ragonha.me>
  • Loading branch information
Viktor Bergehall and pirelenito committed Mar 9, 2023
1 parent b16c53e commit f3d75a8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 18 deletions.
35 changes: 17 additions & 18 deletions packages/@react-facet/dom-fiber/src/setupAttributes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,27 +52,26 @@ export const setupRowsUpdate = (rows: FacetProp<number | undefined>, element: HT
* so we need to set the `value` attribute directly to solve this.
* ref: https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOMInput.js
*/
export const setupValueUpdate = (value: FacetProp<string | undefined>, element: HTMLElement | SVGElement) => {
if (isFacet(value)) {
return value.observe((value) => {
const inputElement = element as HTMLInputElement
inputElement.value = value != null ? value : ''

if (value != null) {
inputElement.setAttribute('value', value)
} else {
inputElement.removeAttribute('value')
}
})
const updateValue = (element: HTMLElement | SVGElement, value: string | undefined) => {
const inputElement = element as HTMLInputElement
// Only accept numerical characters if the input type is number
if (inputElement.type === 'number' && isNaN(Number(value))) return

if (value != null) {
inputElement.value = value
inputElement.setAttribute('value', value)
} else {
const inputElement = element as HTMLInputElement
inputElement.value = value != null ? value : ''
inputElement.value = ''
inputElement.removeAttribute('value')
}
}

if (value != null) {
inputElement.setAttribute('value', value)
} else {
inputElement.removeAttribute('value')
}
export const setupValueUpdate = (value: FacetProp<string | undefined>, element: HTMLElement | SVGElement) => {
if (isFacet(value)) {
return value.observe((value) => updateValue(element, value))
} else {
updateValue(element, value)
}
}

Expand Down
13 changes: 13 additions & 0 deletions packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,19 @@ describe('mount', () => {
expect(root?.innerHTML ?? '').toBe('<input maxlength="20" type="text">')
})

it('should only accept numerical characters if the input type is number', () => {
const valueFacet = createFacet({ initialValue: 'e' })
render(<fast-input type="number" value={valueFacet} />)

expect(root?.innerHTML ?? '').toBe('<input type="number">')
valueFacet.set('1')
expect(root?.innerHTML ?? '').toBe('<input type="number" value="1">')
valueFacet.set('1e')
expect(root?.innerHTML ?? '').toBe('<input type="number" value="1">')
valueFacet.set('12')
expect(root?.innerHTML ?? '').toBe('<input type="number" value="12">')
})

it('sets rows', () => {
const rowsFacet = createFacet({ initialValue: 10 })

Expand Down

0 comments on commit f3d75a8

Please sign in to comment.