mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 08:26:01 +00:00
query - saving to local storage
This commit is contained in:
@@ -1,23 +1,47 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import _ from 'lodash';
|
||||
import engines from '@dbgate/engines';
|
||||
import useTableInfo from '../utility/useTableInfo';
|
||||
import useConnectionInfo from '../utility/useConnectionInfo';
|
||||
import SqlEditor from '../sqleditor/SqlEditor';
|
||||
import { useUpdateDatabaseForTab } from '../utility/globalState';
|
||||
import QueryToolbar from '../query/QueryToolbar';
|
||||
|
||||
export default function QueryTab({ conid, database, schemaName, pureName, tabVisible }) {
|
||||
const [queryText, setQueryText] = React.useState('');
|
||||
// const tableInfo = useTableInfo({ conid, database, schemaName, pureName });
|
||||
// const connnection = useConnectionInfo(conid);
|
||||
// if (!connnection || !tableInfo) return null;
|
||||
// // console.log(tableInfo);
|
||||
export default function QueryTab({ tabid, conid, database, tabVisible, toolbarPortalRef }) {
|
||||
const localStorageKey = `sql_${tabid}`;
|
||||
const [queryText, setQueryText] = React.useState(() => localStorage.getItem(localStorageKey) || '');
|
||||
const queryTextRef = React.useRef(queryText);
|
||||
|
||||
// const driver = engines(connnection.engine);
|
||||
// const dmp = driver.createDumper();
|
||||
// if (tableInfo) dmp.createTable(tableInfo);
|
||||
const saveToStorage = React.useCallback(() => localStorage.setItem(localStorageKey, queryTextRef.current), [
|
||||
localStorageKey,
|
||||
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 => {
|
||||
if (text != null) queryTextRef.current = 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)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user