ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
95 lines • 3.53 kB
JavaScript
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import { createVNode as _createVNode } from "vue";
import isMobile from '../../vc-util/isMobile';
import { onBeforeUnmount, ref, defineComponent } from 'vue';
import classNames from '../../_util/classNames';
/**
* When click and hold on a button - the speed of auto changing the value.
*/
var STEP_INTERVAL = 200;
/**
* When click and hold on a button - the delay before auto changing the value.
*/
var STEP_DELAY = 600;
export default defineComponent({
compatConfig: {
MODE: 3
},
name: 'StepHandler',
inheritAttrs: false,
props: {
prefixCls: String,
upDisabled: Boolean,
downDisabled: Boolean,
onStep: {
type: Function
}
},
slots: ['upNode', 'downNode'],
setup: function setup(props, _ref) {
var slots = _ref.slots,
emit = _ref.emit;
var stepTimeoutRef = ref();
// We will interval update step when hold mouse down
var onStepMouseDown = function onStepMouseDown(e, up) {
e.preventDefault();
emit('step', up);
// Loop step for interval
function loopStep() {
emit('step', up);
stepTimeoutRef.value = setTimeout(loopStep, STEP_INTERVAL);
}
// First time press will wait some time to trigger loop step update
stepTimeoutRef.value = setTimeout(loopStep, STEP_DELAY);
};
var onStopStep = function onStopStep() {
clearTimeout(stepTimeoutRef.value);
};
onBeforeUnmount(function () {
onStopStep();
});
return function () {
if (isMobile()) {
return null;
}
var prefixCls = props.prefixCls,
upDisabled = props.upDisabled,
downDisabled = props.downDisabled;
var handlerClassName = "".concat(prefixCls, "-handler");
var upClassName = classNames(handlerClassName, "".concat(handlerClassName, "-up"), _defineProperty({}, "".concat(handlerClassName, "-up-disabled"), upDisabled));
var downClassName = classNames(handlerClassName, "".concat(handlerClassName, "-down"), _defineProperty({}, "".concat(handlerClassName, "-down-disabled"), downDisabled));
var sharedHandlerProps = {
unselectable: 'on',
role: 'button',
onMouseup: onStopStep,
onMouseleave: onStopStep
};
var upNode = slots.upNode,
downNode = slots.downNode;
return _createVNode("div", {
"class": "".concat(handlerClassName, "-wrap")
}, [_createVNode("span", _objectSpread(_objectSpread({}, sharedHandlerProps), {}, {
"onMousedown": function onMousedown(e) {
onStepMouseDown(e, true);
},
"aria-label": "Increase Value",
"aria-disabled": upDisabled,
"class": upClassName
}), [(upNode === null || upNode === void 0 ? void 0 : upNode()) || _createVNode("span", {
"unselectable": "on",
"class": "".concat(prefixCls, "-handler-up-inner")
}, null)]), _createVNode("span", _objectSpread(_objectSpread({}, sharedHandlerProps), {}, {
"onMousedown": function onMousedown(e) {
onStepMouseDown(e, false);
},
"aria-label": "Decrease Value",
"aria-disabled": downDisabled,
"class": downClassName
}), [(downNode === null || downNode === void 0 ? void 0 : downNode()) || _createVNode("span", {
"unselectable": "on",
"class": "".concat(prefixCls, "-handler-down-inner")
}, null)])]);
};
}
});