@@ -56,26 +56,29 @@ export const NumberPadProvider = ({
56
56
const handleAppend : NumberPadActionContextType [ 'onAppend' ] = (
57
57
stack : string ,
58
58
) => {
59
- const prevValue = stacks . join ( '' ) ;
60
-
61
- if ( prevValue . length >= maxLength ) {
59
+ if ( stacks . length >= maxLength ) {
62
60
return ;
63
61
}
64
62
65
63
switch ( stack ) {
66
64
case '.' :
67
- if ( prevValue === '' ) {
65
+ if ( stacks . length === 0 ) {
68
66
setStacks ( [ '0' , stack ] ) ;
69
67
break ;
70
68
}
71
- if ( prevValue . includes ( '.' ) ) {
69
+ if ( ! stacks . includes ( '.' ) ) {
70
+ setStacks ( [ ...stacks , stack ] ) ;
72
71
break ;
73
72
}
73
+ // Skip this append
74
+ break ;
74
75
case '0' :
75
- if ( prevValue === '' ) {
76
+ if ( stacks . length === 0 ) {
76
77
setStacks ( [ stack , '.' ] ) ;
77
78
break ;
78
79
}
80
+ setStacks ( [ ...stacks , stack ] ) ;
81
+ break ;
79
82
default :
80
83
setStacks ( [ ...stacks , stack ] ) ;
81
84
break ;
@@ -86,14 +89,13 @@ export const NumberPadProvider = ({
86
89
} , [ ] ) ;
87
90
const handleDelete : NumberPadActionContextType [ 'onDelete' ] =
88
91
useCallback ( ( ) => {
89
- const prevValue = stacks . join ( '' ) ;
90
-
91
- if ( prevValue === '0.' ) {
92
+ if ( stacks . length === 2 && stacks [ 0 ] === '0' && stacks [ 1 ] === '.' ) {
92
93
handleClear ( ) ;
93
94
return ;
94
95
}
95
-
96
- setStacks ( stacks . slice ( 0 , stacks . length - 1 ) ) ;
96
+ const newStacks = [ ...stacks ] ;
97
+ newStacks . pop ( ) ;
98
+ setStacks ( newStacks ) ;
97
99
} , [ handleClear , stacks ] ) ;
98
100
const handleGetValue : NumberPadActionContextType [ 'getValue' ] = ( ) => {
99
101
return value ;
0 commit comments