Skip to content

Commit 31322dc

Browse files
Fix Query Tool state restoration for new connections and queries. #8987
1 parent 30f032b commit 31322dc

File tree

3 files changed

+48
-10
lines changed

3 files changed

+48
-10
lines changed

web/pgadmin/settings/static/ApplicationStateProvider.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,16 @@ export function ApplicationStateProvider({children}){
7171
if(connectionInfo.is_editor_dirty){
7272
if(connectionInfo.external_file_changes){
7373
// file has external chages
74-
return {loadFile: loadFile, fileName: fileName, data: toolContent, modifiedExternally: true};
74+
return {loadFile: loadFile, fileName: fileName, data: toolContent, modifiedExternally: true, connectionInfo: connectionInfo};
7575
}
7676
}else if(connectionInfo.file_deleted){
77-
return {loadFile: loadFile, fileName: null, data: toolContent};
77+
return {loadFile: loadFile, fileName: null, data: toolContent, connectionInfo: connectionInfo};
7878
}else{
7979
loadFile = true;
80-
return {loadFile: loadFile, fileName: fileName, data: null};
80+
return {loadFile: loadFile, fileName: fileName, data: null, connectionInfo: connectionInfo};
8181
}
8282
}
83-
return {loadFile: loadFile, fileName: fileName, data: toolContent};
83+
return {loadFile: loadFile, fileName: fileName, data: toolContent, connectionInfo: connectionInfo};
8484

8585
} catch (error) {
8686
let errorMsg = gettext(error?.response?.data?.errormsg || error);

web/pgadmin/tools/sqleditor/static/js/components/QueryToolComponent.jsx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,30 @@ export default function QueryToolComponent({params, pgWindow, pgAdmin, selectedN
305305
const restoreToolContent = async () =>{
306306
let toolContent = await getToolContent(qtState.params.trans_id);
307307
if(toolContent){
308+
const connList = toolContent.connectionInfo?.connection_list;
309+
if (Array.isArray(connList) && connList.length > 0) {
310+
// ensure exactly one is_selected
311+
if (!connList.some(c => c.is_selected)) {
312+
connList[0].is_selected = true;
313+
}
314+
// pick selected connection to update params (so UI shows correct selected conn)
315+
const sel = connList.find(c => c.is_selected) || connList[0];
316+
317+
setQtStatePartial(prev => ({
318+
...prev,
319+
connection_list: connList,
320+
params: {
321+
...prev.params,
322+
sid: sel.sid,
323+
did: sel.did,
324+
user: sel.user,
325+
role: sel.role,
326+
server_name: sel.server_name,
327+
database_name: sel.database_name,
328+
title: sel.title,
329+
},
330+
}));
331+
}
308332
if (toolContent?.modifiedExternally) {
309333
toolContent = await fmUtilsObj.warnFileReload(toolContent?.fileName, toolContent.data, '');
310334
}

web/pgadmin/tools/sqleditor/static/js/components/sections/Query.jsx

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export default function Query({onTextSelect, setQtStatePartial}) {
6868
const preferencesStore = usePreferences();
6969
const modalId = MODAL_DIALOGS.QT_CONFIRMATIONS;
7070
const fmUtilsObj = useMemo(()=>new FileManagerUtils(queryToolCtx.api, {}), []);
71+
const initialTransIdRef = React.useRef(queryToolCtx.params.trans_id);
7172

7273
const highlightError = (cmObj, {errormsg: result, data}, executeCursor)=>{
7374
let errorLineNo = 0,
@@ -363,8 +364,9 @@ export default function Query({onTextSelect, setQtStatePartial}) {
363364

364365
const change = useCallback(()=>{
365366
eventBus.fireEvent(QUERY_TOOL_EVENTS.QUERY_CHANGED, editor.current.isDirty());
366-
367-
if(isSaveToolDataEnabled('sqleditor') && editor.current.isDirty()){
367+
const value = editor.current.getValue() || '';
368+
const isDirty = editor.current.isDirty();
369+
if(isSaveToolDataEnabled('sqleditor') && (isDirty || value.length === 0)){
368370
eventBus.fireEvent(QUERY_TOOL_EVENTS.TRIGGER_SAVE_QUERY_TOOL_DATA);
369371
}
370372

@@ -379,10 +381,22 @@ export default function Query({onTextSelect, setQtStatePartial}) {
379381

380382

381383
const [saveQtData, setSaveQtData] = useState(false);
382-
useDelayDebounce(()=>{
383-
let connectionInfo = { ..._.find(queryToolCtx.connection_list, c => c.is_selected),
384-
'open_file_name':queryToolCtx.current_file, 'is_editor_dirty': editor.current.isDirty() };
385-
saveToolData('sqleditor', connectionInfo, queryToolCtx.params.trans_id, editor.current.getValue());
384+
385+
useDelayDebounce(() => {
386+
if (!editor.current) {
387+
setSaveQtData(false);
388+
return;
389+
}
390+
const currentTransId = initialTransIdRef.current || queryToolCtx.params.trans_id;
391+
const currentConnList = queryToolCtx.connection_list;
392+
const currentFile = queryToolCtx.current_file;
393+
394+
let connectionInfo = {
395+
connection_list: currentConnList,
396+
open_file_name: currentFile,
397+
is_editor_dirty: editor.current.isDirty()
398+
};
399+
saveToolData('sqleditor', connectionInfo, currentTransId, editor.current.getValue());
386400
setSaveQtData(false);
387401
}, saveQtData, 500);
388402

0 commit comments

Comments
 (0)