Skip to content

Commit bda0bdd

Browse files
authored
Merge pull request #16 from Workfront/feature-add-resize-outline
feat: add resize column outline
2 parents 8e7a731 + 96791c3 commit bda0bdd

File tree

6 files changed

+44
-80
lines changed

6 files changed

+44
-80
lines changed

package-lock.json

Lines changed: 9 additions & 63 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/core/src/data-grid-dnd/data-grid-dnd.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as React from "react";
44
import DataGrid, { DataGridProps, DataGridRef } from "../data-grid/data-grid";
55
import type { GridColumn, GridMouseEventArgs, InnerGridColumn, Rectangle } from "../data-grid/data-grid-types";
66

7-
type Props = Omit<DataGridProps, "dragAndDropState" | "isResizing" | "isDragging" | "onMouseMoveRaw" | "allowResize">;
7+
type Props = Omit<DataGridProps, "dragAndDropState" | "isResizing" | 'resizeCol' | "isDragging" | "onMouseMoveRaw" | "allowResize">;
88

99
export interface DataGridDndProps extends Props {
1010
/**
@@ -382,6 +382,7 @@ const DataGridDnd: React.FunctionComponent<DataGridDndProps> = p => {
382382
prelightCells={p.prelightCells}
383383
rowHeight={p.rowHeight}
384384
rows={p.rows}
385+
resizeCol={resizeCol}
385386
selection={p.selection}
386387
smoothScrollX={p.smoothScrollX}
387388
smoothScrollY={p.smoothScrollY}

packages/core/src/data-grid/data-grid-lib.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,3 +1282,13 @@ export function computeBounds(
12821282

12831283
return result;
12841284
}
1285+
1286+
1287+
export function drawColumnResizeOutline(ctx: CanvasRenderingContext2D, yOffset: number, xOffset: number, height: number, theme: Theme) {
1288+
ctx.beginPath();
1289+
ctx.lineWidth = 2;
1290+
ctx.moveTo(yOffset, xOffset);
1291+
ctx.lineTo(yOffset, height);
1292+
ctx.strokeStyle= theme.accentColor
1293+
ctx.stroke();
1294+
}

packages/core/src/data-grid/data-grid-render.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
computeBounds,
3535
getMiddleCenterBias,
3636
drawCheckbox,
37+
drawColumnResizeOutline,
3738
} from "./data-grid-lib";
3839
import type { SpriteManager, SpriteVariant } from "./data-grid-sprites";
3940
import type { Theme } from "../common/styles";
@@ -1856,6 +1857,7 @@ export interface DrawGridArg {
18561857
readonly groupHeaderHeight: number;
18571858
readonly disabledRows: CompactSelection;
18581859
readonly rowHeight: number | ((index: number) => number);
1860+
readonly resizeCol: number | undefined,
18591861
readonly verticalBorder: (col: number) => boolean;
18601862
readonly isResizing: boolean;
18611863
readonly isFocused: boolean;
@@ -1970,6 +1972,7 @@ export function drawGrid(arg: DrawGridArg, lastArg: DrawGridArg | undefined) {
19701972
fillHandle,
19711973
lastRowSticky: trailingRowType,
19721974
rows,
1975+
resizeCol,
19731976
getCellContent,
19741977
getGroupDetails,
19751978
getRowThemeOverride,
@@ -2171,7 +2174,7 @@ export function drawGrid(arg: DrawGridArg, lastArg: DrawGridArg | undefined) {
21712174
);
21722175
});
21732176

2174-
if (damage.length > 0) {
2177+
if (!isResizing && damage.length > 0) {
21752178
clipDamage(
21762179
targetCtx,
21772180
effectiveCols,
@@ -2254,7 +2257,7 @@ export function drawGrid(arg: DrawGridArg, lastArg: DrawGridArg | undefined) {
22542257
}
22552258
}
22562259

2257-
if (doHeaders) {
2260+
if (!isResizing && doHeaders) {
22582261
clipDamage(
22592262
overlayCtx,
22602263
effectiveCols,
@@ -2514,6 +2517,18 @@ export function drawGrid(arg: DrawGridArg, lastArg: DrawGridArg | undefined) {
25142517
lastBuffer: doubleBuffer ? (targetBuffer === bufferA ? "a" : "b") : undefined,
25152518
};
25162519

2520+
2521+
if(isResizing){
2522+
walkColumns(effectiveCols, 0, translateX, 0, totalHeaderHeight, (c, x) => {
2523+
2524+
if(c.sourceIndex === resizeCol) {
2525+
drawColumnResizeOutline(overlayCtx, x+c.width, 0, totalHeaderHeight+1, theme );
2526+
drawColumnResizeOutline(targetCtx, x+c.width, totalHeaderHeight, height, theme );
2527+
}
2528+
});
2529+
2530+
}
2531+
25172532
targetCtx.restore();
25182533
overlayCtx.restore();
25192534
}

packages/core/src/data-grid/data-grid.tsx

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export interface DataGridProps {
9595
* @group Data
9696
*/
9797
readonly rows: number;
98-
98+
readonly resizeCol: number | undefined;
9999
readonly headerHeight: number;
100100
readonly groupHeaderHeight: number;
101101
readonly enableGroups: boolean;
@@ -305,6 +305,7 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
305305
groupHeaderHeight,
306306
rowHeight,
307307
rows,
308+
resizeCol,
308309
getCellContent,
309310
getRowThemeOverride,
310311
onHeaderMenuClick,
@@ -688,6 +689,7 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
688689
fillHandle,
689690
lastRowSticky: trailingRowType,
690691
rows,
692+
resizeCol,
691693
drawFocus: drawFocusRing,
692694
getCellContent,
693695
getGroupDetails: getGroupDetails ?? (name => ({ name })),
@@ -763,6 +765,7 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
763765
experimental?.renderStrategy,
764766
lastWasTouch,
765767
getCellRenderer,
768+
resizeCol
766769
]);
767770

768771
const lastDrawRef = React.useRef(draw);
@@ -1108,19 +1111,7 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
11081111
onMouseMoveRaw?.(ev);
11091112
onMouseMove(args);
11101113
},
1111-
[
1112-
getMouseArgsForPosition,
1113-
allowResize,
1114-
fillHandle,
1115-
selection,
1116-
onMouseMoveRaw,
1117-
onMouseMove,
1118-
onItemHovered,
1119-
getCellContent,
1120-
getCellRenderer,
1121-
damageInternal,
1122-
getBoundsForItem,
1123-
]
1114+
[eventTargetRef, getMouseArgsForPosition, allowResize, fillHandle, selection, onMouseMoveRaw, onMouseMove, onItemHovered, getCellContent, getCellRenderer, damageInternal, getBoundsForItem]
11241115
);
11251116
useEventListener("mousemove", onMouseMoveImpl, window, true);
11261117

packages/core/test/data-grid.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ const basicProps: DataGridProps = {
9595
isDragging: false,
9696
isResizing: false,
9797
trailingRowType: "none",
98+
resizeCol: undefined,
9899
rowHeight: 32,
99100
rows: 1000,
100101
verticalBorder: () => true,

0 commit comments

Comments
 (0)