diff --git a/packages/api/src/controllers/sessions.js b/packages/api/src/controllers/sessions.js index 8af656bac..71e04bf84 100644 --- a/packages/api/src/controllers/sessions.js +++ b/packages/api/src/controllers/sessions.js @@ -105,6 +105,8 @@ module.exports = { }); subprocess.on('exit', () => { this.opened = this.opened.filter(x => x.sesid != sesid); + this.dispatchMessage(sesid, 'Query session closed'); + socket.emit(`session-closed-${sesid}`); }); subprocess.send({ msgtype: 'connect', ...connection, database }); diff --git a/packages/web/src/tabs/QueryDesignTab.svelte b/packages/web/src/tabs/QueryDesignTab.svelte index 85f2e5d32..f11b6e350 100644 --- a/packages/web/src/tabs/QueryDesignTab.svelte +++ b/packages/web/src/tabs/QueryDesignTab.svelte @@ -80,8 +80,10 @@ function onSession(sid) { if (sid) { apiOn(`session-done-${sid}`, handleSessionDone); + apiOn(`session-closed-${sid}`, handleSessionClosed); return () => { apiOff(`session-done-${sid}`, handleSessionDone); + apiOff(`session-closed-${sid}`, handleSessionClosed); }; } return () => {}; @@ -197,6 +199,11 @@ timerLabel.stop(); }; + const handleSessionClosed = () => { + sessionId = null; + handleSessionDone(); + }; + const handleChange = (value, skipUndoChain) => // @ts-ignore dispatchModel({ diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte index be7bc87f3..c2b61eae7 100644 --- a/packages/web/src/tabs/QueryTab.svelte +++ b/packages/web/src/tabs/QueryTab.svelte @@ -125,8 +125,10 @@ function onSession(sid) { if (sid) { apiOn(`session-done-${sid}`, handleSessionDone); + apiOn(`session-closed-${sid}`, handleSessionClosed); return () => { apiOff(`session-done-${sid}`, handleSessionDone); + apiOff(`session-closed-${sid}`, handleSessionClosed); }; } return () => {}; @@ -279,6 +281,11 @@ timerLabel.stop(); }; + const handleSessionClosed = () => { + sessionId = null; + handleSessionDone(); + }; + const { editorState, editorValue, setEditorData } = useEditorData({ tabid, loadFromArgs: