Skip to content

Commit ae6e85f

Browse files
committed
MAGETWO-96412: [2.3.x] Not possible to drag specified Related/Upsell/Cross-sell products to new positions in Windows 10 machine
- Fixed touch support in grid
1 parent cf69967 commit ae6e85f

File tree

1 file changed

+53
-29
lines changed
  • app/code/Magento/Ui/view/base/web/js/dynamic-rows

1 file changed

+53
-29
lines changed

app/code/Magento/Ui/view/base/web/js/dynamic-rows/dnd.js

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ define([
1515
], function (ko, $, _, Element) {
1616
'use strict';
1717

18-
var transformProp,
19-
isTouchDevice = typeof document.ontouchstart !== 'undefined';
18+
var transformProp;
2019

2120
/**
2221
* Get element context
@@ -110,11 +109,7 @@ define([
110109
* @param {Object} data - element data
111110
*/
112111
initListeners: function (elem, data) {
113-
if (isTouchDevice) {
114-
$(elem).on('touchstart', this.mousedownHandler.bind(this, data, elem));
115-
} else {
116-
$(elem).on('mousedown', this.mousedownHandler.bind(this, data, elem));
117-
}
112+
$(elem).on('mousedown touchstart', this.mousedownHandler.bind(this, data, elem));
118113
},
119114

120115
/**
@@ -125,6 +120,7 @@ define([
125120
* @param {Object} event - key down event
126121
*/
127122
mousedownHandler: function (data, elem, event) {
123+
this.disableScroll();
128124
var recordNode = this.getRecordNode(elem),
129125
originRecord = $(elem).parents('tr').eq(0),
130126
drEl = this.draggableElement,
@@ -137,20 +133,13 @@ define([
137133
drEl.originRow = originRecord;
138134
drEl.instance = recordNode = this.processingStyles(recordNode, elem);
139135
drEl.instanceCtx = this.getRecord(originRecord[0]);
140-
drEl.eventMousedownY = isTouchDevice ? event.originalEvent.touches[0].pageY : event.pageY;
136+
drEl.eventMousedownY = this.getPageY(event);
141137
drEl.minYpos =
142138
$table.offset().top - originRecord.offset().top + $table.children('thead').outerHeight();
143139
drEl.maxYpos = drEl.minYpos + $table.children('tbody').outerHeight() - originRecord.outerHeight();
144140
$tableWrapper.append(recordNode);
145-
146-
if (isTouchDevice) {
147-
this.body.bind('touchmove', this.mousemoveHandler);
148-
this.body.bind('touchend', this.mouseupHandler);
149-
} else {
150-
this.body.bind('mousemove', this.mousemoveHandler);
151-
this.body.bind('mouseup', this.mouseupHandler);
152-
}
153-
141+
this.body.bind('mousemove touchmove', this.mousemoveHandler);
142+
this.body.bind('mouseup touchend', this.mouseupHandler);
154143
},
155144

156145
/**
@@ -160,16 +149,13 @@ define([
160149
*/
161150
mousemoveHandler: function (event) {
162151
var depEl = this.draggableElement,
163-
pageY = isTouchDevice ? event.originalEvent.touches[0].pageY : event.pageY,
152+
pageY = this.getPageY(event),
164153
positionY = pageY - depEl.eventMousedownY,
165154
processingPositionY = positionY + 'px',
166155
processingMaxYpos = depEl.maxYpos + 'px',
167156
processingMinYpos = depEl.minYpos + 'px',
168157
depElement = this.getDepElement(depEl.instance, positionY, depEl.originRow);
169158

170-
event.stopPropagation();
171-
event.preventDefault();
172-
173159
if (depElement) {
174160
depEl.depElement ? depEl.depElement.elem.removeClass(depEl.depElement.className) : false;
175161
depEl.depElement = depElement;
@@ -192,9 +178,10 @@ define([
192178
* Mouse up handler
193179
*/
194180
mouseupHandler: function (event) {
181+
this.enableScroll();
195182
var depElementCtx,
196183
drEl = this.draggableElement,
197-
pageY = isTouchDevice ? event.originalEvent.touches[0].pageY : event.pageY,
184+
pageY = this.getPageY(event),
198185
positionY = pageY - drEl.eventMousedownY;
199186

200187
drEl.depElement = this.getDepElement(drEl.instance, positionY, this.draggableElement.originRow);
@@ -212,13 +199,8 @@ define([
212199

213200
drEl.originRow.removeClass(this.draggableElementClass);
214201

215-
if (isTouchDevice) {
216-
this.body.unbind('touchmove', this.mousemoveHandler);
217-
this.body.unbind('touchend', this.mouseupHandler);
218-
} else {
219-
this.body.unbind('mousemove', this.mousemoveHandler);
220-
this.body.unbind('mouseup', this.mouseupHandler);
221-
}
202+
this.body.unbind('mousemove touchmove', this.mousemoveHandler);
203+
this.body.unbind('mouseup touchend', this.mouseupHandler);
222204

223205
this.draggableElement = {};
224206
},
@@ -402,6 +384,48 @@ define([
402384
index = _.isFunction(ctx.$index) ? ctx.$index() : ctx.$index;
403385

404386
return this.recordsCache()[index];
387+
},
388+
/**
389+
* Get correct page Y
390+
*
391+
* @param {Object} event - current event
392+
* @returns {integer}
393+
*/
394+
getPageY: function(event) {
395+
let pageY;
396+
if (event.type.indexOf('touch') >= 0) {
397+
if (event.originalEvent.touches[0]) {
398+
pageY = event.originalEvent.touches[0].pageY;
399+
} else {
400+
pageY = event.originalEvent.changedTouches[0].pageY;
401+
}
402+
} else {
403+
pageY = event.pageY;
404+
}
405+
return pageY;
406+
},
407+
408+
/**
409+
* Disable page scrolling
410+
*/
411+
disableScroll: function () {
412+
document.body.addEventListener('touchmove', this.preventDefault, { passive: false });
413+
},
414+
415+
/**
416+
* Enable page scrolling
417+
*/
418+
enableScroll: function () {
419+
document.body.removeEventListener('touchmove', this.preventDefault, { passive: false });
420+
},
421+
422+
/**
423+
* Prevent default function
424+
*
425+
* @param {Object} event - event object
426+
*/
427+
preventDefault: function (event) {
428+
event.preventDefault();
405429
}
406430

407431
});

0 commit comments

Comments
 (0)