From 0fdf333c0bc2cdbd2f5d63c9aad7a4a1a0adde3f Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 30 Dec 2020 10:05:34 +0100 Subject: [PATCH] query design --- packages/web/src/designer/Designer.js | 16 +++++++++++----- packages/web/src/designer/DesignerTable.js | 18 ++++++++++++++---- packages/web/src/widgets/Toolbar.js | 17 +++++++++++++---- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/packages/web/src/designer/Designer.js b/packages/web/src/designer/Designer.js index b019e7b2a..89433760a 100644 --- a/packages/web/src/designer/Designer.js +++ b/packages/web/src/designer/Designer.js @@ -21,6 +21,11 @@ const Canvas = styled.div` position: relative; `; +const EmptyInfo = styled.div` + margin: 50px; + font-size: 20px; +`; + export default function Designer({ value, onChange, conid, database }) { const { tables, references } = value || {}; const theme = useTheme(); @@ -46,7 +51,7 @@ export default function Designer({ value, onChange, conid, database }) { onChange((current) => { const foreignKeys = _.compact([ ...(json.foreignKeys || []).map((fk) => { - const tables = (current.tables || []).filter( + const tables = ((current || {}).tables || []).filter( (tbl) => fk.refTableName == tbl.pureName && fk.refSchemaName == tbl.schemaName ); if (tables.length == 1) @@ -58,7 +63,7 @@ export default function Designer({ value, onChange, conid, database }) { return null; }), ..._.flatten( - (current.tables || []).map((tbl) => + ((current || {}).tables || []).map((tbl) => (tbl.foreignKeys || []).map((fk) => { if (fk.refTableName == json.pureName && fk.refSchemaName == json.schemaName) { return { @@ -75,11 +80,11 @@ export default function Designer({ value, onChange, conid, database }) { return { ...current, - tables: [...(current.tables || []), json], + tables: [...((current || {}).tables || []), json], references: foreignKeys.length == 1 ? [ - ...(current.references || []), + ...((current || {}).references || []), { designerId: uuidv1(), sourceId: foreignKeys[0].sourceId, @@ -91,7 +96,7 @@ export default function Designer({ value, onChange, conid, database }) { })), }, ] - : current.references, + : (current || {}).references, }; }); }; @@ -283,6 +288,7 @@ export default function Designer({ value, onChange, conid, database }) { return ( + {(tables || []).length == 0 && Drag & drop tables or views from left panel list here} e.preventDefault()} onDrop={handleDrop} ref={wrapperRef}> {(references || []).map((ref) => ( props.theme.designtable_background_blue[2]}; + background: ${(props) => + // @ts-ignore + props.objectTypeField == 'views' + ? props.theme.designtable_background_magenta[2] + : props.theme.designtable_background_blue[2]}; border-bottom: 1px solid ${(props) => props.theme.border}; cursor: pointer; display: flex; @@ -140,7 +144,7 @@ export default function DesignerTable({ setChangeToken, designer, }) { - const { pureName, columns, left, top, designerId, alias } = table; + const { pureName, columns, left, top, designerId, alias, objectTypeField } = table; const [movingPosition, setMovingPosition] = React.useState(null); const movingPositionRef = React.useRef(null); const theme = useTheme(); @@ -287,7 +291,7 @@ export default function DesignerTable({ addReference={ foreignKey ? () => { - onAddReferenceByColumn(designerId, foreignKey); + onAddReferenceByColumn(designerId, foreignKey); } : null } @@ -305,7 +309,13 @@ export default function DesignerTable({ onMouseDown={() => onBringToFront(table)} ref={(dom) => dispatchDomColumn('', dom)} > -
+
{alias || pureName} onRemoveTable(table)} theme={theme}> diff --git a/packages/web/src/widgets/Toolbar.js b/packages/web/src/widgets/Toolbar.js index 2306cc205..b1ac0bb65 100644 --- a/packages/web/src/widgets/Toolbar.js +++ b/packages/web/src/widgets/Toolbar.js @@ -5,7 +5,13 @@ import styled from 'styled-components'; import ToolbarButton, { ToolbarButtonExternalImage } from './ToolbarButton'; import useNewQuery, { useNewQueryDesign } from '../query/useNewQuery'; import { useConfig, useFavorites } from '../utility/metadataLoaders'; -import { useSetOpenedTabs, useOpenedTabs, useCurrentTheme, useSetCurrentTheme } from '../utility/globalState'; +import { + useSetOpenedTabs, + useOpenedTabs, + useCurrentTheme, + useSetCurrentTheme, + useCurrentDatabase, +} from '../utility/globalState'; import useNewFreeTable from '../freetable/useNewFreeTable'; import ImportExportModal from '../modals/ImportExportModal'; import useShowModal from '../modals/showModal'; @@ -30,6 +36,7 @@ export default function ToolBar({ toolbarPortalRef }) { const newQueryDesign = useNewQueryDesign(); const newFreeTable = useNewFreeTable(); const config = useConfig(); + const currentDatabase = useCurrentDatabase(); // const toolbar = config.toolbar || []; const setOpenedTabs = useSetOpenedTabs(); const openedTabs = useOpenedTabs(); @@ -133,9 +140,11 @@ export default function ToolBar({ toolbarPortalRef }) { New Query - - Query Designer - + {!!currentDatabase && ( + + Query Designer + + )} Free table editor