UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

91 lines (85 loc) 2.4 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _core = require("@dnd-kit/core"); var _modifiers = require("@dnd-kit/modifiers"); var _sortable = require("@dnd-kit/sortable"); const DragOver = /*#__PURE__*/_react.default.memo(({ instance }) => { const { isDragging, activeId, options } = instance; const item = activeId && options.find(v => v.dataIndex === activeId); return /*#__PURE__*/_react.default.createElement(_core.DragOverlay, { adjustScale: false }, isDragging ? /*#__PURE__*/_react.default.createElement("div", { className: "lm_editable_col_drag" }, item?.title) : null); }); // 可拖拽容器 const DndContainer = ({ children, move, options, rowKey }) => { const [isDragging, setIsDragging] = _react.default.useState(false); // 是否拖拽中 const [activeId, setActiveId] = _react.default.useState(null); // 是否拖拽中 const sensors = (0, _core.useSensors)((0, _core.useSensor)(_core.PointerSensor), (0, _core.useSensor)(_core.KeyboardSensor, { coordinateGetter: _sortable.sortableKeyboardCoordinates })); // 开始拖拽 const handleDragStart = ({ active }) => { setIsDragging(true); if (!active) { return; } setActiveId(active.id); }; // 拖拽结束 const handleDragEnd = event => { const { active, over } = event; setActiveId(null); // 未移入时触发 if (!over?.id) { return; } // 移入时触发更新数据 if (active.id !== over.id) { move(active.id, over.id); } }; const instance = { isDragging, activeId, options, rowKey, children, move, items: options?.map(v => v[rowKey]) }; return /*#__PURE__*/_react.default.createElement(_core.DndContext, { sensors: sensors, collisionDetection: _core.closestCenter, onDragStart: handleDragStart, onDragEnd: handleDragEnd, onDragCancel: () => setActiveId(null), modifiers: [_modifiers.restrictToParentElement] }, children, /*#__PURE__*/_react.default.createElement(DragOver, { instance: instance })); }; var _default = /*#__PURE__*/(0, _react.memo)(DndContainer); exports.default = _default;