55 *--------------------------------------------------------------------------
66 */
77
8- import { Box , Checkbox , FormControlLabel , Typography } from '@material-ui/core'
8+ import {
9+ Box ,
10+ Checkbox ,
11+ FormControlLabel ,
12+ Typography ,
13+ Snackbar ,
14+ } from '@material-ui/core'
915import { useState , useEffect } from 'react'
1016import { withStyles , makeStyles } from '@material-ui/core/styles'
1117import { Modal } from '@postgres.ai/shared/components/Modal'
@@ -56,10 +62,13 @@ export const Configuration = observer(
5662 getFullConfig,
5763 fullConfig,
5864 testDbSource,
59- updateConfigError,
65+ configError,
66+ dbSourceError,
6067 getFullConfigError,
68+ instanceRetrieval,
6169 } = stores . main
6270 const configData = config && JSON . parse ( JSON . stringify ( config ) )
71+ const isConfigurationActive = instanceRetrieval ?. mode !== 'physical'
6372 const [ submitMessage , setSubmitMessage ] = useState <
6473 string | React . ReactNode | null
6574 > ( '' )
@@ -165,6 +174,12 @@ export const Configuration = observer(
165174
166175 return (
167176 < div className = { styles . root } >
177+ < Snackbar
178+ anchorOrigin = { { vertical : "bottom" , horizontal : 'right' } }
179+ open = { ! isConfigurationActive && ! isOpen }
180+ message = { 'Configuration editing is only available in logical mode' }
181+ className = { styles . snackbar }
182+ />
168183 < Box >
169184 < Header retrievalMode = "logical" setOpen = { handleModalClick } />
170185 < Box >
@@ -174,6 +189,7 @@ export const Configuration = observer(
174189 < Checkbox
175190 name = "debug"
176191 checked = { formik . values . debug }
192+ disabled = { ! isConfigurationActive }
177193 onChange = { ( e ) =>
178194 formik . setFieldValue ( 'debug' , e . target . checked )
179195 }
@@ -196,6 +212,7 @@ export const Configuration = observer(
196212 value = { formik . values . dockerImage }
197213 error = { formik . errors . dockerImage }
198214 tooltipText = { tooltipText . dockerImage }
215+ disabled = { ! isConfigurationActive }
199216 onChange = { ( e ) =>
200217 formik . setFieldValue ( 'dockerImage' , e . target . value )
201218 }
@@ -211,6 +228,7 @@ export const Configuration = observer(
211228 label = "configs.shared_buffers"
212229 value = { formik . values . sharedBuffers }
213230 tooltipText = { tooltipText . sharedBuffers }
231+ disabled = { ! isConfigurationActive }
214232 onChange = { ( e ) =>
215233 formik . setFieldValue ( 'sharedBuffers' , e . target . value )
216234 }
@@ -219,6 +237,7 @@ export const Configuration = observer(
219237 label = "configs.shared_preload_libraries"
220238 value = { formik . values . sharedPreloadLibraries }
221239 tooltipText = { tooltipText . sharedPreloadLibraries }
240+ disabled = { ! isConfigurationActive }
222241 onChange = { ( e ) =>
223242 formik . setFieldValue ( 'sharedPreloadLibraries' , e . target . value )
224243 }
@@ -238,27 +257,31 @@ export const Configuration = observer(
238257 value = { formik . values . host }
239258 error = { formik . errors . host }
240259 tooltipText = { tooltipText . host }
260+ disabled = { ! isConfigurationActive }
241261 onChange = { ( e ) => formik . setFieldValue ( 'host' , e . target . value ) }
242262 />
243263 < InputWithTooltip
244264 label = "source.connection.port"
245265 value = { formik . values . port }
246266 error = { formik . errors . port }
247267 tooltipText = { tooltipText . port }
268+ disabled = { ! isConfigurationActive }
248269 onChange = { ( e ) => formik . setFieldValue ( 'port' , e . target . value ) }
249270 />
250271 < InputWithTooltip
251272 label = "source.connection.username"
252273 value = { formik . values . username }
253274 error = { formik . errors . username }
254275 tooltipText = { tooltipText . username }
276+ disabled = { ! isConfigurationActive }
255277 onChange = { ( e ) =>
256278 formik . setFieldValue ( 'username' , e . target . value )
257279 }
258280 />
259281 < InputWithTooltip
260282 label = "source.connection.password"
261283 tooltipText = { tooltipText . password }
284+ disabled = { ! isConfigurationActive }
262285 onChange = { ( e ) =>
263286 formik . setFieldValue ( 'password' , e . target . value )
264287 }
@@ -268,6 +291,7 @@ export const Configuration = observer(
268291 value = { formik . values . dbname }
269292 error = { formik . errors . dbname }
270293 tooltipText = { tooltipText . dbname }
294+ disabled = { ! isConfigurationActive }
271295 onChange = { ( e ) =>
272296 formik . setFieldValue ( 'dbname' , e . target . value )
273297 }
@@ -278,6 +302,7 @@ export const Configuration = observer(
278302 id = "databases"
279303 tooltipText = { tooltipText . databases }
280304 handleDeleteDatabase = { handleDeleteDatabase }
305+ disabled = { ! isConfigurationActive }
281306 onChange = { ( e ) =>
282307 formik . setFieldValue ( 'databases' , e . target . value )
283308 }
@@ -287,18 +312,20 @@ export const Configuration = observer(
287312 variant = "primary"
288313 size = "medium"
289314 onClick = { onTestConnectionClick }
290- isDisabled = { isTestConnectionLoading }
315+ isDisabled = {
316+ isTestConnectionLoading || ! isConfigurationActive
317+ }
291318 >
292319 Test connection
293320 { isTestConnectionLoading && (
294321 < Spinner size = "sm" className = { styles . spinner } />
295322 ) }
296323 </ Button >
297324 </ Box >
298- { connectionStatus && connectionResponse ? (
325+ { ( connectionStatus && connectionResponse ) || dbSourceError ? (
299326 < ResponseMessage
300- type = { connectionStatus }
301- message = { connectionResponse }
327+ type = { dbSourceError ? 'error' : connectionStatus }
328+ message = { dbSourceError || connectionResponse }
302329 />
303330 ) : null }
304331 </ Box >
@@ -307,12 +334,14 @@ export const Configuration = observer(
307334 label = "pg_dump jobs"
308335 value = { formik . values . pg_dump }
309336 tooltipText = { tooltipText . pg_dump }
337+ disabled = { ! isConfigurationActive }
310338 onChange = { ( e ) => formik . setFieldValue ( 'pg_dump' , e . target . value ) }
311339 />
312340 < InputWithTooltip
313341 label = "pg_restore jobs"
314342 value = { formik . values . pg_restore }
315343 tooltipText = { tooltipText . pg_restore }
344+ disabled = { ! isConfigurationActive }
316345 onChange = { ( e ) =>
317346 formik . setFieldValue ( 'pg_restore' , e . target . value )
318347 }
@@ -340,6 +369,7 @@ export const Configuration = observer(
340369 label = "timetable"
341370 value = { formik . values . timetable }
342371 tooltipText = { tooltipText . timetable }
372+ disabled = { ! isConfigurationActive }
343373 onChange = { ( e ) =>
344374 formik . setFieldValue ( 'timetable' , e . target . value )
345375 }
@@ -357,7 +387,7 @@ export const Configuration = observer(
357387 variant = "primary"
358388 size = "medium"
359389 onClick = { formik . submitForm }
360- isDisabled = { formik . isSubmitting }
390+ isDisabled = { formik . isSubmitting || ! isConfigurationActive }
361391 >
362392 Apply changes
363393 { formik . isSubmitting && (
@@ -374,10 +404,10 @@ export const Configuration = observer(
374404 </ Button >
375405 </ Box >
376406 </ Box >
377- { ( submitStatus && submitMessage ) || updateConfigError ? (
407+ { ( submitStatus && submitMessage ) || configError ? (
378408 < ResponseMessage
379- type = { updateConfigError ? 'error' : submitStatus }
380- message = { updateConfigError || submitMessage }
409+ type = { configError ? 'error' : submitStatus }
410+ message = { configError || submitMessage }
381411 />
382412 ) : null }
383413 </ Box >
0 commit comments