Skip to content

Commit eb80621

Browse files
authored
Fixed checkbox bug (#111)
1 parent 619dc7e commit eb80621

File tree

5 files changed

+49
-20
lines changed

5 files changed

+49
-20
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-final-form",
3-
"version": "3.0.0",
3+
"version": "3.0.1",
44
"description":
55
"🏁 High performance subscription-based form state management for React",
66
"main": "dist/react-final-form.cjs.js",

src/Field.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,10 @@ export default class Field extends React.PureComponent<Props, State> {
9999
this.state.state.blur()
100100
},
101101
onChange: (event: SyntheticInputEvent<*> | any) => {
102-
const { parse } = this.props
102+
const { parse, value: _value } = this.props
103103
const value: any =
104104
event && event.target
105-
? getValue(event, this.state.state.value, isReactNative)
105+
? getValue(event, this.state.state.value, _value, isReactNative)
106106
: event
107107
this.state.state.change(
108108
parse !== null ? parse(value, this.props.name) : value

src/getValue.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const getSelectedValues = options => {
1515
const getValue = (
1616
event: SyntheticInputEvent<*>,
1717
currentValue: any,
18+
valueProp: any,
1819
isReactNative: boolean
1920
) => {
2021
if (
@@ -31,19 +32,19 @@ const getValue = (
3132
const { target: { type, value, checked } } = detypedEvent
3233
switch (type) {
3334
case 'checkbox':
34-
if (value !== undefined) {
35+
if (valueProp !== undefined) {
3536
// we are maintaining an array, not just a boolean
3637
if (checked) {
3738
// add value to current array value
3839
return Array.isArray(currentValue)
39-
? currentValue.concat(value)
40-
: [value]
40+
? currentValue.concat(valueProp)
41+
: [valueProp]
4142
} else {
4243
// remove value from current array value
4344
if (!Array.isArray(currentValue)) {
4445
return currentValue
4546
}
46-
const index = currentValue.indexOf(value)
47+
const index = currentValue.indexOf(valueProp)
4748
if (index < 0) {
4849
return currentValue
4950
} else {

src/getValue.test.js

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ describe('getValue', () => {
1313
}
1414
},
1515
undefined,
16+
undefined,
1617
false
1718
)
1819
).toBe('foo')
@@ -29,6 +30,7 @@ describe('getValue', () => {
2930
}
3031
},
3132
undefined,
33+
undefined,
3234
true
3335
)
3436
).toBe('foo')
@@ -42,6 +44,7 @@ describe('getValue', () => {
4244
}
4345
},
4446
undefined,
47+
undefined,
4548
true
4649
)
4750
).toBe(undefined)
@@ -55,6 +58,7 @@ describe('getValue', () => {
5558
}
5659
},
5760
undefined,
61+
undefined,
5862
true
5963
)
6064
).toBe(null)
@@ -72,6 +76,7 @@ describe('getValue', () => {
7276
}
7377
},
7478
undefined,
79+
undefined,
7580
true
7681
)
7782
).toBe(true)
@@ -86,6 +91,7 @@ describe('getValue', () => {
8691
}
8792
},
8893
undefined,
94+
undefined,
8995
false
9096
)
9197
).toBe(true)
@@ -100,6 +106,7 @@ describe('getValue', () => {
100106
}
101107
},
102108
undefined,
109+
undefined,
103110
true
104111
)
105112
).toBe(false)
@@ -114,6 +121,7 @@ describe('getValue', () => {
114121
}
115122
},
116123
undefined,
124+
undefined,
117125
false
118126
)
119127
).toBe(false)
@@ -127,11 +135,11 @@ describe('getValue', () => {
127135
stopPropagation: noop,
128136
target: {
129137
type: 'checkbox',
130-
checked: true,
131-
value: 'foo'
138+
checked: true
132139
}
133140
},
134141
undefined,
142+
'foo',
135143
false
136144
)
137145
).toEqual(['foo'])
@@ -142,11 +150,11 @@ describe('getValue', () => {
142150
stopPropagation: noop,
143151
target: {
144152
type: 'checkbox',
145-
checked: true,
146-
value: 'C'
153+
checked: true
147154
}
148155
},
149156
['A', 'B'],
157+
'C',
150158
false
151159
)
152160
).toEqual(['A', 'B', 'C'])
@@ -157,11 +165,11 @@ describe('getValue', () => {
157165
stopPropagation: noop,
158166
target: {
159167
type: 'checkbox',
160-
checked: false,
161-
value: 'foo'
168+
checked: false
162169
}
163170
},
164171
['foo'],
172+
'foo',
165173
false
166174
)
167175
).toEqual([])
@@ -172,11 +180,11 @@ describe('getValue', () => {
172180
stopPropagation: noop,
173181
target: {
174182
type: 'checkbox',
175-
checked: false,
176-
value: 'B'
183+
checked: false
177184
}
178185
},
179186
['A', 'B', 'C'],
187+
'B',
180188
false
181189
)
182190
).toEqual(['A', 'C'])
@@ -187,11 +195,11 @@ describe('getValue', () => {
187195
stopPropagation: noop,
188196
target: {
189197
type: 'checkbox',
190-
checked: false,
191-
value: 'F'
198+
checked: false
192199
}
193200
},
194201
['A', 'B', 'C'],
202+
'F',
195203
false
196204
)
197205
).toEqual(['A', 'B', 'C'])
@@ -202,11 +210,11 @@ describe('getValue', () => {
202210
stopPropagation: noop,
203211
target: {
204212
type: 'checkbox',
205-
checked: false,
206-
value: 'F'
213+
checked: false
207214
}
208215
},
209216
undefined,
217+
'F',
210218
false
211219
)
212220
).toBeUndefined()
@@ -224,6 +232,7 @@ describe('getValue', () => {
224232
}
225233
},
226234
undefined,
235+
undefined,
227236
true
228237
)
229238
).toBe('3.1415')
@@ -238,6 +247,7 @@ describe('getValue', () => {
238247
}
239248
},
240249
undefined,
250+
undefined,
241251
true
242252
)
243253
).toBe('2.71828')
@@ -252,6 +262,7 @@ describe('getValue', () => {
252262
}
253263
},
254264
undefined,
265+
undefined,
255266
false
256267
)
257268
).toBe('3')
@@ -266,6 +277,7 @@ describe('getValue', () => {
266277
}
267278
},
268279
undefined,
280+
undefined,
269281
false
270282
)
271283
).toBe('3.1415')
@@ -281,6 +293,7 @@ describe('getValue', () => {
281293
}
282294
},
283295
undefined,
296+
undefined,
284297
false
285298
)
286299
).toBe('')
@@ -306,6 +319,7 @@ describe('getValue', () => {
306319
}
307320
},
308321
undefined,
322+
undefined,
309323
true
310324
)
311325
).toEqual(expected)
@@ -319,6 +333,7 @@ describe('getValue', () => {
319333
}
320334
},
321335
undefined,
336+
undefined,
322337
false
323338
)
324339
).toEqual([]) // no options specified
@@ -333,6 +348,7 @@ describe('getValue', () => {
333348
}
334349
},
335350
undefined,
351+
undefined,
336352
false
337353
)
338354
).toEqual(expected)
@@ -349,6 +365,7 @@ describe('getValue', () => {
349365
}
350366
},
351367
undefined,
368+
undefined,
352369
true
353370
)
354371
).toBe(undefined)
@@ -362,6 +379,7 @@ describe('getValue', () => {
362379
}
363380
},
364381
undefined,
382+
undefined,
365383
false
366384
)
367385
).toBe(undefined)
@@ -375,6 +393,7 @@ describe('getValue', () => {
375393
}
376394
},
377395
undefined,
396+
undefined,
378397
true
379398
)
380399
).toBe(null)
@@ -388,6 +407,7 @@ describe('getValue', () => {
388407
}
389408
},
390409
undefined,
410+
undefined,
391411
false
392412
)
393413
).toBe(null)
@@ -401,6 +421,7 @@ describe('getValue', () => {
401421
}
402422
},
403423
undefined,
424+
undefined,
404425
true
405426
)
406427
).toBe(true)
@@ -414,6 +435,7 @@ describe('getValue', () => {
414435
}
415436
},
416437
undefined,
438+
undefined,
417439
false
418440
)
419441
).toBe(true)
@@ -427,6 +449,7 @@ describe('getValue', () => {
427449
}
428450
},
429451
undefined,
452+
undefined,
430453
true
431454
)
432455
).toBe(false)
@@ -440,6 +463,7 @@ describe('getValue', () => {
440463
}
441464
},
442465
undefined,
466+
undefined,
443467
false
444468
)
445469
).toBe(false)
@@ -453,6 +477,7 @@ describe('getValue', () => {
453477
}
454478
},
455479
undefined,
480+
undefined,
456481
true
457482
)
458483
).toBe(42)
@@ -466,6 +491,7 @@ describe('getValue', () => {
466491
}
467492
},
468493
undefined,
494+
undefined,
469495
false
470496
)
471497
).toBe(42)
@@ -479,6 +505,7 @@ describe('getValue', () => {
479505
}
480506
},
481507
undefined,
508+
undefined,
482509
true
483510
)
484511
).toBe('foo')
@@ -492,6 +519,7 @@ describe('getValue', () => {
492519
}
493520
},
494521
undefined,
522+
undefined,
495523
false
496524
)
497525
).toBe('foo')

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
export { default as Field } from './Field'
33
export { default as Form } from './ReactFinalForm'
44
export { default as FormSpy } from './FormSpy'
5-
export const version = '3.0.0'
5+
export const version = '3.0.1'

0 commit comments

Comments
 (0)