From 85e4955f9a1a050bd76306688ae2b2702ea9b311 Mon Sep 17 00:00:00 2001 From: Florian Mounier Date: Tue, 19 Jun 2018 16:23:46 +0200 Subject: [PATCH] Allow number knob to be empty (returns null instead of 0). Prevent uncontrolled to controlled warning when defaulting to null (or undefined). --- addons/knobs/src/components/types/Number.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/addons/knobs/src/components/types/Number.js b/addons/knobs/src/components/types/Number.js index 829d327810e3..1c2fe118a3d1 100644 --- a/addons/knobs/src/components/types/Number.js +++ b/addons/knobs/src/components/types/Number.js @@ -39,10 +39,11 @@ const RangeWrapper = styled('div')({ class NumberType extends React.Component { constructor(props) { super(props); - - this.state = { - value: props.knob.value, - }; + let { value } = props.knob; + if (value === null || value === undefined) { + value = ''; + } + this.state = { value }; this.onChange = debounce(props.onChange, 400); } @@ -58,7 +59,7 @@ class NumberType extends React.Component { let parsedValue = Number(value); - if (Number.isNaN(parsedValue)) { + if (Number.isNaN(parsedValue) || value === '') { parsedValue = null; } @@ -110,7 +111,7 @@ NumberType.propTypes = { onChange: PropTypes.func, }; -NumberType.serialize = value => String(value); -NumberType.deserialize = value => parseFloat(value); +NumberType.serialize = value => (value === null || value === undefined ? '' : String(value)); +NumberType.deserialize = value => (value === '' ? null : parseFloat(value)); export default NumberType;