Skip to content

Commit f6bf711

Browse files
committed
draggable.grid.header.toolbar.SortZone: add drag to scroll support #6378 WIP
1 parent 4b76d41 commit f6bf711

4 files changed

Lines changed: 48 additions & 17 deletions

File tree

src/draggable/grid/header/toolbar/SortZone.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ class SortZone extends BaseSortZone {
189189
});
190190

191191
NeoArray.move(columnPositions, index1, index2);
192+
// console.log(index1, columnPositions[index1].dataField, index2, columnPositions[index2].dataField);
192193

193194
column1Cells.forEach(node => {
194195
node.style.left = columnPositions[index2].x + 'px';

src/draggable/toolbar/SortZone.mjs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,9 @@ class SortZone extends DragZone {
149149
/**
150150
* @param {Object} data
151151
*/
152-
onDragMove(data) {
152+
async onDragMove(data) {
153153
// the method can trigger before we got the client rects from the main thread
154-
if (!this.itemRects) {
154+
if (!this.itemRects || this.isScrolling) {
155155
return
156156
}
157157

@@ -174,18 +174,30 @@ class SortZone extends DragZone {
174174
if (index > 0 && (!reversed && delta < 0 || reversed && delta > 0)) {
175175
if (Math.abs(delta) > itemRects[index - 1][itemWidth] * moveFactor) {
176176
me.currentIndex--;
177+
178+
if (data.clientX < me.boundaryContainerRect.left) {
179+
me.isScrolling = true;
180+
await me.owner.scrollToIndex?.(me.currentIndex, itemRects[me.currentIndex]);
181+
await me.timeout(50);
182+
me.isScrolling = false
183+
}
184+
177185
me.switchItems(index, me.currentIndex)
178186
}
179187
}
180188

181189
else if (index < maxItems && (!reversed && delta > 0 || reversed && delta < 0)) {
182190
if (Math.abs(delta) > itemRects[index + 1][itemWidth] * moveFactor) {
191+
me.currentIndex++;
192+
183193
if (data.clientX > me.boundaryContainerRect.right) {
184-
console.log(delta, me.currentIndex, data, me.boundaryContainerRect);
185-
} else {
186-
me.currentIndex++;
187-
me.switchItems(index, me.currentIndex)
194+
me.isScrolling = true;
195+
await me.owner.scrollToIndex?.(me.currentIndex, itemRects[me.currentIndex]);
196+
await me.timeout(50);
197+
me.isScrolling = false
188198
}
199+
200+
me.switchItems(index, me.currentIndex)
189201
}
190202
}
191203
}

src/grid/View.mjs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -652,13 +652,14 @@ class GridView extends Component {
652652
* @returns {Object[]}
653653
*/
654654
getColumnCells(dataField) {
655-
let me = this,
656-
cells = [],
657-
vdomRoot = me.getVdomRoot(),
658-
firstRow = vdomRoot.cn[0],
659-
i = 0,
660-
len = firstRow.cn.length,
661-
cell, columnIndex;
655+
let me = this,
656+
cells = [],
657+
columnIndex = -1,
658+
vdomRoot = me.getVdomRoot(),
659+
firstRow = vdomRoot.cn[0],
660+
i = 0,
661+
len = firstRow.cn.length,
662+
cell;
662663

663664
// Columns might get moved via drag&drop, so let's check for the current match
664665
for (; i < len; i++) {
@@ -668,10 +669,14 @@ class GridView extends Component {
668669
}
669670
}
670671

671-
vdomRoot.cn.forEach(row => {
672-
cell = row.cn[columnIndex];
673-
cell && cells.push(cell)
674-
});
672+
if (columnIndex > -1) {
673+
vdomRoot.cn.forEach(row => {
674+
cell = row.cn[columnIndex];
675+
cell && cells.push(cell)
676+
})
677+
}
678+
679+
console.log('getColumnCells', dataField, columnIndex, cells, Neo.clone(firstRow.cn, true));
675680

676681
return cells
677682
}

src/grid/header/Toolbar.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,19 @@ class Toolbar extends BaseToolbar {
227227
})
228228
}
229229
}
230+
231+
/**
232+
* @param {Number} index
233+
* @param {DOMRect} itemRect
234+
* @returns {Promise<void>}
235+
*/
236+
async scrollToIndex(index, itemRect) {
237+
await Neo.main.DomAccess.scrollIntoView({
238+
delay : 200,
239+
id : this.items[index].id,
240+
windowId: this.windowId
241+
})
242+
}
230243
}
231244

232245
export default Neo.setupClass(Toolbar);

0 commit comments

Comments
 (0)