Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,26 @@ import { useState } from 'react';
import { css } from 'ecij';
import clsx from 'clsx';

import { Cell, type CellRendererProps } from '../../src';
import { Row, type RenderRowProps } from '../../src';

const rowDraggingClassname = css`
opacity: 0.5;
`;

const rowOverClassname = css`
.rdg-row:has(&) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cells have background-color: inherit; so I don't think we ever needed this selector 🤔

background-color: #ececec;
}
background-color: #ececec;
`;

interface DraggableCellRenderProps<R, SR> extends CellRendererProps<R, SR> {
interface DraggableRowRenderProps<R, SR> extends RenderRowProps<R, SR> {
onRowReorder: (sourceIndex: number, targetIndex: number) => void;
}

export function DraggableCellRenderer<R, SR>({
export function DraggableRowRenderer<R, SR>({
rowIdx,
className,
onRowReorder,
...props
}: DraggableCellRenderProps<R, SR>) {
}: DraggableRowRenderProps<R, SR>) {
const [isDragging, setIsDragging] = useState(false);
const [isOver, setIsOver] = useState(false);

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

function onDragStart(event: React.DragEvent<HTMLDivElement>) {
setIsDragging(true);
// TODO: use a custom drag image to show a preview of the row being dragged
event.dataTransfer.setDragImage(event.currentTarget.parentElement!.firstElementChild!, 40, 17);
Comment on lines -37 to -38
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The default image is not the best but at least it shows the full row. I am sure there is a way to improve it

event.dataTransfer.setData('text/plain', String(rowIdx));
event.dataTransfer.dropEffect = 'move';
}
Expand Down Expand Up @@ -70,7 +66,7 @@ export function DraggableCellRenderer<R, SR>({
}

return (
<Cell
<Row
draggable
onDragStart={onDragStart}
onDragEnd={onDragEnd}
Expand Down
2 changes: 1 addition & 1 deletion website/components/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export * from './CellExpanderFormatter';
export * from './ChildRowDeleteButton';
export * from './DraggableCellRenderer';
export * from './DraggableRowRenderer';
10 changes: 5 additions & 5 deletions website/routes/RowsReordering.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useCallback, useState } from 'react';

import { DataGrid, renderTextEditor, type CellRendererProps, type Column } from '../../src';
import { DraggableCellRenderer } from '../components';
import { DataGrid, renderTextEditor, type Column, type RenderRowProps } from '../../src';
import { DraggableRowRenderer } from '../components';
import { startViewTransition } from '../utils';
import { useDirection } from '../directionContext';

Expand Down Expand Up @@ -62,7 +62,7 @@ function RowsReordering() {
const direction = useDirection();
const [rows, setRows] = useState(createRows);

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

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

return (
Expand All @@ -85,7 +85,7 @@ function RowsReordering() {
columns={columns}
rows={rows}
onRowsChange={setRows}
renderers={{ renderCell }}
renderers={{ renderRow }}
direction={direction}
/>
);
Expand Down