Skip to content

Commit 7f49fa7

Browse files
author
tyengibaryan
committed
feat: add onKeyDown event on custom cell renderer
1 parent ab70423 commit 7f49fa7

3 files changed

Lines changed: 529 additions & 0 deletions

File tree

packages/core/src/cells/cell-types.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,22 @@ interface BaseCellRenderer<T extends InnerGridCell> {
9191
} & BaseGridMouseEventArgs
9292
) => void;
9393
readonly onDelete?: (cell: T) => T | undefined;
94+
95+
readonly onKeyDown?: (
96+
args: {
97+
readonly cell: T;
98+
readonly bounds: Rectangle;
99+
readonly location: Item;
100+
readonly theme: FullTheme;
101+
readonly preventDefault: () => void;
102+
readonly key: string;
103+
readonly keyCode: number;
104+
readonly altKey: boolean;
105+
readonly shiftKey: boolean;
106+
readonly ctrlKey: boolean;
107+
readonly metaKey: boolean;
108+
}
109+
) => T | undefined;
94110
}
95111

96112
/** @category Renderers */

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3498,6 +3498,43 @@ const DataEditorImpl: React.ForwardRefRenderFunction<DataEditorRef, DataEditorPr
34983498

34993499
if (cancelled) return;
35003500

3501+
if (event.location !== undefined && event.bounds !== undefined && !overlayOpen) {
3502+
const [col, row] = event.location;
3503+
const cell = getMangledCellContent([col, row]);
3504+
const renderer = getCellRenderer(cell);
3505+
3506+
if (renderer?.onKeyDown !== undefined) {
3507+
let prevented = false;
3508+
const newVal = renderer.onKeyDown({
3509+
cell,
3510+
bounds: event.bounds,
3511+
location: [col - rowMarkerOffset, row],
3512+
theme: themeForCell(cell, event.location),
3513+
preventDefault: () => {
3514+
prevented = true;
3515+
},
3516+
key: event.key,
3517+
keyCode: event.keyCode,
3518+
altKey: event.altKey,
3519+
shiftKey: event.shiftKey,
3520+
ctrlKey: event.ctrlKey,
3521+
metaKey: event.metaKey,
3522+
});
3523+
3524+
if (prevented) {
3525+
event.preventDefault();
3526+
event.stopPropagation();
3527+
}
3528+
3529+
if (newVal !== undefined && !isInnerOnlyCell(newVal) && isEditableGridCell(newVal) && newVal.readonly !== true) {
3530+
mangledOnCellsEdited([{ location: event.location, value: newVal }]);
3531+
gridRef.current?.damage([{ cell: event.location }]);
3532+
}
3533+
3534+
if (prevented) return;
3535+
}
3536+
}
3537+
35013538
if (handleFixedKeybindings(event)) return;
35023539

35033540
if (gridSelection.current === undefined) return;

0 commit comments

Comments
 (0)