mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Fixed an issue where changes done to a node using edit dialog are not reflecting on the properties tab if the properties tab is active. #7041
This commit is contained in:
@@ -13,6 +13,7 @@ from flask import render_template, request, make_response, jsonify, \
|
|||||||
current_app, url_for, session
|
current_app, url_for, session
|
||||||
from flask_babel import gettext
|
from flask_babel import gettext
|
||||||
from flask_security import current_user, login_required
|
from flask_security import current_user, login_required
|
||||||
|
from psycopg.conninfo import make_conninfo, conninfo_to_dict
|
||||||
from pgadmin.browser.server_groups.servers.types import ServerType
|
from pgadmin.browser.server_groups.servers.types import ServerType
|
||||||
from pgadmin.browser.utils import PGChildNodeView
|
from pgadmin.browser.utils import PGChildNodeView
|
||||||
from pgadmin.utils.ajax import make_json_response, bad_request, forbidden, \
|
from pgadmin.utils.ajax import make_json_response, bad_request, forbidden, \
|
||||||
@@ -1052,6 +1053,10 @@ class ServerNode(PGChildNodeView):
|
|||||||
conn = manager.connection()
|
conn = manager.connection()
|
||||||
connected = conn.connected()
|
connected = conn.connected()
|
||||||
|
|
||||||
|
# Get updated connection string to show on UI, if user change host,
|
||||||
|
# port and user when server is connected
|
||||||
|
display_connection_str = self.update_connection_string(manager, server)
|
||||||
|
|
||||||
if server.shared and server.user_id != current_user.id:
|
if server.shared and server.user_id != current_user.id:
|
||||||
shared_server = ServerModule.get_shared_server(server, gid)
|
shared_server = ServerModule.get_shared_server(server, gid)
|
||||||
server = ServerModule.get_shared_server_properties(server,
|
server = ServerModule.get_shared_server_properties(server,
|
||||||
@@ -1116,12 +1121,25 @@ class ServerNode(PGChildNodeView):
|
|||||||
'gss_encrypted': manager.gss_encrypted,
|
'gss_encrypted': manager.gss_encrypted,
|
||||||
'cloud_status': server.cloud_status,
|
'cloud_status': server.cloud_status,
|
||||||
'connection_params': connection_params,
|
'connection_params': connection_params,
|
||||||
'connection_string': manager.display_connection_string,
|
'connection_string': display_connection_str,
|
||||||
'prepare_threshold': server.prepare_threshold
|
'prepare_threshold': server.prepare_threshold
|
||||||
}
|
}
|
||||||
|
|
||||||
return ajax_response(response)
|
return ajax_response(response)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def update_connection_string(manager, server):
|
||||||
|
# Get current connection info in dict.
|
||||||
|
con_info = conninfo_to_dict(manager.display_connection_string)
|
||||||
|
|
||||||
|
# Update host, port and user
|
||||||
|
con_info['host'] = server.host
|
||||||
|
con_info['port'] = server.port
|
||||||
|
con_info['user'] = server.username
|
||||||
|
|
||||||
|
display_conn_string = make_conninfo(**con_info)
|
||||||
|
return display_conn_string
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def create(self, gid):
|
def create(self, gid):
|
||||||
"""Add a server node to the settings database"""
|
"""Add a server node to the settings database"""
|
||||||
|
|||||||
@@ -210,6 +210,8 @@ define('pgadmin.node.server', [
|
|||||||
d = t.itemData(i);
|
d = t.itemData(i);
|
||||||
t.removeIcon(i);
|
t.removeIcon(i);
|
||||||
d.connected = false;
|
d.connected = false;
|
||||||
|
// Update server tree node data after server diconnected.
|
||||||
|
t.update(i,d);
|
||||||
|
|
||||||
// Generate the event that server is disconnected
|
// Generate the event that server is disconnected
|
||||||
pgBrowser.Events.trigger(
|
pgBrowser.Events.trigger(
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import usePreferences from '../../preferences/static/js/store';
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
export default function ObjectNodeProperties({panelId, node, treeNodeInfo, nodeData, actionType, formType, onEdit, onSave, onClose,
|
export default function ObjectNodeProperties({panelId, node, treeNodeInfo, nodeData, actionType, formType, onEdit, onSave, onClose,
|
||||||
isActive, setIsStale}) {
|
isActive, setIsStale, isStale}) {
|
||||||
const layoutDocker = React.useContext(LayoutDockerContext);
|
const layoutDocker = React.useContext(LayoutDockerContext);
|
||||||
const nodeType = nodeData?._type;
|
const nodeType = nodeData?._type;
|
||||||
const pgAdmin = usePgAdmin();
|
const pgAdmin = usePgAdmin();
|
||||||
@@ -29,6 +29,8 @@ export default function ObjectNodeProperties({panelId, node, treeNodeInfo, nodeD
|
|||||||
let inCatalog = treeNodeInfo && ('catalog' in treeNodeInfo);
|
let inCatalog = treeNodeInfo && ('catalog' in treeNodeInfo);
|
||||||
let urlBase = generateNodeUrl.call(node, treeNodeInfo, actionType, nodeData, false, node.url_jump_after_node);
|
let urlBase = generateNodeUrl.call(node, treeNodeInfo, actionType, nodeData, false, node.url_jump_after_node);
|
||||||
const api = getApiInstance();
|
const api = getApiInstance();
|
||||||
|
// To check node data is updated or not
|
||||||
|
const staleCounter = useRef(0);
|
||||||
const url = (isNew)=>{
|
const url = (isNew)=>{
|
||||||
return urlBase + (isNew ? '' : nodeData._id);
|
return urlBase + (isNew ? '' : nodeData._id);
|
||||||
};
|
};
|
||||||
@@ -196,15 +198,24 @@ export default function ObjectNodeProperties({panelId, node, treeNodeInfo, nodeD
|
|||||||
&& formType !== 'tab') {
|
&& formType !== 'tab') {
|
||||||
schema.filterGroups = [gettext('Security')];
|
schema.filterGroups = [gettext('Security')];
|
||||||
}
|
}
|
||||||
|
// Reset stale counter.
|
||||||
|
useEffect(()=> {
|
||||||
|
staleCounter.current = 0;
|
||||||
|
}, [nodeData?._id]);
|
||||||
|
|
||||||
const key = useMemo(()=>{
|
const key = useMemo(()=>{
|
||||||
|
// If node data is updated increase the counter to show updated data.
|
||||||
|
if(isStale){
|
||||||
|
staleCounter.current += 1;
|
||||||
|
}
|
||||||
if( actionType != 'properties' || isActive) {
|
if( actionType != 'properties' || isActive) {
|
||||||
return nodeData?._id;
|
// Not required any action.
|
||||||
} else {
|
} else {
|
||||||
initData = ()=>Promise.resolve({});
|
initData = ()=>Promise.resolve({});
|
||||||
return nodeData?._id + '-0';
|
|
||||||
}
|
}
|
||||||
}, [isActive, nodeData?._id]);
|
|
||||||
|
return nodeData?._id + '-' + staleCounter.current;
|
||||||
|
}, [isActive, nodeData?._id, isStale]);
|
||||||
|
|
||||||
/* Fire at will, mount the DOM */
|
/* Fire at will, mount the DOM */
|
||||||
return (
|
return (
|
||||||
@@ -243,4 +254,5 @@ ObjectNodeProperties.propTypes = {
|
|||||||
onClose: PropTypes.func,
|
onClose: PropTypes.func,
|
||||||
isActive: PropTypes.bool,
|
isActive: PropTypes.bool,
|
||||||
setIsStale: PropTypes.func,
|
setIsStale: PropTypes.func,
|
||||||
|
isStale: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user