UNPKG

3.03 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3import * as React from 'react';
4import classNames from 'classnames';
5import isMobile from "rc-util/es/isMobile";
6/**
7 * When click and hold on a button - the speed of auto changing the value.
8 */
9
10var STEP_INTERVAL = 200;
11/**
12 * When click and hold on a button - the delay before auto changing the value.
13 */
14
15var STEP_DELAY = 600;
16export default function StepHandler(_ref) {
17 var prefixCls = _ref.prefixCls,
18 upNode = _ref.upNode,
19 downNode = _ref.downNode,
20 upDisabled = _ref.upDisabled,
21 downDisabled = _ref.downDisabled,
22 onStep = _ref.onStep;
23 // ======================== Step ========================
24 var stepTimeoutRef = React.useRef();
25 var onStepRef = React.useRef();
26 onStepRef.current = onStep; // We will interval update step when hold mouse down
27
28 var onStepMouseDown = function onStepMouseDown(e, up) {
29 e.preventDefault();
30 onStepRef.current(up); // Loop step for interval
31
32 function loopStep() {
33 onStepRef.current(up);
34 stepTimeoutRef.current = setTimeout(loopStep, STEP_INTERVAL);
35 } // First time press will wait some time to trigger loop step update
36
37
38 stepTimeoutRef.current = setTimeout(loopStep, STEP_DELAY);
39 };
40
41 var onStopStep = function onStopStep() {
42 clearTimeout(stepTimeoutRef.current);
43 };
44
45 React.useEffect(function () {
46 return onStopStep;
47 }, []); // ======================= Render =======================
48
49 if (isMobile()) {
50 return null;
51 }
52
53 var handlerClassName = "".concat(prefixCls, "-handler");
54 var upClassName = classNames(handlerClassName, "".concat(handlerClassName, "-up"), _defineProperty({}, "".concat(handlerClassName, "-up-disabled"), upDisabled));
55 var downClassName = classNames(handlerClassName, "".concat(handlerClassName, "-down"), _defineProperty({}, "".concat(handlerClassName, "-down-disabled"), downDisabled));
56 var sharedHandlerProps = {
57 unselectable: 'on',
58 role: 'button',
59 onMouseUp: onStopStep,
60 onMouseLeave: onStopStep
61 };
62 return /*#__PURE__*/React.createElement("div", {
63 className: "".concat(handlerClassName, "-wrap")
64 }, /*#__PURE__*/React.createElement("span", _extends({}, sharedHandlerProps, {
65 onMouseDown: function onMouseDown(e) {
66 onStepMouseDown(e, true);
67 },
68 "aria-label": "Increase Value",
69 "aria-disabled": upDisabled,
70 className: upClassName
71 }), upNode || /*#__PURE__*/React.createElement("span", {
72 unselectable: "on",
73 className: "".concat(prefixCls, "-handler-up-inner")
74 })), /*#__PURE__*/React.createElement("span", _extends({}, sharedHandlerProps, {
75 onMouseDown: function onMouseDown(e) {
76 onStepMouseDown(e, false);
77 },
78 "aria-label": "Decrease Value",
79 "aria-disabled": downDisabled,
80 className: downClassName
81 }), downNode || /*#__PURE__*/React.createElement("span", {
82 unselectable: "on",
83 className: "".concat(prefixCls, "-handler-down-inner")
84 })));
85}
\No newline at end of file