Skip to content

Commit

Permalink
fix: Fix number fields to always return number not string
Browse files Browse the repository at this point in the history
  • Loading branch information
gmaclennan committed Jul 13, 2020
1 parent e7a0b3d commit 01968ca
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/ObservationDialog/Field.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import React from 'react'
import { useIntl } from 'react-intl'
import { SelectOne, SelectMultiple } from './Select'
import TextField from './TextField'
import NumberField from './NumberField'
import DateField from './DateField'
import DateTimeField from './DateTimeField'

Expand Down Expand Up @@ -64,20 +65,21 @@ const Field = ({ field, value, onChange }: Props) => {
/>
)
case 'select_multiple':
return <SelectMultiple
return (
<SelectMultiple
value={value}
label={label}
options={field.options}
placeholder={placeholder}
onChange={handleChange}
/>
)
case 'number':
return (
<TextField
<NumberField
value={value}
onChange={handleChange}
label={label}
type="number"
placeholder={placeholder}
/>
)
Expand Down
25 changes: 25 additions & 0 deletions src/ObservationDialog/NumberField.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import React from 'react'
import { TextField as MuiTextField } from '@material-ui/core'

const TextField = ({ onChange, ...otherProps }) => {
const handleChange = event =>
onChange &&
onChange(
Number.isNaN(event.target.valueAsNumber)
? undefined
: event.target.valueAsNumber
)
return (
<MuiTextField
fullWidth
variant="outlined"
margin="normal"
type="number"
InputLabelProps={{ shrink: true }}
onChange={handleChange}
{...otherProps}
/>
)
}

export default TextField
25 changes: 25 additions & 0 deletions src/ObservationDialog/NumberField.stories.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import * as React from 'react'
import { action } from '@storybook/addon-actions'

import NumberField from './NumberField'

export default {
title: 'ObservationDialog/NumberField'
// decorators: [storyFn => <div style={{ padding: '10px 0' }}>{storyFn()}</div>]
}

export const defaultStory = () => (
<NumberField
label="Age"
placeholder="Some placeholder (e.g. example input)"
helperText="The actual question might be here?"
onChange={v => {
console.log(v)
action('onChange')(v)
}}
/>
)

defaultStory.story = {
name: 'default'
}
5 changes: 5 additions & 0 deletions src/ObservationDialog/ObservationDialog.stories.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ const getPreset = observation => {
id: 'localized-field',
key: ['localized'],
type: 'localized'
},
{
id: 'number-field',
key: ['num'],
type: 'number'
}
]),
additionalFields: fields.slice(5)
Expand Down

0 comments on commit 01968ca

Please sign in to comment.