From 5df2c7686c197a1fc9ed2e99d5fa9b4bf8c056e7 Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Thu, 19 Jun 2025 11:49:37 +0530 Subject: [PATCH] Fix issues found while testing changes for preferences tab and search. #6743 --- .../js/components/PreferencesComponent.jsx | 4 +- .../js/components/PreferencesHelper.jsx | 1 + .../static/js/components/RightPreference.jsx | 1 - .../js/Theme/overrides/codemirror.override.js | 4 ++ .../ReactCodeMirror/components/Editor.jsx | 48 ++++++++++++------- .../sqleditor/utils/query_tool_preferences.py | 6 +-- 6 files changed, 41 insertions(+), 23 deletions(-) diff --git a/web/pgadmin/preferences/static/js/components/PreferencesComponent.jsx b/web/pgadmin/preferences/static/js/components/PreferencesComponent.jsx index ffe864c4b..5bbe44598 100644 --- a/web/pgadmin/preferences/static/js/components/PreferencesComponent.jsx +++ b/web/pgadmin/preferences/static/js/components/PreferencesComponent.jsx @@ -199,7 +199,9 @@ export default function PreferencesComponent({panelId}) { useEffect(()=>{ /* Bind the close event and check if user should be warned */ - const deregister = layoutDocker.eventBus.registerListener(LAYOUT_EVENTS.CLOSING, ()=>{ + const deregister = layoutDocker.eventBus.registerListener(LAYOUT_EVENTS.CLOSING, (id)=>{ + if(panelId != id) return; + if(Object.keys(prefChangedData.current).length > 0) { pgAdmin.Browser.notifier.confirm( gettext('Warning'), diff --git a/web/pgadmin/preferences/static/js/components/PreferencesHelper.jsx b/web/pgadmin/preferences/static/js/components/PreferencesHelper.jsx index 5ca81532d..19ac4b098 100644 --- a/web/pgadmin/preferences/static/js/components/PreferencesHelper.jsx +++ b/web/pgadmin/preferences/static/js/components/PreferencesHelper.jsx @@ -139,6 +139,7 @@ export function prepareSubnodeData(node, subNode, nodeData, preferencesStore) { delete element.value; // Original value is moved to fieldValues element.visible = false; + element.labelTooltip = `${node.name}:${subNode.name}:${element.name}`; element.helpMessage = element?.help_str || null; element.parentId = nodeData.id; fieldItems.push(element); diff --git a/web/pgadmin/preferences/static/js/components/RightPreference.jsx b/web/pgadmin/preferences/static/js/components/RightPreference.jsx index 19f37ccf7..e11f2303b 100644 --- a/web/pgadmin/preferences/static/js/components/RightPreference.jsx +++ b/web/pgadmin/preferences/static/js/components/RightPreference.jsx @@ -34,7 +34,6 @@ export default function RightPreference({ schema, filteredItemIds, selectedItem, schema.schemaFields.forEach((field) => { field.visible = field.parentId === selectedItem.id && filteredItemIds.includes(field.id); - field.labelTooltip = `${selectedItem.key.toLowerCase()}:${selectedItem.key}:${field.key}`; }); schema.categoryUpdated(selectedItem.id); }; diff --git a/web/pgadmin/static/js/Theme/overrides/codemirror.override.js b/web/pgadmin/static/js/Theme/overrides/codemirror.override.js index e2d0749a1..42b61a4a7 100644 --- a/web/pgadmin/static/js/Theme/overrides/codemirror.override.js +++ b/web/pgadmin/static/js/Theme/overrides/codemirror.override.js @@ -84,6 +84,10 @@ export default function cmOverride(theme) { color: editor.guttersFg, borderRight: 'none', + '& .cm-lineNumbers': { + padding: '0px 4px', + }, + '& .cm-foldGutter': { padding: '0px', color: editor.fg, diff --git a/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx b/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx index 35eaa9fe8..eab070962 100644 --- a/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx +++ b/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx @@ -160,8 +160,6 @@ const defaultExtensions = [ EditorView.clipboardOutputFilter.of((text, state)=>{ return CustomEditorView.getSelectionFromState(state); }), - // Custom folding service for PL/pgSQL - plpgsqlFoldService, ]; export default function Editor({ @@ -174,9 +172,10 @@ export default function Editor({ const editorContainerRef = useRef(); const editor = useRef(); - const defaultOptions = { + const finalOptions = { lineNumbers: true, foldGutter: true, + ...options }; const preferencesStore = usePreferences(); @@ -189,28 +188,13 @@ export default function Editor({ useEffect(() => { if (!checkIsMounted()) return; - const finalOptions = { ...defaultOptions, ...options }; const osEOL = OS_EOL === 'crlf' ? '\r\n' : '\n'; const finalExtns = [ - (language == 'json') ? json() : sql({dialect: PgSQL}), ...defaultExtensions, ]; if (finalOptions.lineNumbers) { finalExtns.push(lineNumbers()); } - if (finalOptions.foldGutter) { - finalExtns.push(foldGutter({ - markerDOM: (open)=>{ - let icon = document.createElement('span'); - if(open) { - icon.innerHTML = arrowDownHtml; - } else { - icon.innerHTML = arrowRightHtml; - } - return icon; - }, - })); - } if (editorContainerRef.current) { const state = EditorState.create({ extensions: [ @@ -388,6 +372,34 @@ export default function Editor({ newConfigExtn.push(currentQueryHighlighterExtn()); } + if(!pref.plain_editor_mode) { + // lang override + if(language == 'json') { + newConfigExtn.push(json()); + } else { + newConfigExtn.push(sql({dialect: PgSQL})); + } + } + + if(pref.code_folding && finalOptions.foldGutter) { + newConfigExtn.push(foldGutter({ + markerDOM: (open)=>{ + let icon = document.createElement('span'); + if(open) { + icon.innerHTML = arrowDownHtml; + } else { + icon.innerHTML = arrowRightHtml; + } + return icon; + }, + })); + } + + // add fold service conditionally + if(!pref.plain_editor_mode && pref.code_folding && language == 'pgsql') { + newConfigExtn.push(plpgsqlFoldService); + } + editor.current.dispatch({ effects: configurables.current.reconfigure(newConfigExtn) }); diff --git a/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py b/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py index aa5312d87..edf6bc2f7 100644 --- a/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py +++ b/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py @@ -177,7 +177,7 @@ def register_query_tool_preferences(self): ) ) - self.sql_font_size = self.preference.register( + self.preference.register( 'Editor', 'plain_editor_mode', gettext("Plain text mode?"), 'boolean', False, category_label=PREF_LABEL_EDITOR, @@ -188,7 +188,7 @@ def register_query_tool_preferences(self): ) ) - self.sql_font_size = self.preference.register( + self.preference.register( 'Editor', 'code_folding', gettext("Code folding?"), 'boolean', True, category_label=PREF_LABEL_EDITOR, @@ -1064,7 +1064,7 @@ def register_query_tool_preferences(self): ) ) - self.sql_font_size = self.preference.register( + self.preference.register( 'Editor', 'indent_new_line', gettext("Auto-indent new line?"), 'boolean', True, category_label=PREF_LABEL_EDITOR,