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 031c79c3f..52f1323e6 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 @@ -86,7 +86,7 @@ export default class ColumnSchema extends BaseUISchema { // if we are in edit mode return !this.isNew(state); } - return false; + return true; } editableCheckForTable(state) { @@ -152,7 +152,7 @@ export default class ColumnSchema extends BaseUISchema { return [{ id: 'name', label: gettext('Name'), cell: 'text', - type: 'text', disabled: obj.inSchemaWithColumnCheck, + type: 'text', readonly: obj.inSchemaWithColumnCheck, editable: this.editableCheckForTable, noEmpty: true, minWidth: 115, },{ @@ -226,7 +226,7 @@ export default class ColumnSchema extends BaseUISchema { type: 'text', disabled: this.inCatalog, mode: ['properties'], },{ id: 'cltype', label: gettext('Data type'), - disabled: obj.inSchemaWithColumnCheck, minWidth: 150, + readonly: obj.inSchemaWithColumnCheck, minWidth: 150, group: gettext('Definition'), noEmpty: true, editable: this.editableCheckForTable, options: this.cltypeOptions, optionsLoaded: (options)=>{obj.datatypes = options;}, @@ -345,12 +345,12 @@ export default class ColumnSchema extends BaseUISchema { } },{ id: 'attstattarget', label: gettext('Statistics'), cell: 'text', - type: 'text', disabled: obj.inSchemaWithColumnCheck, mode: ['properties', 'edit'], + type: 'text', readonly: obj.inSchemaWithColumnCheck, mode: ['properties', 'edit'], group: gettext('Definition'), },{ id: 'attstorage', label: gettext('Storage'), group: gettext('Definition'), type: 'select', mode: ['properties', 'edit'], - cell: 'select', disabled: obj.inSchemaWithColumnCheck, + cell: 'select', readonly: obj.inSchemaWithColumnCheck, controlProps: { placeholder: gettext('Select storage'), allowClear: false, }, @@ -363,11 +363,9 @@ export default class ColumnSchema extends BaseUISchema { },{ id: 'defval', label: gettext('Default'), cell: 'text', type: 'text', group: gettext('Constraints'), deps: ['cltype', 'colconstype'], + readonly: obj.inSchemaWithColumnCheck, disabled: function(state) { - var isDisabled = false; - if(!obj.inSchemaWithModelCheck(state)) { - isDisabled = ['serial', 'bigserial', 'smallserial'].indexOf(state.cltype) > -1; - } + var isDisabled = ['serial', 'bigserial', 'smallserial'].indexOf(state.cltype) > -1; isDisabled = isDisabled || state.colconstype != 'n'; return isDisabled; }, depChange: (state)=>{ @@ -381,7 +379,7 @@ export default class ColumnSchema extends BaseUISchema { } }, editable: function(state) { // inheritedfrom has value then we should disable it - if (!isEmptyString(state.inheritedfrom)) { + if (!isEmptyString(state.inheritedfrom) || !this.editableCheckForTable(state)) { return false; } return true; 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 d9525106a..d9c3f1fdf 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 @@ -61,7 +61,7 @@ export function getNodeTableSchema(treeNodeInfo, itemNodeData, pgBrowser) { ()=>getNodeAjaxOptions('get_op_class', pgBrowser.Nodes['table'], treeNodeInfo, itemNodeData), { relowner: pgBrowser.serverInfo[treeNodeInfo.server._id].user.name, - schema: treeNodeInfo.schema._label, + schema: treeNodeInfo.schema?._label, } ); } @@ -69,6 +69,7 @@ export function getNodeTableSchema(treeNodeInfo, itemNodeData, pgBrowser) { export class ConstraintsSchema extends BaseUISchema { constructor(nodeInfo, getFkObj, getExConsObj, otherOptions) { super(); + this.nodeInfo = nodeInfo; this.primaryKeyObj = new PrimaryKeySchema({ spcname: otherOptions.spcname, }, nodeInfo); @@ -99,6 +100,7 @@ export class ConstraintsSchema extends BaseUISchema { group: gettext('Primary Key'), mode: ['edit', 'create'], canEdit: true, canDelete: true, deps:['is_partitioned', 'typname'], columns : ['name', 'columns'], + disabled: this.inCatalog, canAdd: function(state) { if (state.is_partitioned && obj.top.getServerVersion() < 110000) { return false; @@ -135,6 +137,7 @@ export class ConstraintsSchema extends BaseUISchema { return true; }, columns : ['name', 'columns','references_table_name'], + disabled: this.inCatalog, canAddRow: obj.anyColumnAdded, depChange: (state)=>{ if (state.is_partitioned && obj.top.getServerVersion() < 110000 || state.columns?.length <= 0) { @@ -149,6 +152,7 @@ export class ConstraintsSchema extends BaseUISchema { canEdit: true, canDelete: true, deps:['is_partitioned'], canAdd: true, columns : ['name', 'consrc'], + disabled: this.inCatalog, },{ id: 'unique_constraint', label: '', schema: this.uniqueConsObj, @@ -156,6 +160,7 @@ export class ConstraintsSchema extends BaseUISchema { group: gettext('Unique'), mode: ['edit', 'create'], canEdit: true, canDelete: true, deps:['is_partitioned', 'typname'], columns : ['name', 'columns'], + disabled: this.inCatalog, canAdd: function(state) { if (state.is_partitioned && obj.top.getServerVersion() < 110000) { return false; @@ -175,6 +180,7 @@ export class ConstraintsSchema extends BaseUISchema { group: gettext('Exclude'), mode: ['edit', 'create'], canEdit: true, canDelete: true, deps:['is_partitioned'], columns : ['name', 'columns', 'constraint'], + disabled: this.inCatalog, canAdd: function(state) { if (state.is_partitioned && obj.top.getServerVersion() < 110000) { return false; @@ -350,8 +356,9 @@ export default class TableSchema extends BaseUISchema { if (!isEmptyString(state.typname)) { return false; } + return true; } - return true; + return false; } // Check for column grid when to edit/delete (for each row) @@ -559,13 +566,7 @@ export default class TableSchema extends BaseUISchema { group: gettext('Columns'), schema: this.columnsSchema, mode: ['create', 'edit'], - disabled: function() { - if(this.nodeInfo && 'catalog' in this.nodeInfo) - { - return true; - } - return false; - }, + disabled: this.inCatalog, deps: ['typname', 'is_partitioned'], depChange: (state, source, topState, actionObj)=>{ if(source[0] === 'columns') { diff --git a/web/pgadmin/static/js/SchemaView/FormView.jsx b/web/pgadmin/static/js/SchemaView/FormView.jsx index f872703ca..b9799f82f 100644 --- a/web/pgadmin/static/js/SchemaView/FormView.jsx +++ b/web/pgadmin/static/js/SchemaView/FormView.jsx @@ -125,8 +125,11 @@ export function getFieldMetaData(field, schema, value, viewHelperProps, onlyMode let {canAdd, canEdit, canDelete, canAddRow } = field; retData.canAdd = _.isUndefined(canAdd) ? retData.canAdd : evalFunc(schema, canAdd, value); + retData.canAdd = !disabled && retData.canAdd; retData.canEdit = _.isUndefined(canEdit) ? retData.canEdit : evalFunc(schema, canEdit, value); + retData.canEdit = !disabled && retData.canEdit; retData.canDelete = _.isUndefined(canDelete) ? retData.canDelete : evalFunc(schema, canDelete, value); + retData.canDelete = !disabled && retData.canDelete; retData.canAddRow = _.isUndefined(canAddRow) ? retData.canAddRow : evalFunc(schema, canAddRow, value); return retData; } diff --git a/web/regression/javascript/schema_ui_files/column.ui.spec.js b/web/regression/javascript/schema_ui_files/column.ui.spec.js index bde3aff27..a6528ab16 100644 --- a/web/regression/javascript/schema_ui_files/column.ui.spec.js +++ b/web/regression/javascript/schema_ui_files/column.ui.spec.js @@ -202,13 +202,13 @@ describe('ColumnSchema', ()=>{ expect(schemaObj.inSchemaWithColumnCheck(state)).toBe(true); schemaObj.nodeInfo = {}; - expect(schemaObj.inSchemaWithColumnCheck(state)).toBe(false); + expect(schemaObj.inSchemaWithColumnCheck(state)).toBe(true); }); it('editableCheckForTable', ()=>{ let state = {}; schemaObj.nodeInfo = {}; - expect(schemaObj.editableCheckForTable(state)).toBe(true); + expect(schemaObj.editableCheckForTable(state)).toBe(false); }); it('depChange', ()=>{