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
+
>
);
}