diff --git a/src/myfasthtml/controls/DataGrid.py b/src/myfasthtml/controls/DataGrid.py
index 1350809..f3e346e 100644
--- a/src/myfasthtml/controls/DataGrid.py
+++ b/src/myfasthtml/controls/DataGrid.py
@@ -16,6 +16,7 @@ from myfasthtml.controls.DataGridColumnsManager import DataGridColumnsManager
from myfasthtml.controls.DataGridFormattingEditor import DataGridFormattingEditor
from myfasthtml.controls.DataGridQuery import DataGridQuery, DG_QUERY_FILTER
from myfasthtml.controls.DslEditor import DslEditorConf
+from myfasthtml.controls.Keyboard import Keyboard
from myfasthtml.controls.Mouse import Mouse
from myfasthtml.controls.Panel import Panel, PanelConf
from myfasthtml.controls.datagrid_objects import DataGridColumnState, DataGridRowState, \
@@ -157,6 +158,13 @@ class Commands(BaseCommands):
self._owner.on_click
).htmx(target=f"#tsm_{self._id}")
+ def on_key_pressed(self):
+ return Command("OnKeyPressed",
+ "Key pressed on the table",
+ self._owner,
+ self._owner.on_key_pressed
+ ).htmx(target=f"#tsm_{self._id}")
+
def on_mouse_selection(self):
return Command("OnMouseSelection",
"Range selection with mouse",
@@ -252,6 +260,10 @@ class DataGrid(MultipleInstance):
"shift+click": {"command": self.commands.on_click(), "hx_vals": "js:getCellId()"},
}
+ self._key_support = {
+ "esc": self.commands.on_key_pressed(),
+ }
+
logger.debug(f"DataGrid '{self.get_table_name()}' with id='{self._id}' created.")
@property
@@ -521,6 +533,14 @@ class DataGrid(MultipleInstance):
return self.render_partial()
+ def on_key_pressed(self, combination, has_focus, is_inside):
+ logger.debug(f"on_key_pressed {combination=} {has_focus=} {is_inside=}")
+ if combination == "esc":
+ self._update_current_position(None)
+ self._state.selection.extra_selected.clear()
+
+ return self.render_partial()
+
def on_column_changed(self):
logger.debug("on_column_changed")
return self.render_partial("table")
@@ -876,6 +896,7 @@ class DataGrid(MultipleInstance):
self._panel.set_main(self.mk_table_wrapper()),
Script(f"initDataGrid('{self._id}');"),
Mouse(self, combinations=self._mouse_support, _id="-mouse"),
+ Keyboard(self, combinations=self._key_support, _id="-keyboard"),
id=self._id,
cls="grid",
style="height: 100%; grid-template-rows: auto 1fr;"