timer labels in query design tab and shell tab

This commit is contained in:
Jan Prochazka
2021-01-28 13:00:24 +01:00
parent c2b7c775c0
commit 45d99a4126
2 changed files with 30 additions and 2 deletions

View File

@@ -25,8 +25,18 @@ import QueryDesignColumns from '../designer/QueryDesignColumns';
import { findEngineDriver } from 'dbgate-tools'; import { findEngineDriver } from 'dbgate-tools';
import { generateDesignedQuery } from '../designer/designerTools'; import { generateDesignedQuery } from '../designer/designerTools';
import useUndoReducer from '../utility/useUndoReducer'; import useUndoReducer from '../utility/useUndoReducer';
import { StatusBarItem } from '../widgets/StatusBar';
import useTimerLabel from '../utility/useTimerLabel';
export default function QueryDesignTab({ tabid, conid, database, tabVisible, toolbarPortalRef, ...other }) { export default function QueryDesignTab({
tabid,
conid,
database,
tabVisible,
toolbarPortalRef,
statusbarPortalRef,
...other
}) {
const [sessionId, setSessionId] = React.useState(null); const [sessionId, setSessionId] = React.useState(null);
const [visibleResultTabs, setVisibleResultTabs] = React.useState(false); const [visibleResultTabs, setVisibleResultTabs] = React.useState(false);
const [executeNumber, setExecuteNumber] = React.useState(0); const [executeNumber, setExecuteNumber] = React.useState(0);
@@ -49,6 +59,7 @@ export default function QueryDesignTab({ tabid, conid, database, tabVisible, too
}, },
{ mergeNearActions: true } { mergeNearActions: true }
); );
const timerLabel = useTimerLabel();
React.useEffect(() => { React.useEffect(() => {
// @ts-ignore // @ts-ignore
@@ -61,6 +72,7 @@ export default function QueryDesignTab({ tabid, conid, database, tabVisible, too
const handleSessionDone = React.useCallback(() => { const handleSessionDone = React.useCallback(() => {
setBusy(false); setBusy(false);
timerLabel.stop();
}, []); }, []);
const generatePreview = (value, engine) => { const generatePreview = (value, engine) => {
@@ -114,6 +126,7 @@ export default function QueryDesignTab({ tabid, conid, database, tabVisible, too
setSessionId(sesid); setSessionId(sesid);
} }
setBusy(true); setBusy(true);
timerLabel.start();
await axios.post('sessions/execute-query', { await axios.post('sessions/execute-query', {
sesid, sesid,
sql: sqlPreview, sql: sqlPreview,
@@ -126,6 +139,7 @@ export default function QueryDesignTab({ tabid, conid, database, tabVisible, too
}); });
setSessionId(null); setSessionId(null);
setBusy(false); setBusy(false);
timerLabel.stop();
}; };
const handleKeyDown = React.useCallback( const handleKeyDown = React.useCallback(
@@ -200,6 +214,10 @@ export default function QueryDesignTab({ tabid, conid, database, tabVisible, too
/>, />,
toolbarPortalRef.current toolbarPortalRef.current
)} )}
{statusbarPortalRef &&
statusbarPortalRef.current &&
tabVisible &&
ReactDOM.createPortal(<StatusBarItem>{timerLabel.text}</StatusBarItem>, statusbarPortalRef.current)}
<SaveTabModal <SaveTabModal
modalState={saveFileModalState} modalState={saveFileModalState}
tabVisible={tabVisible} tabVisible={tabVisible}

View File

@@ -16,16 +16,19 @@ import useEditorData from '../utility/useEditorData';
import SaveTabModal from '../modals/SaveTabModal'; import SaveTabModal from '../modals/SaveTabModal';
import useModalState from '../modals/useModalState'; import useModalState from '../modals/useModalState';
import LoadingInfo from '../widgets/LoadingInfo'; import LoadingInfo from '../widgets/LoadingInfo';
import useTimerLabel from '../utility/useTimerLabel';
import { StatusBarItem } from '../widgets/StatusBar';
const configRegex = /\s*\/\/\s*@ImportExportConfigurator\s*\n\s*\/\/\s*(\{[^\n]+\})\n/; const configRegex = /\s*\/\/\s*@ImportExportConfigurator\s*\n\s*\/\/\s*(\{[^\n]+\})\n/;
const requireRegex = /\s*(\/\/\s*@require\s+[^\n]+)\n/g; const requireRegex = /\s*(\/\/\s*@require\s+[^\n]+)\n/g;
const initRegex = /([^\n]+\/\/\s*@init)/g; const initRegex = /([^\n]+\/\/\s*@init)/g;
export default function ShellTab({ tabid, tabVisible, toolbarPortalRef, ...other }) { export default function ShellTab({ tabid, tabVisible, toolbarPortalRef, statusbarPortalRef, ...other }) {
const [busy, setBusy] = React.useState(false); const [busy, setBusy] = React.useState(false);
const showModal = useShowModal(); const showModal = useShowModal();
const { editorData, setEditorData, isLoading } = useEditorData({ tabid }); const { editorData, setEditorData, isLoading } = useEditorData({ tabid });
const saveFileModalState = useModalState(); const saveFileModalState = useModalState();
const timerLabel = useTimerLabel();
const setOpenedTabs = useSetOpenedTabs(); const setOpenedTabs = useSetOpenedTabs();
@@ -42,6 +45,7 @@ export default function ShellTab({ tabid, tabVisible, toolbarPortalRef, ...other
const handleRunnerDone = React.useCallback(() => { const handleRunnerDone = React.useCallback(() => {
setBusy(false); setBusy(false);
timerLabel.stop();
}, []); }, []);
React.useEffect(() => { React.useEffect(() => {
@@ -69,12 +73,14 @@ export default function ShellTab({ tabid, tabVisible, toolbarPortalRef, ...other
runid = resp.data.runid; runid = resp.data.runid;
setRunnerId(runid); setRunnerId(runid);
setBusy(true); setBusy(true);
timerLabel.start();
}; };
const handleCancel = () => { const handleCancel = () => {
axios.post('runners/cancel', { axios.post('runners/cancel', {
runid: runnerId, runid: runnerId,
}); });
timerLabel.stop();
}; };
const handleKeyDown = (data, hash, keyString, keyCode, event) => { const handleKeyDown = (data, hash, keyString, keyCode, event) => {
@@ -128,6 +134,10 @@ export default function ShellTab({ tabid, tabVisible, toolbarPortalRef, ...other
/>, />,
toolbarPortalRef.current toolbarPortalRef.current
)} )}
{statusbarPortalRef &&
statusbarPortalRef.current &&
tabVisible &&
ReactDOM.createPortal(<StatusBarItem>{timerLabel.text}</StatusBarItem>, statusbarPortalRef.current)}
<SaveTabModal <SaveTabModal
modalState={saveFileModalState} modalState={saveFileModalState}
tabVisible={tabVisible} tabVisible={tabVisible}