Skip to content

Commit 7a52b60

Browse files
committed
rtl/ltr optimizations
1 parent c3c8b5f commit 7a52b60

File tree

2 files changed

+47
-36
lines changed

2 files changed

+47
-36
lines changed

src/Core/Components/DataGrid/FluentDataGrid.razor.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@
7777
opacity: var(--fluent-data-grid-header-opacity);
7878
}
7979

80+
[dir=rtl] * ::deep .resize-handle {
81+
right: unset;
82+
left: 0;
83+
}
84+
8085
.header {
8186
padding: 0;
8287
z-index: 3;

src/Core/Components/DataGrid/FluentDataGrid.razor.js

Lines changed: 42 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,11 @@ export function init(gridElement, autoFocus) {
133133
document.body.removeEventListener('click', bodyClickHandler);
134134
document.body.removeEventListener('mousedown', bodyClickHandler);
135135
gridElement.removeEventListener('keydown', keyDownHandler);
136-
delete grids[gridElement];
136+
137+
const index = grids.findIndex(grid => grid.id === gridElement.id);
138+
if (index > -1) {
139+
grids.splice(index, 1);
140+
}
137141
}
138142
};
139143
}
@@ -168,7 +172,6 @@ export function enableColumnResizing(gridElement, resizeColumnOnAllRows = true)
168172
return;
169173
}
170174

171-
const isRTL = getComputedStyle(gridElement).direction === 'rtl';
172175
const isGrid = gridElement.classList.contains('grid')
173176

174177
let tableHeight = gridElement.offsetHeight;
@@ -205,9 +208,9 @@ export function enableColumnResizing(gridElement, resizeColumnOnAllRows = true)
205208
const resizeTop = header.querySelector('.resize-handle').offsetTop;
206209

207210
// add a new resize div
208-
const div = createDiv(resizeHandleHeight, resizeTop, isRTL);
211+
const div = createDiv(resizeHandleHeight, resizeTop);
209212
header.appendChild(div);
210-
setListeners(div, isRTL);
213+
setListeners(div);
211214
});
212215

213216
let initialWidths;
@@ -230,32 +233,15 @@ export function enableColumnResizing(gridElement, resizeColumnOnAllRows = true)
230233
});
231234
}
232235

233-
function setListeners(div, isRTL) {
236+
function setListeners(div) {
234237
let pageX, curCol, curColWidth;
235238

236-
div.addEventListener('pointerdown', function (e) {
237-
curCol = e.target.parentElement;
238-
pageX = e.pageX;
239-
240-
const padding = paddingDiff(curCol);
241-
242-
curColWidth = curCol.offsetWidth - padding;
243-
});
244-
245-
div.addEventListener('pointerover', function (e) {
246-
e.target.style.borderInlineEnd = 'var(--fluent-data-grid-resize-handle-width) solid var(--fluent-data-grid-resize-handle-color)';
247-
e.target.previousElementSibling.style.visibility = 'hidden';
248-
});
249-
250-
div.addEventListener('pointerup', removeBorder);
251-
div.addEventListener('pointercancel', removeBorder);
252-
div.addEventListener('pointerleave', removeBorder);
253-
254-
document.addEventListener('pointermove', (e) =>
239+
const moveHandler = (e) =>
255240
requestAnimationFrame(() => {
256241
gridElement.style.tableLayout = 'fixed';
257242

258243
if (curCol) {
244+
const isRTL = getComputedStyle(gridElement).direction === 'rtl';
259245
const diffX = isRTL ? pageX - e.pageX : e.pageX - pageX;
260246
const column = columns.find(({ header }) => header === curCol);
261247

@@ -276,17 +262,40 @@ export function enableColumnResizing(gridElement, resizeColumnOnAllRows = true)
276262
curCol.style.width = column.size;
277263
}
278264
}
279-
})
280-
);
265+
});
266+
267+
const upHandler = function () {
268+
document.removeEventListener('pointermove', moveHandler);
269+
document.removeEventListener('pointerup', upHandler);
281270

282-
document.addEventListener('pointerup', function () {
283271
curCol = undefined;
284272
curColWidth = undefined;
285273
pageX = undefined;
274+
};
275+
276+
div.addEventListener('pointerdown', function (e) {
277+
curCol = e.target.parentElement;
278+
pageX = e.pageX;
279+
280+
const padding = paddingDiff(curCol);
281+
282+
curColWidth = curCol.offsetWidth - padding;
283+
284+
document.addEventListener('pointermove', moveHandler);
285+
document.addEventListener('pointerup', upHandler);
286286
});
287+
288+
div.addEventListener('pointerover', function (e) {
289+
e.target.style.borderInlineEnd = 'var(--fluent-data-grid-resize-handle-width) solid var(--fluent-data-grid-resize-handle-color)';
290+
e.target.previousElementSibling.style.visibility = 'hidden';
291+
});
292+
293+
div.addEventListener('pointerup', removeBorder);
294+
div.addEventListener('pointercancel', removeBorder);
295+
div.addEventListener('pointerleave', removeBorder);
287296
}
288297

289-
function createDiv(height, top, isRTL) {
298+
function createDiv(height, top) {
290299
const div = document.createElement('div');
291300
div.className = "actual-resize-handle";
292301
div.style.top = top + 'px';
@@ -296,14 +305,8 @@ export function enableColumnResizing(gridElement, resizeColumnOnAllRows = true)
296305
div.style.height = (height - 4) + 'px';
297306
div.style.width = '6px';
298307
div.style.opacity = 'var(--fluent-data-grid-header-opacity)'
308+
div.style.insetInlineEnd = '0';
299309

300-
if (isRTL) {
301-
div.style.left = '0';
302-
div.style.right = 'unset';
303-
} else {
304-
div.style.left = 'unset';
305-
div.style.right = '0';
306-
}
307310
return div;
308311
}
309312

@@ -446,7 +449,10 @@ export function autoFitGridColumns(gridElement, columnCount) {
446449
gridElement.style.gridTemplateColumns = gridTemplateColumns;
447450
gridElement.classList.remove("auto-fit");
448451

449-
grids[gridElement.id] = gridTemplateColumns;
452+
const grid = grids.find(grid => grid.id === gridElement.id);
453+
if (grid) {
454+
grid.initialWidths = gridTemplateColumns;
455+
}
450456
}
451457

452458
function calculateVisibleRows(gridElement, rowHeight) {

0 commit comments

Comments
 (0)