diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js index b1855ac50..dac7756a9 100644 --- a/packages/api/src/controllers/databaseConnections.js +++ b/packages/api/src/controllers/databaseConnections.js @@ -107,7 +107,10 @@ module.exports = { if (existing) { existing.subprocess.send({ msgtype: 'ping' }); } - return { status: 'ok' }; + return { + status: 'ok', + connectionStatus: existing ? existing.status : null, + }; }, refresh_meta: 'post', diff --git a/packages/api/src/proc/databaseConnectionProcess.js b/packages/api/src/proc/databaseConnectionProcess.js index b5f0c6ee3..2ae747270 100644 --- a/packages/api/src/proc/databaseConnectionProcess.js +++ b/packages/api/src/proc/databaseConnectionProcess.js @@ -121,6 +121,7 @@ function start() { setInterval(() => { const time = new Date().getTime(); if (time - lastPing > 60 * 1000) { + console.log('Database connection not alive, exiting'); process.exit(0); } }, 60 * 1000); diff --git a/packages/web/src/appobj/AppObjectList.js b/packages/web/src/appobj/AppObjectList.js index 7883e0b5c..cbf5ffeea 100644 --- a/packages/web/src/appobj/AppObjectList.js +++ b/packages/web/src/appobj/AppObjectList.js @@ -37,6 +37,7 @@ function AppObjectListItem({ isExpandable, SubItems, getCommonProps, + expandOnClick, }) { const [isExpanded, setIsExpanded] = React.useState(false); @@ -51,12 +52,22 @@ function AppObjectListItem({ let commonProps = { prefix: SubItems ? ( - {expandable ? : } + {expandable ? ( + { + setIsExpanded(v => !v); + e.stopPropagation(); + }} + /> + ) : ( + + )} ) : null, }; - if (SubItems) { + if (SubItems && expandOnClick) { commonProps.onClick2 = () => setIsExpanded(v => !v); } if (onObjectClick) { @@ -107,6 +118,7 @@ export function AppObjectList({ groupOrdered = undefined, isExpandable = undefined, getCommonProps = undefined, + expandOnClick = false, }) { const createComponent = data => ( ); diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.js b/packages/web/src/appobj/DatabaseObjectAppObject.js index 73e08282e..1b1ca8b19 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.js +++ b/packages/web/src/appobj/DatabaseObjectAppObject.js @@ -12,6 +12,7 @@ import { findEngineDriver } from 'dbgate-tools'; import useExtensions from '../utility/useExtensions'; import useOpenNewTab from '../utility/useOpenNewTab'; import uuidv1 from 'uuid/v1'; +import { AppObjectList } from './AppObjectList'; const icons = { tables: 'img table', diff --git a/packages/web/src/appobj/SubColumnParamList.js b/packages/web/src/appobj/SubColumnParamList.js new file mode 100644 index 000000000..4ececc033 --- /dev/null +++ b/packages/web/src/appobj/SubColumnParamList.js @@ -0,0 +1,33 @@ +import { findForeignKeyForColumn } from 'dbgate-tools'; +import React from 'react'; +import { getColumnIcon } from '../datagrid/ColumnLabel'; +import { AppObjectCore } from './AppObjectCore'; +import { AppObjectList } from './AppObjectList'; + +function ColumnAppObject({ data, commonProps }) { + const { columnName, dataType } = data; + return ( + + ); +} +ColumnAppObject.extractKey = ({ columnName }) => columnName; + +export default function SubColumnParamList({ data }) { + const { columns } = data; + + return ( + ({ + ...col, + foreignKey: findForeignKeyForColumn(data, col), + }))} + AppObjectComponent={ColumnAppObject} + /> + ); +} diff --git a/packages/web/src/datagrid/ColumnLabel.js b/packages/web/src/datagrid/ColumnLabel.js index 1cda97227..5fdc2b983 100644 --- a/packages/web/src/datagrid/ColumnLabel.js +++ b/packages/web/src/datagrid/ColumnLabel.js @@ -9,11 +9,16 @@ const Label = styled.span` white-space: nowrap; `; +export function getColumnIcon(column, forceIcon = false) { + if (column.autoIncrement) return 'img autoincrement'; + if (column.foreignKey) return 'img foreign-key'; + if (forceIcon) return 'img column'; + return null; +} + /** @param column {import('dbgate-datalib').DisplayColumn|import('dbgate-types').ColumnInfo} */ export default function ColumnLabel(column) { - let icon = column.forceIcon ? 'img column' : null; - if (column.autoIncrement) icon = 'img autoincrement'; - if (column.foreignKey) icon = 'img foreign-key'; + const icon = getColumnIcon(column, column.forceIcon); return (