From 90574778e00d4078cb8c9c508ae78ad4eb75fa4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Thu, 30 Nov 2023 19:12:53 +0100 Subject: [PATCH] [dome] table double-click events --- ivette/src/dome/renderer/table/views.tsx | 25 ++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/ivette/src/dome/renderer/table/views.tsx b/ivette/src/dome/renderer/table/views.tsx index d2e29169c2a..3e40f7a12e1 100644 --- a/ivette/src/dome/renderer/table/views.tsx +++ b/ivette/src/dome/renderer/table/views.tsx @@ -181,6 +181,8 @@ export interface TableProps<Key, Row> { selection?: Key; /** Selection callback. */ onSelection?: (row: Row, key: Key, index: number) => void; + /** Double click callback. */ + onDoubleClick?: (row: Row, index: number) => void; /** Context menu callback. */ onContextMenu?: (row: Row, index: number) => void; /** Fallback for rendering an empty table. */ @@ -337,6 +339,8 @@ class TableState<Key, Row> { selectedIndex?: number; // Current selected index sortBy?: string; // last sorting dataKey sortDirection?: SortDirectionType; // last sorting direction + onSelection?: (data: Row, key: Key, index: number) => void; // main callback + onDoubleClick?: (row: Row, index: number) => void; // double click callback onContextMenu?: (row: Row, index: number) => void; // context menu callback range?: IndexRange; rowCount = 0; @@ -350,6 +354,7 @@ class TableState<Key, Row> { this.rowClassName = this.rowClassName.bind(this); this.onHeaderMenu = this.onHeaderMenu.bind(this); this.onRowClick = this.onRowClick.bind(this); + this.onRowDoubleClick = this.onRowDoubleClick.bind(this); this.onRowRightClick = this.onRowRightClick.bind(this); this.onKeyDown = this.onKeyDown.bind(this); this.onSorting = this.onSorting.bind(this); @@ -363,6 +368,7 @@ class TableState<Key, Row> { this.signal = undefined; this.onSelection = undefined; this.onContextMenu = undefined; + this.onDoubleClick = undefined; } forceUpdate(): void { @@ -509,8 +515,6 @@ class TableState<Key, Row> { // ---- Selection Management - onSelection?: (data: Row, key: Key, index: number) => void; - onRowClick(info: RowMouseEventHandlerParams): void { const { index } = info; const data = info.rowData as (Row | undefined); @@ -529,7 +533,8 @@ class TableState<Key, Row> { rowClassName({ index }: Index): string { if (this.selectedIndex === index) return 'dome-xTable-selected'; - return (index & 1 ? 'dome-xTable-even' : 'dome-xTable-odd'); // eslint-disable-line no-bitwise + // eslint-disable-next-line no-bitwise + return (index & 1 ? 'dome-xTable-even' : 'dome-xTable-odd'); } keyStepper(index: number): void { @@ -563,7 +568,17 @@ class TableState<Key, Row> { // ---- Row Events - onRowRightClick({ event, rowData, index }: RowMouseEventHandlerParams): void { + onRowDoubleClick({ event, rowData, index }: RowMouseEventHandlerParams): void + { + const callback = this.onDoubleClick; + if (callback) { + event.stopPropagation(); + callback(rowData, index); + } + } + + onRowRightClick({ event, rowData, index }: RowMouseEventHandlerParams): void + { const callback = this.onContextMenu; if (callback) { event.stopPropagation(); @@ -1092,6 +1107,7 @@ function makeTable<Key, Row>( headerRowRenderer={headerRowRenderer} onRowsRendered={state.onRowsRendered} onRowClick={state.onRowClick} + onRowDoubleClick={state.onRowDoubleClick} onRowRightClick={state.onRowRightClick} sortBy={state.sortBy} sortDirection={state.sortDirection} @@ -1152,6 +1168,7 @@ export function Table<Key, Row>(props: TableProps<Key, Row>): JSX.Element { state.setSorting(props.sorting); state.setRendering(props.rendering); state.onSelection = props.onSelection; + state.onDoubleClick = props.onDoubleClick; state.onContextMenu = props.onContextMenu; return state.unwind; }); -- GitLab