mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 04:26:01 +00:00
query - saving to local storage
This commit is contained in:
@@ -52,7 +52,7 @@ export default function TabContent({ toolbarPortalRef }) {
|
|||||||
return (
|
return (
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
<TabContainer key={tabid} tabVisible={tabVisible}>
|
<TabContainer key={tabid} tabVisible={tabVisible}>
|
||||||
<TabComponent {...props} tabVisible={tabVisible} toolbarPortalRef={toolbarPortalRef} />
|
<TabComponent {...props} tabid={tabid} tabVisible={tabVisible} toolbarPortalRef={toolbarPortalRef} />
|
||||||
</TabContainer>
|
</TabContainer>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
8
packages/web/src/query/QueryToolbar.js
Normal file
8
packages/web/src/query/QueryToolbar.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import ToolbarButton from '../widgets/ToolbarButton'
|
||||||
|
|
||||||
|
export default function QueryToolbar() {
|
||||||
|
return <>
|
||||||
|
<ToolbarButton onClick={()=>{}}>Execute</ToolbarButton>
|
||||||
|
</>
|
||||||
|
}
|
||||||
@@ -1,19 +1,25 @@
|
|||||||
import { useSetOpenedTabs } from '../utility/globalState';
|
import _ from 'lodash';
|
||||||
|
import { useSetOpenedTabs, useCurrentDatabase } from '../utility/globalState';
|
||||||
import { openNewTab } from '../utility/common';
|
import { openNewTab } from '../utility/common';
|
||||||
|
|
||||||
export default function useNewQuery() {
|
export default function useNewQuery() {
|
||||||
const setOpenedTabs = useSetOpenedTabs();
|
const setOpenedTabs = useSetOpenedTabs();
|
||||||
|
const currentDatabase = useCurrentDatabase();
|
||||||
|
|
||||||
|
const connection = _.get(currentDatabase, 'connection') || {};
|
||||||
|
const database = _.get(currentDatabase, 'name');
|
||||||
|
|
||||||
|
const tooltip = `${connection.displayName || connection.server}\n${database}`;
|
||||||
|
|
||||||
return () =>
|
return () =>
|
||||||
openNewTab(setOpenedTabs, {
|
openNewTab(setOpenedTabs, {
|
||||||
title: 'Query',
|
title: 'Query',
|
||||||
icon: 'sql.svg',
|
icon: 'sql.svg',
|
||||||
|
tooltip,
|
||||||
tabComponent: 'QueryTab',
|
tabComponent: 'QueryTab',
|
||||||
// props: {
|
props: {
|
||||||
// schemaName,
|
conid: connection._id,
|
||||||
// pureName,
|
database,
|
||||||
// conid,
|
},
|
||||||
// database,
|
|
||||||
// },
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ export default function SqlEditor({
|
|||||||
const editorRef = React.useRef(null);
|
const editorRef = React.useRef(null);
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
console.log('editorRef.current', editorRef.current);
|
if (tabVisible && editorRef.current && editorRef.current.editor) editorRef.current.editor.focus();
|
||||||
if (tabVisible) editorRef.current.editor.focus();
|
|
||||||
}, [tabVisible]);
|
}, [tabVisible]);
|
||||||
return (
|
return (
|
||||||
<Wrapper ref={containerRef}>
|
<Wrapper ref={containerRef}>
|
||||||
|
|||||||
@@ -1,23 +1,47 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import ReactDOM from 'react-dom';
|
||||||
|
import _ from 'lodash';
|
||||||
import engines from '@dbgate/engines';
|
import engines from '@dbgate/engines';
|
||||||
import useTableInfo from '../utility/useTableInfo';
|
import useTableInfo from '../utility/useTableInfo';
|
||||||
import useConnectionInfo from '../utility/useConnectionInfo';
|
import useConnectionInfo from '../utility/useConnectionInfo';
|
||||||
import SqlEditor from '../sqleditor/SqlEditor';
|
import SqlEditor from '../sqleditor/SqlEditor';
|
||||||
|
import { useUpdateDatabaseForTab } from '../utility/globalState';
|
||||||
|
import QueryToolbar from '../query/QueryToolbar';
|
||||||
|
|
||||||
export default function QueryTab({ conid, database, schemaName, pureName, tabVisible }) {
|
export default function QueryTab({ tabid, conid, database, tabVisible, toolbarPortalRef }) {
|
||||||
const [queryText, setQueryText] = React.useState('');
|
const localStorageKey = `sql_${tabid}`;
|
||||||
// const tableInfo = useTableInfo({ conid, database, schemaName, pureName });
|
const [queryText, setQueryText] = React.useState(() => localStorage.getItem(localStorageKey) || '');
|
||||||
// const connnection = useConnectionInfo(conid);
|
const queryTextRef = React.useRef(queryText);
|
||||||
// if (!connnection || !tableInfo) return null;
|
|
||||||
// // console.log(tableInfo);
|
|
||||||
|
|
||||||
// const driver = engines(connnection.engine);
|
const saveToStorage = React.useCallback(() => localStorage.setItem(localStorageKey, queryTextRef.current), [
|
||||||
// const dmp = driver.createDumper();
|
localStorageKey,
|
||||||
// if (tableInfo) dmp.createTable(tableInfo);
|
queryTextRef,
|
||||||
|
]);
|
||||||
|
const saveToStorageDebounced = React.useMemo(() => _.debounce(saveToStorage, 5000), [saveToStorage]);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
window.addEventListener('beforeunload', saveToStorage);
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('beforeunload', saveToStorage);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useUpdateDatabaseForTab(tabVisible, conid, database);
|
||||||
|
|
||||||
const handleChange = text => {
|
const handleChange = text => {
|
||||||
|
if (text != null) queryTextRef.current = text;
|
||||||
setQueryText(text);
|
setQueryText(text);
|
||||||
|
saveToStorageDebounced();
|
||||||
};
|
};
|
||||||
|
|
||||||
return <SqlEditor value={queryText} onChange={handleChange} tabVisible={tabVisible} />;
|
return (
|
||||||
|
<>
|
||||||
|
<SqlEditor value={queryText} onChange={handleChange} tabVisible={tabVisible} />
|
||||||
|
|
||||||
|
{toolbarPortalRef &&
|
||||||
|
toolbarPortalRef.current &&
|
||||||
|
tabVisible &&
|
||||||
|
ReactDOM.createPortal(<QueryToolbar />, toolbarPortalRef.current)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,8 +65,10 @@ 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();
|
||||||
|
|
||||||
const previousTabVisible = usePrevious(!!(tabVisible && connection));
|
const previousTabVisible = usePrevious(!!(tabVisible && connection));
|
||||||
|
|
||||||
|
if (!conid || !database) return;
|
||||||
|
|
||||||
if (!previousTabVisible && tabVisible && connection) {
|
if (!previousTabVisible && tabVisible && connection) {
|
||||||
setDb({
|
setDb({
|
||||||
name: database,
|
name: database,
|
||||||
|
|||||||
Reference in New Issue
Block a user