From 73b5b86aced9649a6b81ce02f7a1fb2d8e4b3e68 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Fri, 2 Oct 2020 13:24:55 +0200 Subject: [PATCH] open related datble column menu #41 --- .../web/src/appobj/databaseObjectAppObject.js | 6 +-- .../web/src/datagrid/ColumnHeaderControl.js | 49 ++++++++++++++++++- packages/web/src/datagrid/DataGridCore.js | 2 + 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/packages/web/src/appobj/databaseObjectAppObject.js b/packages/web/src/appobj/databaseObjectAppObject.js index 4a8be8150..6cba2dbd9 100644 --- a/packages/web/src/appobj/databaseObjectAppObject.js +++ b/packages/web/src/appobj/databaseObjectAppObject.js @@ -79,7 +79,7 @@ const defaultTabs = { views: 'ViewDataTab', }; -async function openObjectDetail( +export async function openDatabaseObjectDetail( setOpenedTabs, tabComponent, sqlTemplate, @@ -128,7 +128,7 @@ function Menu({ data, makeAppObj, setOpenedTabs, showModal }) { /> )); } else { - openObjectDetail(setOpenedTabs, menu.tab, menu.sqlTemplate, data); + openDatabaseObjectDetail(setOpenedTabs, menu.tab, menu.sqlTemplate, data); } }} > @@ -147,7 +147,7 @@ const databaseObjectAppObject = () => ( const key = title; const Icon = (props) => getIconImage(icons[objectTypeField], props); const onClick = ({ schemaName, pureName }) => { - openObjectDetail( + openDatabaseObjectDetail( setOpenedTabs, defaultTabs[objectTypeField], defaultTabs[objectTypeField] ? null : 'CREATE OBJECT', diff --git a/packages/web/src/datagrid/ColumnHeaderControl.js b/packages/web/src/datagrid/ColumnHeaderControl.js index a933fb117..f054ad128 100644 --- a/packages/web/src/datagrid/ColumnHeaderControl.js +++ b/packages/web/src/datagrid/ColumnHeaderControl.js @@ -4,8 +4,11 @@ import ColumnLabel from './ColumnLabel'; import DropDownButton from '../widgets/DropDownButton'; import { DropDownMenuItem, DropDownMenuDivider } from '../modals/DropDownMenu'; import { useSplitterDrag } from '../widgets/Splitter'; -import { FontIcon } from '../icons'; +import { FontIcon, TableIcon } from '../icons'; import { isTypeDateTime } from '@dbgate/tools'; +import { openNewTab } from '../utility/common'; +import { openDatabaseObjectDetail } from '../appobj/databaseObjectAppObject'; +import { useSetOpenedTabs } from '../utility/globalState'; const HeaderDiv = styled.div` display: flex; @@ -37,8 +40,44 @@ const GroupingLabel = styled.span` white-space: nowrap; `; -export default function ColumnHeaderControl({ column, setSort, onResize, order, setGrouping, grouping }) { +export default function ColumnHeaderControl({ + column, + setSort, + onResize, + order, + setGrouping, + grouping, + conid, + database, +}) { const onResizeDown = useSplitterDrag('clientX', onResize); + const { foreignKey } = column; + const setOpenedTabs = useSetOpenedTabs(); + + const openReferencedTable = () => { + openDatabaseObjectDetail(setOpenedTabs, 'TableDataTab', null, { + schemaName: foreignKey.refSchemaName, + pureName: foreignKey.refTableName, + conid, + database, + objectTypeField: 'tables', + }); + // openNewTab(setOpenedTabs, { + // title: foreignKey.refTableName, + // tooltip, + // icon: sqlTemplate ? 'sql.svg' : icons[objectTypeField], + // tabComponent: sqlTemplate ? 'QueryTab' : tabComponent, + // props: { + // schemaName, + // pureName, + // conid, + // database, + // objectTypeField, + // initialArgs: sqlTemplate ? { sqlTemplate } : null, + // }, + // }); + }; + console.log('COLUMN', column); return ( @@ -63,6 +102,12 @@ export default function ColumnHeaderControl({ column, setSort, onResize, order, setSort('ASC')}>Sort ascending setSort('DESC')}>Sort descending + {foreignKey && ( + + Open table {foreignKey.refTableName} + + )} + {foreignKey && } setGrouping('GROUP')}>Group by setGrouping('MAX')}>MAX setGrouping('MIN')}>MIN diff --git a/packages/web/src/datagrid/DataGridCore.js b/packages/web/src/datagrid/DataGridCore.js index f712a9171..7c2394057 100644 --- a/packages/web/src/datagrid/DataGridCore.js +++ b/packages/web/src/datagrid/DataGridCore.js @@ -1174,6 +1174,8 @@ export default function DataGridCore(props) { > display.setSort(col.uniqueName, order) : null} order={display.getSortOrder(col.uniqueName)} onResize={(diff) => display.resizeColumn(col.uniqueName, col.widthNumber, diff)}