@@ -14,12 +14,12 @@ import {
14
14
Typography ,
15
15
Snackbar ,
16
16
makeStyles ,
17
+ Button ,
17
18
} from '@material-ui/core'
18
19
import Box from '@mui/material/Box'
19
20
20
21
import { Modal } from '@postgres.ai/shared/components/Modal'
21
22
import { StubSpinner } from '@postgres.ai/shared/components/StubSpinner'
22
- import { Button } from '@postgres.ai/shared/components/Button'
23
23
import { ExternalIcon } from '@postgres.ai/shared/icons/External'
24
24
import { Spinner } from '@postgres.ai/shared/components/Spinner'
25
25
import { useStores } from '@postgres.ai/shared/pages/Instance/context'
@@ -130,11 +130,26 @@ export const Configuration = observer(
130
130
const [ { formik, connectionData, isConnectionDataValid } ] =
131
131
useForm ( onSubmit )
132
132
133
+ const scrollToField = ( ) => {
134
+ const errorElement = document . querySelector ( '.Mui-error' )
135
+ if ( errorElement ) {
136
+ errorElement . scrollIntoView ( { behavior : 'smooth' , block : 'center' } )
137
+ const inputElement = errorElement . querySelector ( 'input' )
138
+ if ( inputElement ) {
139
+ setTimeout ( ( ) => {
140
+ inputElement . focus ( )
141
+ } , 1000 )
142
+ }
143
+ }
144
+ }
145
+
133
146
const onTestConnectionClick = async ( ) => {
134
147
setConnectionRes ( null )
135
148
Object . keys ( connectionData ) . map ( function ( key : string ) {
136
149
if ( key !== 'password' && key !== 'db_list' ) {
137
- formik . validateField ( key )
150
+ formik . validateField ( key ) . then ( ( ) => {
151
+ scrollToField ( )
152
+ } )
138
153
}
139
154
} )
140
155
if ( isConnectionDataValid ) {
@@ -305,19 +320,19 @@ export const Configuration = observer(
305
320
label = { 'Debug mode' }
306
321
/>
307
322
</ Box >
308
- < Box mb = { 2 } >
323
+ < Box mb = { 2 } mt = { 1 } >
309
324
< ConfigSectionTitle tag = "databaseContainer" />
310
325
< span
311
326
className = { classes . grayText }
312
- style = { { marginTop : '0.5rem' , display : 'block' } }
327
+ style = { { margin : '0.5rem 0 1rem 0 ' , display : 'block' } }
313
328
>
314
329
DLE manages various database containers, such as clones. This
315
330
section defines default container settings.
316
331
</ span >
317
332
{ dleEdition !== 'community' ? (
318
333
< div >
319
334
< SelectWithTooltip
320
- label = "dockerImage - choose from the list"
335
+ label = "dockerImage - choose from the list * "
321
336
value = { formik . values . dockerImageType }
322
337
error = { Boolean ( formik . errors . dockerImageType ) }
323
338
tooltipText = { tooltipText . dockerImageType }
@@ -332,7 +347,7 @@ export const Configuration = observer(
332
347
/>
333
348
{ formik . values . dockerImageType === 'custom' ? (
334
349
< InputWithTooltip
335
- label = "dockerImage"
350
+ label = "dockerImage * "
336
351
value = { formik . values . dockerImage }
337
352
error = { formik . errors . dockerImage }
338
353
tooltipText = { tooltipText . dockerImage }
@@ -343,7 +358,7 @@ export const Configuration = observer(
343
358
/>
344
359
) : (
345
360
< SelectWithTooltip
346
- label = "dockerImage - Postgres major version"
361
+ label = "dockerImage - Postgres major version * "
347
362
value = { formik . values . dockerImage }
348
363
error = { Boolean ( formik . errors . dockerImage ) }
349
364
tooltipText = { tooltipText . dockerImage }
@@ -425,7 +440,7 @@ export const Configuration = observer(
425
440
Source database credentials and dumping options.
426
441
</ span >
427
442
< InputWithTooltip
428
- label = "source.connection.host"
443
+ label = "source.connection.host * "
429
444
value = { formik . values . host }
430
445
error = { formik . errors . host }
431
446
tooltipText = { tooltipText . host }
@@ -435,7 +450,7 @@ export const Configuration = observer(
435
450
}
436
451
/>
437
452
< InputWithTooltip
438
- label = "source.connection.port"
453
+ label = "source.connection.port * "
439
454
value = { formik . values . port }
440
455
error = { formik . errors . port }
441
456
tooltipText = { tooltipText . port }
@@ -445,7 +460,7 @@ export const Configuration = observer(
445
460
}
446
461
/>
447
462
< InputWithTooltip
448
- label = "source.connection.username"
463
+ label = "source.connection.username * "
449
464
value = { formik . values . username }
450
465
error = { formik . errors . username }
451
466
tooltipText = { tooltipText . username }
@@ -463,7 +478,7 @@ export const Configuration = observer(
463
478
}
464
479
/>
465
480
< InputWithTooltip
466
- label = "source.connection.dbname"
481
+ label = "source.connection.dbname * "
467
482
value = { formik . values . dbname }
468
483
error = { formik . errors . dbname }
469
484
tooltipText = { tooltipText . dbname }
@@ -472,6 +487,17 @@ export const Configuration = observer(
472
487
formik . setFieldValue ( 'dbname' , e . target . value )
473
488
}
474
489
/>
490
+ < InputWithChip
491
+ id = "databases"
492
+ value = { formik . values . databases }
493
+ label = "Databases"
494
+ tooltipText = { tooltipText . databases }
495
+ handleDeleteChip = { handleDeleteChip }
496
+ disabled = { isConfigurationDisabled }
497
+ onChange = { ( e ) =>
498
+ formik . setFieldValue ( 'databases' , e . target . value )
499
+ }
500
+ />
475
501
< Box mt = { 2 } >
476
502
< InputWithChip
477
503
value = { formik . values . databases }
@@ -485,14 +511,12 @@ export const Configuration = observer(
485
511
}
486
512
/>
487
513
</ Box >
488
- < Box mt = { 2 } mb = { 3 } >
514
+ < Box mt = { 3 } mb = { 3 } >
489
515
< Button
490
- variant = "primary "
491
- size = "medium "
516
+ variant = "contained "
517
+ color = "secondary "
492
518
onClick = { onTestConnectionClick }
493
- isDisabled = {
494
- isConnectionLoading || isConfigurationDisabled
495
- }
519
+ disabled = { isConnectionLoading || isConfigurationDisabled }
496
520
>
497
521
Test connection
498
522
{ isConnectionLoading && (
@@ -644,10 +668,14 @@ export const Configuration = observer(
644
668
} }
645
669
>
646
670
< Button
647
- variant = "primary"
648
- size = "medium"
649
- onClick = { formik . submitForm }
650
- isDisabled = { formik . isSubmitting || isConfigurationDisabled }
671
+ variant = "contained"
672
+ color = "secondary"
673
+ onClick = { ( ) => {
674
+ formik . submitForm ( ) . then ( ( ) => {
675
+ scrollToField ( )
676
+ } )
677
+ } }
678
+ disabled = { formik . isSubmitting || isConfigurationDisabled }
651
679
>
652
680
Apply changes
653
681
{ formik . isSubmitting && (
@@ -656,8 +684,8 @@ export const Configuration = observer(
656
684
</ Button >
657
685
< Box sx = { { px : 2 } } >
658
686
< Button
659
- variant = "secondary "
660
- size = "medium "
687
+ variant = "outlined "
688
+ color = "secondary "
661
689
onClick = { ( ) => switchActiveTab ( null , 0 ) }
662
690
>
663
691
Cancel
0 commit comments