| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _vue = require("vue");
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
- var _addEventListener = _interopRequireDefault(require("../../vc-util/Dom/addEventListener"));
- var _raf = _interopRequireDefault(require("../../_util/raf"));
- var _devWarning = _interopRequireDefault(require("../../vc-util/devWarning"));
- var _context = require("../../table/context");
- var _supportsPassive = _interopRequireDefault(require("../../_util/supportsPassive"));
- const events = {
- mouse: {
- start: 'mousedown',
- move: 'mousemove',
- stop: 'mouseup'
- },
- touch: {
- start: 'touchstart',
- move: 'touchmove',
- stop: 'touchend'
- }
- };
- const defaultMinWidth = 50;
- var _default = exports.default = (0, _vue.defineComponent)({
- compatConfig: {
- MODE: 3
- },
- name: 'DragHandle',
- props: {
- prefixCls: String,
- width: {
- type: Number,
- required: true
- },
- minWidth: {
- type: Number,
- default: defaultMinWidth
- },
- maxWidth: {
- type: Number,
- default: Infinity
- },
- column: {
- type: Object,
- default: undefined
- }
- },
- setup(props) {
- let startX = 0;
- let moveEvent = {
- remove: () => {}
- };
- let stopEvent = {
- remove: () => {}
- };
- const removeEvents = () => {
- moveEvent.remove();
- stopEvent.remove();
- };
- (0, _vue.onUnmounted)(() => {
- removeEvents();
- });
- (0, _vue.watchEffect)(() => {
- (0, _devWarning.default)(!isNaN(props.width), 'Table', 'width must be a number when use resizable');
- });
- const {
- onResizeColumn
- } = (0, _context.useInjectTableContext)();
- const minWidth = (0, _vue.computed)(() => {
- return typeof props.minWidth === 'number' && !isNaN(props.minWidth) ? props.minWidth : defaultMinWidth;
- });
- const maxWidth = (0, _vue.computed)(() => {
- return typeof props.maxWidth === 'number' && !isNaN(props.maxWidth) ? props.maxWidth : Infinity;
- });
- const instance = (0, _vue.getCurrentInstance)();
- let baseWidth = 0;
- const dragging = (0, _vue.shallowRef)(false);
- let rafId;
- const updateWidth = e => {
- let pageX = 0;
- if (e.touches) {
- if (e.touches.length) {
- // touchmove
- pageX = e.touches[0].pageX;
- } else {
- // touchend
- pageX = e.changedTouches[0].pageX;
- }
- } else {
- pageX = e.pageX;
- }
- const tmpDeltaX = startX - pageX;
- let w = Math.max(baseWidth - tmpDeltaX, minWidth.value);
- w = Math.min(w, maxWidth.value);
- _raf.default.cancel(rafId);
- rafId = (0, _raf.default)(() => {
- onResizeColumn(w, props.column.__originColumn__);
- });
- };
- const handleMove = e => {
- updateWidth(e);
- };
- const handleStop = e => {
- dragging.value = false;
- updateWidth(e);
- removeEvents();
- };
- const handleStart = (e, eventsFor) => {
- dragging.value = true;
- removeEvents();
- baseWidth = instance.vnode.el.parentNode.getBoundingClientRect().width;
- if (e instanceof MouseEvent && e.which !== 1) {
- return;
- }
- if (e.stopPropagation) e.stopPropagation();
- startX = e.touches ? e.touches[0].pageX : e.pageX;
- moveEvent = (0, _addEventListener.default)(document.documentElement, eventsFor.move, handleMove);
- stopEvent = (0, _addEventListener.default)(document.documentElement, eventsFor.stop, handleStop);
- };
- const handleDown = e => {
- e.stopPropagation();
- e.preventDefault();
- handleStart(e, events.mouse);
- };
- const handleTouchDown = e => {
- e.stopPropagation();
- e.preventDefault();
- handleStart(e, events.touch);
- };
- const handleClick = e => {
- e.stopPropagation();
- e.preventDefault();
- };
- return () => {
- const {
- prefixCls
- } = props;
- const touchEvents = {
- [_supportsPassive.default ? 'onTouchstartPassive' : 'onTouchstart']: e => handleTouchDown(e)
- };
- return (0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({
- "class": `${prefixCls}-resize-handle ${dragging.value ? 'dragging' : ''}`,
- "onMousedown": handleDown
- }, touchEvents), {}, {
- "onClick": handleClick
- }), [(0, _vue.createVNode)("div", {
- "class": `${prefixCls}-resize-handle-line`
- }, null)]);
- };
- }
- });
|