From 0ce3434631a2d04575884ab16652e88cc7e1cca9 Mon Sep 17 00:00:00 2001 From: Akshay Joshi Date: Tue, 25 Jan 2022 20:10:31 +0530 Subject: [PATCH] Fixed code smell 'Update this function so that its implementation is not identical' reported by SonarQube. --- .../databases/casts/static/js/cast.ui.js | 26 +- .../fts_parsers/static/js/fts_parser.ui.js | 65 +--- .../static/js/fts_template.ui.js | 26 +- .../tables/columns/static/js/column.ui.js | 12 +- .../static/js/exclusion_constraint.ui.js | 26 +- .../index_constraint/static/js/primary_key.js | 143 ++++----- .../static/js/primary_key.ui.js | 14 +- .../static/js/unique_constraint.ui.js | 18 +- .../tables/indexes/static/js/index.ui.js | 126 ++++---- .../tables/partitions/static/js/partition.js | 140 ++++----- .../tables/static/js/partition.utils.ui.js | 87 +++--- .../schemas/tables/static/js/table.ui.js | 27 +- .../tables/triggers/static/js/trigger.ui.js | 17 +- .../schemas/types/static/js/type.ui.js | 286 +++++------------- .../servers/databases/static/js/database.js | 14 +- .../server_groups/servers/static/js/server.js | 38 +-- web/pgadmin/browser/static/js/node.js | 46 ++- web/pgadmin/browser/static/js/node.ui.js | 122 +++----- web/pgadmin/browser/static/js/node_view.jsx | 26 +- web/pgadmin/browser/static/js/panel.js | 1 - web/pgadmin/dashboard/static/js/dashboard.js | 68 ++--- .../static/explain/js/explain_statistics.js | 32 +- .../static/js/SchemaView/DataGridView.jsx | 5 +- .../static/js/SchemaView/base_schema.ui.js | 25 ++ web/pgadmin/static/js/utils.js | 8 +- .../tools/backup/static/js/backup.ui.js | 24 +- .../datagrid/static/js/show_query_tool.js | 20 +- .../tools/debugger/static/js/debugger.js | 79 ++--- .../tools/debugger/static/js/direct.js | 18 +- .../maintenance/static/js/maintenance.ui.js | 27 +- .../tools/restore/static/js/restore.ui.js | 25 +- .../schema_diff/static/js/schema_diff_ui.js | 26 +- .../static/js/user_management.js | 41 +-- 33 files changed, 603 insertions(+), 1055 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.ui.js b/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.ui.js index 02340b930..ddbfaa608 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.ui.js @@ -29,6 +29,16 @@ export default class CastSchema extends BaseUISchema { return 'oid'; } + getCastName(state) { + var srctype = state.srctyp; + var trgtype = state.trgtyp; + if(srctype != undefined && srctype != '' && + trgtype != undefined && trgtype != '') + return state.name = srctype+'->'+trgtype; + else + return state.name = ''; + } + get baseFields() { let obj = this; return [{ @@ -53,13 +63,7 @@ export default class CastSchema extends BaseUISchema { * target type are set, if yes then fetch values from both * controls and generate cast name */ - var srctype = state.srctyp; - var trgtype = state.trgtyp; - if(srctype != undefined && srctype != '' && - trgtype != undefined && trgtype != '') - return state.name = srctype+'->'+trgtype; - else - return state.name = ''; + return obj.getCastName(state); }, }, @@ -83,13 +87,7 @@ export default class CastSchema extends BaseUISchema { * target type are set, if yes then fetch values from both * controls and generate cast name */ - var srctype = state.srctyp; - var trgtype = state.trgtyp; - if(srctype != undefined && srctype != '' && - trgtype != undefined && trgtype != '') - return state.name = srctype+'->'+trgtype; - else - return state.name = ''; + return obj.getCastName(state); }, }, /* diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.ui.js index 529329726..e027ff335 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.ui.js @@ -66,18 +66,7 @@ export default class FTSParserSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -93,18 +82,7 @@ export default class FTSParserSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -120,18 +98,7 @@ export default class FTSParserSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -147,18 +114,7 @@ export default class FTSParserSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -174,18 +130,7 @@ export default class FTSParserSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.ui.js index f9accd107..8ecb4d9e2 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.ui.js @@ -66,18 +66,7 @@ export default class FTSTemplateSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -96,18 +85,7 @@ export default class FTSTemplateSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.ui.js index 95d16a7c7..73d487ac3 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.ui.js @@ -147,6 +147,10 @@ export default class ColumnSchema extends BaseUISchema { return null; } + attCell(state) { + return { cell: this.attlenRange(state) ? 'int' : '' }; + } + get baseFields() { let obj = this; @@ -281,9 +285,7 @@ export default class ColumnSchema extends BaseUISchema { id: 'attlen', label: gettext('Length/Precision'), deps: ['cltype'], type: 'int', group: gettext('Definition'), width: 120, disableResizing: true, cell: (state)=>{ - return { - cell: obj.attlenRange(state) ? 'int' : '', - }; + return obj.attCell(state); }, depChange: (state)=>{ let range = this.attlenRange(state); @@ -311,9 +313,7 @@ export default class ColumnSchema extends BaseUISchema { id: 'attprecision', label: gettext('Scale'), width: 60, disableResizing: true, deps: ['cltype'], type: 'int', group: gettext('Definition'), cell: (state)=>{ - return { - cell: obj.attlenRange(state) ? 'int' : '', - }; + return obj.attCell(state); }, depChange: (state)=>{ let range = this.attprecisionRange(state); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/static/js/exclusion_constraint.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/static/js/exclusion_constraint.ui.js index 7c718fda3..410a71617 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/static/js/exclusion_constraint.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/static/js/exclusion_constraint.ui.js @@ -8,6 +8,16 @@ import { getNodeAjaxOptions, getNodeListByName } from '../../../../../../../../. import TableSchema from '../../../../static/js/table.ui'; import Notify from '../../../../../../../../../../static/js/helpers/Notifier'; +function getData(data) { + let res = []; + if (data && _.isArray(data)) { + _.each(data, function(d) { + res.push({label: d[0], value: d[1]}); + }); + } + return res; +} + export function getNodeExclusionConstraintSchema(treeNodeInfo, itemNodeData, pgBrowser, noColumns=false) { let tableNode = pgBrowser.Nodes['table']; return new ExclusionConstraintSchema({ @@ -17,22 +27,10 @@ export function getNodeExclusionConstraintSchema(treeNodeInfo, itemNodeData, pgB return (m.label != 'pg_global'); }), getOperClass: (urlParams)=>getNodeAjaxOptions('get_oper_class', tableNode, treeNodeInfo, itemNodeData, {urlParams: urlParams, useCache:false}, (data)=>{ - let res = []; - if (data && _.isArray(data)) { - _.each(data, function(d) { - res.push({label: d[0], value: d[1]}); - }); - } - return res; + return getData(data); }), getOperator: (urlParams)=>getNodeAjaxOptions('get_operator', tableNode, treeNodeInfo, itemNodeData, {urlParams: urlParams, useCache:false}, (data)=>{ - let res = []; - if (data && _.isArray(data)) { - _.each(data, function(d) { - res.push({label: d[0], value: d[1]}); - }); - } - return res; + return getData(data); }), }, treeNodeInfo); } diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.js index c5a78c8a8..a1844f7a6 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.js @@ -126,6 +126,49 @@ define('pgadmin.node.primary_key', [ include: [], }, + genResetColOptions: function() { + var self = this; + + setTimeout(function () { + self.custom_options(); + self.render.apply(self); + }, 50); + }, + + genCustomOptions: function() { + // We will add all the columns entered by user in table model + var columns = this.model.top.get('columns'), + added_columns_from_tables = []; + + if (columns.length > 0) { + _.each(columns.models, function(m) { + var col = m.get('name'); + if(!_.isUndefined(col) && !_.isNull(col)) { + added_columns_from_tables.push( + {label: col, value: col, image:'icon-column'} + ); + } + }); + } + // Set the values in to options so that user can select + this.field.set('options', added_columns_from_tables); + }, + checkReadOnly(m) { + // If we are in table edit mode then + if (_.has(m, 'top') && !_.isUndefined(m.top) + && !m.top.isNew()) { + // If OID is undefined then user is trying to add + // new constraint which should be allowed for Unique + return !_.isUndefined(m.get('oid')); + } + + // We can't update columns of existing index constraint. + if (!m.isNew()) { + return true; + } + + return false; + }, // Define the schema for the index constraint node schema: [{ id: 'name', label: gettext('Name'), type: 'text', @@ -294,30 +337,10 @@ define('pgadmin.node.primary_key', [ }); }, resetColOptions: function() { - var self = this; - - setTimeout(function () { - self.custom_options(); - self.render.apply(self); - }, 50); + this.genResetColOptions(); }, custom_options: function() { - // We will add all the columns entered by user in table model - var columns = this.model.top.get('columns'), - added_columns_from_tables = []; - - if (columns.length > 0) { - _.each(columns.models, function(m) { - var col = m.get('name'); - if(!_.isUndefined(col) && !_.isNull(col)) { - added_columns_from_tables.push( - {label: col, value: col, image:'icon-column'} - ); - } - }); - } - // Set the values in to options so that user can select - this.field.set('options', added_columns_from_tables); + this.genCustomOptions(); }, onChange: function() { var self = this, @@ -412,18 +435,7 @@ define('pgadmin.node.primary_key', [ }, select2:{allowClear:false}, readonly: function(m) { - // If we are in table edit mode then - if (_.has(m, 'top') && !_.isUndefined(m.top) - && !m.top.isNew()) { - // If OID is undefined then user is trying to add - // new constraint which should be allowed for Unique - return !_.isUndefined(m.get('oid')); - } - - // We can't update columns of existing index constraint. - if (!m.isNew()) { - return true; - } + return this.checkReadOnly(m); }, disabled: function(m) { // Disable if index is selected. @@ -477,46 +489,15 @@ define('pgadmin.node.primary_key', [ } }, resetColOptions: function() { - var self = this; - - setTimeout(function () { - self.custom_options(); - self.render.apply(self); - }, 50); + this.genResetColOptions(); }, custom_options: function() { - // We will add all the columns entered by user in table model - var columns = this.model.top.get('columns'), - added_columns_from_tables = []; - - if (columns.length > 0) { - _.each(columns.models, function(m) { - var col = m.get('name'); - if(!_.isUndefined(col) && !_.isNull(col)) { - added_columns_from_tables.push( - {label: col, value: col, image:'icon-column'} - ); - } - }); - } - // Set the values in to options so that user can select - this.field.set('options', added_columns_from_tables); + this.genCustomOptions(); }, }), deps: ['index'], node: 'column', readonly: function(m) { - // If we are in table edit mode then - if (_.has(m, 'top') && !_.isUndefined(m.top) - && !m.top.isNew()) { - // If OID is undefined then user is trying to add - // new constraint which should be allowed for Unique - return !_.isUndefined(m.get('oid')); - } - - // We can't update columns of existing index constraint. - if (!m.isNew()) { - return true; - } + return this.checkReadOnly(m); }, disabled: function(m) { // Disable if index is selected. @@ -596,18 +577,7 @@ define('pgadmin.node.primary_key', [ id: 'condeferrable', label: gettext('Deferrable?'), type: 'switch', group: gettext('Definition'), deps: ['index'], readonly: function(m) { - // If we are in table edit mode then - if (_.has(m, 'top') && !_.isUndefined(m.top) - && !m.top.isNew()) { - // If OID is undefined then user is trying to add - // new constraint which should allowed for Unique - return !_.isUndefined(m.get('oid')); - } - - // We can't update condeferrable of existing index constraint. - if (!m.isNew()) { - return true; - } + return this.checkReadOnly(m); }, disabled: function(m) { // Disable if index is selected. @@ -627,18 +597,7 @@ define('pgadmin.node.primary_key', [ type: 'switch', group: gettext('Definition'), deps: ['condeferrable'], readonly: function(m) { - // If we are in table edit mode then - if (_.has(m, 'top') && !_.isUndefined(m.top) - && !m.top.isNew()) { - // If OID is undefined then user is trying to add - // new constraint which should allowed for Unique - return !_.isUndefined(m.get('oid')); - } - - // We can't update condeferred of existing index constraint. - if (!m.isNew()) { - return true; - } + return this.checkReadOnly(m); }, disabled: function(m) { // Disable if condeferred is false or unselected. diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.ui.js index 40b29488c..b0189bb88 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.ui.js @@ -158,9 +158,7 @@ export default class PrimaryKeySchema extends BaseUISchema { }, deps: ['index'], readonly: function(state) { - if(!obj.isNew(state)) { - return true; - } + return obj.isReadOnly(state); }, disabled: function(state) { // Disable if index is selected. @@ -225,10 +223,7 @@ export default class PrimaryKeySchema extends BaseUISchema { id: 'condeferrable', label: gettext('Deferrable?'), type: 'switch', group: gettext('Definition'), deps: ['index'], readonly: function(state) { - if(!obj.isNew(state)) { - return true; - } - return false; + return obj.isReadOnly(state); }, disabled: function(state) { // Disable if index is selected. @@ -246,10 +241,7 @@ export default class PrimaryKeySchema extends BaseUISchema { type: 'switch', group: gettext('Definition'), deps: ['condeferrable'], readonly: function(state) { - if(!obj.isNew(state)) { - return true; - } - return false; + return obj.isReadOnly(state); }, disabled: function(state) { // Disable if index is selected. diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/unique_constraint.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/unique_constraint.ui.js index 9a41c8c46..bf1a098bc 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/unique_constraint.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/unique_constraint.ui.js @@ -130,9 +130,7 @@ export default class UniqueConstraintSchema extends BaseUISchema { }), group: gettext('Definition'), editable: false, readonly: function(state) { - if(!obj.isNew(state)) { - return true; - } + return obj.isReadOnly(state); }, disabled: function(state) { // Disable if index is selected. @@ -161,9 +159,7 @@ export default class UniqueConstraintSchema extends BaseUISchema { }, deps: ['index'], readonly: function(state) { - if(!obj.isNew(state)) { - return true; - } + return obj.isReadOnly(state); }, disabled: function(state) { // Disable if index is selected. @@ -228,10 +224,7 @@ export default class UniqueConstraintSchema extends BaseUISchema { id: 'condeferrable', label: gettext('Deferrable?'), type: 'switch', group: gettext('Definition'), deps: ['index'], readonly: function(state) { - if(!obj.isNew(state)) { - return true; - } - return false; + return obj.isReadOnly(state); }, disabled: function(state) { // Disable if index is selected. @@ -249,10 +242,7 @@ export default class UniqueConstraintSchema extends BaseUISchema { type: 'switch', group: gettext('Definition'), deps: ['condeferrable'], readonly: function(state) { - if(!obj.isNew(state)) { - return true; - } - return false; + return obj.isReadOnly(state); }, disabled: function(state) { // Disable if index is selected. diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.ui.js index 427cfbbcb..06b48391f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.ui.js @@ -75,6 +75,19 @@ export class ColumnSchema extends BaseUISchema { this.op_class_types = options; } + isEditable(state) { + let topObj = this._top; + if(this.inSchemaWithModelCheck(state)) { + return false; + } else if (topObj._sessData && topObj._sessData.amname === 'btree') { + state.is_sort_nulls_applicable = true; + return true; + } else { + state.is_sort_nulls_applicable = false; + } + return false; + } + get baseFields() { let columnSchemaObj = this; return [ @@ -161,31 +174,13 @@ export class ColumnSchema extends BaseUISchema { } }, editable: function(state) { - let topObj = columnSchemaObj._top; - if(columnSchemaObj.inSchemaWithModelCheck(state)) { - return false; - } else if (topObj._sessData && topObj._sessData.amname === 'btree') { - state.is_sort_nulls_applicable = true; - return true; - } else { - state.is_sort_nulls_applicable = false; - return false; - } + return columnSchemaObj.isEditable(state); }, deps: ['amname'], },{ id: 'nulls', label: gettext('NULLs'), editable: function(state) { - let topObj = columnSchemaObj._top; - if(columnSchemaObj.inSchemaWithModelCheck(state)) { - return false; - } else if (topObj._sessData && topObj._sessData.amname === 'btree') { - state.is_sort_nulls_applicable = true; - return true; - } else { - state.is_sort_nulls_applicable = false; - return false; - } + return columnSchemaObj.isEditable(state); }, deps: ['amname', 'sort_order'], type:'select', cell: 'select', @@ -237,6 +232,39 @@ export default class IndexSchema extends BaseUISchema { return 'oid'; } + getColumns() { + return { + type: 'select', + options: this.fieldOptions.columnList, + optionsLoaded: (options) => { this.fieldOptions.columnList = options; }, + controlProps: { + allowClear: false, + multiple: true, + placeholder: gettext('Select the column(s)'), + width: 'style', + filter: (options) => { + let res = []; + if (options && _.isArray(options)) { + _.each(options, function(d) { + if(d.label != '') + res.push({label: d.label, value: d.value, image:'icon-column'}); + }); + } + return res; + } + } + }; + } + + isVisible() { + if(!_.isUndefined(this.node_info) && !_.isUndefined(this.node_info.server) + && !_.isUndefined(this.node_info.server.version) && + this.node_info.server.version >= 110000) + return true; + + return false; + } + get baseFields() { let indexSchemaObj = this; return [ @@ -324,35 +352,10 @@ export default class IndexSchema extends BaseUISchema { return !indexSchemaObj.isNew(state); }, type: () => { - return { - type: 'select', - options: indexSchemaObj.fieldOptions.columnList, - optionsLoaded: (options) => { indexSchemaObj.fieldOptions.columnList = options; }, - controlProps: { - allowClear: false, - multiple: true, - placeholder: gettext('Select the column(s)'), - width: 'style', - filter: (options) => { - let res = []; - if (options && _.isArray(options)) { - _.each(options, function(d) { - if(d.label != '') - res.push({label: d.label, value: d.value, image:'icon-column'}); - }); - } - return res; - } - } - }; + return indexSchemaObj.getColumns(); }, visible: function() { - if(!_.isUndefined(this.node_info) && !_.isUndefined(this.node_info.server) - && !_.isUndefined(this.node_info.server.version) && - this.node_info.server.version >= 110000) - return true; - - return false; + return indexSchemaObj.isVisible(); }, node:'column', },{ @@ -416,27 +419,7 @@ export default class IndexSchema extends BaseUISchema { }, { id: 'include', label: gettext('Include columns'), type: () => { - return { - type: 'select', - options: indexSchemaObj.fieldOptions.columnList, - optionsLoaded: (options) => { indexSchemaObj.fieldOptions.columnList = options; }, - controlProps: { - allowClear: false, - multiple: true, - placeholder: gettext('Select the column(s)'), - width: 'style', - filter: (options) => { - let res = []; - if (options && _.isArray(options)) { - _.each(options, function(d) { - if(d.label != '') - res.push({label: d.label, value: d.value, image:'icon-column'}); - }); - } - return res; - } - } - }; + return indexSchemaObj.getColumns(); }, group: gettext('Definition'), editable: false, @@ -446,12 +429,7 @@ export default class IndexSchema extends BaseUISchema { return !indexSchemaObj.isNew(state); }, visible: function() { - if(!_.isUndefined(this.node_info) && !_.isUndefined(this.node_info.server) - && !_.isUndefined(this.node_info.server.version) && - this.node_info.server.version >= 110000) - return true; - - return false; + return indexSchemaObj.isVisible(); }, node:'column', },{ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/static/js/partition.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/static/js/partition.js index 6faa20ba7..6836ce30c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/static/js/partition.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/static/js/partition.js @@ -127,6 +127,21 @@ function( encodeURIComponent(info['partition']._id) ); }, + on_done: function(res, data, t, i) { + if (res.success == 1) { + Notify.success(res.info); + t.removeIcon(i); + data.icon = 'icon-partition'; + t.addIcon(i, {icon: data.icon}); + t.unload(i); + t.setInode(i); + t.deselect(i); + // Fetch updated data from server + setTimeout(function() { + t.select(i); + }, 10); + } + }, canDrop: SchemaChildTreeNode.isTreeItemOfChildOfSchema, canDropCascade: SchemaChildTreeNode.isTreeItemOfChildOfSchema, callbacks: { @@ -197,35 +212,22 @@ function( Notify.confirm( gettext('Truncate Table'), gettext('Are you sure you want to truncate table %s?', d.label), - function (e) { - if (e) { - var data = d; - $.ajax({ - url: obj.generate_url(i, 'truncate' , d, true), - type:'PUT', - data: params, - dataType: 'json', + function () { + var data = d; + $.ajax({ + url: obj.generate_url(i, 'truncate' , d, true), + type:'PUT', + data: params, + dataType: 'json', + }) + .done(function(res) { + obj.on_done(res, data, t, i); }) - .done(function(res) { - if (res.success == 1) { - Notify.success(res.info); - t.removeIcon(i); - data.icon = 'icon-partition'; - t.addIcon(i, {icon: data.icon}); - t.unload(i); - t.setInode(i); - t.deselect(i); - // Fetch updated data from server - setTimeout(function() { - t.select(i); - }, 10); - } - }) - .fail(function(xhr, status, error) { - Notify.pgRespErrorNotify(xhr, error); - t.unload(i); - }); - }}, + .fail(function(xhr, status, error) { + Notify.pgRespErrorNotify(xhr, error); + t.unload(i); + }); + }, ); }, reset_table_stats: function(args) { @@ -241,33 +243,19 @@ function( Notify.confirm( gettext('Reset statistics'), gettext('Are you sure you want to reset the statistics for table "%s"?', d._label), - function (e) { - if (e) { - var data = d; - $.ajax({ - url: obj.generate_url(i, 'reset' , d, true), - type:'DELETE', + function () { + var data = d; + $.ajax({ + url: obj.generate_url(i, 'reset' , d, true), + type:'DELETE', + }) + .done(function(res) { + obj.on_done(res, data, t, i); }) - .done(function(res) { - if (res.success == 1) { - Notify.success(res.info); - t.removeIcon(i); - data.icon = 'icon-partition'; - t.addIcon(i, {icon: data.icon}); - t.unload(i); - t.setInode(i); - t.deselect(i); - // Fetch updated data from server - setTimeout(function() { - t.select(i); - }, 10); - } - }) - .fail(function(xhr, status, error) { - Notify.pgRespErrorNotify(xhr, error); - t.unload(i); - }); - } + .fail(function(xhr, status, error) { + Notify.pgRespErrorNotify(xhr, error); + t.unload(i); + }); }, function() {/*This is intentional (SonarQube)*/} ); @@ -285,32 +273,30 @@ function( Notify.confirm( gettext('Detach Partition'), gettext('Are you sure you want to detach the partition %s?', d._label), - function (e) { - if (e) { - $.ajax({ - url: obj.generate_url(i, 'detach' , d, true), - type:'PUT', - }) - .done(function(res) { - if (res.success == 1) { - Notify.success(res.info); - var n = t.next(i); + function () { + $.ajax({ + url: obj.generate_url(i, 'detach' , d, true), + type:'PUT', + }) + .done(function(res) { + if (res.success == 1) { + Notify.success(res.info); + var n = t.next(i); + if (!n) { + n = t.prev(i); if (!n) { - n = t.prev(i); - if (!n) { - n = t.parent(i); - } - } - t.remove(i); - if (n) { - t.select(n); + n = t.parent(i); } } - }) - .fail(function(xhr, status, error) { - Notify.pgRespErrorNotify(xhr, error); - }); - } + t.remove(i); + if (n) { + t.select(n); + } + } + }) + .fail(function(xhr, status, error) { + Notify.pgRespErrorNotify(xhr, error); + }); }, function() {/*This is intentional (SonarQube)*/} ); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/partition.utils.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/partition.utils.ui.js index aeecaeaa6..237291b6a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/partition.utils.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/partition.utils.ui.js @@ -18,6 +18,13 @@ export class PartitionKeysSchema extends BaseUISchema { this.columns = columns; } + isEditable(state) { + if(state.key_type == 'expression') { + return false; + } + return true; + } + get baseFields() { let obj = this; return [{ @@ -47,10 +54,7 @@ export class PartitionKeysSchema extends BaseUISchema { } }), editable: function(state) { - if(state.key_type == 'expression') { - return false; - } - return true; + return obj.isEditable(state); }, },{ id: 'expression', label: gettext('Expression'), type:'text', @@ -73,10 +77,7 @@ export class PartitionKeysSchema extends BaseUISchema { type: 'select', group: gettext('partition'), deps:['key_type'], options: obj.getCollations, mode: ['create', 'properties', 'edit'], editable: function(state) { - if(state.key_type == 'expression') { - return false; - } - return true; + return obj.isEditable(state); }, disabled: ()=>{return !(obj.isNew()); }, }, @@ -84,10 +85,7 @@ export class PartitionKeysSchema extends BaseUISchema { id: 'op_class', label: gettext('Operator class'), cell: 'select', type: 'select', group: gettext('partition'), deps:['key_type'], editable: function(state) { - if(state.key_type == 'expression') { - return false; - } - return true; + return obj.isEditable(state); }, disabled: ()=>{return !(obj.isNew()); }, options: obj.getOperatorClass, mode: ['create', 'properties', 'edit'], @@ -137,6 +135,22 @@ export class PartitionsSchema extends BaseUISchema { this.subPartitionsObj.changeColumnOptions(columns); } + isEditable(state, type) { + if(this.top && this.top.sessData.partition_type == type && this.isNew(state) + && state.is_default !== true) { + return true; + } + return false; + } + + isDisable(state, type) { + if(this.top && this.top.sessData.partition_type == type && this.isNew(state) + && state.is_default !== true) { + return false; + } + return true; + } + get baseFields() { let obj = this; return [{ @@ -223,68 +237,37 @@ export class PartitionsSchema extends BaseUISchema { id: 'values_from', label: gettext('From'), type:'text', cell: 'text', deps: ['is_default'], editable: function(state) { - if(obj.top && obj.top.sessData.partition_type == 'range' && obj.isNew(state) - && state.is_default !== true) { - return true; - } - return false; + return obj.isEditable(state, 'range'); }, disabled: function(state) { - if(obj.top && obj.top.sessData.partition_type == 'range' && obj.isNew(state) - && state.is_default !== true) { - return false; - } - return true; - }, + return obj.isDisable(state, 'range'); + } }, { id: 'values_to', label: gettext('To'), type:'text', cell: 'text', deps: ['is_default'], editable: function(state) { - if(obj.top && obj.top.sessData.partition_type == 'range' && obj.isNew(state) - && state.is_default !== true) { - return true; - } - return false; + return obj.isEditable(state, 'range'); }, disabled: function(state) { - if(obj.top && obj.top.sessData.partition_type == 'range' && obj.isNew(state) - && state.is_default !== true) { - return false; - } - return true; + return obj.isDisable(state, 'range'); }, },{ id: 'values_in', label: gettext('In'), type:'text', cell: 'text', deps: ['is_default'], editable: function(state) { - if(obj.top && obj.top.sessData.partition_type == 'list' && obj.isNew(state) - && state.is_default !== true) { - return true; - } - return false; + return obj.isEditable(state, 'list'); }, readonly: function(state) { - if(obj.top && obj.top.sessData.partition_type == 'list' && obj.isNew(state) - && state.is_default !== true) { - return false; - } - return true; + return obj.isDisable(state, 'list'); }, },{ id: 'values_modulus', label: gettext('Modulus'), type:'int', cell: 'int', editable: function(state) { - if(obj.top && obj.top.sessData.partition_type == 'hash' && obj.isNew(state)) { - return true; - } - return false; + return obj.isEditable(state, 'hash'); }, disabled: function(state) { - if(obj.top && obj.top.sessData.partition_type == 'hash' && obj.isNew(state) - && state.is_default !== true) { - return false; - } - return true; + return obj.isDisable(state, 'hash'); }, },{ id: 'values_remainder', label: gettext('Remainder'), type:'int', cell: 'int', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui.js index dbbc2eb6e..93fe02712 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui.js @@ -97,6 +97,13 @@ export class ConstraintsSchema extends BaseUISchema { return _.some(_.map(state.columns, 'name')); } + canAdd(state) { + if (state.is_partitioned && this.top.getServerVersion() < 110000) { + return false; + } + return true; + } + get baseFields() { let obj = this; return [{ @@ -108,10 +115,7 @@ export class ConstraintsSchema extends BaseUISchema { columns : ['name', 'columns'], disabled: this.inCatalog, canAdd: function(state) { - if (state.is_partitioned && obj.top.getServerVersion() < 110000) { - return false; - } - return true; + return obj.canAdd(state); }, canAddRow: function(state) { return ((state.primary_key||[]).length < 1 && obj.anyColumnAdded(state)); @@ -137,10 +141,7 @@ export class ConstraintsSchema extends BaseUISchema { group: gettext('Foreign Key'), mode: ['edit', 'create'], canEdit: true, canDelete: true, deps:['is_partitioned', 'columns'], canAdd: function(state) { - if (state.is_partitioned && obj.top.getServerVersion() < 110000) { - return false; - } - return true; + return obj.canAdd(state); }, columns : ['name', 'columns','references_table_name'], disabled: this.inCatalog, @@ -172,10 +173,7 @@ export class ConstraintsSchema extends BaseUISchema { columns : ['name', 'columns'], disabled: this.inCatalog, canAdd: function(state) { - if (state.is_partitioned && obj.top.getServerVersion() < 110000) { - return false; - } - return true; + return obj.canAdd(state); }, canAddRow: obj.anyColumnAdded, depChange: (state)=>{ @@ -194,10 +192,7 @@ export class ConstraintsSchema extends BaseUISchema { columns : ['name', 'columns', 'constraint'], disabled: this.inCatalog, canAdd: function(state) { - if (state.is_partitioned && obj.top.getServerVersion() < 110000) { - return false; - } - return true; + return obj.canAdd(state); }, canAddRow: obj.anyColumnAdded, depChange: (state)=>{ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.ui.js index c7c72de9d..8d3cff026 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.ui.js @@ -188,6 +188,13 @@ export default class TriggerSchema extends BaseUISchema { return flag; } + isDisable(state) { + if(!state.is_constraint_trigger) { + return true; + } + return false; + } + get baseFields() { let obj = this; return [{ @@ -301,10 +308,7 @@ export default class TriggerSchema extends BaseUISchema { } }, disabled: (state) => { - if(!state.is_constraint_trigger) { - return true; - } - return false; + return obj.isDisable(state); } },{ id: 'tginitdeferred', label: gettext('Deferred?'), @@ -331,10 +335,7 @@ export default class TriggerSchema extends BaseUISchema { } }, disabled: (state) => { - if(!state.is_constraint_trigger) { - return true; - } - return false; + return obj.isDisable(state); } },{ id: 'tfunction', label: gettext('Trigger function'), diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.ui.js index 99b9928b0..d9b09db3d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.ui.js @@ -145,6 +145,13 @@ function getDataTypeSchema(nodeObj, treeNodeInfo, itemNodeData) { ); } +function isVisible(state, type) { + if(state.typtype === type) { + return true; + } + return false; +} + class EnumerationSchema extends BaseUISchema { constructor() { @@ -249,18 +256,7 @@ class RangeSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -277,18 +273,7 @@ class RangeSchema extends BaseUISchema { placeholder: '', width: '100%', filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -336,18 +321,7 @@ class RangeSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -377,18 +351,7 @@ class RangeSchema extends BaseUISchema { controlProps: { allowClear: true, filter: (options) => { - let res = []; - if (state) { - options.forEach((option) => { - if(option && option.label == '') { - return; - } - res.push({ label: option.label, value: option.value }); - }); - } else { - res = options; - } - return res; + return obj.getFilterOptions(state, options); } } }; @@ -479,6 +442,33 @@ class ExternalSchema extends BaseUISchema { return result; } + filterFunctionOptions(state, options) { + let res = []; + if (state && this.isNew(state)) { + res = this.external_func_combo(options); + } else { + res = options; + } + return res; + } + + getFunctionType(state) { + let obj = this; + return { + type: 'select', + options: obj.fieldOptions.externalFunctionsList, + optionsLoaded: (options) => { obj.fieldOptions.externalFunctionsList = options; }, + controlProps: { + allowClear: true, + placeholder: '', + width: '100%', + filter: (options) => { + return obj.filterFunctionOptions(state, options); + } + } + }; + } + get baseFields() { var obj = this; return [{ @@ -491,50 +481,14 @@ class ExternalSchema extends BaseUISchema { return !obj.isNew(state); }, type: (state) => { - return { - type: 'select', - options: obj.fieldOptions.externalFunctionsList, - optionsLoaded: (options) => { obj.fieldOptions.externalFunctionsList = options; }, - controlProps: { - allowClear: true, - placeholder: '', - width: '100%', - filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - res = obj.external_func_combo(options); - } else { - res = options; - } - return res; - } - } - }; + return obj.getFunctionType(state); }, }, { id: 'typoutput', label: gettext('Output function'), mode: ['properties', 'create', 'edit'], group: gettext('Required'), type: (state) => { - return { - type: 'select', - options: obj.fieldOptions.externalFunctionsList, - optionsLoaded: (options) => { obj.fieldOptions.externalFunctionsList = options; }, - controlProps: { - allowClear: true, - placeholder: '', - width: '100%', - filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - res = obj.external_func_combo(options); - } else { - res = options; - } - return res; - } - } - }; + return obj.getFunctionType(state); }, readonly: function (state) { return !obj.isNew(state); @@ -586,13 +540,7 @@ class ExternalSchema extends BaseUISchema { placeholder: '', width: '100%', filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - res = obj.external_func_combo(options); - } else { - res = options; - } - return res; + return obj.filterFunctionOptions(state, options); } } }; @@ -705,25 +653,7 @@ class ExternalSchema extends BaseUISchema { id: 'typanalyze', label: gettext('Analyze function'), group: gettext('Optional-1'), type: (state) => { - return { - type: 'select', - options: obj.fieldOptions.externalFunctionsList, - optionsLoaded: (options) => { obj.fieldOptions.externalFunctionsList = options; }, - controlProps: { - allowClear: true, - placeholder: '', - width: '100%', - filter: (options) => { - let res = []; - if (state && obj.isNew(state)) { - res = obj.external_func_combo(options); - } else { - res = options; - } - return res; - } - } - }; + return obj.getFunctionType(state); }, mode: ['properties', 'create','edit'], disabled: () => obj.inCatalog(), @@ -908,6 +838,14 @@ class CompositeSchema extends BaseUISchema { return 'oid'; } + onTypeChange(state, changeSource) { + if(_.isArray(changeSource) && changeSource[2] == 'type') { + return {...state + , value: null + }; + } + } + get baseFields() { var obj = this; return [{ @@ -970,11 +908,7 @@ class CompositeSchema extends BaseUISchema { id: 'precision', label: gettext('Scale'), deps: ['type'], type: 'text', disabled: false, cell: 'int', depChange: (state, changeSource)=>{ - if(_.isArray(changeSource) && changeSource[2] == 'type') { - return {...state - , value: null - }; - } + return obj.onTypeChange(state, changeSource); }, editable: (state) => { // We will store type from selected from combobox @@ -1003,11 +937,7 @@ class CompositeSchema extends BaseUISchema { }, { id: 'collation', label: gettext('Collation'), type: 'text', depChange: (state, changeSource)=>{ - if(_.isArray(changeSource) && changeSource[2] == 'type') { - return {...state - , value: null - }; - } + return obj.onTypeChange(state, changeSource); }, cell: ()=>({ cell: 'select', options: obj.fieldOptions.collations, @@ -1138,9 +1068,7 @@ class DataTypeSchema extends BaseUISchema { readonly: function (state) { return !dataTypeObj.isNew(state); }, - visible: function (state) { - return state.typtype === 'V'; - } + visible: (state) => isVisible(state, 'V'), },{ // Note: There are ambiguities in the PG catalogs and docs between // precision and scale. In the UI, we try to follow the docs as @@ -1155,9 +1083,7 @@ class DataTypeSchema extends BaseUISchema { readonly: function (state) { return !dataTypeObj.isNew(state); }, - visible: function (state) { - return state.typtype === 'N'; - }, + visible: (state) => isVisible(state, 'N'), disabled: function(state) { var of_type = state.type, @@ -1217,9 +1143,7 @@ class DataTypeSchema extends BaseUISchema { return !dataTypeObj.isNew(state); }, cell: 'int', - visible: function (state) { - return state.typtype === 'N'; - }, + visible: (state) => isVisible(state, 'N'), disabled: function(state) { var of_type = state.type, flag = true; @@ -1416,9 +1340,7 @@ export default class TypeSchema extends BaseUISchema { state.composite.splice(0, state.composite.length); } }, - visible: (state) => { - return state.typtype === 'c'; - }, + visible: (state) => isVisible(state, 'c'), }, { id: 'enum', label: gettext('Enumeration type'), @@ -1437,9 +1359,7 @@ export default class TypeSchema extends BaseUISchema { disabled: () => obj.inCatalog(), deps: ['typtype'], uniqueCol : ['label'], - visible: function(state) { - return state.typtype === 'e'; - }, + visible: (state) => isVisible(state, 'e'), }, { type: 'nested-fieldset', group: gettext('Definition'), @@ -1456,9 +1376,7 @@ export default class TypeSchema extends BaseUISchema { group: gettext('Definition'), label: '', mode: ['edit', 'create'], - visible: (state) => { - return state.typtype && state.typtype === 'r'; - }, + visible: (state) => isVisible(state, 'r'), deps: ['typtype'], schema: obj.getRangeSchema(), }, { @@ -1466,9 +1384,7 @@ export default class TypeSchema extends BaseUISchema { group: gettext('Definition'), label: gettext('External Type'), deps: ['typtype'], mode: ['create', 'edit'], tabPanelExtraClasses:'inline-tab-panel-padded', - visible: function(state) { - return state.typtype === 'b'; - }, + visible: (state) => isVisible(state, 'b'), schema: obj.getExternalSchema(), }, { @@ -1480,99 +1396,54 @@ export default class TypeSchema extends BaseUISchema { id: 'member_list', label: gettext('Members'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'c') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'c'), },{ id: 'enum_list', label: gettext('Labels'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'e') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'e'), }, { id: 'typname', label: gettext('SubType'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'r') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'r'), }, { id: 'opcname', label: gettext('Subtype operator class'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'r') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'r'), }, { id: 'collname', label: gettext('Collation'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'r') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'r'), }, { id: 'rngcanonical', label: gettext('Canonical function'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'r') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'r'), }, { id: 'rngsubdiff', label: gettext('Subtype diff function'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'r') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'r'), }, { id: 'typinput', label: gettext('Input function'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'b') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'b'), }, { id: 'typoutput', label: gettext('Output function'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'b') { - return true; - } - return false; - }, + visible: (state) => isVisible(state, 'b'), }, { id: 'type', label: gettext('Data Type'), cell: 'string', @@ -1589,34 +1460,19 @@ export default class TypeSchema extends BaseUISchema { id: 'tlength', label: gettext('Length/Precision'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'N') { - return true; - } - return false; - } + visible: (state) => isVisible(state, 'N'), }, { id: 'precision', label: gettext('Scale'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'N') { - return true; - } - return false; - } + visible: (state) => isVisible(state, 'N'), }, { id: 'maxsize', label: gettext('Size'), cell: 'string', type: 'text', mode: ['properties'], group: gettext('Definition'), disabled: () => obj.inCatalog(), - visible: function(state) { - if(state.typtype === 'V') { - return true; - } - return false; - } + visible: (state) => isVisible(state, 'V'), }, { id: 'type_acl', label: gettext('Privileges'), cell: 'string', diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js index 54aa7b718..e9de70a0e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js +++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js @@ -313,6 +313,10 @@ define('pgadmin.node.database', [ }, }, getSchema: function(treeNodeInfo, itemNodeData) { + let c_types = ()=>getNodeAjaxOptions('get_ctypes', this, treeNodeInfo, itemNodeData, { + cacheLevel: 'server', + }); + return new DatabaseSchema( ()=>getNodeVariableSchema(this, treeNodeInfo, itemNodeData, false, true), (privileges)=>getNodePrivilegeRoleSchema(this, treeNodeInfo, itemNodeData, privileges), @@ -339,14 +343,8 @@ define('pgadmin.node.database', [ ()=>getNodeListByName('tablespace', treeNodeInfo, itemNodeData, {}, (m)=>{ return (m.label != 'pg_global'); }), - datcollate: - ()=>getNodeAjaxOptions('get_ctypes', this, treeNodeInfo, itemNodeData, { - cacheLevel: 'server', - }), - datctype: - ()=>getNodeAjaxOptions('get_ctypes', this, treeNodeInfo, itemNodeData, { - cacheLevel: 'server', - }), + datcollate: c_types, + datctype: c_types, }, { datowner: pgBrowser.serverInfo[treeNodeInfo.server._id].user.name, diff --git a/web/pgadmin/browser/server_groups/servers/static/js/server.js b/web/pgadmin/browser/server_groups/servers/static/js/server.js index 0793a52c1..2c6ccebf2 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/server.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/server.js @@ -584,6 +584,20 @@ define('pgadmin.node.server', [ return false; }, + on_done: function(res, t, i) { + if (res.success == 1) { + Notify.success(res.info); + t.itemData(i).wal_pause=res.data.wal_pause; + t.unload(i); + t.setInode(i); + t.deselect(i); + // Fetch updated data from server + setTimeout(function() { + t.select(i); + }, 10); + } + }, + /* Pause WAL Replay */ pause_wal_replay: function(args) { var input = args || {}, @@ -601,17 +615,7 @@ define('pgadmin.node.server', [ dataType: 'json', }) .done(function(res) { - if (res.success == 1) { - Notify.success(res.info); - t.itemData(i).wal_pause=res.data.wal_pause; - t.unload(i); - t.setInode(i); - t.deselect(i); - // Fetch updated data from server - setTimeout(function() { - t.select(i); - }, 10); - } + obj.on_done(res, t, i); }) .fail(function(xhr, status, error) { Notify.pgRespErrorNotify(xhr, error); @@ -636,17 +640,7 @@ define('pgadmin.node.server', [ dataType: 'json', }) .done(function(res) { - if (res.success == 1) { - Notify.success(res.info); - t.itemData(i).wal_pause=res.data.wal_pause; - t.unload(i); - t.setInode(i); - t.deselect(i); - // Fetch updated data from server - setTimeout(function() { - t.select(i); - }, 10); - } + obj.on_done(res, t, i); }) .fail(function(xhr, status, error) { Notify.pgRespErrorNotify(xhr, error); diff --git a/web/pgadmin/browser/static/js/node.js b/web/pgadmin/browser/static/js/node.js index 0292ce335..05e3c669c 100644 --- a/web/pgadmin/browser/static/js/node.js +++ b/web/pgadmin/browser/static/js/node.js @@ -532,6 +532,22 @@ define('pgadmin.browser.node', [ return new_panel; }, + + onEventResizeEnded: function() { + var $container = this.$container.find('.obj_properties').first(), + v = $container.data('obj-view'); + + if (v && v.model && v.model) { + v.model.trigger( + 'pg-browser-resized', { + 'view': v, + 'panel': this, + 'container': $container, + }); + + } + }, + registerUtilityPanel: function() { var w = pgBrowser.docker, p = w.findPanels('utility_props'); @@ -540,20 +556,7 @@ define('pgadmin.browser.node', [ return; var events = {}; - events[wcDocker.EVENT.RESIZE_ENDED] = function() { - var $container = this.$container.find('.obj_properties').first(), - v = $container.data('obj-view'); - - if (v && v.model && v.model) { - v.model.trigger( - 'pg-browser-resized', { - 'view': v, - 'panel': this, - 'container': $container, - }); - - } - }; + events[wcDocker.EVENT.RESIZE_ENDED] = this.onEventResizeEnded; p = new pgBrowser.Panel({ name: 'utility_props', @@ -579,20 +582,7 @@ define('pgadmin.browser.node', [ return; var events = {}; - events[wcDocker.EVENT.RESIZE_ENDED] = function() { - var $container = this.$container.find('.obj_properties').first(), - v = $container.data('obj-view'); - - if (v && v.model && v.model) { - v.model.trigger( - 'pg-browser-resized', { - 'view': v, - 'panel': this, - 'container': $container, - }); - - } - }; + events[wcDocker.EVENT.RESIZE_ENDED] = this.onEventResizeEnded; p = new pgBrowser.Panel({ name: 'node_props', diff --git a/web/pgadmin/browser/static/js/node.ui.js b/web/pgadmin/browser/static/js/node.ui.js index d7f17611c..a12a053c9 100644 --- a/web/pgadmin/browser/static/js/node.ui.js +++ b/web/pgadmin/browser/static/js/node.ui.js @@ -218,6 +218,30 @@ define([ } }; + var filterRows = function(self, filter, rows, node) { + var res = []; + _.each(rows, function(r) { + if (filter(r)) { + var l = (_.isFunction(node['node_label']) ? + (node['node_label']).apply(node, [r, self.model, self]) : + r.label), + image = (_.isFunction(node['node_image']) ? + (node['node_image']).apply( + node, [r, self.model, self] + ) : + (node['node_image'] || ('icon-' + node.type))); + + res.push({ + 'value': r._id, + 'image': image, + 'label': l, + }); + } + }); + + return res; + }; + var NodeListByIdControl = Backform.NodeListByIdControl = NodeAjaxOptionsControl.extend({ controlClassName: 'pgadmin-node-select form-control', defaults: _.extend({}, NodeAjaxOptionsControl.prototype.defaults, { @@ -226,33 +250,12 @@ define([ transform: function(rows) { var self = this, node = self.field.get('schema_node'), - res = [], filter = self.field.get('filter') || function() { return true; }; filter = filter.bind(self); - - _.each(rows, function(r) { - if (filter(r)) { - var l = (_.isFunction(node['node_label']) ? - (node['node_label']).apply(node, [r, self.model, self]) : - r.label), - image = (_.isFunction(node['node_image']) ? - (node['node_image']).apply( - node, [r, self.model, self] - ) : - (node['node_image'] || ('icon-' + node.type))); - - res.push({ - 'value': r._id, - 'image': image, - 'label': l, - }); - } - }); - - return res; + return filterRows(self, filter, rows, node); }, select2: { allowClear: true, @@ -473,42 +476,23 @@ define([ }, }); + var transformFunc = function(rows, control) { + var self = control || this, + node = self.column.get('schema_node'), + filter = self.column.get('filter') || function() { + return true; + }; + + filter = filter.bind(self); + return filterRows(self, filter, rows, node); + }; + Backgrid.Extension.NodeListByIdCell = NodeAjaxOptionsCell.extend({ controlClassName: 'pgadmin-node-select backgrid-cell', defaults: _.extend({}, NodeAjaxOptionsCell.prototype.defaults, { url: 'nodes', filter: undefined, - transform: function(rows, control) { - var self = control || this, - node = self.column.get('schema_node'), - res = [], - filter = self.column.get('filter') || function() { - return true; - }; - - filter = filter.bind(self); - - _.each(rows, function(r) { - if (filter(r)) { - var l = (_.isFunction(node['node_label']) ? - (node['node_label']).apply(node, [r, self.model, self]) : - r.label), - image = (_.isFunction(node['node_image']) ? - (node['node_image']).apply( - node, [r, self.model, self] - ) : - (node['node_image'] || ('icon-' + node.type))); - - res.push({ - 'value': r._id, - 'image': image, - 'label': l, - }); - } - }); - - return res; - }, + transform: transformFunc, select2: { placeholder: gettext('Select an item...'), width: 'style', @@ -523,37 +507,7 @@ define([ defaults: _.extend({}, NodeAjaxOptionsCell.prototype.defaults, { url: 'nodes', filter: undefined, - transform: function(rows, control) { - var self = control || this, - node = self.column.get('schema_node'), - res = [], - filter = self.column.get('filter') || function() { - return true; - }; - - filter = filter.bind(self); - - _.each(rows, function(r) { - if (filter(r)) { - var l = (_.isFunction(node['node_label']) ? - (node['node_label']).apply(node, [r, self.model, self]) : - r.label), - image = (_.isFunction(node['node_image']) ? - (node['node_image']).apply( - node, [r, self.model, self] - ) : - (node['node_image'] || ('icon-' + node.type))); - - res.push({ - 'value': r.label, - 'image': image, - 'label': l, - }); - } - }); - - return res; - }, + transform: transformFunc, select2: { placeholder: gettext('Select an item...'), width: 'style', diff --git a/web/pgadmin/browser/static/js/node_view.jsx b/web/pgadmin/browser/static/js/node_view.jsx index 68803adf6..eb8eeb386 100644 --- a/web/pgadmin/browser/static/js/node_view.jsx +++ b/web/pgadmin/browser/static/js/node_view.jsx @@ -35,6 +35,16 @@ export function getNodeView(nodeType, treeNodeInfo, actionType, itemNodeData, fo let warnOnCloseFlag = true; const confirmOnCloseReset = pgAdmin.Browser.get_preferences_for_module('browser').confirm_on_properties_close; + let onError = (err)=> { + if(err.response){ + console.error('error resp', err.response); + } else if(err.request){ + console.error('error req', err.request); + } else if(err.message){ + console.error('error msg', err.message); + } + }; + /* Called when dialog is opened in edit mode, promise required */ let initData = ()=>new Promise((resolve, reject)=>{ api.get(url(false)) @@ -42,13 +52,7 @@ export function getNodeView(nodeType, treeNodeInfo, actionType, itemNodeData, fo resolve(res.data); }) .catch((err)=>{ - if(err.response){ - console.error('error resp', err.response); - } else if(err.request){ - console.error('error req', err.request); - } else if(err.message){ - console.error('error msg', err.message); - } + onError(err); reject(err); }); }); @@ -80,13 +84,7 @@ export function getNodeView(nodeType, treeNodeInfo, actionType, itemNodeData, fo }).then((res)=>{ resolve(res.data.data); }).catch((err)=>{ - if(err.response){ - console.error('error resp', err.response); - } else if(err.request){ - console.error('error req', err.request); - } else if(err.message){ - console.error('error msg', err.message); - } + onError(err); reject(err); }); }); diff --git a/web/pgadmin/browser/static/js/panel.js b/web/pgadmin/browser/static/js/panel.js index ff1444f3d..fbbc56bd5 100644 --- a/web/pgadmin/browser/static/js/panel.js +++ b/web/pgadmin/browser/static/js/panel.js @@ -133,7 +133,6 @@ define( pgBrowser.Events.on('pgadmin-browser:tree:selected', () => { if(myPanel.isVisible()) { - removePanelView($container[0]); getPanelView( pgBrowser.tree, $container[0], diff --git a/web/pgadmin/dashboard/static/js/dashboard.js b/web/pgadmin/dashboard/static/js/dashboard.js index 3639c9235..258071da4 100644 --- a/web/pgadmin/dashboard/static/js/dashboard.js +++ b/web/pgadmin/dashboard/static/js/dashboard.js @@ -239,19 +239,7 @@ define('pgadmin.dashboard', [ $(div).html(data); }) .fail(function(xhr, error) { - Notify.pgNotifier( - error, xhr, - gettext('An error occurred whilst loading the dashboard.'), - function(msg) { - if(msg === 'CRYPTKEY_SET') { - ajaxHook(); - } else { - $(div).html( - '' - ); - } - } - ); + self.onFail(xhr, error, div, ajaxHook); }); }; $(div).html( @@ -266,6 +254,22 @@ define('pgadmin.dashboard', [ } }, + onFail: function(xhr, error, div, ajaxHook) { + Notify.pgNotifier( + error, xhr, + gettext('An error occurred whilst loading the dashboard.'), + function(msg) { + if(msg === 'CRYPTKEY_SET') { + ajaxHook(); + } else { + $(div).html( + '' + ); + } + } + ); + }, + // Handle Server Disconnect object_disconnected: function() { let item = pgBrowser.tree.selected(), @@ -358,19 +362,7 @@ define('pgadmin.dashboard', [ self.init_dashboard(); }) .fail(function(xhr, error) { - Notify.pgNotifier( - error, xhr, - gettext('An error occurred whilst loading the dashboard.'), - function(msg) { - if(msg === 'CRYPTKEY_SET') { - ajaxHook(); - } else { - $(div).html( - '' - ); - } - } - ); + self.onFail(xhr, error, div, ajaxHook); }); }; $(div).html( @@ -631,6 +623,16 @@ define('pgadmin.dashboard', [ } } }, + + renderTab: function(e, tab_grid_map) { + let prevGrid = tab_grid_map[$(e.relatedTarget).attr('aria-controls')]; + $(prevGrid).data('filtertext', $('#txtGridSearch').val()); + + let currGrid = tab_grid_map[$(e.target).attr('aria-controls')]; + $('#txtGridSearch').val($(currGrid).data('filtertext')); + pgAdmin.Dashboard.render_grid_data(currGrid); + }, + reflectPreferencesServer: function() { var self = this; var $dashboardContainer = $('.dashboard-container'); @@ -895,12 +897,7 @@ define('pgadmin.dashboard', [ // (Re)render the appropriate tab $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) { - let prevGrid = tab_grid_map[$(e.relatedTarget).attr('aria-controls')]; - $(prevGrid).data('filtertext', $('#txtGridSearch').val()); - - let currGrid = tab_grid_map[$(e.target).attr('aria-controls')]; - $('#txtGridSearch').val($(currGrid).data('filtertext')); - pgAdmin.Dashboard.render_grid_data(currGrid); + self.renderTab(e, tab_grid_map); }); $('#btn_refresh').off('click').on('click', () => { @@ -1123,12 +1120,7 @@ define('pgadmin.dashboard', [ // (Re)render the appropriate tab $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) { - let prevGrid = tab_grid_map[$(e.relatedTarget).attr('aria-controls')]; - $(prevGrid).data('filtertext', $('#txtGridSearch').val()); - - let currGrid = tab_grid_map[$(e.target).attr('aria-controls')]; - $('#txtGridSearch').val($(currGrid).data('filtertext')); - pgAdmin.Dashboard.render_grid_data(currGrid); + self.renderTab(e, tab_grid_map); }); $('#btn_refresh').off('click').on('click', () => { diff --git a/web/pgadmin/misc/static/explain/js/explain_statistics.js b/web/pgadmin/misc/static/explain/js/explain_statistics.js index 1d14a6405..c361c107f 100644 --- a/web/pgadmin/misc/static/explain/js/explain_statistics.js +++ b/web/pgadmin/misc/static/explain/js/explain_statistics.js @@ -19,8 +19,20 @@ let StatisticsModel = Backbone.Model.extend({ Summary: {}, }, + explainToolTip: function(key, value, tooltip) { + key = _.escape(key); + value = _.escape(value); + tooltip.append(` + + ${key} + ${value} + + `); + }, + set_statistics: function(toolTipContainer) { - var jit_stats = this.get('JIT'), + var self= this, + jit_stats = this.get('JIT'), triggers_stats = this.get('Triggers'), summary = this.get('Summary'); @@ -40,14 +52,7 @@ let StatisticsModel = Backbone.Model.extend({ if (Object.keys(jit_stats).length > 0){ tooltip.append('' + gettext('JIT:') + ''); _.each(jit_stats, function(value, key) { - key = _.escape(key); - value = _.escape(value); - tooltip.append(` - - ${key} - ${value} - - `); + self.explainToolTip(key, value, tooltip); }); } @@ -93,14 +98,7 @@ let StatisticsModel = Backbone.Model.extend({ if (Object.keys(summary).length > 0){ tooltip.append('' + gettext('Summary:') + ''); _.each(summary, function(value, key) { - key = _.escape(key); - value = _.escape(value); - tooltip.append(` - - ${key} - ${value} - - `); + self.explainToolTip(key, value, tooltip); }); } diff --git a/web/pgadmin/static/js/SchemaView/DataGridView.jsx b/web/pgadmin/static/js/SchemaView/DataGridView.jsx index 9315732aa..31d5e810f 100644 --- a/web/pgadmin/static/js/SchemaView/DataGridView.jsx +++ b/web/pgadmin/static/js/SchemaView/DataGridView.jsx @@ -355,7 +355,7 @@ export default function DataGridView({ disableResizing: false, sortable: true, ...widthParms, - Cell: ({cellValue, row, ...other}) => { + Cell: ({value, row, ...other}) => { /* Make sure to take the latest field info from schema */ field = _.find(schemaRef.current.fields, (f)=>f.id==field.id) || field; @@ -365,7 +365,7 @@ export default function DataGridView({ console.error('cell is required ', field); } - return { + if(option && option.label == '') { + return; + } + res.push({ label: option.label, value: option.value }); + }); + } else { + res = options; + } + return res; + } } diff --git a/web/pgadmin/static/js/utils.js b/web/pgadmin/static/js/utils.js index 3f70e6e36..d4c93749e 100644 --- a/web/pgadmin/static/js/utils.js +++ b/web/pgadmin/static/js/utils.js @@ -426,11 +426,6 @@ export function registerDetachEvent(panel){ style: 'z-index: 1200' }); }); - panel.on(wcDocker.EVENT.ORDER_CHANGED, function() { - $((this.$container)[0].ownerDocument).find('.wcIFrameFloating').attr({ - style: 'z-index: 1200' - }); - }); panel.on(wcDocker.EVENT.ORDER_CHANGED, function() { var docker = this.docker(this._panel); var dockerPos = docker.$container.offset(); @@ -442,5 +437,8 @@ export function registerDetachEvent(panel){ $((this.$container)[0].ownerDocument).find('.wcIFrameFloating').css('left', pos.left - dockerPos.left); $((this.$container)[0].ownerDocument).find('.wcIFrameFloating').css('width', width); $((this.$container)[0].ownerDocument).find('.wcIFrameFloating').find('.wcIFrameFloating').css('height', height); + $((this.$container)[0].ownerDocument).find('.wcIFrameFloating').attr({ + style: 'z-index: 1200' + }); }); } diff --git a/web/pgadmin/tools/backup/static/js/backup.ui.js b/web/pgadmin/tools/backup/static/js/backup.ui.js index d8002216c..6651c9b19 100644 --- a/web/pgadmin/tools/backup/static/js/backup.ui.js +++ b/web/pgadmin/tools/backup/static/js/backup.ui.js @@ -193,6 +193,12 @@ export function getSaveOptSchema(fieldOptions) { return new SaveOptSchema(fieldOptions); } +function isVisible () { + if (!_.isUndefined(this.backupType) && this.backupType === 'server') + return false; + return true; +} + export class QueryOptionSchema extends BaseUISchema { constructor(fieldOptions={}, initValues={}) { super({ @@ -465,11 +471,7 @@ export default class BackupSchema extends BaseUISchema { disabled: function(state) { return (state.format === 'tar'); }, - visible: function() { - if (!_.isUndefined(obj.backupType) && obj.backupType === 'server') - return false; - return true; - }, + visible: isVisible, }, { id: 'encoding', label: gettext('Encoding'), @@ -491,11 +493,7 @@ export default class BackupSchema extends BaseUISchema { disabled: function(state) { return (state.format !== 'directory'); }, - visible: function() { - if (!_.isUndefined(obj.backupType) && obj.backupType === 'server') - return false; - return true; - }, + visible: isVisible, }, { id: 'role', label: gettext('Role name'), @@ -517,11 +515,7 @@ export default class BackupSchema extends BaseUISchema { label: gettext('Sections'), group: gettext('Data/Objects'), schema:new getSectionSchema(), - visible: function() { - if (!_.isUndefined(obj.backupType) && obj.backupType === 'server') - return false; - return true; - }, + visible: isVisible, }, { type: 'nested-fieldset', label: gettext('Type of objects'), diff --git a/web/pgadmin/tools/datagrid/static/js/show_query_tool.js b/web/pgadmin/tools/datagrid/static/js/show_query_tool.js index 42fd5949a..157db3335 100644 --- a/web/pgadmin/tools/datagrid/static/js/show_query_tool.js +++ b/web/pgadmin/tools/datagrid/static/js/show_query_tool.js @@ -119,23 +119,23 @@ export function launchDataGrid(datagrid, transId, gridUrl, queryToolTitle, sURL) } } +function setPanelTitle(panel, value) { + if(value) { + $('#' + panel.$title.index() + ' div:first').addClass('wcPanelTab-dynamic'); + } else { + $('#' + panel.$title.index() + ' div:first').removeClass('wcPanelTab-dynamic'); + } +} + export function _set_dynamic_tab(pgBrowser, value){ var datagrid_panels = pgBrowser.docker.findPanels('frm_datagrid'); datagrid_panels.forEach(panel => { - if(value) { - $('#' + panel.$title.index() + ' div:first').addClass('wcPanelTab-dynamic'); - } else { - $('#' + panel.$title.index() + ' div:first').removeClass('wcPanelTab-dynamic'); - } + setPanelTitle(panel, value); }); var debugger_panels = pgBrowser.docker.findPanels('frm_debugger'); debugger_panels.forEach(panel => { - if(value) { - $('#' + panel.$title.index() + ' div:first').addClass('wcPanelTab-dynamic'); - } else { - $('#' + panel.$title.index() + ' div:first').removeClass('wcPanelTab-dynamic'); - } + setPanelTitle(panel, value); }); } diff --git a/web/pgadmin/tools/debugger/static/js/debugger.js b/web/pgadmin/tools/debugger/static/js/debugger.js index cebda5812..6de7199d1 100644 --- a/web/pgadmin/tools/debugger/static/js/debugger.js +++ b/web/pgadmin/tools/debugger/static/js/debugger.js @@ -300,6 +300,17 @@ define([ }); }, + onFail: function(xhr) { + try { + var err = JSON.parse(xhr.responseText); + if (err.success == 0) { + Notify.alert(gettext('Debugger Error'), err.errormsg); + } + } catch (e) { + console.warn(e.stack || e); + } + }, + check_func_debuggable: function(args, item) { var t = pgBrowser.tree, i = item || t.selected(), @@ -321,17 +332,28 @@ define([ self.start_global_debugger(args, item, res.data.trans_id); }) .fail(function(xhr) { - try { - var err = JSON.parse(xhr.responseText); - if (err.success == 0) { - Notify.alert(gettext('Debugger Error'), err.errormsg); - } - } catch (e) { - console.warn(e.stack || e); - } + self.onFail(xhr); }); }, + panel_rename_event: function(panel_data, panel, treeInfo) { + Alertify.prompt('', panel_data.$titleText[0].textContent, + // We will execute this function when user clicks on the OK button + function(evt, value) { + if(value) { + // Remove the leading and trailing white spaces. + value = value.trim(); + let preferences = pgBrowser.get_preferences_for_module('browser'); + var name = debuggerUtils.getAppropriateLabel(treeInfo); + debuggerUtils.setDebuggerTitle(panel, preferences, name, treeInfo.schema.label, treeInfo.database.label, value, pgBrowser); + } + }, + // We will execute this function when user clicks on the Cancel + // button. Do nothing just close it. + function(evt) { evt.cancel = false; } + ).set({'title': gettext('Rename Panel')}); + }, + //Callback function when user start the indirect debugging ( Listen to another session to invoke the target ) start_global_debugger: function(args, item, trans_id) { // Initialize the target and create asynchronous connection and unique transaction ID @@ -465,21 +487,7 @@ define([ // Panel Rename event panel.on(wcDocker.EVENT.RENAME, function(panel_data) { - Alertify.prompt('', panel_data.$titleText[0].textContent, - // We will execute this function when user clicks on the OK button - function(evt, value) { - if(value) { - // Remove the leading and trailing white spaces. - value = value.trim(); - let preferences = pgBrowser.get_preferences_for_module('browser'); - var name = debuggerUtils.getAppropriateLabel(treeInfo); - debuggerUtils.setDebuggerTitle(panel, preferences, name, treeInfo.schema.label, treeInfo.database.label, value, pgBrowser); - } - }, - // We will execute this function when user clicks on the Cancel - // button. Do nothing just close it. - function(evt) { evt.cancel = false; } - ).set({'title': gettext('Rename Panel')}); + self.panel_rename_event(panel_data, panel, treeInfo); }); } }) @@ -639,21 +647,7 @@ define([ // Panel Rename event panel.on(wcDocker.EVENT.RENAME, function(panel_data) { - Alertify.prompt('', panel_data.$titleText[0].textContent, - // We will execute this function when user clicks on the OK button - function(evt, value) { - if(value) { - // Remove the leading and trailing white spaces. - value = value.trim(); - let preferences = pgBrowser.get_preferences_for_module('browser'); - var name = debuggerUtils.getAppropriateLabel(treeInfo); - debuggerUtils.setDebuggerTitle(panel, preferences, name, treeInfo.schema.label, treeInfo.database.label, value, pgBrowser); - } - }, - // We will execute this function when user clicks on the Cancel - // button. Do nothing just close it. - function(evt) { evt.cancel = false; } - ).set({'title': gettext('Rename Panel')}); + self.panel_rename_event(panel_data, panel, treeInfo); }); } }) @@ -666,14 +660,7 @@ define([ } }) .fail(function(xhr) { - try { - var err = JSON.parse(xhr.responseText); - if (err.success == 0) { - Notify.alert(gettext('Debugger Error'), err.errormsg); - } - } catch (e) { - console.warn(e.stack || e); - } + self.onFail(xhr); }); }, }; diff --git a/web/pgadmin/tools/debugger/static/js/direct.js b/web/pgadmin/tools/debugger/static/js/direct.js index c31c1d321..305d86158 100644 --- a/web/pgadmin/tools/debugger/static/js/direct.js +++ b/web/pgadmin/tools/debugger/static/js/direct.js @@ -536,14 +536,7 @@ define([ // Execution completed so disable the buttons other than // "Continue/Start" button because user can still // start the same execution again. - setTimeout(function() { - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', true); - }, 500); + setTimeout(self.disable_toolbar_buttons(), 500); // Stop further polling pgTools.DirectDebug.is_polling_required = false; @@ -570,14 +563,7 @@ define([ // Execution completed so disable the buttons other than // "Continue/Start" button because user can still // start the same execution again. - setTimeout(function() { - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', true); - }, 500); + setTimeout(self.disable_toolbar_buttons(), 500); // Stop further pooling pgTools.DirectDebug.is_polling_required = false; diff --git a/web/pgadmin/tools/maintenance/static/js/maintenance.ui.js b/web/pgadmin/tools/maintenance/static/js/maintenance.ui.js index f7681dce8..c12c4f8e9 100644 --- a/web/pgadmin/tools/maintenance/static/js/maintenance.ui.js +++ b/web/pgadmin/tools/maintenance/static/js/maintenance.ui.js @@ -23,17 +23,22 @@ export class VacuumSchema extends BaseUISchema { return 'op'; } + isDisabled(state) { + if(state?.op) { + return (state.op != 'VACUUM'); + } else { + return false; + } + } + get baseFields() { + let obj = this; return [{ id: 'vacuum_full', group: gettext('Vacuum'), disabled: function(state) { - if(state?.op) { - return (state.op != 'VACUUM'); - } else { - return false; - } + return obj.isDisabled(state); }, type: 'switch', label: gettext('FULL'), @@ -42,11 +47,7 @@ export class VacuumSchema extends BaseUISchema { id: 'vacuum_freeze', deps: ['op'], disabled: function(state) { - if(state?.op) { - return (state.op != 'VACUUM'); - } else { - return false; - } + return obj.isDisabled(state); }, type: 'switch', label: gettext('FREEZE'), @@ -56,11 +57,7 @@ export class VacuumSchema extends BaseUISchema { deps: ['op'], type: 'switch', disabled: function(state) { - if(state?.op) { - return (state.op != 'VACUUM'); - } else { - return false; - } + return obj.isDisabled(state); }, label: gettext('ANALYZE'), group: gettext('Vacuum'), diff --git a/web/pgadmin/tools/restore/static/js/restore.ui.js b/web/pgadmin/tools/restore/static/js/restore.ui.js index 04f041af9..710816ec8 100644 --- a/web/pgadmin/tools/restore/static/js/restore.ui.js +++ b/web/pgadmin/tools/restore/static/js/restore.ui.js @@ -27,6 +27,14 @@ export class RestoreSectionSchema extends BaseUISchema { return 'id'; } + isDisabled(state) { + return this.selectedNodeType !== 'function' && + this.selectedNodeType !== 'table' && + this.selectedNodeType !== 'trigger' && + this.selectedNodeType !== 'trigger_function' && + (state.only_data || state.only_schema); + } + get baseFields() { let obj = this; return [{ @@ -36,10 +44,7 @@ export class RestoreSectionSchema extends BaseUISchema { group: gettext('Sections'), deps: ['only_data', 'only_schema'], disabled: function(state) { - return obj.selectedNodeType !== 'function' && obj.selectedNodeType !== 'table' && - obj.selectedNodeType !== 'trigger' && - obj.selectedNodeType !== 'trigger_function' && - (state.only_data || state.only_schema); + return obj.isDisabled(state); }, }, { id: 'data', @@ -48,11 +53,7 @@ export class RestoreSectionSchema extends BaseUISchema { group: gettext('Sections'), deps: ['only_data', 'only_schema'], disabled: function(state) { - return obj.selectedNodeType !== 'function' && - obj.selectedNodeType !== 'table' && - obj.selectedNodeType !== 'trigger' && - obj.selectedNodeType !== 'trigger_function' && - (state.only_data || state.only_schema); + return obj.isDisabled(state); }, }, { id: 'post_data', @@ -61,11 +62,7 @@ export class RestoreSectionSchema extends BaseUISchema { group: gettext('Sections'), deps: ['only_data', 'only_schema'], disabled: function(state) { - return obj.selectedNodeType !== 'function' && - obj.selectedNodeType !== 'table' && - obj.selectedNodeType !== 'trigger' && - obj.selectedNodeType !== 'trigger_function' && - (state.only_data || state.only_schema); + return obj.isDisabled(state); }, }]; } diff --git a/web/pgadmin/tools/schema_diff/static/js/schema_diff_ui.js b/web/pgadmin/tools/schema_diff/static/js/schema_diff_ui.js index f93ccf764..0e92a4545 100644 --- a/web/pgadmin/tools/schema_diff/static/js/schema_diff_ui.js +++ b/web/pgadmin/tools/schema_diff/static/js/schema_diff_ui.js @@ -632,6 +632,16 @@ export default class SchemaDiffUI { } } + transformFunc(data) { + let group_template_options = []; + for (let key in data) { + if (data.hasOwnProperty(key)) { + group_template_options.push({'group': key, 'optval': data[key]}); + } + } + return group_template_options; + } + render() { let self = this; let panel = self.docker.findPanels('schema_diff_header_panel')[0]; @@ -645,13 +655,7 @@ export default class SchemaDiffUI { name: 'source_sid', label: false, control: SchemaDiffSelect2Control, transform: function(data) { - let group_template_options = []; - for (let key in data) { - if (data.hasOwnProperty(key)) { - group_template_options.push({'group': key, 'optval': data[key]}); - } - } - return group_template_options; + return self.transformFunc(data); }, url: url_for('schema_diff.servers'), select2: { @@ -729,13 +733,7 @@ export default class SchemaDiffUI { name: 'target_sid', label: false, control: SchemaDiffSelect2Control, transform: function(data) { - let group_template_options = []; - for (let key in data) { - if (data.hasOwnProperty(key)) { - group_template_options.push({'group': key, 'optval': data[key]}); - } - } - return group_template_options; + return self.transformFunc(data); }, group: 'target', url: url_for('schema_diff.servers'), diff --git a/web/pgadmin/tools/user_management/static/js/user_management.js b/web/pgadmin/tools/user_management/static/js/user_management.js index f6de372ad..642544af2 100644 --- a/web/pgadmin/tools/user_management/static/js/user_management.js +++ b/web/pgadmin/tools/user_management/static/js/user_management.js @@ -192,6 +192,13 @@ define([ alertify.PgaLogin(title, url).resizeTo(pgBrowser.stdW.md, pgBrowser.stdH.md); }, + is_editable: function(m) { + if (m instanceof Backbone.Collection) { + return true; + } + return (m.get('id') != userInfo['id']); + }, + // Callback to draw User Management Dialog. show_users: function() { if (!userInfo['is_admin']) return; @@ -310,10 +317,7 @@ define([ return options; }, editable: function(m) { - if (m instanceof Backbone.Collection) { - return true; - } - return (m.get('id') != userInfo['id']); + return self.is_editable(m); }, }, { id: 'active', @@ -323,10 +327,7 @@ define([ cellHeaderClasses: 'width_percent_10', sortable: false, editable: function(m) { - if (m instanceof Backbone.Collection) { - return true; - } - return (m.get('id') != userInfo['id']); + return self.is_editable(m); }, }, { id: 'newPassword', @@ -519,29 +520,13 @@ define([ } } } else { - if (!!this.get('username') && this.collection.nonFilter.where({ + if (!!this.get('username') && (this.collection.nonFilter.where({ 'username': this.get('username'), 'auth_source': LDAP, - }).length > 1) { - errmsg = gettext('The username %s already exists.', - this.get('username') - ); - - this.errorModel.set('username', errmsg); - return errmsg; - } - else if (!!this.get('username') && this.collection.nonFilter.where({ + }).length > 1) || (this.collection.nonFilter.where({ 'username': this.get('username'), 'auth_source': KERBEROS, - }).length > 1) { - errmsg = gettext('The username %s already exists.', - this.get('username') - ); - - this.errorModel.set('username', errmsg); - return errmsg; - } - else if (!!this.get('username') && this.collection.nonFilter.where({ + }).length > 1) || (this.collection.nonFilter.where({ 'username': this.get('username'), 'auth_source': OAUTH2, - }).length > 1) { + }).length > 1)) { errmsg = gettext('The username %s already exists.', this.get('username') );