diff --git a/packages/web/src/datagrid/DataGridContextMenu.js b/packages/web/src/datagrid/DataGridContextMenu.js index 1201c95ab..f95dbff32 100644 --- a/packages/web/src/datagrid/DataGridContextMenu.js +++ b/packages/web/src/datagrid/DataGridContextMenu.js @@ -14,6 +14,7 @@ export default function DataGridContextMenu({ openFreeTable, openChartSelection, openActiveChart, + switchToForm, }) { return ( <> @@ -57,6 +58,11 @@ export default function DataGridContextMenu({ Open selection in free table editor Open chart from selection {openActiveChart && Open active chart} + {!!switchToForm && ( + + Form view + + )} ); } diff --git a/packages/web/src/datagrid/DataGridCore.js b/packages/web/src/datagrid/DataGridCore.js index 011bb54fd..d68ccb131 100644 --- a/packages/web/src/datagrid/DataGridCore.js +++ b/packages/web/src/datagrid/DataGridCore.js @@ -382,6 +382,7 @@ export default function DataGridCore(props) { openFreeTable={handleOpenFreeTable} openChartSelection={handleOpenChart} openActiveChart={openActiveChart} + switchToForm={handleSwitchToFormView} /> ); }; @@ -720,6 +721,11 @@ export default function DataGridCore(props) { display.reload(); } + if (event.keyCode == keycodes.f4) { + event.preventDefault(); + handleSwitchToFormView(); + } + if (event.keyCode == keycodes.s && event.ctrlKey) { event.preventDefault(); handleSave(); @@ -950,6 +956,17 @@ export default function DataGridCore(props) { } : null; + const handleSwitchToFormView = + formViewAvailable && display.baseTable && display.baseTable.primaryKey + ? () => { + const cell = currentCell; + if (!isRegularCell(cell)) return; + const rowData = grider.getRowData(cell[0]); + if (!rowData) return; + display.switchToFormView(rowData); + } + : null; + // console.log('visibleRealColumnIndexes', visibleRealColumnIndexes); // console.log( // 'gridScrollAreaWidth / columnSizes.getVisibleScrollSizeSum()', @@ -1090,6 +1107,7 @@ export default function DataGridCore(props) { await axios.post('database-connections/refresh', { conid, database }); display.reload(); }} + switchToForm={handleSwitchToFormView} />, props.toolbarPortalRef.current )} diff --git a/packages/web/src/datagrid/DataGridToolbar.js b/packages/web/src/datagrid/DataGridToolbar.js index 180f931a8..800aa8586 100644 --- a/packages/web/src/datagrid/DataGridToolbar.js +++ b/packages/web/src/datagrid/DataGridToolbar.js @@ -1,9 +1,14 @@ import React from 'react'; import ToolbarButton from '../widgets/ToolbarButton'; -export default function DataGridToolbar({ reload, reconnect, grider, save }) { +export default function DataGridToolbar({ reload, reconnect, grider, save, switchToForm }) { return ( <> + {switchToForm && ( + + Form view + + )} Refresh diff --git a/packages/web/src/formview/FormView.js b/packages/web/src/formview/FormView.js index 5457bad72..47dfd9035 100644 --- a/packages/web/src/formview/FormView.js +++ b/packages/web/src/formview/FormView.js @@ -330,6 +330,11 @@ export default function FormView(props) { onReload(); } + if (event.keyCode == keycodes.f4) { + event.preventDefault(); + handleSwitchToTable(); + } + if ( !event.ctrlKey && !event.altKey && diff --git a/packages/web/src/formview/FormViewContextMenu.js b/packages/web/src/formview/FormViewContextMenu.js index 44ff19400..02e25012f 100644 --- a/packages/web/src/formview/FormViewContextMenu.js +++ b/packages/web/src/formview/FormViewContextMenu.js @@ -4,12 +4,22 @@ import { DropDownMenuItem, DropDownMenuDivider } from '../modals/DropDownMenu'; export default function FormViewContextMenu({ switchToTable, onNavigate }) { return ( <> - Table view + + Table view + - onNavigate('begin')}>Navigate to begin - onNavigate('previous')}>Navigate to previous - onNavigate('next')}>Navigate to next - onNavigate('end')}>Navigate to end + onNavigate('begin')} keyText="Ctrl+Home"> + Navigate to begin + + onNavigate('previous')} keyText="Ctrl+Up"> + Navigate to previous + + onNavigate('next')} keyText="Ctrl+Down"> + Navigate to next + + onNavigate('end')} keyText="Ctrl+End"> + Navigate to end + ); }