Skip to content

Commit e6eeaa0

Browse files
authored
enh: Optimize handler (#18)
2 parents 70a0ad6 + 7d26115 commit e6eeaa0

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/NumberPadProvider.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,26 +56,29 @@ export const NumberPadProvider = ({
5656
const handleAppend: NumberPadActionContextType['onAppend'] = (
5757
stack: string,
5858
) => {
59-
const prevValue = stacks.join('');
60-
61-
if (prevValue.length >= maxLength) {
59+
if (stacks.length >= maxLength) {
6260
return;
6361
}
6462

6563
switch (stack) {
6664
case '.':
67-
if (prevValue === '') {
65+
if (stacks.length === 0) {
6866
setStacks(['0', stack]);
6967
break;
7068
}
71-
if (prevValue.includes('.')) {
69+
if (!stacks.includes('.')) {
70+
setStacks([...stacks, stack]);
7271
break;
7372
}
73+
// Skip this append
74+
break;
7475
case '0':
75-
if (prevValue === '') {
76+
if (stacks.length === 0) {
7677
setStacks([stack, '.']);
7778
break;
7879
}
80+
setStacks([...stacks, stack]);
81+
break;
7982
default:
8083
setStacks([...stacks, stack]);
8184
break;
@@ -86,14 +89,13 @@ export const NumberPadProvider = ({
8689
}, []);
8790
const handleDelete: NumberPadActionContextType['onDelete'] =
8891
useCallback(() => {
89-
const prevValue = stacks.join('');
90-
91-
if (prevValue === '0.') {
92+
if (stacks.length === 2 && stacks[0] === '0' && stacks[1] === '.') {
9293
handleClear();
9394
return;
9495
}
95-
96-
setStacks(stacks.slice(0, stacks.length - 1));
96+
const newStacks = [...stacks];
97+
newStacks.pop();
98+
setStacks(newStacks);
9799
}, [handleClear, stacks]);
98100
const handleGetValue: NumberPadActionContextType['getValue'] = () => {
99101
return value;

0 commit comments

Comments
 (0)