@wix/design-system
Version:
@wix/design-system
96 lines (93 loc) • 3.38 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.dragAndDropPlaywrightDriverFactory = void 0;
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var dragAndDropPlaywrightDriverFactory = _ref => {
var {
base
} = _ref;
return {
beginDrag: function () {
var _beginDrag = (0, _asyncToGenerator2.default)(function* (_ref2) {
var {
dataHook
} = _ref2;
var baseLocator = yield base.unwrap();
// Use evaluate to dispatch synthetic events like Puppeteer does
yield baseLocator.evaluate((baseElement, sourceDataHook) => {
var sourceElement = baseElement.querySelector("[data-hook=\"".concat(sourceDataHook, "\"]"));
if (!sourceElement) {
throw new Error("Element with data-hook=\"".concat(sourceDataHook, "\" not found"));
}
var {
x,
y,
height
} = sourceElement.getBoundingClientRect();
sourceElement.dispatchEvent(new MouseEvent('mousedown', {
bubbles: true,
clientX: x,
clientY: y + height / 2
}));
}, dataHook);
});
function beginDrag(_x) {
return _beginDrag.apply(this, arguments);
}
return beginDrag;
}(),
dragOver: function () {
var _dragOver = (0, _asyncToGenerator2.default)(function* (_ref3) {
var {
dataHook,
offset
} = _ref3;
var baseLocator = yield base.unwrap();
var moveMouseToNewPosition = () => baseLocator.evaluate((baseElement, args) => {
var destinationElement = baseElement.querySelector("[data-hook=\"".concat(args.destinationDataHook, "\"]"));
if (!destinationElement) {
throw new Error("Element with data-hook=\"".concat(args.destinationDataHook, "\" not found"));
}
var {
x,
y,
height
} = destinationElement.getBoundingClientRect();
var eventOptions = {
bubbles: true,
clientX: args.xAxisOffset ? x + args.xAxisOffset : x,
clientY: y + height / 2
};
baseElement.dispatchEvent(new MouseEvent('mousemove', eventOptions));
}, {
destinationDataHook: dataHook,
xAxisOffset: offset == null ? void 0 : offset.x
});
// Move twice to ensure proper drag-over registration (same as Puppeteer driver)
yield moveMouseToNewPosition();
yield moveMouseToNewPosition();
});
function dragOver(_x2) {
return _dragOver.apply(this, arguments);
}
return dragOver;
}(),
endDrag: function () {
var _endDrag = (0, _asyncToGenerator2.default)(function* () {
var baseLocator = yield base.unwrap();
yield baseLocator.evaluate(baseElement => {
baseElement.dispatchEvent(new MouseEvent('mouseup', {
bubbles: true
}));
});
});
function endDrag() {
return _endDrag.apply(this, arguments);
}
return endDrag;
}()
};
};
exports.dragAndDropPlaywrightDriverFactory = dragAndDropPlaywrightDriverFactory;
//# sourceMappingURL=dragAndDropPlaywrightDriverFactory.js.map