UNPKG

5.49 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4var _typeof = require("@babel/runtime/helpers/typeof");
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = StepHandler;
9var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11var React = _interopRequireWildcard(require("react"));
12var _classnames = _interopRequireDefault(require("classnames"));
13var _useMobile = _interopRequireDefault(require("rc-util/lib/hooks/useMobile"));
14var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
15function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17/* eslint-disable react/no-unknown-property */
18
19/**
20 * When click and hold on a button - the speed of auto changing the value.
21 */
22var STEP_INTERVAL = 200;
23
24/**
25 * When click and hold on a button - the delay before auto changing the value.
26 */
27var STEP_DELAY = 600;
28function StepHandler(_ref) {
29 var prefixCls = _ref.prefixCls,
30 upNode = _ref.upNode,
31 downNode = _ref.downNode,
32 upDisabled = _ref.upDisabled,
33 downDisabled = _ref.downDisabled,
34 onStep = _ref.onStep;
35 // ======================== Step ========================
36 var stepTimeoutRef = React.useRef();
37 var frameIds = React.useRef([]);
38 var onStepRef = React.useRef();
39 onStepRef.current = onStep;
40 var onStopStep = function onStopStep() {
41 clearTimeout(stepTimeoutRef.current);
42 };
43
44 // We will interval update step when hold mouse down
45 var onStepMouseDown = function onStepMouseDown(e, up) {
46 e.preventDefault();
47 onStopStep();
48 onStepRef.current(up);
49
50 // Loop step for interval
51 function loopStep() {
52 onStepRef.current(up);
53 stepTimeoutRef.current = setTimeout(loopStep, STEP_INTERVAL);
54 }
55
56 // First time press will wait some time to trigger loop step update
57 stepTimeoutRef.current = setTimeout(loopStep, STEP_DELAY);
58 };
59 React.useEffect(function () {
60 return function () {
61 onStopStep();
62 frameIds.current.forEach(function (id) {
63 return _raf.default.cancel(id);
64 });
65 };
66 }, []);
67
68 // ======================= Render =======================
69 var isMobile = (0, _useMobile.default)();
70 if (isMobile) {
71 return null;
72 }
73 var handlerClassName = "".concat(prefixCls, "-handler");
74 var upClassName = (0, _classnames.default)(handlerClassName, "".concat(handlerClassName, "-up"), (0, _defineProperty2.default)({}, "".concat(handlerClassName, "-up-disabled"), upDisabled));
75 var downClassName = (0, _classnames.default)(handlerClassName, "".concat(handlerClassName, "-down"), (0, _defineProperty2.default)({}, "".concat(handlerClassName, "-down-disabled"), downDisabled));
76
77 // fix: https://github.com/ant-design/ant-design/issues/43088
78 // In Safari, When we fire onmousedown and onmouseup events in quick succession,
79 // there may be a problem that the onmouseup events are executed first,
80 // resulting in a disordered program execution.
81 // So, we need to use requestAnimationFrame to ensure that the onmouseup event is executed after the onmousedown event.
82 var safeOnStopStep = function safeOnStopStep() {
83 return frameIds.current.push((0, _raf.default)(onStopStep));
84 };
85 var sharedHandlerProps = {
86 unselectable: 'on',
87 role: 'button',
88 onMouseUp: safeOnStopStep,
89 onMouseLeave: safeOnStopStep
90 };
91 return /*#__PURE__*/React.createElement("div", {
92 className: "".concat(handlerClassName, "-wrap")
93 }, /*#__PURE__*/React.createElement("span", (0, _extends2.default)({}, sharedHandlerProps, {
94 onMouseDown: function onMouseDown(e) {
95 onStepMouseDown(e, true);
96 },
97 "aria-label": "Increase Value",
98 "aria-disabled": upDisabled,
99 className: upClassName
100 }), upNode || /*#__PURE__*/React.createElement("span", {
101 unselectable: "on",
102 className: "".concat(prefixCls, "-handler-up-inner")
103 })), /*#__PURE__*/React.createElement("span", (0, _extends2.default)({}, sharedHandlerProps, {
104 onMouseDown: function onMouseDown(e) {
105 onStepMouseDown(e, false);
106 },
107 "aria-label": "Decrease Value",
108 "aria-disabled": downDisabled,
109 className: downClassName
110 }), downNode || /*#__PURE__*/React.createElement("span", {
111 unselectable: "on",
112 className: "".concat(prefixCls, "-handler-down-inner")
113 })));
114}
\No newline at end of file