Skip to content

Commit fe0872f

Browse files
committed
Fixed an issue in the Search Objects tool where selecting a node would sometimes result in a different node being selected. #8675
1 parent 6714bb1 commit fe0872f

File tree

5 files changed

+24
-4
lines changed

5 files changed

+24
-4
lines changed

web/pgadmin/browser/static/js/browser.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ define('pgadmin.browser', [
198198
obj.Events.on('pgadmin:browser:tree:update', obj.onUpdateTreeNode.bind(obj));
199199
obj.Events.on('pgadmin:browser:tree:refresh', obj.onRefreshTreeNodeReact.bind(obj));
200200
obj.Events.on('pgadmin-browser:tree:loadfail', obj.onLoadFailNode.bind(obj));
201+
obj.Events.on('pgadmin:browser:tree:disable_select', obj.disableTreeSelection.bind(obj));
201202
obj.bind_beforeunload();
202203

203204
/* User UI activity */
@@ -1650,6 +1651,10 @@ define('pgadmin.browser', [
16501651

16511652
},
16521653

1654+
disableTreeSelection: function(_disable) {
1655+
pgBrowser.disable_tree_select = _disable;
1656+
},
1657+
16531658
editor_shortcut_keys: {
16541659
// Autocomplete sql command
16551660
'Ctrl-Space': 'autocomplete',

web/pgadmin/browser/static/js/node.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -784,12 +784,12 @@ define('pgadmin.browser.node', [
784784

785785
if (first_child._loaded) {
786786
tree.open(first_child);
787-
tree.select(first_child);
787+
!pgBrowser['disable_tree_select'] && tree.select(first_child);
788788
} else {
789789
const openSoleItem = setInterval(() => {
790790
if (first_child._loaded) {
791791
tree.open(first_child);
792-
tree.select(first_child);
792+
!pgBrowser['disable_tree_select'] && tree.select(first_child);
793793
clearSoleItemInterval();
794794
}
795795
}, 200);
@@ -800,7 +800,7 @@ define('pgadmin.browser.node', [
800800

801801
} else if(tree.children(item).length == 1) {
802802
const first_child = tree.first(item);
803-
tree.select(first_child);
803+
!pgBrowser['disable_tree_select'] && tree.select(first_child);
804804
}
805805

806806
pgBrowser.Events.trigger('pgadmin:browser:tree:update-tree-state', item);

web/pgadmin/browser/templates/browser/js/utils.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ define('pgadmin.browser.utils',
7272
/* Enable server password exec command */
7373
pgAdmin['enable_server_passexec_cmd'] = '{{enable_server_passexec_cmd}}';
7474

75+
/* Enable tree.select of all places by default */
76+
pgBrowser['disable_tree_select'] = false;
77+
78+
7579
// Define list of nodes on which Query tool option doesn't appears
7680
let unsupported_nodes = pgAdmin.unsupported_nodes = [
7781
'server_group', 'server', 'coll-tablespace', 'tablespace',

web/pgadmin/static/js/helpers/Layout/index.jsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import PropTypes from 'prop-types';
1313
import EventBus from '../EventBus';
1414
import getApiInstance from '../../api_instance';
1515
import url_for from 'sources/url_for';
16+
import pgAdmin from 'sources/pgadmin';
1617
import { PgIconButton } from '../../components/Buttons';
1718
import CloseIcon from '@mui/icons-material/CloseRounded';
1819
import gettext from 'sources/gettext';
@@ -192,6 +193,11 @@ export class LayoutDocker {
192193
})],
193194
}, null, 'float');
194195
}
196+
if (panelData?.id == 'id-search-objects') {
197+
// Disable the tree.select from all other places as it is clashing with
198+
// the tree.select() in tree.findNodeWithToggle() of Search objects module.
199+
pgAdmin.Browser.Events.trigger('pgadmin:browser:tree:disable_select', true);
200+
}
195201
}
196202

197203
isTabOpen(panelId) {
@@ -342,6 +348,11 @@ function DialogClose({panelData}) {
342348
<Box display="flex" alignItems="center">
343349
<PgIconButton title={gettext('Close')} icon={<CloseIcon />} size="xs" noBorder onClick={()=>{
344350
layoutDocker.close(panelData.activeId);
351+
if (panelData?.activeId == 'id-search-objects') {
352+
// Enable the tree.select of all other places after closing of Search Objects dialog as it
353+
// is clashing with the tree.select() in tree.findNodeWithToggle() of Search objects module.
354+
pgAdmin.Browser.Events.trigger('pgadmin:browser:tree:disable_select', false);
355+
}
345356
}} style={{marginRight: '-4px'}}/>
346357
</Box>
347358
);

web/pgadmin/static/js/tree/pgadmin_tree_save_state.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ _.extend(pgBrowser.browserTreeState, {
362362
if (tmpTreeData && 'selected' in tmpTreeData && selectedItem in tmpTreeData['selected']) {
363363
if (tmpTreeData['selected'][selectedItem] == data.id) {
364364
this.is_selected = true;
365-
pgBrowser.tree.select(item, true, 'center');
365+
!pgBrowser['disable_tree_select'] && pgBrowser.tree.select(item, true, 'center');
366366
}
367367
}
368368
}

0 commit comments

Comments
 (0)