Skip to content

Commit 48597e7

Browse files
authored
Use renderRow to implement row dragging (#3965)
* Use `renderRow` to implement row dragging * new line * Fix newline
1 parent 1621999 commit 48597e7

3 files changed

Lines changed: 12 additions & 16 deletions

File tree

website/components/DraggableCellRenderer.tsx renamed to website/components/DraggableRowRenderer.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,26 @@ import { useState } from 'react';
22
import { css } from 'ecij';
33
import clsx from 'clsx';
44

5-
import { Cell, type CellRendererProps } from '../../src';
5+
import { Row, type RenderRowProps } from '../../src';
66

77
const rowDraggingClassname = css`
88
opacity: 0.5;
99
`;
1010

1111
const rowOverClassname = css`
12-
.rdg-row:has(&) {
13-
background-color: #ececec;
14-
}
12+
background-color: #ececec;
1513
`;
1614

17-
interface DraggableCellRenderProps<R, SR> extends CellRendererProps<R, SR> {
15+
interface DraggableRowRenderProps<R, SR> extends RenderRowProps<R, SR> {
1816
onRowReorder: (sourceIndex: number, targetIndex: number) => void;
1917
}
2018

21-
export function DraggableCellRenderer<R, SR>({
19+
export function DraggableRowRenderer<R, SR>({
2220
rowIdx,
2321
className,
2422
onRowReorder,
2523
...props
26-
}: DraggableCellRenderProps<R, SR>) {
24+
}: DraggableRowRenderProps<R, SR>) {
2725
const [isDragging, setIsDragging] = useState(false);
2826
const [isOver, setIsOver] = useState(false);
2927

@@ -34,8 +32,6 @@ export function DraggableCellRenderer<R, SR>({
3432

3533
function onDragStart(event: React.DragEvent<HTMLDivElement>) {
3634
setIsDragging(true);
37-
// TODO: use a custom drag image to show a preview of the row being dragged
38-
event.dataTransfer.setDragImage(event.currentTarget.parentElement!.firstElementChild!, 40, 17);
3935
event.dataTransfer.setData('text/plain', String(rowIdx));
4036
event.dataTransfer.dropEffect = 'move';
4137
}
@@ -70,7 +66,7 @@ export function DraggableCellRenderer<R, SR>({
7066
}
7167

7268
return (
73-
<Cell
69+
<Row
7470
draggable
7571
onDragStart={onDragStart}
7672
onDragEnd={onDragEnd}

website/components/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export * from './CellExpanderFormatter';
22
export * from './ChildRowDeleteButton';
3-
export * from './DraggableCellRenderer';
3+
export * from './DraggableRowRenderer';

website/routes/RowsReordering.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useCallback, useState } from 'react';
22

3-
import { DataGrid, renderTextEditor, type CellRendererProps, type Column } from '../../src';
4-
import { DraggableCellRenderer } from '../components';
3+
import { DataGrid, renderTextEditor, type Column, type RenderRowProps } from '../../src';
4+
import { DraggableRowRenderer } from '../components';
55
import { startViewTransition } from '../utils';
66
import { useDirection } from '../directionContext';
77

@@ -62,7 +62,7 @@ function RowsReordering() {
6262
const direction = useDirection();
6363
const [rows, setRows] = useState(createRows);
6464

65-
const renderCell = useCallback((key: React.Key, props: CellRendererProps<Row, unknown>) => {
65+
const renderRow = useCallback((key: React.Key, props: RenderRowProps<Row>) => {
6666
function onRowReorder(fromIndex: number, toIndex: number) {
6767
function reorderRows() {
6868
setRows((rows) => {
@@ -76,7 +76,7 @@ function RowsReordering() {
7676
startViewTransition(reorderRows);
7777
}
7878

79-
return <DraggableCellRenderer key={key} {...props} onRowReorder={onRowReorder} />;
79+
return <DraggableRowRenderer<Row, unknown> key={key} {...props} onRowReorder={onRowReorder} />;
8080
}, []);
8181

8282
return (
@@ -85,7 +85,7 @@ function RowsReordering() {
8585
columns={columns}
8686
rows={rows}
8787
onRowsChange={setRows}
88-
renderers={{ renderCell }}
88+
renderers={{ renderRow }}
8989
direction={direction}
9090
/>
9191
);

0 commit comments

Comments
 (0)