xdesign-vue-next
Version:
XDesign Component for vue-next
107 lines (103 loc) • 3.47 kB
JavaScript
/**
* xdesign v1.0.6
* (c) 2023 xdesign
* @license MIT
*/
import { toRefs, inject, ref } from 'vue';
import throttle from 'lodash/throttle';
import { dragInjectKey } from '../constants.js';
import '../../hooks/useConfig.js';
import '../../config-provider/useConfig.js';
import 'lodash/isFunction';
import 'lodash/cloneDeep';
import 'lodash/isString';
import '../../config-provider/context.js';
import 'lodash/mergeWith';
import 'lodash/merge';
import '../../_common/js/global-config/default-config.js';
import '../../_common/js/global-config/locale/en_US.js';
import '../../_chunks/dep-3a1cce9f.js';
import 'lodash/isArray';
function useDraggable(props) {
var _toRefs = toRefs(props),
nodeRef = _toRefs.nodeRef,
node = _toRefs.node;
var onDrag = inject(dragInjectKey);
var isDragOver = ref(false);
var isDragging = ref(false);
var dropPosition = ref(0);
var updateDropPosition = throttle(function (e) {
if (typeof window === "undefined") return;
if (!nodeRef.value) return;
var rect = nodeRef.value.getBoundingClientRect();
var offsetY = window.pageYOffset + rect.top;
var pageY = e.pageY;
var gapHeight = rect.height / 4;
var diff = pageY - offsetY;
if (diff < gapHeight) {
dropPosition.value = -1;
} else if (diff < rect.height - gapHeight) {
dropPosition.value = 0;
} else {
dropPosition.value = 1;
}
});
var setDragStatus = function setDragStatus(status, e) {
var _onDrag$onDragStart, _onDrag$onDragEnd, _onDrag$onDragOver, _onDrag$onDragLeave, _onDrag$onDrop;
switch (status) {
case "dragStart":
isDragging.value = true;
dropPosition.value = 0;
(_onDrag$onDragStart = onDrag.onDragStart) === null || _onDrag$onDragStart === void 0 ? void 0 : _onDrag$onDragStart.call(onDrag, {
node: node.value,
e: e
});
e.dataTransfer.effectAllowed = "move";
break;
case "dragEnd":
isDragging.value = false;
isDragOver.value = false;
dropPosition.value = 0;
updateDropPosition.cancel();
(_onDrag$onDragEnd = onDrag.onDragEnd) === null || _onDrag$onDragEnd === void 0 ? void 0 : _onDrag$onDragEnd.call(onDrag, {
node: node.value,
e: e
});
break;
case "dragOver":
isDragOver.value = true;
updateDropPosition(e);
(_onDrag$onDragOver = onDrag.onDragOver) === null || _onDrag$onDragOver === void 0 ? void 0 : _onDrag$onDragOver.call(onDrag, {
node: node.value,
e: e
});
break;
case "dragLeave":
isDragOver.value = false;
dropPosition.value = 0;
updateDropPosition.cancel();
(_onDrag$onDragLeave = onDrag.onDragLeave) === null || _onDrag$onDragLeave === void 0 ? void 0 : _onDrag$onDragLeave.call(onDrag, {
node: node.value,
e: e
});
break;
case "drop":
(_onDrag$onDrop = onDrag.onDrop) === null || _onDrag$onDrop === void 0 ? void 0 : _onDrag$onDrop.call(onDrag, {
node: node.value,
dropPosition: dropPosition.value,
e: e
});
isDragOver.value = false;
updateDropPosition.cancel();
break;
}
};
return {
isDragOver: isDragOver,
isDragging: isDragging,
dropPosition: dropPosition,
setDragStatus: setDragStatus
};
}
export { useDraggable as default };
//# sourceMappingURL=useDraggable.js.map