mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-28 07:16:00 +00:00
bold current connection
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { AppObjectCore } from './AppObjects';
|
import { AppObjectCore } from './AppObjects';
|
||||||
import { useSetOpenedTabs } from '../utility/globalState';
|
import { useSetOpenedTabs, useAppObjectParams } from '../utility/globalState';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import { ExpandIcon } from '../icons';
|
import { ExpandIcon } from '../icons';
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ export function AppObjectList({
|
|||||||
groupFunc = undefined,
|
groupFunc = undefined,
|
||||||
groupOrdered = undefined,
|
groupOrdered = undefined,
|
||||||
}) {
|
}) {
|
||||||
const setOpenedTabs = useSetOpenedTabs();
|
const appObjectParams = useAppObjectParams();
|
||||||
|
|
||||||
const createComponent = (data, appobj) => (
|
const createComponent = (data, appobj) => (
|
||||||
<AppObjectListItem
|
<AppObjectListItem
|
||||||
@@ -116,7 +116,7 @@ export function AppObjectList({
|
|||||||
if (groupFunc) {
|
if (groupFunc) {
|
||||||
const listGrouped = _.compact(
|
const listGrouped = _.compact(
|
||||||
(list || []).map(data => {
|
(list || []).map(data => {
|
||||||
const appobj = makeAppObj(data, { setOpenedTabs });
|
const appobj = makeAppObj(data, appObjectParams);
|
||||||
const { matcher } = appobj;
|
const { matcher } = appobj;
|
||||||
if (matcher && !matcher(filter)) return null;
|
if (matcher && !matcher(filter)) return null;
|
||||||
const component = createComponent(data, appobj);
|
const component = createComponent(data, appobj);
|
||||||
@@ -131,7 +131,7 @@ export function AppObjectList({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (list || []).map(data => {
|
return (list || []).map(data => {
|
||||||
const appobj = makeAppObj(data, { setOpenedTabs });
|
const appobj = makeAppObj(data, appObjectParams);
|
||||||
const { matcher } = appobj;
|
const { matcher } = appobj;
|
||||||
if (matcher && !matcher(filter)) return null;
|
if (matcher && !matcher(filter)) return null;
|
||||||
return createComponent(data, appobj);
|
return createComponent(data, appobj);
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
// @ts-nocheck
|
// @ts-nocheck
|
||||||
|
|
||||||
|
import _ from 'lodash'
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import { showMenu } from '../modals/DropDownMenu';
|
import { showMenu } from '../modals/DropDownMenu';
|
||||||
import { useSetOpenedTabs } from '../utility/globalState';
|
import { useSetOpenedTabs, useAppObjectParams } from '../utility/globalState';
|
||||||
|
|
||||||
const AppObjectDiv = styled.div`
|
const AppObjectDiv = styled.div`
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
@@ -12,6 +13,7 @@ const AppObjectDiv = styled.div`
|
|||||||
}
|
}
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
font-weight: ${props => (props.isBold ? 'bold' : 'normal')};
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const AppObjectSpan = styled.span`
|
const AppObjectSpan = styled.span`
|
||||||
@@ -35,22 +37,26 @@ export function AppObjectCore({
|
|||||||
prefix = null,
|
prefix = null,
|
||||||
...other
|
...other
|
||||||
}) {
|
}) {
|
||||||
const setOpenedTabs = useSetOpenedTabs();
|
const appObjectParams = useAppObjectParams();
|
||||||
|
|
||||||
const handleContextMenu = event => {
|
const handleContextMenu = event => {
|
||||||
if (!Menu) return;
|
if (!Menu) return;
|
||||||
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
showMenu(event.pageX, event.pageY, <Menu data={data} makeAppObj={makeAppObj} setOpenedTabs={setOpenedTabs} />);
|
showMenu(event.pageX, event.pageY, <Menu data={data} makeAppObj={makeAppObj} {...appObjectParams} />);
|
||||||
};
|
};
|
||||||
|
|
||||||
const Component = component == 'div' ? AppObjectDiv : AppObjectSpan;
|
const Component = component == 'div' ? AppObjectDiv : AppObjectSpan;
|
||||||
|
|
||||||
|
let bold = false;
|
||||||
|
if (_.isFunction(isBold)) bold = isBold(appObjectParams);
|
||||||
|
else bold = !!isBold;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Component
|
<Component
|
||||||
onContextMenu={handleContextMenu}
|
onContextMenu={handleContextMenu}
|
||||||
onClick={onClick ? () => onClick(data) : undefined}
|
onClick={onClick ? () => onClick(data) : undefined}
|
||||||
isBold={isBold}
|
isBold={bold}
|
||||||
{...other}
|
{...other}
|
||||||
>
|
>
|
||||||
{prefix}
|
{prefix}
|
||||||
@@ -63,7 +69,7 @@ export function AppObjectCore({
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function AppObjectControl({ data, makeAppObj, component = 'div' }) {
|
export function AppObjectControl({ data, makeAppObj, component = 'div' }) {
|
||||||
const setOpenedTabs = useSetOpenedTabs();
|
const appObjectParams = useAppObjectParams();
|
||||||
const appobj = makeAppObj(data, { setOpenedTabs });
|
const appobj = makeAppObj(data, appObjectParams);
|
||||||
return <AppObjectCore {...appobj} data={data} makeAppObj={makeAppObj} component={component} />;
|
return <AppObjectCore {...appobj} data={data} makeAppObj={makeAppObj} component={component} />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import _ from 'lodash';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { getEngineIcon } from '../icons';
|
import { getEngineIcon } from '../icons';
|
||||||
import { DropDownMenuItem } from '../modals/DropDownMenu';
|
import { DropDownMenuItem } from '../modals/DropDownMenu';
|
||||||
@@ -21,11 +22,19 @@ function Menu({ data, makeAppObj }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function connectionAppObject({ _id, server, displayName, engine }) {
|
const connectionAppObject = flags => ({ _id, server, displayName, engine }) => {
|
||||||
const title = displayName || server;
|
const title = displayName || server;
|
||||||
const key = _id;
|
const key = _id;
|
||||||
const Icon = getEngineIcon(engine);
|
const Icon = getEngineIcon(engine);
|
||||||
const matcher = filter => filterName(filter, displayName, server);
|
const matcher = filter => filterName(filter, displayName, server);
|
||||||
|
const { boldCurrentDatabase } = flags || {};
|
||||||
|
const isBold = boldCurrentDatabase
|
||||||
|
? ({ currentDatabase }) => {
|
||||||
|
return _.get(currentDatabase, 'connection._id') == _id;
|
||||||
|
}
|
||||||
|
: null;
|
||||||
|
|
||||||
return { title, key, Icon, Menu, matcher };
|
return { title, key, Icon, Menu, matcher, isBold };
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export default connectionAppObject;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import _ from 'lodash';
|
||||||
import { DatabaseIcon } from '../icons';
|
import { DatabaseIcon } from '../icons';
|
||||||
import { DropDownMenuItem } from '../modals/DropDownMenu';
|
import { DropDownMenuItem } from '../modals/DropDownMenu';
|
||||||
import showModal from '../modals/showModal';
|
import showModal from '../modals/showModal';
|
||||||
@@ -20,10 +21,20 @@ function Menu({ data, makeAppObj }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function databaseAppObject({ name }) {
|
const databaseAppObject = flags => ({ name, connection }) => {
|
||||||
|
const { boldCurrentDatabase } = flags || {};
|
||||||
const title = name;
|
const title = name;
|
||||||
const key = name;
|
const key = name;
|
||||||
const Icon = DatabaseIcon;
|
const Icon = DatabaseIcon;
|
||||||
|
const isBold = boldCurrentDatabase
|
||||||
|
? ({ currentDatabase }) => {
|
||||||
|
return (
|
||||||
|
_.get(currentDatabase, 'connection._id') == _.get(connection, '_id') && _.get(currentDatabase, 'name') == name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
: null;
|
||||||
|
|
||||||
return { title, key, Icon, Menu };
|
return { title, key, Icon, Menu, isBold };
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export default databaseAppObject;
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ function Menu({ data, makeAppObj, setOpenedTabs }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function tableAppObject({ conid, database, pureName, schemaName }, { setOpenedTabs }) {
|
const tableAppObject = () => ({ conid, database, pureName, schemaName }, { setOpenedTabs }) => {
|
||||||
const title = schemaName ? `${schemaName}.${pureName}` : pureName;
|
const title = schemaName ? `${schemaName}.${pureName}` : pureName;
|
||||||
const key = title;
|
const key = title;
|
||||||
const Icon = TableIcon;
|
const Icon = TableIcon;
|
||||||
@@ -61,4 +61,6 @@ export default function tableAppObject({ conid, database, pureName, schemaName }
|
|||||||
const matcher = filter => filterName(filter, pureName);
|
const matcher = filter => filterName(filter, pureName);
|
||||||
|
|
||||||
return { title, key, Icon, Menu, onClick, matcher };
|
return { title, key, Icon, Menu, onClick, matcher };
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export default tableAppObject;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import _ from 'lodash';
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import useStorage from './useStorage';
|
import useStorage from './useStorage';
|
||||||
import useConnectionInfo from './useConnectionInfo';
|
import useConnectionInfo from './useConnectionInfo';
|
||||||
|
import usePrevious from './usePrevious';
|
||||||
|
|
||||||
function createGlobalState(defaultValue) {
|
function createGlobalState(defaultValue) {
|
||||||
const Context = React.createContext(null);
|
const Context = React.createContext(null);
|
||||||
@@ -64,10 +65,21 @@ export { OpenedTabsProvider, useOpenedTabs, useSetOpenedTabs };
|
|||||||
export function useUpdateDatabaseForTab(tabVisible, conid, database) {
|
export function useUpdateDatabaseForTab(tabVisible, conid, database) {
|
||||||
const connection = useConnectionInfo(conid);
|
const connection = useConnectionInfo(conid);
|
||||||
const setDb = useSetCurrentDatabase();
|
const setDb = useSetCurrentDatabase();
|
||||||
if (tabVisible && connection) {
|
|
||||||
|
const previousTabVisible = usePrevious(!!(tabVisible && connection));
|
||||||
|
if (!previousTabVisible && tabVisible && connection) {
|
||||||
setDb({
|
setDb({
|
||||||
name: database,
|
name: database,
|
||||||
connection,
|
connection,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function useAppObjectParams() {
|
||||||
|
const setOpenedTabs = useSetOpenedTabs();
|
||||||
|
const currentDatabase = useCurrentDatabase();
|
||||||
|
return {
|
||||||
|
setOpenedTabs,
|
||||||
|
currentDatabase,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
@@ -57,7 +57,13 @@ function SubDatabaseList({ data }) {
|
|||||||
url: `server-connections/list-databases?conid=${_id}`,
|
url: `server-connections/list-databases?conid=${_id}`,
|
||||||
reloadTrigger: `database-list-changed-${_id}`,
|
reloadTrigger: `database-list-changed-${_id}`,
|
||||||
});
|
});
|
||||||
return <AppObjectList list={databases} makeAppObj={databaseAppObject} onObjectClick={handleDatabaseClick} />;
|
return (
|
||||||
|
<AppObjectList
|
||||||
|
list={(databases || []).map(db => ({ ...db, connection: data }))}
|
||||||
|
makeAppObj={databaseAppObject({ boldCurrentDatabase: true })}
|
||||||
|
onObjectClick={handleDatabaseClick}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ConnectionList() {
|
function ConnectionList() {
|
||||||
@@ -74,7 +80,12 @@ function ConnectionList() {
|
|||||||
</SearchBoxWrapper>
|
</SearchBoxWrapper>
|
||||||
|
|
||||||
<InnerContainer>
|
<InnerContainer>
|
||||||
<AppObjectList list={connections} makeAppObj={connectionAppObject} SubItems={SubDatabaseList} filter={filter} />
|
<AppObjectList
|
||||||
|
list={connections}
|
||||||
|
makeAppObj={connectionAppObject({ boldCurrentDatabase: true })}
|
||||||
|
SubItems={SubDatabaseList}
|
||||||
|
filter={filter}
|
||||||
|
/>
|
||||||
</InnerContainer>
|
</InnerContainer>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
@@ -101,7 +112,7 @@ function SqlObjectList({ conid, database }) {
|
|||||||
<InnerContainer>
|
<InnerContainer>
|
||||||
<AppObjectList
|
<AppObjectList
|
||||||
list={(tables || []).map(x => ({ ...x, conid, database }))}
|
list={(tables || []).map(x => ({ ...x, conid, database }))}
|
||||||
makeAppObj={tableAppObject}
|
makeAppObj={tableAppObject()}
|
||||||
groupFunc={appobj => 'Tables'}
|
groupFunc={appobj => 'Tables'}
|
||||||
filter={filter}
|
filter={filter}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user