Skip to content

Commit bbbc24e

Browse files
authored
Merge pull request dbgate#1454 from dbgate/feature/resize-column
Improve splitter drag functionality and cursor handling
2 parents 5376a90 + a6f61d9 commit bbbc24e

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

packages/web/src/datagrid/DataGridCore.svelte

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2500,14 +2500,12 @@
25002500
padding: 0;
25012501
margin: 0;
25022502
background-color: var(--theme-datagrid-headercell-background);
2503-
overflow: hidden;
25042503
}
25052504
:global(.data-grid-focused) .active-header-cell {
25062505
background-color: var(--theme-datagrid-focused-cell-background);
25072506
}
25082507
.filter-cell {
25092508
text-align: left;
2510-
overflow: hidden;
25112509
margin: 0;
25122510
padding: 0;
25132511
}

packages/web/src/utility/splitterDrag.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
export default function splitterDrag(node, axes) {
22
let resizeStart = null;
3+
let prevCursor = null;
4+
let prevUserSelect = null;
35

46
const handleResizeDown = e => {
7+
if (e.button !== 0) return;
8+
e.preventDefault();
59
resizeStart = e[axes];
10+
prevCursor = document.body.style.cursor;
11+
prevUserSelect = document.body.style.userSelect;
612
document.addEventListener('mousemove', handleResizeMove, true);
713
document.addEventListener('mouseup', handleResizeEnd, true);
14+
document.body.style.cursor = axes === 'clientX' ? 'col-resize' : 'row-resize';
15+
document.body.style.userSelect = 'none';
816
};
917

1018
const handleResizeMove = e => {
@@ -17,11 +25,20 @@ export default function splitterDrag(node, axes) {
1725
})
1826
);
1927
};
28+
29+
const restoreStyles = () => {
30+
document.body.style.cursor = prevCursor;
31+
document.body.style.userSelect = prevUserSelect;
32+
prevCursor = null;
33+
prevUserSelect = null;
34+
};
35+
2036
const handleResizeEnd = e => {
2137
e.preventDefault();
2238
resizeStart = null;
2339
document.removeEventListener('mousemove', handleResizeMove, true);
2440
document.removeEventListener('mouseup', handleResizeEnd, true);
41+
restoreStyles();
2542
};
2643

2744
node.addEventListener('mousedown', handleResizeDown);
@@ -32,6 +49,7 @@ export default function splitterDrag(node, axes) {
3249
if (resizeStart != null) {
3350
document.removeEventListener('mousemove', handleResizeMove, true);
3451
document.removeEventListener('mouseup', handleResizeEnd, true);
52+
restoreStyles();
3553
}
3654
},
3755
};

0 commit comments

Comments
 (0)