diff --git a/src/components/inputs/NumberInput.jsx b/src/components/inputs/NumberInput.jsx index 2be980b..b46fe6b 100644 --- a/src/components/inputs/NumberInput.jsx +++ b/src/components/inputs/NumberInput.jsx @@ -31,7 +31,7 @@ class NumberInput extends React.Component { } static getDerivedStateFromProps(props, state) { - if (!state.editing) { + if (!state.editing && props.value !== state.value) { return { value: props.value, dirtyValue: props.value, @@ -49,12 +49,17 @@ class NumberInput extends React.Component { if(this.isValid(value) && hasChanged) { this.props.onChange(value) this.setState({ - dirtyValue: newValue, + value: newValue, + }); + } + else if (!this.isValid(value) && hasChanged) { + this.setState({ + value: undefined, }); } this.setState({ - value: newValue, + dirtyValue: newValue === "" ? undefined : newValue, }) } @@ -87,11 +92,13 @@ class NumberInput extends React.Component { } // If set value is invalid fall back to the last valid value from props or at last resort the default value - if(!this.isValid(this.state.value)) { + if (!this.isValid(this.state.value)) { if(this.isValid(this.props.value)) { this.changeValue(this.props.value) + this.setState({dirtyValue: this.props.value}); } else { this.changeValue(undefined); + this.setState({dirtyValue: undefined}); } } } @@ -144,8 +151,15 @@ class NumberInput extends React.Component { this.props.min !== undefined && this.props.max !== undefined && this.props.allowRange ) { - const dirtyValue = this.state.dirtyValue === undefined ? this.props.default : this.state.dirtyValue - const value = this.state.value === undefined ? "" : this.state.value; + const value = this.state.editing ? this.state.dirtyValue : this.state.value; + const defaultValue = this.props.default === undefined ? "" : this.props.default; + let inputValue; + if (this.state.editingRange) { + inputValue = this.state.value; + } + else { + inputValue = value; + } return