@@ -55,13 +55,13 @@ class InputSpinner extends Component {
5555 */
5656 componentDidUpdate ( prevProps ) {
5757 // Parse Value
58- if ( this . props . value !== this . state . value ) {
58+ if ( this . props . value !== prevProps . value ) {
5959 let newValue = this . parseNum ( this . props . value ) ;
6060 newValue = this . withinRange ( newValue ) ;
6161 this . setState ( { value : newValue } ) ;
6262 }
6363 // Parse Min
64- if ( this . props . min !== this . state . min ) {
64+ if ( this . props . min !== prevProps . min ) {
6565 this . setState ( {
6666 min :
6767 this . props . min != null
@@ -70,7 +70,7 @@ class InputSpinner extends Component {
7070 } ) ;
7171 }
7272 // Parse Max
73- if ( this . props . max !== this . state . max ) {
73+ if ( this . props . max !== prevProps . max ) {
7474 this . setState ( {
7575 max :
7676 this . props . max != null
@@ -79,7 +79,7 @@ class InputSpinner extends Component {
7979 } ) ;
8080 }
8181 // Parse Step
82- if ( this . props . step !== this . state . step ) {
82+ if ( this . props . step !== prevProps . step ) {
8383 let spinnerStep = this . parseNum ( this . props . step ) ;
8484 if ( ! this . typeDecimal ( ) && spinnerStep < 1 ) {
8585 spinnerStep = 1 ;
@@ -112,17 +112,21 @@ class InputSpinner extends Component {
112112 this . props . onMax ( this . state . max ) ;
113113 }
114114 }
115- this . setState ( { value : num } ) ;
116115 } else {
117116 if ( this . props . onMin ) {
118117 this . props . onMin ( this . state . min ) ;
119118 }
120119 num = this . state . min ;
121- this . setState ( { value : num } ) ;
122120 }
123121 if ( current_value !== num && this . props . onChange ) {
124- this . props . onChange ( num ) ;
122+ const res = this . props . onChange ( num ) ;
123+ if ( res === false ) {
124+ return ;
125+ } else if ( this . isNumeric ( res ) ) {
126+ num = this . parseNum ( res ) ;
127+ }
125128 }
129+ this . setState ( { value : num } ) ;
126130 }
127131
128132 /**
@@ -274,7 +278,12 @@ class InputSpinner extends Component {
274278 if ( this . maxReached ( num ) ) {
275279 increased_num = this . state . max ;
276280 }
277- this . props . onIncrease ( increased_num ) ;
281+ const res = this . props . onIncrease ( increased_num ) ;
282+ if ( res === false ) {
283+ return ;
284+ } else if ( this . isNumeric ( res ) ) {
285+ num = this . parseNum ( res ) ;
286+ }
278287 }
279288 this . onChange ( num ) ;
280289 }
@@ -291,11 +300,30 @@ class InputSpinner extends Component {
291300 if ( this . minReached ( num ) ) {
292301 decreased_num = this . state . min ;
293302 }
294- this . props . onDecrease ( decreased_num ) ;
303+ const res = this . props . onDecrease ( decreased_num ) ;
304+ if ( res === false ) {
305+ return ;
306+ } else if ( this . isNumeric ( res ) ) {
307+ num = this . parseNum ( res ) ;
308+ }
295309 }
296310 this . onChange ( num ) ;
297311 }
298312
313+ /**
314+ * Detect if is a numeric value
315+ * @param num
316+ * @returns {boolean }
317+ */
318+ isNumeric ( num ) {
319+ return (
320+ num !== null &&
321+ num !== false &&
322+ ! isNaN ( parseFloat ( num ) ) &&
323+ ! isNaN ( num - 0 )
324+ ) ;
325+ }
326+
299327 /**
300328 * On Submit keyboard
301329 * @returns {* }
0 commit comments