Skip to content

Commit 138d01c

Browse files
committed
fix: normalize empty/whitespace to null
1 parent 6f96fcf commit 138d01c

File tree

5 files changed

+15
-3
lines changed

5 files changed

+15
-3
lines changed

.flowconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[ignore]
22
<PROJECT_ROOT>/node_modules/fbjs/.*
33
<PROJECT_ROOT>/node_modules/.*/tests?/.*\.json
4+
<PROJECT_ROOT>/node_modules/immutable/dist/immutable.js.flow
45
<PROJECT_ROOT>/lib
56

67
[include]

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
"istanbul": "^0.4.5",
9292
"jsdom": "^11.5.1",
9393
"jsdom-global": "^3.0.2",
94+
"lodash.get": "^4.4.2",
9495
"mocha": "^4.1.0",
9596
"nyc": "^11.4.1",
9697
"react": "^16.2.0",

src/createNumericField.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ function createNumericField<P: React.ElementProps<Field>>(
1313
type Props = React.ElementProps<typeof Field> & {normalizeNumber?: NumberNormalizer}
1414

1515
function defaultNormalize(value: ?(string | number)): ?(string | number) {
16-
if (value == null || typeof value === 'number' || WHITESPACE.test(value)) {
17-
return typeof value === 'string' ? value.trim() : value
18-
}
16+
if (value == null || WHITESPACE.test((value: any))) return null
17+
if (typeof value === 'number') return value
1918
const parsed = Number(value)
2019
return Number.isFinite(parsed) ? parsed : value.trim()
2120
}

test/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// @flow
22

33
import * as React from 'react'
4+
import get from 'lodash.get'
5+
import {Iterable} from 'immutable'
46
import {describe, it} from 'mocha'
57
import {createStore, combineReducers} from 'redux'
68
import {Provider} from 'react-redux'
@@ -26,6 +28,10 @@ function max(threshold: number): (value: number) => ?string {
2628
}
2729
}
2830

31+
function getIn(obj: any, path: any): any {
32+
return Iterable.isIterable(obj) ? obj.getIn(path) : get(obj, path)
33+
}
34+
2935
describe('NumericField', () => {
3036
function tests({NumericField, reducer, reduxForm}: any) {
3137
it('normalizes valid number on blur', () => {
@@ -102,6 +108,7 @@ describe('NumericField', () => {
102108
comp.update().find(Input).simulate('blur')
103109
expect(comp.update().find('input').prop('value')).to.equal('')
104110
expect(comp.update().find(Input).prop('meta').error).not.to.exist
111+
expect(getIn(store.getState().form, ['form', 'values', 'hello'])).to.equal(null)
105112
})
106113
it('supports single validate function', () => {
107114
const store = createStore(combineReducers({form: reducer}))

yarn.lock

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4020,6 +4020,10 @@ lodash.flattendeep@^4.4.0:
40204020
version "4.4.0"
40214021
resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
40224022

4023+
lodash.get@^4.4.2:
4024+
version "4.4.2"
4025+
resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
4026+
40234027
40244028
version "4.1.1"
40254029
resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"

0 commit comments

Comments
 (0)