mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-03 21:03:59 +00:00
toolbar optimalization - new commands grouped together
This commit is contained in:
@@ -11,6 +11,7 @@ const iconNames = {
|
|||||||
'icon tables': 'mdi mdi-table-multiple',
|
'icon tables': 'mdi mdi-table-multiple',
|
||||||
'icon favorite': 'mdi mdi-star',
|
'icon favorite': 'mdi mdi-star',
|
||||||
'icon share': 'mdi mdi-share-variant',
|
'icon share': 'mdi mdi-share-variant',
|
||||||
|
'icon add': 'mdi mdi-plus-circle',
|
||||||
|
|
||||||
'icon database': 'mdi mdi-database',
|
'icon database': 'mdi mdi-database',
|
||||||
'icon server': 'mdi mdi-server',
|
'icon server': 'mdi mdi-server',
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import useModalState from '../modals/useModalState';
|
import useModalState from '../modals/useModalState';
|
||||||
import ConnectionModal from '../modals/ConnectionModal';
|
import ConnectionModal from '../modals/ConnectionModal';
|
||||||
|
import { DropDownMenuItem } from '../modals/DropDownMenu';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import ToolbarButton, { ToolbarButtonExternalImage } from './ToolbarButton';
|
import ToolbarButton, { ToolbarButtonExternalImage, ToolbarDropDownButton } from './ToolbarButton';
|
||||||
import useNewQuery, { useNewQueryDesign } from '../query/useNewQuery';
|
import useNewQuery, { useNewQueryDesign } from '../query/useNewQuery';
|
||||||
import { useConfig, useFavorites } from '../utility/metadataLoaders';
|
import { useConfig, useFavorites } from '../utility/metadataLoaders';
|
||||||
import {
|
import {
|
||||||
@@ -132,25 +133,14 @@ export default function ToolBar({ toolbarPortalRef }) {
|
|||||||
{x.title}
|
{x.title}
|
||||||
</ToolbarButton>
|
</ToolbarButton>
|
||||||
))}
|
))}
|
||||||
{config.runAsPortal == false && (
|
<ToolbarDropDownButton icon="icon add" text="New">
|
||||||
<ToolbarButton onClick={modalState.open} icon="icon new-connection">
|
{config.runAsPortal == false && <DropDownMenuItem onClick={modalState.open}>Connection</DropDownMenuItem>}
|
||||||
Add connection
|
<DropDownMenuItem onClick={newQuery}>SQL query</DropDownMenuItem>
|
||||||
</ToolbarButton>
|
{!!currentDatabase && <DropDownMenuItem onClick={newQueryDesign}>Query designer</DropDownMenuItem>}
|
||||||
)}
|
<DropDownMenuItem onClick={newFreeTable}>Free table editor</DropDownMenuItem>
|
||||||
<ToolbarButton onClick={newQuery} icon="icon sql-file">
|
<DropDownMenuItem onClick={newMarkdown}>Markdown page</DropDownMenuItem>
|
||||||
New Query
|
</ToolbarDropDownButton>
|
||||||
</ToolbarButton>
|
|
||||||
{!!currentDatabase && (
|
|
||||||
<ToolbarButton onClick={newQueryDesign} icon="icon query-design">
|
|
||||||
Query Designer
|
|
||||||
</ToolbarButton>
|
|
||||||
)}
|
|
||||||
<ToolbarButton onClick={newFreeTable} icon="icon table">
|
|
||||||
Free table editor
|
|
||||||
</ToolbarButton>
|
|
||||||
<ToolbarButton onClick={newMarkdown} icon="icon markdown">
|
|
||||||
New markdown
|
|
||||||
</ToolbarButton>
|
|
||||||
<ToolbarButton onClick={showImport} icon="icon import">
|
<ToolbarButton onClick={showImport} icon="icon import">
|
||||||
Import data
|
Import data
|
||||||
</ToolbarButton>
|
</ToolbarButton>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import { FontIcon } from '../icons';
|
import { FontIcon } from '../icons';
|
||||||
|
import { useShowMenu } from '../modals/showMenu';
|
||||||
import dimensions from '../theme/dimensions';
|
import dimensions from '../theme/dimensions';
|
||||||
import useTheme from '../theme/useTheme';
|
import useTheme from '../theme/useTheme';
|
||||||
|
|
||||||
@@ -85,3 +86,32 @@ export function ToolbarButtonExternalImage({ image, onClick, disabled = undefine
|
|||||||
</ButtonDiv>
|
</ButtonDiv>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function ToolbarDropDownButton({ children, icon = undefined, text, disabled = undefined, patchY = 2 }) {
|
||||||
|
const theme = useTheme();
|
||||||
|
const showMenu = useShowMenu();
|
||||||
|
const buttonRef = React.useRef(null);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ButtonDiv
|
||||||
|
theme={theme}
|
||||||
|
onClick={() => {
|
||||||
|
if (disabled) return;
|
||||||
|
|
||||||
|
const rect = buttonRef.current.getBoundingClientRect();
|
||||||
|
showMenu(rect.left, rect.bottom, children);
|
||||||
|
}}
|
||||||
|
disabled={disabled}
|
||||||
|
>
|
||||||
|
<ButtonDivInner patchY={patchY} ref={buttonRef}>
|
||||||
|
{icon && (
|
||||||
|
<StyledIconSpan disabled={disabled} theme={theme}>
|
||||||
|
<FontIcon icon={icon} />
|
||||||
|
</StyledIconSpan>
|
||||||
|
)}
|
||||||
|
{text}
|
||||||
|
<FontIcon icon="icon chevron-down" />
|
||||||
|
</ButtonDivInner>
|
||||||
|
</ButtonDiv>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ export default function WidgetColumnBar({ children }) {
|
|||||||
const toggleCollapsed = (name) => {
|
const toggleCollapsed = (name) => {
|
||||||
// skip collapse last uncollapsed item
|
// skip collapse last uncollapsed item
|
||||||
if (!childArray.find((x) => x.props.name != name && !collapsedWidgets.includes(x.props.name))) return;
|
if (!childArray.find((x) => x.props.name != name && !collapsedWidgets.includes(x.props.name))) return;
|
||||||
|
|
||||||
if (collapsedWidgets.includes(name)) setCollapsedWidgets(collapsedWidgets.filter((x) => x != name));
|
if (collapsedWidgets.includes(name)) setCollapsedWidgets(collapsedWidgets.filter((x) => x != name));
|
||||||
else setCollapsedWidgets([...collapsedWidgets, name]);
|
else setCollapsedWidgets([...collapsedWidgets, name]);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user