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 c18378069..27fc834a1 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 @@ -161,7 +161,7 @@ export default class ColumnSchema extends BaseUISchema { id: 'is_primary_key', label: gettext('Primary key?'), cell: 'switch', type: 'switch', minWidth: 100, deps:['name'], visible: ()=>{ - return _.isUndefined( + return !_.isUndefined( this.nodeInfo['table'] || this.nodeInfo['view'] || this.nodeInfo['mview'] ); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.js index 858e2baf6..a21d03f55 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.js @@ -55,7 +55,7 @@ define('pgadmin.node.table', [ sqlCreateHelp: 'sql-createtable.html', dialogHelp: url_for('help.static', {'filename': 'table_dialog.html'}), hasScriptTypes: ['create', 'select', 'insert', 'update', 'delete'], - width: '650px', + width: pgBrowser.stdW.lg + 'px', Init: function() { /* Avoid multiple registration of menus */ if (this.initialized) 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 71491bca8..30a3870f5 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 @@ -568,7 +568,7 @@ export default class TableSchema extends BaseUISchema { canEditRow: this.canEditDeleteRowColumns, canDeleteRow: this.canEditDeleteRowColumns, uniqueCol : ['name'], - columns : ['name' , 'cltype', 'attlen', 'attprecision', 'attnotnull', 'is_primary_key'], + columns : ['name' , 'cltype', 'attlen', 'attprecision', 'attnotnull', 'is_primary_key', 'defval'], allowMultipleEmptyRow: false, },{ // Here we will create tab control for constraints diff --git a/web/pgadmin/static/js/SchemaView/FormView.jsx b/web/pgadmin/static/js/SchemaView/FormView.jsx index 52d780e0f..dbcd67643 100644 --- a/web/pgadmin/static/js/SchemaView/FormView.jsx +++ b/web/pgadmin/static/js/SchemaView/FormView.jsx @@ -38,11 +38,15 @@ const useStyles = makeStyles((theme)=>({ }, nestedControl: { height: 'unset', + }, + sqlTabInput: { + border: 0, } })); /* Optional SQL tab */ function SQLTab({active, getSQLValue}) { + const classes = useStyles(); const [sql, setSql] = useState('Loading...'); useEffect(()=>{ let unmounted = false; @@ -63,6 +67,7 @@ function SQLTab({active, getSQLValue}) { readOnly: true, }} readonly={true} + className={classes.sqlTabInput} />; } diff --git a/web/pgadmin/static/js/SchemaView/index.jsx b/web/pgadmin/static/js/SchemaView/index.jsx index 10a262e94..1947c310f 100644 --- a/web/pgadmin/static/js/SchemaView/index.jsx +++ b/web/pgadmin/static/js/SchemaView/index.jsx @@ -743,12 +743,17 @@ function SchemaPropertiesView({ const [loaderText, setLoaderText] = useState(''); useEffect(()=>{ + let unmounted = false; setLoaderText('Loading...'); getInitData().then((data)=>{ data = data || {}; - setOrigData(data || {}); - setLoaderText(''); + if(!unmounted) { + setOrigData(data || {}); + setLoaderText(''); + } }); + + return ()=>unmounted=true; }, [getInitData]); let fullTabs = []; diff --git a/web/pgadmin/static/js/components/FormComponents.jsx b/web/pgadmin/static/js/components/FormComponents.jsx index f7d146a49..0795f8721 100644 --- a/web/pgadmin/static/js/components/FormComponents.jsx +++ b/web/pgadmin/static/js/components/FormComponents.jsx @@ -61,6 +61,7 @@ const useStyles = makeStyles((theme) => ({ sql: { border: '1px solid ' + theme.otherVars.inputBorderColor, borderRadius: theme.shape.borderRadius, + height: '100%', }, optionIcon: { ...theme.mixins.nodeIcon, @@ -138,7 +139,7 @@ FormInput.propTypes = { testcid: PropTypes.any, }; -export function InputSQL({value, options, onChange, readonly, ...props}) { +export function InputSQL({value, options, onChange, readonly, className, ...props}) { const classes = useStyles(); const editor = useRef(); @@ -157,7 +158,7 @@ export function InputSQL({value, options, onChange, readonly, ...props}) { mode: 'text/x-pgsql', ...options, }} - className={classes.sql} + className={clsx(classes.sql, className)} events={{ change: (cm)=>{ onChange && onChange(cm.getValue()); @@ -706,7 +707,9 @@ export function InputSelect({ /* Apply filter if any */ const filteredOptions = (controlProps.filter && controlProps.filter(finalOptions)) || finalOptions; let realValue = getRealValue(filteredOptions, value, controlProps.creatable, controlProps.formatter); - realValue = _.isNull(realValue) ? '' : realValue; + if(realValue && _.isPlainObject(realValue) && _.isUndefined(realValue.value)) { + console.error('Undefined option value not allowed', realValue, filteredOptions); + } const otherProps = { isSearchable: !readonly, isClearable: !readonly && (!_.isUndefined(controlProps.allowClear) ? controlProps.allowClear : true), diff --git a/web/pgadmin/tools/search_objects/static/js/search_objects_dialog_wrapper.js b/web/pgadmin/tools/search_objects/static/js/search_objects_dialog_wrapper.js index ff9f763be..2bec153d2 100644 --- a/web/pgadmin/tools/search_objects/static/js/search_objects_dialog_wrapper.js +++ b/web/pgadmin/tools/search_objects/static/js/search_objects_dialog_wrapper.js @@ -137,11 +137,13 @@ export default class SearchObjectsDialogWrapper extends DialogWrapper { } setTypes(data, enabled=true) { - this.jquery(this.typesSelect).empty().select2({ - data: data, - }); + if(this.typesSelect) { + this.jquery(this.typesSelect).empty().select2({ + data: data, + }); - this.typesSelect.disabled = !enabled; + this.typesSelect.disabled = !enabled; + } } setResultCount(count) { diff --git a/web/regression/javascript/schema_ui_files/foreign_table.ui.spec.js b/web/regression/javascript/schema_ui_files/foreign_table.ui.spec.js index f6dffd2bb..4442df317 100644 --- a/web/regression/javascript/schema_ui_files/foreign_table.ui.spec.js +++ b/web/regression/javascript/schema_ui_files/foreign_table.ui.spec.js @@ -241,7 +241,7 @@ describe('ForeignTableColumnSchema', ()=>{ server: {user: {name:'postgres', id:0}, server_type: 'pg', version: 90400}, table: {} }, - [{is_collatable: false, label: '"char"', length: true, max_val: 0, min_val: 0, precision: true, typval: ' '}], + [{is_collatable: false, label: '"char"', value: '"char"', length: true, max_val: 0, min_val: 0, precision: true, typval: ' '}], ()=>[], ); let getInitData = ()=>Promise.resolve({}); diff --git a/web/regression/javascript/schema_ui_files/language.ui.spec.js b/web/regression/javascript/schema_ui_files/language.ui.spec.js index 026ea7f72..aeb6c315a 100644 --- a/web/regression/javascript/schema_ui_files/language.ui.spec.js +++ b/web/regression/javascript/schema_ui_files/language.ui.spec.js @@ -117,7 +117,7 @@ describe('LanguageSchema', ()=>{ let setError = jasmine.createSpy('setError'); state.lanproc = ''; - state.isTemplate = true; + schemaObj.isTemplate = true; schemaObj.validate(state, setError); expect(setError).toHaveBeenCalledWith('lanproc', 'Handler function cannot be empty.'); diff --git a/web/regression/javascript/schema_ui_files/membership.ui.spec.js b/web/regression/javascript/schema_ui_files/membership.ui.spec.js index e420c0961..92e754c60 100644 --- a/web/regression/javascript/schema_ui_files/membership.ui.spec.js +++ b/web/regression/javascript/schema_ui_files/membership.ui.spec.js @@ -14,8 +14,25 @@ import { createMount } from '@material-ui/core/test-utils'; import pgAdmin from 'sources/pgadmin'; import {messages} from '../fake_messages'; import SchemaView from '../../../pgadmin/static/js/SchemaView'; -import MembershipSchema, {getMembershipSchema} from '../../../pgadmin/browser/server_groups/servers/static/js/membership.ui'; +import MembershipSchema from '../../../pgadmin/browser/server_groups/servers/static/js/membership.ui'; import * as nodeAjax from '../../../pgadmin/browser/static/js/node_ajax'; +import BaseUISchema from '../../../pgadmin/static/js/SchemaView/base_schema.ui'; + +class SchemaInColl extends BaseUISchema { + constructor(schemaObj) { + super(); + this.schemaObj = schemaObj; + } + + get baseFields() { + return [{ + id: 'collection', label: '', type: 'collection', + schema: this.schemaObj, + editable: false, + canAdd: true, canEdit: false, canDelete: true, hasRole: true, + }]; + } +} describe('MembershipSchema', ()=>{ let mount; @@ -96,10 +113,9 @@ describe('MembershipSchema', ()=>{ it('MembershipMemberSchema', ()=>{ spyOn(nodeAjax, 'getNodeListByName').and.returnValue([]); - let memberObj = new getMembershipSchema({}, {server: {user: {name: 'postgres'}}}, {}); let ctrl = mount(