Skip to content

Commit 9ec02df

Browse files
committed
refactor: step handler
1 parent dfd8e1b commit 9ec02df

2 files changed

Lines changed: 44 additions & 77 deletions

File tree

src/InputNumber.tsx

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,23 @@ const InternalInputNumber = React.forwardRef(
589589
}, [inputValue]);
590590

591591
// ============================ Render ============================
592+
const upNode = (
593+
<StepHandler action="up" prefixCls={prefixCls} disabled={upDisabled} onStep={onInternalStep}>
594+
{upHandler}
595+
</StepHandler>
596+
);
597+
598+
const downNode = (
599+
<StepHandler
600+
action="down"
601+
prefixCls={prefixCls}
602+
disabled={downDisabled}
603+
onStep={onInternalStep}
604+
>
605+
{downHandler}
606+
</StepHandler>
607+
);
608+
592609
return (
593610
<div
594611
ref={domRef}
@@ -611,25 +628,16 @@ const InternalInputNumber = React.forwardRef(
611628
onBeforeInput={onBeforeInput}
612629
>
613630
{type === 'input' && controls && (
614-
<StepHandler
615-
prefixCls={prefixCls}
616-
upNode={upHandler}
617-
downNode={downHandler}
618-
upDisabled={upDisabled}
619-
downDisabled={downDisabled}
620-
onStep={onInternalStep}
621-
/>
631+
<div
632+
className={clsx(`${prefixCls}-handler-wrap`, props.classNames?.actions)}
633+
style={props.styles?.actions}
634+
>
635+
{upNode}
636+
{downNode}
637+
</div>
622638
)}
623639

624-
{type === 'spinner' && controls && (
625-
<StepHandler
626-
prefixCls={prefixCls}
627-
downNode={downHandler}
628-
downDisabled={downDisabled}
629-
upHidden
630-
onStep={onInternalStep}
631-
/>
632-
)}
640+
{type === 'spinner' && controls && downNode}
633641

634642
<div className={`${inputClassName}-wrap`}>
635643
<input
@@ -649,15 +657,7 @@ const InternalInputNumber = React.forwardRef(
649657
/>
650658
</div>
651659

652-
{type === 'spinner' && controls && (
653-
<StepHandler
654-
prefixCls={prefixCls}
655-
upNode={upHandler}
656-
upDisabled={upDisabled}
657-
downHidden
658-
onStep={onInternalStep}
659-
/>
660-
)}
660+
{type === 'spinner' && controls && upNode}
661661
</div>
662662
);
663663
},

src/StepHandler.tsx

Lines changed: 18 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,17 @@ const STEP_DELAY = 600;
1616

1717
export interface StepHandlerProps {
1818
prefixCls: string;
19-
upNode?: React.ReactNode;
20-
downNode?: React.ReactNode;
21-
upDisabled?: boolean;
22-
upHidden?: boolean;
23-
downDisabled?: boolean;
24-
downHidden?: boolean;
19+
action: 'up' | 'down';
20+
children?: React.ReactNode;
21+
disabled?: boolean;
2522
onStep: (up: boolean, emitter: 'handler' | 'keyboard' | 'wheel') => void;
2623
}
2724

2825
export default function StepHandler({
2926
prefixCls,
30-
upNode,
31-
downNode,
32-
upDisabled,
33-
downDisabled,
34-
upHidden,
35-
downHidden,
27+
action,
28+
children,
29+
disabled,
3630
onStep,
3731
}: StepHandlerProps) {
3832
// ======================== Step ========================
@@ -49,15 +43,15 @@ export default function StepHandler({
4943
};
5044

5145
// We will interval update step when hold mouse down
52-
const onStepMouseDown = (e: React.MouseEvent, up: boolean) => {
46+
const onStepMouseDown = (e: React.MouseEvent) => {
5347
e.preventDefault();
5448
onStopStep();
5549

56-
onStepRef.current(up, 'handler');
50+
onStepRef.current(action === 'up', 'handler');
5751

5852
// Loop step for interval
5953
function loopStep() {
60-
onStepRef.current(up, 'handler');
54+
onStepRef.current(action === 'up', 'handler');
6155

6256
stepTimeoutRef.current = setTimeout(loopStep, STEP_INTERVAL);
6357
}
@@ -79,11 +73,8 @@ export default function StepHandler({
7973
// ======================= Render =======================
8074
const handlerClassName = `${prefixCls}-handler`;
8175

82-
const upClassName = clsx(handlerClassName, `${handlerClassName}-up`, {
83-
[`${handlerClassName}-up-disabled`]: upDisabled,
84-
});
85-
const downClassName = clsx(handlerClassName, `${handlerClassName}-down`, {
86-
[`${handlerClassName}-down-disabled`]: downDisabled,
76+
const className = clsx(handlerClassName, `${handlerClassName}-up`, {
77+
[`${handlerClassName}-${action}-disabled`]: disabled,
8778
});
8879

8980
// fix: https://github.com/ant-design/ant-design/issues/43088
@@ -100,47 +91,23 @@ export default function StepHandler({
10091
onMouseLeave: safeOnStopStep,
10192
};
10293

103-
const upHandle = (
104-
<span
105-
{...sharedHandlerProps}
106-
onMouseDown={(e) => {
107-
onStepMouseDown(e, true);
108-
}}
109-
aria-label="Increase Value"
110-
aria-disabled={upDisabled}
111-
className={upClassName}
112-
>
113-
{upNode || <span unselectable="on" className={`${prefixCls}-handler-up-inner`} />}
114-
</span>
115-
);
116-
117-
const downHandle = (
94+
return (
11895
<span
11996
{...sharedHandlerProps}
12097
onMouseDown={(e) => {
121-
onStepMouseDown(e, false);
98+
onStepMouseDown(e);
12299
}}
123-
aria-label="Decrease Value"
124-
aria-disabled={downDisabled}
125-
className={downClassName}
100+
aria-label={action === 'up' ? 'Increase Value' : 'Decrease Value'}
101+
aria-disabled={disabled}
102+
className={className}
126103
>
127-
{downNode || <span unselectable="on" className={`${prefixCls}-handler-down-inner`} />}
104+
{children || <span unselectable="on" className={`${prefixCls}-handler-${action}-inner`} />}
128105
</span>
129106
);
130107

131-
if (upHidden) {
132-
return downHandle;
133-
}
134-
135-
if (downHidden) {
136-
return upHandle;
137-
}
138-
139108
return (
140109
<div className={clsx(`${handlerClassName}-wrap`, classNames?.actions)} style={styles?.actions}>
141-
{upHandle}
142-
143-
{downHandle}
110+
//
144111
</div>
145112
);
146113
}

0 commit comments

Comments
 (0)