diff --git a/src/Core/Components/DataGrid/FluentDataGrid.razor.css b/src/Core/Components/DataGrid/FluentDataGrid.razor.css index 1256224f0a..2c1da23fc3 100644 --- a/src/Core/Components/DataGrid/FluentDataGrid.razor.css +++ b/src/Core/Components/DataGrid/FluentDataGrid.razor.css @@ -77,6 +77,11 @@ opacity: var(--fluent-data-grid-header-opacity); } +[dir=rtl] * ::deep .resize-handle { + right: unset; + left: 0; +} + .header { padding: 0; z-index: 3; diff --git a/src/Core/Components/DataGrid/FluentDataGrid.razor.js b/src/Core/Components/DataGrid/FluentDataGrid.razor.js index 71450982d3..86e612e481 100644 --- a/src/Core/Components/DataGrid/FluentDataGrid.razor.js +++ b/src/Core/Components/DataGrid/FluentDataGrid.razor.js @@ -251,31 +251,32 @@ export function enableColumnResizing(gridElement, resizeColumnOnAllRows = true) div.addEventListener('pointercancel', removeBorder); div.addEventListener('pointerleave', removeBorder); - document.addEventListener('pointermove', (e) => + document.addEventListener('pointermove', (e) => requestAnimationFrame(() => { - gridElement.style.tableLayout = 'fixed'; + gridElement.style.tableLayout = 'fixed'; - if (curCol) { - const diffX = isRTL ? pageX - e.pageX : e.pageX - pageX; - const column = columns.find(({ header }) => header === curCol); + if (curCol) { + const rawDiffX = e.pageX - pageX; + const diffX = isRTL ? -rawDiffX : rawDiffX; + const column = columns.find(({ header }) => header === curCol); - column.size = parseInt(Math.max(parseInt(column.header.style.minWidth), curColWidth + diffX), 10) + 'px'; + column.size = parseInt(Math.max(parseInt(column.header.style.minWidth), curColWidth + diffX), 10) + 'px'; - columns.forEach((col) => { - if (col.size.startsWith('minmax')) { - col.size = parseInt(col.header.clientWidth, 10) + 'px'; - } - }); - - if (isGrid) { - gridElement.style.gridTemplateColumns = columns - .map(({ size }) => size) - .join(' '); - } - else { - curCol.style.width = column.size; + columns.forEach((col) => { + if (col.size.startsWith('minmax')) { + col.size = parseInt(col.header.clientWidth, 10) + 'px'; } + }); + + if (isGrid) { + gridElement.style.gridTemplateColumns = columns + .map(({ size }) => size) + .join(' '); } + else { + curCol.style.width = column.size; + } + } }) );