mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Fixed code smell 'Prefer using an optional chain expression instead, as it's more concise and easier to read'.
This commit is contained in:
@@ -61,7 +61,7 @@ export default class CollationSchema extends BaseUISchema {
|
||||
filter: (options) => {
|
||||
let res = [];
|
||||
options.forEach((d) => {
|
||||
if (!(d && d.label.match(/^pg_/)))
|
||||
if (!(d?.label.match(/^pg_/)))
|
||||
res.push(d);
|
||||
});
|
||||
return res;
|
||||
|
||||
@@ -74,7 +74,7 @@ export default class PackageSchema extends BaseUISchema {
|
||||
if (state && packageSchemaObj.isNew(state)) {
|
||||
options.forEach((option) => {
|
||||
// If schema name start with pg_* then we need to exclude them
|
||||
if(option && option.label.match(/^pg_/)) {
|
||||
if(option?.label.match(/^pg_/)) {
|
||||
return;
|
||||
}
|
||||
res.push({ label: option.label, value: option.value, image: 'icon-schema' });
|
||||
|
||||
@@ -33,7 +33,7 @@ export function getNodePartitionTableSchema(treeNodeInfo, itemNodeData, pgBrowse
|
||||
cacheLevel: 'database'
|
||||
}, (d)=>{
|
||||
// If schema name start with pg_* then we need to exclude them
|
||||
return !(d && d.label.match(/^pg_/));
|
||||
return !(d?.label.match(/^pg_/));
|
||||
}),
|
||||
spcname: spcname,
|
||||
coll_inherits: ()=>getNodeAjaxOptions('get_inherits', partNode, treeNodeInfo, itemNodeData),
|
||||
|
||||
@@ -38,7 +38,7 @@ export function getNodeTableSchema(treeNodeInfo, itemNodeData, pgBrowser) {
|
||||
cacheLevel: 'database'
|
||||
}, (d)=>{
|
||||
// If schema name start with pg_* then we need to exclude them
|
||||
return !(d && d.label.match(/^pg_/));
|
||||
return !(d?.label.match(/^pg_/));
|
||||
}),
|
||||
spcname: spcname,
|
||||
coll_inherits: ()=>getNodeAjaxOptions('get_inherits', tableNode, treeNodeInfo, itemNodeData),
|
||||
@@ -368,9 +368,9 @@ export default class TableSchema extends BaseUISchema {
|
||||
this.getColumns = getColumns;
|
||||
|
||||
this.partitionsObj = new PartitionsSchema(this.nodeInfo, getCollations, getOperatorClass, getAttachTables, fieldOptions.table_amname_list);
|
||||
this.constraintsObj = this.schemas.constraints && this.schemas.constraints() || {};
|
||||
this.columnsSchema = this.schemas.columns && this.schemas.columns() || {};
|
||||
this.vacuumSettingsSchema = this.schemas.vacuum_settings && this.schemas.vacuum_settings() || {};
|
||||
this.constraintsObj = this.schemas.constraints?.() || {};
|
||||
this.columnsSchema = this.schemas.columns?.() || {};
|
||||
this.vacuumSettingsSchema = this.schemas.vacuum_settings?.() || {};
|
||||
this.partitionKeysObj = new PartitionKeysSchema([], getCollations, getOperatorClass);
|
||||
this.inErd = inErd;
|
||||
}
|
||||
|
||||
@@ -262,7 +262,7 @@ class RangeSchema extends BaseUISchema {
|
||||
state.subtypes = options;
|
||||
}
|
||||
options.forEach((option) => {
|
||||
if(option && option.label == '') {
|
||||
if(option?.label == '') {
|
||||
return;
|
||||
}
|
||||
res.push({ label: option.label, value: option.value });
|
||||
@@ -473,7 +473,7 @@ class ExternalSchema extends BaseUISchema {
|
||||
let result = [];
|
||||
_.each(control, function(item) {
|
||||
|
||||
if(item && item.label == '') {
|
||||
if(item?.label == '') {
|
||||
return;
|
||||
}
|
||||
// if type from selected from combobox matches in options
|
||||
@@ -608,7 +608,7 @@ class ExternalSchema extends BaseUISchema {
|
||||
let res = [];
|
||||
if (state && obj.isNew(state)) {
|
||||
_.each(options, function(item) {
|
||||
if(item && item.label == '') {
|
||||
if(item?.label == '') {
|
||||
return;
|
||||
}
|
||||
// if type from selected from combobox matches in options
|
||||
@@ -646,7 +646,7 @@ class ExternalSchema extends BaseUISchema {
|
||||
let res = [];
|
||||
if (state && obj.isNew(state)) {
|
||||
_.each(options, function(item) {
|
||||
if(item && item.label == '') {
|
||||
if(item?.label == '') {
|
||||
return;
|
||||
}
|
||||
// if type from selected from combobox matches in options
|
||||
@@ -750,7 +750,7 @@ class ExternalSchema extends BaseUISchema {
|
||||
let res = [];
|
||||
if (state && obj.isNew(state)) {
|
||||
_.each(options, function(item) {
|
||||
if(item && item.label == '') {
|
||||
if(item?.label == '') {
|
||||
return;
|
||||
}
|
||||
// if type from selected from combobox matches in options
|
||||
@@ -972,7 +972,7 @@ class CompositeSchema extends BaseUISchema {
|
||||
let self = this,
|
||||
errmsg = null;
|
||||
|
||||
if(self.top && self.top.sessData && self.top.sessData.typtype === 'c') {
|
||||
if(self.top?.sessData?.typtype === 'c') {
|
||||
if (isEmptyString(state.member_name)) {
|
||||
errmsg = gettext('Please specify the value for member name.');
|
||||
setError('member_name', errmsg);
|
||||
@@ -1197,7 +1197,7 @@ export default class TypeSchema extends BaseUISchema {
|
||||
}
|
||||
|
||||
schemaCheck(state) {
|
||||
if(this.fieldOptions.node_info && this.fieldOptions.node_info?.schema) {
|
||||
if(this.fieldOptions?.node_info?.schema) {
|
||||
if(!state)
|
||||
return true;
|
||||
if (this.isNew(state)) {
|
||||
@@ -1245,7 +1245,7 @@ export default class TypeSchema extends BaseUISchema {
|
||||
if (state && obj.isNew(state)) {
|
||||
options.forEach((option) => {
|
||||
// If schema name start with pg_* then we need to exclude them
|
||||
if(option && option.label.match(/^pg_/)) {
|
||||
if(option?.label.match(/^pg_/)) {
|
||||
return;
|
||||
}
|
||||
res.push({ label: option.label, value: option.value, image: 'icon-schema' });
|
||||
|
||||
@@ -201,7 +201,7 @@ define('pgadmin.node.mview', [
|
||||
|
||||
api.put(obj.generate_url(i, 'refresh_data' , d, true), {'concurrent': args.concurrent, 'with_data': args.with_data})
|
||||
.then(({data: refreshed_res})=>{
|
||||
if (refreshed_res.data && refreshed_res.data.status) {
|
||||
if (refreshed_res.data?.status) {
|
||||
//Do nothing as we are creating the job and exiting from the main dialog
|
||||
pgBrowser.BgProcessManager.startProcess(refreshed_res.data.job_id, refreshed_res.data.desc);
|
||||
} else {
|
||||
@@ -228,7 +228,7 @@ define('pgadmin.node.mview', [
|
||||
is_version_supported: function(data, item) {
|
||||
let t = pgAdmin.Browser.tree,
|
||||
i = item || t.selected(),
|
||||
info = t && t.getTreeNodeHierarchy(i),
|
||||
info = t?.getTreeNodeHierarchy(i),
|
||||
version = _.isUndefined(info) ? 0 : info.server.version;
|
||||
|
||||
// disable refresh concurrently if server version is 9.3
|
||||
|
||||
@@ -145,8 +145,7 @@ export default class ViewSchema extends BaseUISchema {
|
||||
return false;
|
||||
}
|
||||
|
||||
let old_def = obj.origData.definition &&
|
||||
obj.origData.definition.replace(
|
||||
let old_def = obj.origData.definition?.replace(
|
||||
/\s/gi, ''
|
||||
).split('FROM'),
|
||||
new_def = [];
|
||||
|
||||
@@ -140,13 +140,13 @@ define('pgadmin.node.database', [
|
||||
return (node && !node.connected && node.allowConn);
|
||||
},
|
||||
is_connected: function(node) {
|
||||
return (node && node.connected && node.canDisconn);
|
||||
return (node?.connected && node?.canDisconn);
|
||||
},
|
||||
is_psql_enabled: function(node) {
|
||||
return (node && node.connected) && pgAdmin['enable_psql'];
|
||||
return node?.connected && pgAdmin['enable_psql'];
|
||||
},
|
||||
is_conn_allow: function(node) {
|
||||
return (node && node.allowConn);
|
||||
return (node?.allowConn);
|
||||
},
|
||||
connection_lost: function(i, resp, server_connected) {
|
||||
if (pgBrowser.tree) {
|
||||
@@ -154,7 +154,7 @@ define('pgadmin.node.database', [
|
||||
d = i && t.itemData(i),
|
||||
self = this;
|
||||
|
||||
while (d && d._type != 'database') {
|
||||
while (d?._type != 'database') {
|
||||
i = t.parent(i);
|
||||
d = i && t.itemData(i);
|
||||
}
|
||||
@@ -216,7 +216,7 @@ define('pgadmin.node.database', [
|
||||
i = input.item || t.selected(),
|
||||
d = i ? t.itemData(i) : undefined;
|
||||
|
||||
if (d && d.label != 'template0') {
|
||||
if (d?.label != 'template0') {
|
||||
connect_to_database(obj, d, t, i, true);
|
||||
}
|
||||
return false;
|
||||
@@ -436,7 +436,7 @@ define('pgadmin.node.database', [
|
||||
res, model, _data, _tree, _item, _connected
|
||||
) {
|
||||
_data.is_connecting = false;
|
||||
if (res && res.data) {
|
||||
if (res?.data) {
|
||||
if(typeof res.data.connected == 'boolean') {
|
||||
_data.connected = res.data.connected;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ define('pgadmin.node.server', [
|
||||
hasStatistics: true,
|
||||
hasCollectiveStatistics: true,
|
||||
can_expand: function(d) {
|
||||
return d && d.connected;
|
||||
return d?.connected;
|
||||
},
|
||||
title: function(d, action) {
|
||||
if(action == 'create') {
|
||||
@@ -139,8 +139,8 @@ define('pgadmin.node.server', [
|
||||
label: gettext('Clear Saved Password'),
|
||||
priority: 11,
|
||||
enable: function(node) {
|
||||
return (node && node._type === 'server' &&
|
||||
node.is_password_saved);
|
||||
return (node?._type === 'server' &&
|
||||
node?.is_password_saved);
|
||||
},
|
||||
},{
|
||||
name: 'clear_sshtunnel_password', node: 'server', module: this,
|
||||
@@ -148,8 +148,8 @@ define('pgadmin.node.server', [
|
||||
label: gettext('Clear SSH Tunnel Password'),
|
||||
priority: 12,
|
||||
enable: function(node) {
|
||||
return (node && node._type === 'server' &&
|
||||
node.is_tunnel_password_saved);
|
||||
return (node?._type === 'server' &&
|
||||
node?.is_tunnel_password_saved);
|
||||
},
|
||||
data: {
|
||||
data_disabled: gettext('SSH Tunnel password is not saved for selected server.'),
|
||||
@@ -175,30 +175,30 @@ define('pgadmin.node.server', [
|
||||
|
||||
},
|
||||
is_connected: function(node) {
|
||||
return (node && node.connected);
|
||||
return node?.connected;
|
||||
},
|
||||
enable_reload_config: function(node) {
|
||||
// Must be connected & is Super user
|
||||
return (node && node._type == 'server' &&
|
||||
node.connected && node.user.is_superuser);
|
||||
return (node?._type == 'server' &&
|
||||
node?.connected && node?.user?.is_superuser);
|
||||
},
|
||||
is_applicable: function(node) {
|
||||
// Must be connected & super user & not in recovery mode
|
||||
return (node && node._type == 'server' &&
|
||||
node.connected && node.user.is_superuser
|
||||
return (node?._type == 'server' &&
|
||||
node?.connected && node?.user?.is_superuser
|
||||
&& !(node.in_recovery??true));
|
||||
},
|
||||
wal_pause_enabled: function(node) {
|
||||
// Must be connected & is Super user & in Recovery mode
|
||||
return (node && node._type == 'server' &&
|
||||
node.connected && node.user.is_superuser
|
||||
&& node.in_recovery && !(node.wal_pause??true));
|
||||
return (node?._type == 'server' &&
|
||||
node?.connected && node?.user?.is_superuser
|
||||
&& node?.in_recovery && !(node?.wal_pause??true));
|
||||
},
|
||||
wal_resume_enabled: function(node) {
|
||||
// Must be connected & is Super user & in Recovery mode
|
||||
return (node && node._type == 'server' &&
|
||||
node.connected && node.user.is_superuser
|
||||
&& node.in_recovery && node.wal_pause);
|
||||
return (node?._type == 'server' &&
|
||||
node?.connected && node?.user?.is_superuser
|
||||
&& node?.in_recovery && node?.wal_pause);
|
||||
},
|
||||
callbacks: {
|
||||
/* Connect the server */
|
||||
@@ -540,12 +540,12 @@ define('pgadmin.node.server', [
|
||||
d = i && t.itemData(i),
|
||||
self = this;
|
||||
|
||||
while (d && d._type != 'server') {
|
||||
while (d?._type != 'server') {
|
||||
i = t.parent(i);
|
||||
d = i && t.itemData(i);
|
||||
}
|
||||
|
||||
if (i && d && d._type == 'server') {
|
||||
if (i && d?._type == 'server') {
|
||||
if (_.isUndefined(d.is_connecting) || !d.is_connecting) {
|
||||
d.is_connecting = true;
|
||||
|
||||
@@ -682,7 +682,7 @@ define('pgadmin.node.server', [
|
||||
}
|
||||
},
|
||||
onSuccess = function(res, node, _data, _tree, _item, _wasConnected) {
|
||||
if (res && res.data) {
|
||||
if (res?.data) {
|
||||
if (typeof res.data.icon == 'string') {
|
||||
_tree.removeIcon(_item);
|
||||
_data.icon = res.data.icon;
|
||||
@@ -789,7 +789,7 @@ define('pgadmin.node.server', [
|
||||
getApiInstance().get(url)
|
||||
.then(({data: res})=>{
|
||||
tree.setInode(item);
|
||||
if (res && res.data) {
|
||||
if (res?.data) {
|
||||
if (typeof res.data.icon == 'string') {
|
||||
tree.removeIcon(item);
|
||||
data.icon = res.data.icon;
|
||||
|
||||
@@ -86,7 +86,7 @@ export default class MainMenuFactory {
|
||||
// Some callbacks registered in 'callbacks' check and call specifiec callback function
|
||||
if (options.module && 'callbacks' in options.module && options.module.callbacks[options.callback]) {
|
||||
options.module.callbacks[options.callback].apply(options.module, [options.data, pgAdmin.Browser.tree?.selected()]);
|
||||
} else if (options.module && options.module[options.callback]) {
|
||||
} else if (options?.module[options.callback]) {
|
||||
options.module[options.callback].apply(options.module, [options.data, pgAdmin.Browser.tree?.selected()]);
|
||||
} else if (options?.callback) {
|
||||
options.callback(options);
|
||||
|
||||
@@ -557,7 +557,7 @@ define('pgadmin.browser', [
|
||||
n = _o.b.Nodes[d._type];
|
||||
// Are we looking at the collection node for the given node?
|
||||
if (
|
||||
n && n.collection_node && d.nodes &&
|
||||
n?.collection_node && d.nodes &&
|
||||
_.indexOf(d.nodes, _d._type) != -1
|
||||
) {
|
||||
_o.i = i;
|
||||
@@ -583,7 +583,7 @@ define('pgadmin.browser', [
|
||||
onLoad();
|
||||
},
|
||||
() => {
|
||||
let fail = _o && _o.o && _o.o.fail;
|
||||
let fail = _o?.o?.fail;
|
||||
if (fail && typeof(fail) == 'function') {
|
||||
fail.apply(_o.t, []);
|
||||
}
|
||||
@@ -654,9 +654,7 @@ define('pgadmin.browser', [
|
||||
selectNode = function() {
|
||||
this.t.openPath(this.i);
|
||||
this.t.select(this.i);
|
||||
if (
|
||||
_ctx.o && _ctx.o.success && typeof(_ctx.o.success) == 'function'
|
||||
) {
|
||||
if (typeof(_ctx?.o?.success) == 'function') {
|
||||
_ctx.o.success.apply(_ctx.t, [_ctx.i, _data]);
|
||||
}
|
||||
}.bind(_ctx),
|
||||
@@ -744,18 +742,14 @@ define('pgadmin.browser', [
|
||||
|
||||
if (binarySearch()) {
|
||||
__ctx.t.before(i, _data).then((_item) => {
|
||||
if (
|
||||
__ctx.o && __ctx.o.success && typeof(__ctx.o.success) == 'function'
|
||||
) {
|
||||
if (typeof(__ctx?.o?.success) == 'function') {
|
||||
__ctx.o.success.apply(__ctx.t, [i, _data]);
|
||||
} else {
|
||||
__ctx.t.select(_item);
|
||||
}
|
||||
}, () => {
|
||||
console.warn('Failed to add before...', arguments);
|
||||
if (
|
||||
__ctx.o && __ctx.o.fail && typeof(__ctx.o.fail) == 'function'
|
||||
) {
|
||||
if (typeof(__ctx.o?.fail) == 'function') {
|
||||
__ctx.o.fail.apply(__ctx.t, [i, _data]);
|
||||
}
|
||||
});
|
||||
@@ -787,19 +781,13 @@ define('pgadmin.browser', [
|
||||
);
|
||||
}
|
||||
}
|
||||
if (
|
||||
___ctx.o && ___ctx.o.success &&
|
||||
typeof(___ctx.o.success) == 'function'
|
||||
) {
|
||||
if (typeof(___ctx?.o?.success) == 'function') {
|
||||
___ctx.o.success.apply(___ctx.t, [_i, _data]);
|
||||
}
|
||||
},
|
||||
() => {
|
||||
console.warn('Failed to append...', arguments);
|
||||
if (
|
||||
___ctx.o && ___ctx.o.fail &&
|
||||
typeof(___ctx.o.fail) == 'function'
|
||||
) {
|
||||
if (typeof(___ctx?.o?.fail) == 'function') {
|
||||
___ctx.o.fail.apply(___ctx.t, [___ctx.i, _data]);
|
||||
}
|
||||
}
|
||||
@@ -827,9 +815,7 @@ define('pgadmin.browser', [
|
||||
selectNode,
|
||||
function() {
|
||||
let o = this && this.o;
|
||||
if (
|
||||
o && o.fail && typeof(o.fail) == 'function'
|
||||
) {
|
||||
if (typeof(o?.fail) == 'function') {
|
||||
o.fail.apply(this.t, [this.i, _data]);
|
||||
}
|
||||
}.bind(this)
|
||||
@@ -837,9 +823,7 @@ define('pgadmin.browser', [
|
||||
},
|
||||
() => {
|
||||
let o = this && this.o;
|
||||
if (
|
||||
o && o.fail && typeof(o.fail) == 'function'
|
||||
) {
|
||||
if (typeof(o?.fail) == 'function') {
|
||||
o.fail.apply(this.t, [this.i, _data]);
|
||||
}
|
||||
});
|
||||
@@ -881,7 +865,7 @@ define('pgadmin.browser', [
|
||||
op: null,
|
||||
},
|
||||
errorOut = function() {
|
||||
let fail = this.o && this.o.fail;
|
||||
let fail = this.o?.fail;
|
||||
if (fail && typeof(fail) == 'function') {
|
||||
fail.apply(this.t, [this.i, _new, _old]);
|
||||
}
|
||||
@@ -981,7 +965,7 @@ define('pgadmin.browser', [
|
||||
onLoad();
|
||||
},
|
||||
() => {
|
||||
let fail = self && self.o && self.o.fail;
|
||||
let fail = self?.o?.fail;
|
||||
if (
|
||||
fail && typeof(fail) == 'function'
|
||||
) {
|
||||
@@ -1110,7 +1094,7 @@ define('pgadmin.browser', [
|
||||
self.t.select(self.i);
|
||||
}
|
||||
}
|
||||
let success = this.o && this.o.success;
|
||||
let success = this.o?.success;
|
||||
if (success && typeof(success) == 'function') {
|
||||
success.apply(this.t, [this.i, _old, _new]);
|
||||
}
|
||||
@@ -1241,16 +1225,12 @@ define('pgadmin.browser', [
|
||||
__ctx.t.before(i, _new).then((new_item) => {
|
||||
__ctx.t.openPath(new_item);
|
||||
__ctx.t.select(new_item);
|
||||
if (
|
||||
__ctx.o && __ctx.o.success && typeof(__ctx.o.success) == 'function'
|
||||
) {
|
||||
if (typeof(__ctx?.o?.success) == 'function') {
|
||||
__ctx.o.success.apply(__ctx.t, [i, _old, _new]);
|
||||
}
|
||||
}, () => {
|
||||
console.warn('Failed to add before..', arguments);
|
||||
if (
|
||||
__ctx.o && __ctx.o.fail && typeof(__ctx.o.fail) == 'function'
|
||||
) {
|
||||
if (typeof(__ctx?.o?.fail) == 'function') {
|
||||
__ctx.o.fail.apply(__ctx.t, [i, _old, _new]);
|
||||
}
|
||||
});
|
||||
@@ -1260,17 +1240,13 @@ define('pgadmin.browser', [
|
||||
(new_item) => {
|
||||
__ctx.t.openPath(new_item);
|
||||
__ctx.t.select(new_item);
|
||||
if (
|
||||
__ctx.o && __ctx.o.success && typeof(__ctx.o.success) == 'function'
|
||||
) {
|
||||
if (typeof(__ctx?.o?.success) == 'function') {
|
||||
__ctx.o.success.apply(__ctx.t, [__ctx.i, _old, _new]);
|
||||
}
|
||||
},
|
||||
() => {
|
||||
console.warn('Failed to append...', arguments);
|
||||
if (
|
||||
__ctx.o && __ctx.o.fail && typeof(__ctx.o.fail) == 'function'
|
||||
) {
|
||||
if (typeof(__ctx?.o?.fail) == 'function') {
|
||||
__ctx.o.fail.apply(__ctx.t, [__ctx.i, _old, _new]);
|
||||
}
|
||||
},
|
||||
@@ -1298,9 +1274,7 @@ define('pgadmin.browser', [
|
||||
selectNode,
|
||||
function() {
|
||||
let o = this && this.o;
|
||||
if (
|
||||
o && o.fail && typeof(o.fail) == 'function'
|
||||
) {
|
||||
if (typeof(o?.fail) == 'function') {
|
||||
o.fail.apply(this.t, [this.i, _old, _new]);
|
||||
}
|
||||
}
|
||||
@@ -1308,9 +1282,7 @@ define('pgadmin.browser', [
|
||||
},
|
||||
() => {
|
||||
let o = this && this.o;
|
||||
if (
|
||||
o && o.fail && typeof(o.fail) == 'function'
|
||||
) {
|
||||
if (typeof(o?.fail) == 'function') {
|
||||
o.fail.apply(this.t, [this.i, _old, _new]);
|
||||
}
|
||||
}
|
||||
@@ -1355,13 +1327,13 @@ define('pgadmin.browser', [
|
||||
|
||||
onRefreshTreeNodeReact: function(_i, _opts) {
|
||||
this.tree.refresh(_i).then(() =>{
|
||||
if (_opts && _opts.success) _opts.success();
|
||||
if (_opts?.success) _opts.success();
|
||||
});
|
||||
},
|
||||
|
||||
onRefreshTreeNode: function(_i, _opts) {
|
||||
let _d = _i && this.tree.itemData(_i),
|
||||
n = _d && _d._type && this.Nodes[_d._type],
|
||||
n = this.Nodes[_d?._type],
|
||||
ctx = {
|
||||
b: this, // Browser
|
||||
d: _d, // current parent
|
||||
@@ -1445,7 +1417,7 @@ define('pgadmin.browser', [
|
||||
}
|
||||
}
|
||||
ctx.b._refreshNode(ctx, ctx.branch);
|
||||
let success = (ctx.o && ctx.o.success) || ctx.success;
|
||||
let success = (ctx?.o?.success) || ctx.success;
|
||||
if (success && typeof(success) == 'function') {
|
||||
success();
|
||||
}
|
||||
@@ -1484,7 +1456,7 @@ define('pgadmin.browser', [
|
||||
});
|
||||
}.bind(this);
|
||||
|
||||
if (n && n.collection_node) {
|
||||
if (n?.collection_node) {
|
||||
let p = ctx.i = this.tree.parent(_i),
|
||||
unloadNode = function() {
|
||||
this.tree.unload(_i, {
|
||||
@@ -1638,7 +1610,7 @@ define('pgadmin.browser', [
|
||||
node,
|
||||
children = _node && tree_local.children(_node);
|
||||
|
||||
if (!children || !children.length)
|
||||
if (!children?.length)
|
||||
return null;
|
||||
|
||||
for(; idx < children.length; idx++) {
|
||||
|
||||
@@ -273,14 +273,8 @@ define('pgadmin.browser.node', [
|
||||
parentData.server.user.can_create_role) {
|
||||
return true;
|
||||
} else if (
|
||||
(
|
||||
parentData.server && (
|
||||
parentData.server.user.is_superuser ||
|
||||
parentData.server.user.can_create_db)
|
||||
) ||
|
||||
(
|
||||
parentData.schema && parentData.schema.can_create
|
||||
)
|
||||
( parentData.server?.user.is_superuser || parentData.server?.user.can_create_db) ||
|
||||
(parentData.schema?.can_create)
|
||||
) {
|
||||
return true;
|
||||
} else {
|
||||
@@ -347,7 +341,7 @@ define('pgadmin.browser.node', [
|
||||
**/
|
||||
show_obj_properties: function(args, item) {
|
||||
let t = pgBrowser.tree,
|
||||
nodeItem = (args && args.item) || item || t.selected(),
|
||||
nodeItem = args?.item || item || t.selected(),
|
||||
nodeData = nodeItem ? t.itemData(nodeItem) : undefined,
|
||||
panelTitle = this.title(nodeData, args.action),
|
||||
treeNodeInfo = pgBrowser.tree.getTreeNodeHierarchy(nodeItem);
|
||||
@@ -770,7 +764,7 @@ define('pgadmin.browser.node', [
|
||||
let tree = pgBrowser.tree,
|
||||
auto_expand = usePreferences.getState().getPreferences('browser', 'auto_expand_sole_children');
|
||||
|
||||
if (auto_expand && auto_expand.value && tree.children(item).length == 1) {
|
||||
if (auto_expand?.value && tree.children(item).length == 1) {
|
||||
// Automatically expand the child node, if a treeview node has only a single child.
|
||||
const first_child = tree.first(item);
|
||||
|
||||
@@ -946,7 +940,7 @@ define('pgadmin.browser.node', [
|
||||
let cached = this.cached = this.cached || {},
|
||||
hash = url,
|
||||
min_priority = (
|
||||
node_info && node_info[level] && node_info[level].priority
|
||||
node_info?.[level] && node_info?.[level].priority
|
||||
) || 0;
|
||||
|
||||
if (node_info) {
|
||||
|
||||
@@ -691,24 +691,15 @@ function Dashboard({
|
||||
current_user;
|
||||
|
||||
let can_signal_backend =
|
||||
treeNodeInfo.server && treeNodeInfo.server.user
|
||||
? treeNodeInfo.server.user.can_signal_backend
|
||||
: false;
|
||||
treeNodeInfo.server?.user ? treeNodeInfo.server?.user?.can_signal_backend : false;
|
||||
|
||||
let maintenanceActiveSessions = dashData.filter((data) => data.state === 'active'&&
|
||||
maintenance_database === data.datname);
|
||||
if (
|
||||
treeNodeInfo.server &&
|
||||
treeNodeInfo.server.user &&
|
||||
treeNodeInfo.server.user.is_superuser
|
||||
) {
|
||||
if (treeNodeInfo.server?.user?.is_superuser) {
|
||||
is_super_user = true;
|
||||
} else {
|
||||
is_super_user = false;
|
||||
current_user =
|
||||
treeNodeInfo.server && treeNodeInfo.server.user
|
||||
? treeNodeInfo.server.user.name
|
||||
: null;
|
||||
current_user = treeNodeInfo.server?.user ? treeNodeInfo.server?.user?.name : null;
|
||||
}
|
||||
|
||||
// With PG10, We have background process showing on dashboard
|
||||
|
||||
@@ -88,7 +88,7 @@ const useStyles = makeStyles((theme) => ({
|
||||
|
||||
|
||||
function AddNewServer(pgBrowser) {
|
||||
if (pgBrowser && pgBrowser.tree) {
|
||||
if (pgBrowser?.tree) {
|
||||
let i = _.isUndefined(pgBrowser.tree.selected()) ?
|
||||
pgBrowser.tree.first(null, false) :
|
||||
pgBrowser.tree.selected(),
|
||||
|
||||
@@ -319,14 +319,14 @@ class BigAnimalVolumeSchema extends BaseUISchema {
|
||||
}
|
||||
},
|
||||
visible: (state) => {
|
||||
return state.provider && state.provider.includes(CLOUD_PROVIDERS.AWS);
|
||||
return state.provider?.includes(CLOUD_PROVIDERS.AWS);
|
||||
},
|
||||
helpMessage: obj.volumeType == 'io2' ? gettext('Size (4-16,384 GiB)') : gettext('Size (1-16,384 GiB)')
|
||||
}, {
|
||||
id: 'volume_IOPS', label: gettext('IOPS'), type: 'text',
|
||||
mode: ['create'],
|
||||
visible: (state) => {
|
||||
return state.provider && state.provider.includes(CLOUD_PROVIDERS.AWS);
|
||||
return state.provider?.includes(CLOUD_PROVIDERS.AWS);
|
||||
}, deps: ['volume_type'],
|
||||
depChange: (state, source) => {
|
||||
obj.volumeType = state.volume_type;
|
||||
@@ -347,7 +347,7 @@ class BigAnimalVolumeSchema extends BaseUISchema {
|
||||
mode: ['create'],
|
||||
deps : ['volume_type'],
|
||||
visible: (state) => {
|
||||
return state.provider && state.provider.includes(CLOUD_PROVIDERS.AWS) && state.volume_type === 'gp3';
|
||||
return state.provider?.includes(CLOUD_PROVIDERS.AWS) && state.volume_type === 'gp3';
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
@@ -88,7 +88,7 @@ export function GoogleCredentials(props) {
|
||||
_eventBus.fireEvent('SET_CRED_VERIFICATION_INITIATED',false);
|
||||
clearInterval(interval);
|
||||
resolve(false);
|
||||
} else if (child && child.closed || countdown <= 0) {
|
||||
} else if (child?.closed || countdown <= 0) {
|
||||
_eventBus.fireEvent('SET_ERROR_MESSAGE_FOR_CLOUD_WIZARD',[MESSAGE_TYPE.ERROR, 'Authentication is aborted.']);
|
||||
_eventBus.fireEvent('SET_CRED_VERIFICATION_INITIATED',false);
|
||||
clearInterval(interval);
|
||||
|
||||
@@ -674,9 +674,7 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
|
||||
(params?.dialog_type != 'storage_dialog' && params?.path) && fmUtilsObj.setLastVisitedDir(params?.path, selectedSS);
|
||||
};
|
||||
init();
|
||||
setTimeout(()=>{
|
||||
saveAsRef.current && saveAsRef.current.focus();
|
||||
}, 300);
|
||||
setTimeout(()=>{ saveAsRef.current?.focus(); }, 300);
|
||||
return ()=>{
|
||||
fmUtilsObj.destroy();
|
||||
};
|
||||
|
||||
@@ -121,7 +121,7 @@ export default function CollectionNodeProperties({
|
||||
msg = undefined,
|
||||
title = undefined;
|
||||
|
||||
if (selNode && selNode.type && selNode.type == 'coll-constraints') {
|
||||
if (selNode?.type == 'coll-constraints') {
|
||||
// In order to identify the constraint type, the type should be passed to the server
|
||||
selRows = selRowModels.map((row) => ({
|
||||
id: row.original.oid,
|
||||
|
||||
@@ -123,7 +123,7 @@ function createSingleLineStatistics(data, prettifyFields) {
|
||||
|
||||
for (let idx in columns) {
|
||||
name = columns[idx]['name'];
|
||||
if (row && row[name]) {
|
||||
if (row?.[name]) {
|
||||
value =
|
||||
_.indexOf(prettifyFields, name) != -1
|
||||
? toPrettySize(row[name])
|
||||
|
||||
@@ -455,7 +455,7 @@ export default function PreferencesComponent({ ...props }) {
|
||||
case 'threshold':
|
||||
return 'threshold';
|
||||
default:
|
||||
if (console && console.warn) {
|
||||
if (console?.warn) {
|
||||
// Warning for developer only.
|
||||
console.warn(
|
||||
'Hmm.. We don\'t know how to render this type - \'\'' + type + '\' of control.'
|
||||
|
||||
@@ -20,7 +20,7 @@ define('app', [
|
||||
for (let key in obj) {
|
||||
let module = obj[key];
|
||||
|
||||
if (module && module.init && typeof module.init == 'function') {
|
||||
if (typeof module?.init == 'function') {
|
||||
try {
|
||||
module.init();
|
||||
}
|
||||
@@ -28,7 +28,7 @@ define('app', [
|
||||
console.warn(e.stack || e);
|
||||
}
|
||||
}
|
||||
else if (module && module.Init && typeof module.Init == 'function') {
|
||||
else if (typeof module?.Init == 'function') {
|
||||
try {
|
||||
module.Init();
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ export default function MasterPasswordContent({ closeModal, onResetPassowrd, onO
|
||||
|
||||
useEffect(() => {
|
||||
setTimeout(() => {
|
||||
firstEleRef.current && firstEleRef.current.focus();
|
||||
firstEleRef.current?.focus();
|
||||
}, 350);
|
||||
}, [firstEleRef.current]);
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ export default function NamedRestoreContent({closeModal, onOK, setHeight}) {
|
||||
|
||||
useEffect(()=>{
|
||||
setTimeout(()=>{
|
||||
firstEleRef.current && firstEleRef.current.focus();
|
||||
firstEleRef.current?.focus();
|
||||
}, 275);
|
||||
}, []);
|
||||
|
||||
|
||||
@@ -300,7 +300,7 @@ PlanContent.propTypes = {
|
||||
function PlanSVG({planData, zoomFactor, fitZoomFactor, ...props}) {
|
||||
const theme = useTheme();
|
||||
useEffect(()=>{
|
||||
fitZoomFactor && fitZoomFactor(planData.width);
|
||||
fitZoomFactor?.(planData.width);
|
||||
}, [planData.width]);
|
||||
|
||||
return (
|
||||
|
||||
@@ -505,7 +505,7 @@ export default function Explain({plans=[]}) {
|
||||
// indicatorColor="primary"
|
||||
variant="scrollable"
|
||||
scrollButtons="auto"
|
||||
action={(ref)=>ref && ref.updateIndicator()}
|
||||
action={(ref)=>ref?.updateIndicator()}
|
||||
>
|
||||
<Tab label="Graphical" />
|
||||
<Tab label="Analysis" />
|
||||
|
||||
@@ -54,7 +54,7 @@ export function onlineHelpSearch(param, props) {
|
||||
let pooling = window.pooling;
|
||||
if(resultEl) {
|
||||
let searchResultsH2Tags = resultEl.getElementsByTagName('h2');
|
||||
let list = resultEl && resultEl.getElementsByTagName('LI');
|
||||
let list = resultEl?.getElementsByTagName('LI');
|
||||
if ((list && list.length > 0 )) {
|
||||
let res = extractSearchResult(list);
|
||||
// After getting the data, we need to call the Parent component function
|
||||
|
||||
@@ -39,7 +39,7 @@ export default class DepListener {
|
||||
if(dataPath.length > 0) {
|
||||
data = _.get(state, dataPath);
|
||||
}
|
||||
_.assign(data, listener.callback && listener.callback(data, listener.source, state, actionObj) || {});
|
||||
_.assign(data, listener.callback?.(data, listener.source, state, actionObj) || {});
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ export default class DepListener {
|
||||
if(dataPath.length > 0) {
|
||||
data = _.get(state, dataPath);
|
||||
}
|
||||
return (listener.defCallback && listener.defCallback(data, listener.source, state, actionObj));
|
||||
return (listener.defCallback?.(data, listener.source, state, actionObj));
|
||||
}
|
||||
|
||||
/* Called when any field changed and trigger callbacks */
|
||||
|
||||
@@ -421,7 +421,7 @@ export default function FormView({
|
||||
}
|
||||
|
||||
useEffect(()=>{
|
||||
onTabChange && onTabChange(tabValue, Object.keys(tabs)[tabValue], sqlTabActive);
|
||||
onTabChange?.(tabValue, Object.keys(tabs)[tabValue], sqlTabActive);
|
||||
}, [tabValue]);
|
||||
|
||||
/* check whether form is kept hidden by visible prop */
|
||||
@@ -441,7 +441,7 @@ export default function FormView({
|
||||
}}
|
||||
variant="scrollable"
|
||||
scrollButtons="auto"
|
||||
action={(ref)=>ref && ref.updateIndicator()}
|
||||
action={(ref)=>ref?.updateIndicator()}
|
||||
>
|
||||
{Object.keys(finalTabs).map((tabName)=>{
|
||||
return <Tab key={tabName} label={tabName} data-test={tabName}/>;
|
||||
|
||||
@@ -28,15 +28,15 @@ function MappedFormControlBase({ type, value, id, onChange, className, visible,
|
||||
if(e?.target) {
|
||||
val = e.target.value;
|
||||
}
|
||||
onChange && onChange(val);
|
||||
onChange?.(val);
|
||||
}, []);
|
||||
|
||||
const onSqlChange = useCallback((changedValue) => {
|
||||
onChange && onChange(changedValue);
|
||||
onChange?.(changedValue);
|
||||
}, []);
|
||||
|
||||
const onTreeSelection = useCallback((selectedValues)=> {
|
||||
onChange && onChange(selectedValues);
|
||||
onChange?.(selectedValues);
|
||||
}, []);
|
||||
|
||||
if (!visible) {
|
||||
@@ -128,7 +128,7 @@ function MappedCellControlBase({ cell, value, id, optionsLoaded, onCellChange, v
|
||||
val = e.target.value;
|
||||
}
|
||||
|
||||
onCellChange && onCellChange(val);
|
||||
onCellChange?.(val);
|
||||
}, []);
|
||||
|
||||
const onRadioChange = useCallback((e) => {
|
||||
@@ -136,11 +136,11 @@ function MappedCellControlBase({ cell, value, id, optionsLoaded, onCellChange, v
|
||||
if(e?.target) {
|
||||
val = e.target.checked;
|
||||
}
|
||||
onCellChange && onCellChange(val);
|
||||
onCellChange?.(val);
|
||||
});
|
||||
|
||||
const onSqlChange = useCallback((val) => {
|
||||
onCellChange && onCellChange(val);
|
||||
onCellChange?.(val);
|
||||
}, []);
|
||||
|
||||
/* Some grid cells are based on options selected in other cells.
|
||||
@@ -148,8 +148,8 @@ function MappedCellControlBase({ cell, value, id, optionsLoaded, onCellChange, v
|
||||
*/
|
||||
const optionsLoadedRerender = useCallback((res) => {
|
||||
/* optionsLoaded is called when select options are fetched */
|
||||
optionsLoaded && optionsLoaded(res);
|
||||
reRenderRow && reRenderRow();
|
||||
optionsLoaded?.(res);
|
||||
reRenderRow?.();
|
||||
}, []);
|
||||
|
||||
if (!visible) {
|
||||
|
||||
@@ -158,7 +158,7 @@ export default class BaseUISchema {
|
||||
let res = [];
|
||||
if (state && this.isNew(state)) {
|
||||
options.forEach((option) => {
|
||||
if(option && option.label == '') {
|
||||
if(option?.label == '') {
|
||||
return;
|
||||
}
|
||||
res.push({ label: option.label, value: option.value });
|
||||
|
||||
@@ -538,7 +538,7 @@ function SchemaDialogView({
|
||||
changedData = _.assign({}, schema.origData, changedData);
|
||||
}
|
||||
|
||||
props.onDataChange && props.onDataChange(isDataChanged, changedData);
|
||||
props.onDataChange?.(isDataChanged, changedData);
|
||||
}, [sessData, formReady]);
|
||||
|
||||
useEffect(()=>{
|
||||
@@ -568,7 +568,7 @@ function SchemaDialogView({
|
||||
let unmounted = false;
|
||||
/* Docker on load focusses itself, so our focus should execute later */
|
||||
let focusTimeout = setTimeout(()=>{
|
||||
firstEleRef.current && firstEleRef.current.focus();
|
||||
firstEleRef.current?.focus();
|
||||
}, 250);
|
||||
|
||||
setLoaderText('Loading...');
|
||||
@@ -577,7 +577,7 @@ function SchemaDialogView({
|
||||
if(!getInitData && viewHelperProps.mode === 'edit') {
|
||||
throw new Error('getInitData must be passed for edit');
|
||||
}
|
||||
let initDataPromise = (getInitData && getInitData()) || Promise.resolve({});
|
||||
let initDataPromise = getInitData?.() || Promise.resolve({});
|
||||
initDataPromise.then((data)=>{
|
||||
if(unmounted) {
|
||||
return;
|
||||
@@ -628,7 +628,7 @@ function SchemaDialogView({
|
||||
|
||||
const onResetClick = ()=>{
|
||||
const resetIt = ()=>{
|
||||
firstEleRef.current && firstEleRef.current.focus();
|
||||
firstEleRef.current?.focus();
|
||||
setFormResetKey((prev)=>prev+1);
|
||||
sessDispatch({
|
||||
type: SCHEMA_STATE_ACTIONS.INIT,
|
||||
|
||||
@@ -93,7 +93,7 @@ function UtilityViewContent({panelId, schema, treeNodeInfo, actionType, formType
|
||||
}).then((res)=>{
|
||||
/* Don't warn the user before closing dialog */
|
||||
resolve(res.data);
|
||||
onSave && onSave(res.data);
|
||||
onSave?.(res.data);
|
||||
onClose();
|
||||
}).catch((err)=>{
|
||||
reject(err);
|
||||
|
||||
@@ -113,12 +113,12 @@ export default function BaseChart({type='line', id, options, data, redraw=false,
|
||||
plugins: [plugins],
|
||||
options: options,
|
||||
});
|
||||
props.onInit && props.onInit(chartObj.current);
|
||||
props.onInit?.(chartObj.current);
|
||||
};
|
||||
|
||||
const destroyChart = function() {
|
||||
chartObj.current?.resetZoom?.();
|
||||
chartObj.current && chartObj.current.destroy();
|
||||
chartObj.current?.destroy();
|
||||
};
|
||||
|
||||
useEffect(()=>{
|
||||
@@ -137,7 +137,7 @@ export default function BaseChart({type='line', id, options, data, redraw=false,
|
||||
}
|
||||
chartObj.current.options = options;
|
||||
chartObj.current.update(props.updateOptions || {});
|
||||
props.onUpdate && props.onUpdate(chartObj.current);
|
||||
props.onUpdate?.(chartObj.current);
|
||||
}
|
||||
}, [data, options]);
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@ export function FindDialog({editor, show, replace, onClose, selFindVal}) {
|
||||
if(selText.length != 0) {
|
||||
setFindVal(selText);
|
||||
}
|
||||
findInputRef.current && findInputRef.current.select();
|
||||
findInputRef.current?.select();
|
||||
search();
|
||||
}
|
||||
}, [show]);
|
||||
@@ -217,7 +217,7 @@ export function FindDialog({editor, show, replace, onClose, selFindVal}) {
|
||||
};
|
||||
|
||||
const onFindNext = ()=>{
|
||||
if(searchCursor.current && searchCursor.current.find()) {
|
||||
if(searchCursor.current?.find()) {
|
||||
editor.setSelection(searchCursor.current.from(), searchCursor.current.to());
|
||||
editor.scrollIntoView({
|
||||
from: searchCursor.current.from(),
|
||||
@@ -227,7 +227,7 @@ export function FindDialog({editor, show, replace, onClose, selFindVal}) {
|
||||
};
|
||||
|
||||
const onFindPrev = ()=>{
|
||||
if(searchCursor.current && searchCursor.current.find(true)) {
|
||||
if(searchCursor.current?.find(true)) {
|
||||
editor.setSelection(searchCursor.current.from(), searchCursor.current.to());
|
||||
editor.scrollIntoView({
|
||||
from: searchCursor.current.from(),
|
||||
@@ -441,7 +441,7 @@ export default function CodeMirror({currEditor, name, value, options, events, re
|
||||
} else {
|
||||
editor.current.setValue('');
|
||||
}
|
||||
currEditor && currEditor(editor.current);
|
||||
currEditor?.(editor.current);
|
||||
if(editor.current) {
|
||||
try {
|
||||
cmWrapper.current = editor.current.getWrapperElement();
|
||||
|
||||
@@ -198,7 +198,7 @@ export function InputSQL({ value, options, onChange, className, controlProps, in
|
||||
className={clsx(classes.sql, className)}
|
||||
events={{
|
||||
change: (cm) => {
|
||||
onChange && onChange(cm.getValue());
|
||||
onChange?.(cm.getValue());
|
||||
},
|
||||
}}
|
||||
{...controlProps}
|
||||
@@ -370,7 +370,7 @@ export const InputText = forwardRef(({
|
||||
if (controlProps?.formatter) {
|
||||
changeVal = controlProps.formatter.toRaw(changeVal);
|
||||
}
|
||||
onChange && onChange(changeVal);
|
||||
onChange?.(changeVal);
|
||||
};
|
||||
|
||||
let finalValue = (_.isNull(value) || _.isUndefined(value)) ? '' : value;
|
||||
@@ -461,7 +461,7 @@ export function InputFileSelect({ controlProps, onChange, disabled, readonly, is
|
||||
btn_primary: controlProps.btnPrimary || '',
|
||||
};
|
||||
showFileManager(params, (fileName)=>{
|
||||
onChange && onChange(decodeURI(fileName));
|
||||
onChange?.(decodeURI(fileName));
|
||||
inpRef.current.focus();
|
||||
});
|
||||
};
|
||||
@@ -909,7 +909,7 @@ export const InputSelect = forwardRef(({
|
||||
.then((res) => {
|
||||
/* If component unmounted, dont update state */
|
||||
if (!umounted) {
|
||||
optionsLoaded && optionsLoaded(res, value);
|
||||
optionsLoaded?.(res, value);
|
||||
/* Auto select if any option has key as selected */
|
||||
const flatRes = flattenSelectOptions(res || []);
|
||||
let selectedVal;
|
||||
@@ -920,7 +920,7 @@ export const InputSelect = forwardRef(({
|
||||
}
|
||||
|
||||
if ((!_.isUndefined(selectedVal) && !_.isArray(selectedVal)) || (_.isArray(selectedVal) && selectedVal.length != 0)) {
|
||||
onChange && onChange(selectedVal);
|
||||
onChange?.(selectedVal);
|
||||
}
|
||||
setFinalOptions([res || [], false]);
|
||||
}
|
||||
@@ -930,7 +930,7 @@ export const InputSelect = forwardRef(({
|
||||
|
||||
|
||||
/* Apply filter if any */
|
||||
const filteredOptions = (controlProps.filter && controlProps.filter(finalOptions)) || finalOptions;
|
||||
const filteredOptions = (controlProps.filter?.(finalOptions)) || finalOptions;
|
||||
const flatFiltered = flattenSelectOptions(filteredOptions);
|
||||
let realValue = getRealValue(flatFiltered, value, controlProps.creatable, controlProps.formatter);
|
||||
if (realValue && _.isPlainObject(realValue) && _.isUndefined(realValue.value)) {
|
||||
@@ -956,9 +956,9 @@ export const InputSelect = forwardRef(({
|
||||
} else {
|
||||
selectVal = selectVal.map((option) => option.value);
|
||||
}
|
||||
onChange && onChange(selectVal);
|
||||
onChange?.(selectVal);
|
||||
} else {
|
||||
onChange && onChange(selectVal ? selectVal.value : null);
|
||||
onChange?.(selectVal ? selectVal.value : null);
|
||||
}
|
||||
}, [onChange, filteredOptions]);
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ export function SelectRefresh({ required, className, label, helpMessage, testcid
|
||||
const {getOptionsOnRefresh, ...selectControlProps} = controlProps;
|
||||
|
||||
const onRefreshClick = ()=>{
|
||||
getOptionsOnRefresh && getOptionsOnRefresh()
|
||||
getOptionsOnRefresh?.()
|
||||
.then((res)=>{
|
||||
setOptions(res);
|
||||
setOptionsReloadBasis((prevVal)=>!prevVal);
|
||||
|
||||
@@ -68,7 +68,7 @@ function alert(title, text, onOkClick, okLabel = gettext('OK')) {
|
||||
// bind the modal provider before calling
|
||||
this.showModal(title, (closeModal) => {
|
||||
const onOkClickClose = () => {
|
||||
onOkClick && onOkClick();
|
||||
onOkClick?.();
|
||||
closeModal();
|
||||
};
|
||||
return (
|
||||
@@ -81,11 +81,11 @@ function confirm(title, text, onOkClick, onCancelClick, okLabel = gettext('Yes')
|
||||
// bind the modal provider before calling
|
||||
this.showModal(title, (closeModal) => {
|
||||
const onCancelClickClose = () => {
|
||||
onCancelClick && onCancelClick();
|
||||
onCancelClick?.();
|
||||
closeModal();
|
||||
};
|
||||
const onOkClickClose = () => {
|
||||
onOkClick && onOkClick();
|
||||
onOkClick?.();
|
||||
closeModal();
|
||||
};
|
||||
return (
|
||||
|
||||
@@ -45,7 +45,7 @@ function isCtrlAltBoth(event) {
|
||||
/* Returns the key of shortcut */
|
||||
function shortcut_key(shortcut) {
|
||||
let key = '';
|
||||
if(shortcut && shortcut['key'] && shortcut['key']['char']) {
|
||||
if(shortcut?.['key'] && shortcut?.['key']['char']) {
|
||||
key = shortcut['key']['char'].toUpperCase();
|
||||
}
|
||||
return key;
|
||||
|
||||
@@ -97,7 +97,7 @@ _.extend(pgBrowser.browserTreeState, {
|
||||
offRemoveFromTreeState?.();
|
||||
offUpdateTreeState?.();
|
||||
};
|
||||
|
||||
|
||||
},
|
||||
save_state: function() {
|
||||
|
||||
@@ -198,8 +198,8 @@ _.extend(pgBrowser.browserTreeState, {
|
||||
if (treeHierarchy === null || !pgBrowser.tree.hasParent(item) || !(treeHierarchy.hasOwnProperty(self.parent)))
|
||||
return;
|
||||
|
||||
let topParent = treeHierarchy && treeHierarchy[self.parent]['_id'],
|
||||
origParent = treeHierarchy && treeHierarchy[self.orig_parent]['id'];
|
||||
let topParent = treeHierarchy?.[self.parent]['_id'],
|
||||
origParent = treeHierarchy?.[self.orig_parent]['id'];
|
||||
|
||||
this.update_database_status(item);
|
||||
|
||||
@@ -308,7 +308,7 @@ _.extend(pgBrowser.browserTreeState, {
|
||||
|
||||
if (treeHierarchy.hasOwnProperty('database')) {
|
||||
let databaseItem = treeHierarchy['database']['id'],
|
||||
topParent = treeHierarchy && treeHierarchy[this.parent]['_id'];
|
||||
topParent = treeHierarchy?.[this.parent]['_id'];
|
||||
|
||||
if (topParent in this.current_state && 'selected' in this.current_state[topParent]) {
|
||||
if (treeHierarchy['database'].connected) {
|
||||
@@ -333,7 +333,7 @@ _.extend(pgBrowser.browserTreeState, {
|
||||
if (!(this.parent in treeHierarchy))
|
||||
return;
|
||||
|
||||
let topParent = treeHierarchy && treeHierarchy[this.parent]['_id'],
|
||||
let topParent = treeHierarchy?.[this.parent]['_id'],
|
||||
selectedItem = pgBrowser.tree.itemData(pgBrowser.tree.selected()),
|
||||
databaseItem = undefined;
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ function manageTreeEvents(event, eventName, item) {
|
||||
let obj = pgAdmin.Browser;
|
||||
|
||||
// Events for preferences tree.
|
||||
if (node_metadata.parent && node_metadata.parent.includes('/preferences') && obj.ptree.tree.type == 'preferences') {
|
||||
if (node_metadata.parent?.includes('/preferences') && obj.ptree.tree.type == 'preferences') {
|
||||
try {
|
||||
obj.Events.trigger(
|
||||
'preferences:tree:' + eventName, event, item, d
|
||||
@@ -191,7 +191,7 @@ export class Tree {
|
||||
}
|
||||
|
||||
async addIcon(item, icon) {
|
||||
if (item !== undefined && item.getMetadata('data') !== undefined) {
|
||||
if (item?.getMetadata('data') !== undefined) {
|
||||
item.getMetadata('data').icon = icon.icon;
|
||||
}
|
||||
await this.tree.addIcon(item, icon);
|
||||
@@ -231,7 +231,7 @@ export class Tree {
|
||||
}
|
||||
|
||||
wasLoad(item) {
|
||||
if (item && item.type === FileType.Directory) {
|
||||
if (item?.type === FileType.Directory) {
|
||||
return item.isExpanded && item.children != null && item.children.length > 0;
|
||||
}
|
||||
return true;
|
||||
@@ -247,7 +247,7 @@ export class Tree {
|
||||
return model.root.children[0];
|
||||
}
|
||||
|
||||
if (item !== undefined && item !== null && item.branchSize > 0) {
|
||||
if (item?.branchSize > 0) {
|
||||
return item.children[0];
|
||||
}
|
||||
|
||||
@@ -301,7 +301,7 @@ export class Tree {
|
||||
}
|
||||
|
||||
hasParent(item) {
|
||||
return item && item.parent ? true : false;
|
||||
return item?.parent ? true : false;
|
||||
}
|
||||
|
||||
isOpen(item) {
|
||||
@@ -319,11 +319,11 @@ export class Tree {
|
||||
}
|
||||
|
||||
itemData(item) {
|
||||
return (item !== undefined && item !== null && item.getMetadata('data') !== undefined) ? item._metadata.data : [];
|
||||
return (item?.getMetadata('data') !== undefined) ? item?._metadata.data : [];
|
||||
}
|
||||
|
||||
getData(item) {
|
||||
return (item !== undefined && item.getMetadata('data') !== undefined) ? item._metadata.data : [];
|
||||
return (item?.getMetadata('data') !== undefined) ? item?._metadata.data : [];
|
||||
}
|
||||
|
||||
isRootNode(item) {
|
||||
@@ -411,7 +411,7 @@ export class Tree {
|
||||
|
||||
findNodeByDomElement(domElement) {
|
||||
const path = domElement.path;
|
||||
if (!path || !path[0]) {
|
||||
if (!path?.[0]) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@@ -433,7 +433,7 @@ export class Tree {
|
||||
|
||||
createOrUpdateNode(id, data, parent, domNode) {
|
||||
let oldNodePath = id;
|
||||
if (parent !== null && parent !== undefined && parent.path !== undefined && parent.path != '/browser') {
|
||||
if (parent?.path != '/browser') {
|
||||
oldNodePath = parent.path + '/' + id;
|
||||
}
|
||||
const oldNode = this.findNode(oldNodePath);
|
||||
|
||||
@@ -8,18 +8,18 @@
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
let getWindowOpener = (opener) => {
|
||||
return opener.opener && opener.opener.pgAdmin ? getWindowOpener(opener.opener) : opener;
|
||||
return opener.opener?.pgAdmin ? getWindowOpener(opener.opener) : opener;
|
||||
};
|
||||
|
||||
let pgWindow = function() {
|
||||
let localPgWindow = null;
|
||||
try {
|
||||
if(window.opener && window.opener.pgAdmin) {
|
||||
if(window.opener?.pgAdmin) {
|
||||
/* Windows can be opened at multiple levels */
|
||||
localPgWindow = getWindowOpener(window.opener);
|
||||
} else if(window.parent && window.parent.pgAdmin){
|
||||
} else if(window.parent?.pgAdmin){
|
||||
localPgWindow = window.parent;
|
||||
} else if(window.top && window.top.pgAdmin){
|
||||
} else if(window.top?.pgAdmin){
|
||||
localPgWindow = window.top;
|
||||
} else {
|
||||
localPgWindow = window;
|
||||
|
||||
2
web/pgadmin/static/vendor/require/require.js
vendored
2
web/pgadmin/static/vendor/require/require.js
vendored
@@ -1237,7 +1237,7 @@ var requirejs, require, define;
|
||||
|
||||
return {
|
||||
node: node,
|
||||
id: node && node.getAttribute('data-requiremodule')
|
||||
id: node?.getAttribute('data-requiremodule')
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@ from pgadmin.utils import PgAdminModule, get_storage_directory, html, \
|
||||
from pgadmin.utils.ajax import make_json_response, bad_request, unauthorized
|
||||
|
||||
from config import PG_DEFAULT_DRIVER
|
||||
from pgadmin.model import Server, SharedServer
|
||||
from pgadmin.misc.bgprocess import escape_dquotes_process_arg
|
||||
from pgadmin.utils.constants import MIMETYPE_APP_JS
|
||||
from pgadmin.tools.grant_wizard import _get_rows_for_type, \
|
||||
@@ -545,7 +544,6 @@ def objects(sid, did, scid=None):
|
||||
Returns:
|
||||
list of objects
|
||||
"""
|
||||
from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry
|
||||
server = get_server(sid)
|
||||
|
||||
if server is None:
|
||||
@@ -555,7 +553,6 @@ def objects(sid, did, scid=None):
|
||||
)
|
||||
|
||||
from pgadmin.utils.driver import get_driver
|
||||
from flask_babel import gettext
|
||||
from pgadmin.utils.ajax import precondition_required
|
||||
|
||||
server_info = {}
|
||||
|
||||
@@ -219,15 +219,12 @@ export default class DebuggerModule {
|
||||
let treeInfo = tree.getTreeNodeHierarchy(info);
|
||||
|
||||
// For indirect debugging user must be super user
|
||||
if (data && data.debug_type && data.debug_type == 'indirect' &&
|
||||
!treeInfo.server.user.is_superuser)
|
||||
if (data?.debug_type == 'indirect' && !treeInfo.server.user.is_superuser)
|
||||
return false;
|
||||
|
||||
// Fetch object owner
|
||||
let obj_owner = treeInfo.function && treeInfo.function.funcowner ||
|
||||
treeInfo.procedure && treeInfo.procedure.funcowner ||
|
||||
treeInfo.edbfunc && treeInfo.edbfunc.funcowner ||
|
||||
treeInfo.edbproc && treeInfo.edbproc.funcowner;
|
||||
let obj_owner = treeInfo.function?.funcowner || treeInfo.procedure?.funcowner ||
|
||||
treeInfo.edbfunc?.funcowner || treeInfo.edbproc?.funcowner;
|
||||
|
||||
// Must be a super user or object owner to create breakpoints of any kind
|
||||
if (!(treeInfo.server.user.is_superuser || obj_owner == treeInfo.server.user.name))
|
||||
@@ -312,7 +309,7 @@ export default class DebuggerModule {
|
||||
}
|
||||
|
||||
checkDbNameChange(data, dbNode, newTreeInfo, db_label) {
|
||||
if (data && data.data_obj && data.data_obj.db_name != _.unescape(newTreeInfo.database.label)) {
|
||||
if (data?.data_obj?.db_name != _.unescape(newTreeInfo.database.label)) {
|
||||
db_label = data.data_obj.db_name;
|
||||
let message = `Current database has been moved or renamed to ${db_label}. Click on the OK button to refresh the database name.`;
|
||||
refresh_db_node(message, dbNode);
|
||||
|
||||
@@ -596,7 +596,7 @@ export default function DebuggerArgumentComponent({ debuggerInfo, restartDebug,
|
||||
|
||||
function checkTypeAndGetUrl(d, treeInfo) {
|
||||
let baseUrl;
|
||||
if (d && d._type == 'function') {
|
||||
if (d?._type == 'function') {
|
||||
baseUrl = url_for('debugger.initialize_target_for_function', {
|
||||
'debug_type': 'direct',
|
||||
'trans_id': transId,
|
||||
@@ -605,7 +605,7 @@ export default function DebuggerArgumentComponent({ debuggerInfo, restartDebug,
|
||||
'scid': treeInfo.schema._id,
|
||||
'func_id': treeInfo.function._id,
|
||||
});
|
||||
} else if (d && d._type == 'procedure') {
|
||||
} else if (d?._type == 'procedure') {
|
||||
baseUrl = url_for('debugger.initialize_target_for_function', {
|
||||
'debug_type': 'direct',
|
||||
'trans_id': transId,
|
||||
@@ -614,7 +614,7 @@ export default function DebuggerArgumentComponent({ debuggerInfo, restartDebug,
|
||||
'scid': treeInfo.schema._id,
|
||||
'func_id': treeInfo.procedure._id,
|
||||
});
|
||||
} else if (d && d._type == 'edbfunc') {
|
||||
} else if (d?._type == 'edbfunc') {
|
||||
baseUrl = url_for('debugger.initialize_target_for_function', {
|
||||
'debug_type': 'direct',
|
||||
'trans_id': transId,
|
||||
@@ -623,7 +623,7 @@ export default function DebuggerArgumentComponent({ debuggerInfo, restartDebug,
|
||||
'scid': treeInfo.schema._id,
|
||||
'func_id': treeInfo.edbfunc._id,
|
||||
});
|
||||
} else if (d && d._type == 'edbproc') {
|
||||
} else if (d?._type == 'edbproc') {
|
||||
baseUrl = url_for('debugger.initialize_target_for_function', {
|
||||
'debug_type': 'direct',
|
||||
'trans_id': transId,
|
||||
|
||||
@@ -12,9 +12,9 @@ import {generateTitle} from '../../../sqleditor/static/js/sqleditor_title';
|
||||
function getFunctionId(treeInfoObject) {
|
||||
let objectId;
|
||||
if(treeInfoObject) {
|
||||
if (treeInfoObject.function && treeInfoObject.function._id) {
|
||||
if (treeInfoObject.function?._id) {
|
||||
objectId = treeInfoObject.function._id;
|
||||
} else if (treeInfoObject.edbfunc && treeInfoObject.edbfunc._id) {
|
||||
} else if (treeInfoObject.edbfunc?._id) {
|
||||
objectId = treeInfoObject.edbfunc._id;
|
||||
}
|
||||
}
|
||||
@@ -24,9 +24,9 @@ function getFunctionId(treeInfoObject) {
|
||||
function getProcedureId(treeInfoObject) {
|
||||
let objectId;
|
||||
if(treeInfoObject) {
|
||||
if (treeInfoObject.procedure && treeInfoObject.procedure._id) {
|
||||
if (treeInfoObject.procedure?._id) {
|
||||
objectId = treeInfoObject.procedure._id;
|
||||
} else if (treeInfoObject.edbproc && treeInfoObject.edbproc._id) {
|
||||
} else if (treeInfoObject.edbproc?._id) {
|
||||
objectId = treeInfoObject.edbproc._id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ define([
|
||||
if (!d)
|
||||
return;
|
||||
|
||||
let treeInfo = t && t.getTreeNodeHierarchy(i);
|
||||
let treeInfo = t?.getTreeNodeHierarchy(i);
|
||||
|
||||
const baseUrlUtilitCheck = url_for('import_export.utility_exists', {
|
||||
'sid': server_data._id,
|
||||
|
||||
@@ -158,7 +158,7 @@ define([
|
||||
if (!d)
|
||||
return;
|
||||
|
||||
let treeInfo = t && t.getTreeNodeHierarchy(i);
|
||||
let treeInfo = t?.getTreeNodeHierarchy(i);
|
||||
|
||||
if (treeInfo.database._label.indexOf('=') >= 0) {
|
||||
pgAdmin.Browser.notifier.alert(
|
||||
|
||||
@@ -149,7 +149,7 @@ export function initialize(gettext, url_for, _, pgAdmin, csrfToken, Browser) {
|
||||
+`&server_type=${pData.server.server_type}`
|
||||
+ `&theme=${theme}`;
|
||||
|
||||
if(pData.database && pData.database._id) {
|
||||
if(pData.database?._id) {
|
||||
openUrl += `&db=${encodeURIComponent(pData.database._label)}`;
|
||||
} else {
|
||||
openUrl += `&db=${''}`;
|
||||
|
||||
@@ -293,7 +293,7 @@ function TheMap({data}) {
|
||||
infoControl.current.addTo(mapObj);
|
||||
}
|
||||
resetLayersKey.current++;
|
||||
return ()=>{infoControl.current && infoControl.current.remove();};
|
||||
return ()=>{infoControl.current?.remove();};
|
||||
}, [data]);
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -82,8 +82,7 @@ export class ResultSetUtils {
|
||||
|
||||
static extractErrorMessage(httpMessage) {
|
||||
let msg = httpMessage.errormsg;
|
||||
if (httpMessage.responseJSON !== undefined &&
|
||||
httpMessage.responseJSON.errormsg !== undefined)
|
||||
if (httpMessage.responseJSON?.errormsg !== undefined)
|
||||
msg = httpMessage.responseJSON.errormsg;
|
||||
|
||||
return msg;
|
||||
@@ -633,7 +632,7 @@ export class ResultSetUtils {
|
||||
&& data.types[0] && data.types[0].typname === 'json') {
|
||||
/* json is sent as text, parse it */
|
||||
let planJson = JSON.parse(data.result[0][0]);
|
||||
if (planJson && planJson[0] && planJson[0].hasOwnProperty('Plan') &&
|
||||
if (planJson?.[0] && planJson?.[0].hasOwnProperty('Plan') &&
|
||||
_.isObject(planJson[0]['Plan'])
|
||||
) {
|
||||
return planJson;
|
||||
|
||||
Reference in New Issue
Block a user