From 7d0241008b92a31082f9dd7e96d6ca764b9cdff9 Mon Sep 17 00:00:00 2001 From: Yogesh Mahajan Date: Thu, 14 Aug 2025 13:47:30 +0530 Subject: [PATCH] Ensure that disabling "Save Application State" in Preferences prevents tool data from being saved and stops it from being restored on application restart. #9067 --- docs/en_US/release_notes_9_7.rst | 4 ++-- .../misc/workspaces/static/js/AdHocConnection.jsx | 6 +++--- web/pgadmin/static/js/helpers/Layout/index.jsx | 15 +++++++++++---- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/docs/en_US/release_notes_9_7.rst b/docs/en_US/release_notes_9_7.rst index f02be9f5f..9510bf11b 100644 --- a/docs/en_US/release_notes_9_7.rst +++ b/docs/en_US/release_notes_9_7.rst @@ -24,7 +24,6 @@ New features | `Issue #6456 `_ - Added GENERIC_PLAN, MEMORY, SERIALIZE option to EXPLAIN/EXPLAIN ANALYZE command. | `Issue #8917 `_ - Add support for server tag-based filtering in the Object Explorer. | `Issue #8931 `_ - Added support for builtin locale provider while creating Collation. - | `Issue #8935 `_ - Added all new connection string parameters introduced in PostgreSQL 16 and later. Housekeeping ************ @@ -47,4 +46,5 @@ Bug fixes | `Issue #8982 `_ - Fixed an issue where adding breakpoints caused errors, and stepping out of a nested function removed breakpoints from the parent function. | `Issue #9007 `_ - Ensure the scratch pad in the Query Tool is not restored after it is closed. | `Issue #9008 `_ - Update the documentation for parameters that require file paths. - | `Issue #9047 `_ - Fixed an issue where downloading images on the ERD tool was not working in desktop mode. \ No newline at end of file + | `Issue #9047 `_ - Fixed an issue where downloading images on the ERD tool was not working in desktop mode. + | `Issue #9067 `_ - Ensure that disabling "Save Application State" in Preferences prevents tool data from being saved and stops it from being restored on application restart. \ No newline at end of file diff --git a/web/pgadmin/misc/workspaces/static/js/AdHocConnection.jsx b/web/pgadmin/misc/workspaces/static/js/AdHocConnection.jsx index 4df84a351..3373caeb9 100644 --- a/web/pgadmin/misc/workspaces/static/js/AdHocConnection.jsx +++ b/web/pgadmin/misc/workspaces/static/js/AdHocConnection.jsx @@ -215,11 +215,11 @@ class AdHocConnectionSchema extends BaseUISchema { disabled: (state) => state.sid, },{ id: 'did', label: gettext('Database'), deps: ['sid', 'connected'], - controlProps: {creatable: true}, type: (state) => { if (state?.sid) { return { type: 'select', + controlProps: {creatable: true}, options: () => this.getOtherOptions( state.sid, 'get_new_connection_database' ), @@ -238,11 +238,11 @@ class AdHocConnectionSchema extends BaseUISchema { } }, { id: 'user', label: gettext('User'), deps: ['sid', 'connected'], - controlProps: {creatable: true}, type: (state) => { if (state?.sid) { return { type: 'select', + controlProps: {creatable: true}, options: () => this.getOtherOptions( state.sid, 'get_new_connection_user' ), @@ -266,9 +266,9 @@ class AdHocConnectionSchema extends BaseUISchema { } },{ id: 'role', label: gettext('Role'), deps: ['sid', 'connected'], - controlProps: {creatable: true}, type: (state)=>({ type: 'select', + controlProps: {creatable: true}, options: () => this.getOtherOptions( state.sid, 'get_new_connection_role' ), diff --git a/web/pgadmin/static/js/helpers/Layout/index.jsx b/web/pgadmin/static/js/helpers/Layout/index.jsx index 577964be4..468b49a32 100644 --- a/web/pgadmin/static/js/helpers/Layout/index.jsx +++ b/web/pgadmin/static/js/helpers/Layout/index.jsx @@ -396,6 +396,7 @@ export default function Layout({groups, noContextGroups, getLayoutInstance, layo const layoutDockerObj = React.useMemo(()=>new LayoutDocker(layoutId, props.defaultLayout, resetToTabPanel, noContextGroups), []); const prefStore = usePreferences(); const dynamicTabsStyleRef = useRef(); + const saveAppStateRef = useRef(prefStore?.getPreferencesForModule('misc')?.save_app_state); const { deleteToolData } = useApplicationState(); useEffect(()=>{ @@ -411,6 +412,8 @@ export default function Layout({groups, noContextGroups, getLayoutInstance, layo useEffect(()=>{ const dynamicTabs = prefStore.getPreferencesForModule('browser')?.dynamic_tabs; + const saveAppState = prefStore?.getPreferencesForModule('misc')?.save_app_state; + // Add a class to set max width for non dynamic Tabs if(!dynamicTabs && !dynamicTabsStyleRef.current) { const css = '.dock-tab:not(div.dock-tab-active) { max-width: 180px; }', @@ -423,6 +426,12 @@ export default function Layout({groups, noContextGroups, getLayoutInstance, layo dynamicTabsStyleRef.current.remove(); dynamicTabsStyleRef.current = null; } + + if(!saveAppState && saveAppStateRef.current){ + layoutDockerObj.saveLayout(); + } + saveAppStateRef.current = saveAppState; + }, [prefStore]); const getTabMenuItems = (panelId)=>{ @@ -470,10 +479,8 @@ export default function Layout({groups, noContextGroups, getLayoutInstance, layo const saveTab = (tab) => { // 'tab' here is the full TabData object, potentially with 'title', 'content', etc. // We only want to save the 'id' and any custom properties needed by loadTab. - const savedTab = { - id: tab.id, - }; - if (tab.metaData && !BROWSER_PANELS.DEBUGGER_TOOL.includes(tab.id.split('_')[0])) { + const savedTab = { id: tab.id }; + if (saveAppStateRef.current && tab.metaData && !BROWSER_PANELS.DEBUGGER_TOOL.includes(tab.id.split('_')[0])) { // add custom properties that were part of the original TabBase const updatedMetaData = { ...tab.metaData,