@@ -28,6 +28,7 @@ import * as showQueryTool from '../../../../tools/sqleditor/static/js/show_query
2828import { getTitle , generateTitle } from '../../../../tools/sqleditor/static/js/sqleditor_title' ;
2929import usePreferences from '../../../../preferences/static/js/store' ;
3030import { BROWSER_PANELS } from '../../../../browser/static/js/constants' ;
31+ import { isEmptyString } from '../../../../static/js/validators' ;
3132
3233class AdHocConnectionSchema extends BaseUISchema {
3334 constructor ( connectExistingServer , initValues = { } ) {
@@ -183,11 +184,11 @@ class AdHocConnectionSchema extends BaseUISchema {
183184 deps : [ 'sid' , 'connected' ] ,
184185 disabled : ( state ) => state . sid ,
185186 } , {
186- id : 'host' , label : gettext ( 'Host name/address' ) , type : 'text' , noEmpty : true ,
187+ id : 'host' , label : gettext ( 'Host name/address' ) , type : 'text' ,
187188 deps : [ 'sid' , 'connected' ] ,
188189 disabled : ( state ) => state . sid ,
189190 } , {
190- id : 'port' , label : gettext ( 'Port' ) , type : 'int' , min : 1 , max : 65535 , noEmpty : true ,
191+ id : 'port' , label : gettext ( 'Port' ) , type : 'int' , min : 1 , max : 65535 ,
191192 deps : [ 'sid' , 'connected' ] ,
192193 disabled : ( state ) => state . sid ,
193194 } , {
@@ -215,7 +216,7 @@ class AdHocConnectionSchema extends BaseUISchema {
215216 }
216217 } , {
217218 id : 'user' , label : gettext ( 'User' ) , deps : [ 'sid' , 'connected' ] ,
218- noEmpty : true , controlProps : { creatable : true } ,
219+ controlProps : { creatable : true } ,
219220 type : ( state ) => {
220221 if ( state ?. sid ) {
221222 return {
@@ -261,8 +262,54 @@ class AdHocConnectionSchema extends BaseUISchema {
261262 }
262263 ] ;
263264 }
264- }
265265
266+ validate ( state , setError ) {
267+ let errmsg = null ;
268+
269+ if ( isEmptyString ( state . service ) ) {
270+ errmsg = gettext ( 'Either Host name or Service must be specified.' ) ;
271+ if ( isEmptyString ( state . host ) ) {
272+ setError ( 'host' , errmsg ) ;
273+ return true ;
274+ } else {
275+ setError ( 'host' , null ) ;
276+ }
277+
278+ /* Hostname, IP address validate */
279+ if ( state . host ) {
280+ // Check for leading and trailing spaces.
281+ if ( / ( ^ \s ) | ( \s $ ) / . test ( state . host ) ) {
282+ errmsg = gettext ( 'Host name must be valid hostname or IPv4 or IPv6 address.' ) ;
283+ setError ( 'host' , errmsg ) ;
284+ return true ;
285+ } else {
286+ setError ( 'host' , null ) ;
287+ }
288+ }
289+
290+ if ( isEmptyString ( state . username ) ) {
291+ errmsg = gettext ( 'Username must be specified.' ) ;
292+ setError ( 'username' , errmsg ) ;
293+ return true ;
294+ } else {
295+ setError ( 'username' , null ) ;
296+ }
297+
298+ if ( isEmptyString ( state . port ) ) {
299+ errmsg = gettext ( 'Port must be specified.' ) ;
300+ setError ( 'port' , errmsg ) ;
301+ return true ;
302+ } else {
303+ setError ( 'port' , null ) ;
304+ }
305+ } else {
306+ _ . each ( [ 'host' , 'db' , 'username' , 'port' ] , ( item ) => {
307+ setError ( item , null ) ;
308+ } ) ;
309+ }
310+ return false ;
311+ }
312+ }
266313
267314export default function AdHocConnection ( { mode} ) {
268315 const [ connecting , setConnecting ] = useState ( false ) ;
@@ -313,6 +360,7 @@ export default function AdHocConnection({mode}) {
313360 const openQueryTool = ( respData , formData ) => {
314361 const transId = commonUtils . getRandomInt ( 1 , 9999999 ) ;
315362 let db_name = _ . isNil ( formData . database_name ) ? formData . did : formData . database_name ;
363+ let user_name = formData . role || formData . user || respData . data . user . name ;
316364
317365 let parentData = {
318366 server_group : { _id : 1 } ,
@@ -328,7 +376,7 @@ export default function AdHocConnection({mode}) {
328376 } ;
329377
330378 const gridUrl = showQueryTool . generateUrl ( transId , parentData , null ) ;
331- const title = getTitle ( pgAdmin , preferencesStore . getPreferencesForModule ( 'browser' ) , null , false , formData . server_name , db_name , formData . role || formData . user ) ;
379+ const title = getTitle ( pgAdmin , preferencesStore . getPreferencesForModule ( 'browser' ) , null , false , formData . server_name , db_name , user_name ) ;
332380 showQueryTool . launchQueryTool ( pgWindow . pgAdmin . Tools . SQLEditor , transId , gridUrl , title , {
333381 user : formData . user ,
334382 role : formData . role ,
@@ -338,12 +386,13 @@ export default function AdHocConnection({mode}) {
338386 const openPSQLTool = ( respData , formData ) => {
339387 const transId = commonUtils . getRandomInt ( 1 , 9999999 ) ;
340388 let db_name = _ . isNil ( formData . database_name ) ? formData . did : formData . database_name ;
389+ let user_name = formData . role || formData . user || respData . data . user . name ;
341390
342391 let panelTitle = '' ;
343392 // Set psql tab title as per prefrences setting.
344393 let title_data = {
345394 'database' : db_name ? _ . unescape ( db_name ) : 'postgres' ,
346- 'username' : formData . user ,
395+ 'username' : user_name ,
347396 'server' : formData . server_name ,
348397 'type' : 'psql_tool' ,
349398 } ;
0 commit comments