Skip to content

Commit e53e242

Browse files
authored
Merge pull request #249 from HarvardOpenData/kh-predictions-continuous
Fix input handling
2 parents 297977a + daae6e4 commit e53e242

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

web/src/components/predictions/questions/interval-choice.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { calculateScore, displayMessage, displayScore } from "../utils";
1010
import Spacer from "../../core/spacer.js";
1111

1212
function IntervalChoice(props) {
13-
const { uid, qid, answer, lower, upper } = props;
13+
const { uid, qid, answer, lower, upper, step } = props;
1414
const date_expired = new Date(props.date_expired);
1515
const [values, setValues] = useState(
1616
props.prediction ? props.prediction : [lower, upper]
@@ -28,6 +28,10 @@ function IntervalChoice(props) {
2828
event.preventDefault();
2929
};
3030

31+
const parseValue = (value) => {
32+
return step === 1 ? parseInt(value) : parseFloat(value);
33+
}
34+
3135
// Updates Firebase with final values
3236
const updateFirebase = () => {
3337
const updates = {};
@@ -42,7 +46,7 @@ function IntervalChoice(props) {
4246

4347
const validateLower = (e) => {
4448
const bound = Math.min(values[1], upper);
45-
let value = parseFloat(e.target.value);
49+
let value = parseValue(e.target.value);
4650
if (value < lower || e.target.value === "") {
4751
value = lower;
4852
} else if (value > bound) {
@@ -54,7 +58,7 @@ function IntervalChoice(props) {
5458

5559
const validateUpper = (e) => {
5660
const bound = Math.max(values[0], lower);
57-
let value = parseFloat(e.target.value);
61+
let value = parseValue(e.target.value);
5862
if (value > upper || e.target.value === "") {
5963
value = upper;
6064
} else if (value < bound) {
@@ -95,13 +99,6 @@ function IntervalChoice(props) {
9599
}
96100
}
97101

98-
function update(value, values, step) {
99-
if (step === 1) {
100-
setValues([value && parseInt(value), values[1]])
101-
}
102-
setValues([value && parseFloat(value), values[1]]);
103-
}
104-
105102
return (
106103
<form onSubmit={(event) => afterSubmission(event)}>
107104
<Grid mt={1} mx={3} gap={0} columns={[2, "3fr 5fr"]}>
@@ -159,7 +156,9 @@ function IntervalChoice(props) {
159156
max={upper}
160157
value={values[0]}
161158
disabled={props.disabled}
162-
onChange={(e) => update(e.target.value, values, props.step)}
159+
onChange={(e) =>
160+
setValues([e.target.value && parseValue(e.target.value), values[1]])
161+
}
163162
onBlur={validateLower}
164163
onKeyDown={(e) => {
165164
if (e.key === "Enter") e.target.blur();
@@ -177,7 +176,9 @@ function IntervalChoice(props) {
177176
max={upper}
178177
value={values[1]}
179178
disabled={props.disabled}
180-
onChange={(e) => update(e.target.value, values, props.step)}
179+
onChange={(e) =>
180+
setValues([values[0], e.target.value && parseValue(e.target.value)])
181+
}
181182
onBlur={validateUpper}
182183
onKeyDown={(e) => {
183184
if (e.key === "Enter") e.target.blur();

0 commit comments

Comments
 (0)