From 30b4f6678ec98676c49cb5b3891157ece2ccba6b Mon Sep 17 00:00:00 2001
From: Lasha Kakabadze
Date: Wed, 21 Sep 2022 16:01:27 +0400
Subject: [PATCH 1/7] display config error if it exists (#434)
---
ui/packages/shared/pages/Configuration/index.tsx | 8 ++++----
ui/packages/shared/pages/Instance/stores/Main.ts | 10 ++++++----
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/ui/packages/shared/pages/Configuration/index.tsx b/ui/packages/shared/pages/Configuration/index.tsx
index 44ef5563a..49aa7bfba 100644
--- a/ui/packages/shared/pages/Configuration/index.tsx
+++ b/ui/packages/shared/pages/Configuration/index.tsx
@@ -61,7 +61,7 @@ export const Configuration = observer(
getFullConfig,
fullConfig,
testDbSource,
- updateConfigError,
+ configError,
} = stores.main
const configData = config && JSON.parse(JSON.stringify(config))
const [submitMessage, setSubmitMessage] = useState<
@@ -469,10 +469,10 @@ export const Configuration = observer(
- {(submitStatus && submitMessage) || updateConfigError ? (
+ {(submitStatus && submitMessage) || configError ? (
) : null}
diff --git a/ui/packages/shared/pages/Instance/stores/Main.ts b/ui/packages/shared/pages/Instance/stores/Main.ts
index 38235e641..a5e7da7c5 100644
--- a/ui/packages/shared/pages/Instance/stores/Main.ts
+++ b/ui/packages/shared/pages/Instance/stores/Main.ts
@@ -55,7 +55,7 @@ export class MainStore {
config: Config | null = null
fullConfig?: string
instanceError: Error | null = null
- updateConfigError: string | null = null
+ configError: string | null = null
unstableClones = new Set()
private updateInstanceTimeoutId: number | null = null
@@ -167,9 +167,11 @@ export class MainStore {
this.config = response
}
- if (error) await getTextFromUnknownApiError(error)
+ if (error) {
+ this.configError = await error.json().then((err) => err.message)
+ }
- return !!response
+ return response
}
updateConfig = async (values: Config) => {
@@ -178,7 +180,7 @@ export class MainStore {
const { response, error } = await this.api.updateConfig({ ...values })
if (error)
- this.updateConfigError = await error.json().then((err) => err.message)
+ this.configError = await error.json().then((err) => err.message)
return response
}
--
GitLab
From baec8bfa69548b03e1adfd32707d714fa0008998 Mon Sep 17 00:00:00 2001
From: Lasha Kakabadze
Date: Wed, 21 Sep 2022 16:17:24 +0400
Subject: [PATCH 2/7] display dbsource error in the ui (#434)
---
ui/packages/shared/pages/Configuration/index.tsx | 7 ++++---
ui/packages/shared/pages/Instance/stores/Main.ts | 4 +++-
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/ui/packages/shared/pages/Configuration/index.tsx b/ui/packages/shared/pages/Configuration/index.tsx
index 49aa7bfba..e3405498c 100644
--- a/ui/packages/shared/pages/Configuration/index.tsx
+++ b/ui/packages/shared/pages/Configuration/index.tsx
@@ -62,6 +62,7 @@ export const Configuration = observer(
fullConfig,
testDbSource,
configError,
+ dbSourceError,
} = stores.main
const configData = config && JSON.parse(JSON.stringify(config))
const [submitMessage, setSubmitMessage] = useState<
@@ -381,10 +382,10 @@ export const Configuration = observer(
)}
- {connectionStatus && connectionResponse ? (
+ {(connectionStatus && connectionResponse) || dbSourceError ? (
) : null}
diff --git a/ui/packages/shared/pages/Instance/stores/Main.ts b/ui/packages/shared/pages/Instance/stores/Main.ts
index a5e7da7c5..e39eb0a2e 100644
--- a/ui/packages/shared/pages/Instance/stores/Main.ts
+++ b/ui/packages/shared/pages/Instance/stores/Main.ts
@@ -56,6 +56,7 @@ export class MainStore {
fullConfig?: string
instanceError: Error | null = null
configError: string | null = null
+ dbSourceError: string | null = null
unstableClones = new Set()
private updateInstanceTimeoutId: number | null = null
@@ -203,7 +204,8 @@ export class MainStore {
const { response, error } = await this.api.testDbSource(values)
- if (error) await getTextFromUnknownApiError(error)
+ if (error)
+ this.dbSourceError = await error.json().then((err) => err.message)
return response
}
--
GitLab
From 58b30718d5942cb19247d097b296358212c8a874 Mon Sep 17 00:00:00 2001
From: Lasha Kakabadze
Date: Wed, 21 Sep 2022 22:47:40 +0400
Subject: [PATCH 3/7] disable configuration if mode isn't physical, prevent
additional requests (#434)
---
ui/packages/shared/pages/Instance/Tabs/index.tsx | 4 +++-
ui/packages/shared/pages/Instance/index.tsx | 8 +++++---
ui/packages/shared/pages/Instance/stores/Main.ts | 7 +++++--
3 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/ui/packages/shared/pages/Instance/Tabs/index.tsx b/ui/packages/shared/pages/Instance/Tabs/index.tsx
index 973f9762f..50f50890e 100644
--- a/ui/packages/shared/pages/Instance/Tabs/index.tsx
+++ b/ui/packages/shared/pages/Instance/Tabs/index.tsx
@@ -43,12 +43,13 @@ type Props = {
value: number
handleChange: (event: React.ChangeEvent<{}>, newValue: number) => void
hasLogs: boolean
+ isConfigurationVisible: boolean
}
export const Tabs = (props: Props) => {
const classes = useStyles()
- const { value, handleChange, hasLogs } = props
+ const { value, handleChange, hasLogs, isConfigurationVisible } = props
return (
{
/>
{
stores.main.load(instanceId)
}, [instanceId])
- const { instance, instanceError } = stores.main
+ const { instance, instanceError, instanceRetrieval } = stores.main
+ const isConfigurationVisible = instanceRetrieval?.mode !== 'physical'
useEffect(() => {
if (instance && instance?.state.retrieving?.status === "pending") {
@@ -87,7 +88,7 @@ export const Instance = observer((props: Props) => {
const [isLogConnectionEnabled, enableLogConnection] = React.useState(false);
- const switchTab = (event: React.ChangeEvent<{}>, tabID: number) => {
+ const switchTab = (_: React.ChangeEvent<{}>, tabID: number) => {
if (tabID == 1 && api.initWS != undefined && !isLogConnectionEnabled) {
establishConnection(api);
enableLogConnection(true)
@@ -120,6 +121,7 @@ export const Instance = observer((props: Props) => {
value={activeTab}
handleChange={switchTab}
hasLogs={api.initWS != undefined}
+ isConfigurationVisible={isConfigurationVisible}
/>
@@ -155,7 +157,7 @@ export const Instance = observer((props: Props) => {
>
-
+
setActiveTab(id)}
activeTab={activeTab}
diff --git a/ui/packages/shared/pages/Instance/stores/Main.ts b/ui/packages/shared/pages/Instance/stores/Main.ts
index e39eb0a2e..0acdfc140 100644
--- a/ui/packages/shared/pages/Instance/stores/Main.ts
+++ b/ui/packages/shared/pages/Instance/stores/Main.ts
@@ -83,8 +83,11 @@ export class MainStore {
load = (instanceId: string) => {
this.instance = null
this.loadInstance(instanceId)
- this.loadInstanceRetrieval(instanceId)
- this.getConfig()
+ this.loadInstanceRetrieval(instanceId).then(() => {
+ if (this.instanceRetrieval?.mode !== "physical") {
+ this.getConfig()
+ }
+ })
this.snapshots.load(instanceId)
}
--
GitLab
From 1b4aeb22dbe4edfd864eee2e5d26681b62b4cac2 Mon Sep 17 00:00:00 2001
From: Lasha Kakabadze
Date: Thu, 22 Sep 2022 14:16:01 +0400
Subject: [PATCH 4/7] only redirect when configuration is active, remove
disabled prop on tab (#434)
---
ui/packages/shared/pages/Instance/Tabs/index.tsx | 4 +---
ui/packages/shared/pages/Instance/index.tsx | 11 +++++++----
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/ui/packages/shared/pages/Instance/Tabs/index.tsx b/ui/packages/shared/pages/Instance/Tabs/index.tsx
index 50f50890e..973f9762f 100644
--- a/ui/packages/shared/pages/Instance/Tabs/index.tsx
+++ b/ui/packages/shared/pages/Instance/Tabs/index.tsx
@@ -43,13 +43,12 @@ type Props = {
value: number
handleChange: (event: React.ChangeEvent<{}>, newValue: number) => void
hasLogs: boolean
- isConfigurationVisible: boolean
}
export const Tabs = (props: Props) => {
const classes = useStyles()
- const { value, handleChange, hasLogs, isConfigurationVisible } = props
+ const { value, handleChange, hasLogs } = props
return (
{
/>
{
}, [instanceId])
const { instance, instanceError, instanceRetrieval } = stores.main
- const isConfigurationVisible = instanceRetrieval?.mode !== 'physical'
+ const isConfigurationActive = instanceRetrieval?.mode !== 'physical'
useEffect(() => {
- if (instance && instance?.state.retrieving?.status === "pending") {
+ if (
+ instance &&
+ instance?.state.retrieving?.status === 'pending' &&
+ isConfigurationActive
+ ) {
setActiveTab(2)
}
if (instance && !instance?.state?.pools) {
@@ -129,7 +133,6 @@ export const Instance = observer((props: Props) => {
value={activeTab}
handleChange={switchTab}
hasLogs={api.initWS != undefined}
- isConfigurationVisible={isConfigurationVisible}
/>
@@ -171,7 +174,7 @@ export const Instance = observer((props: Props) => {
>
-
+
setActiveTab(id)}
activeTab={activeTab}
--
GitLab
From f520381982918116f5fdd8fdff881cfbb4589781 Mon Sep 17 00:00:00 2001
From: Lasha Kakabadze
Date: Thu, 22 Sep 2022 14:49:49 +0400
Subject: [PATCH 5/7] disable inputs if config is not active, add snackbar with
message (#434)
---
.../Configuration/InputWithTooltip/index.tsx | 10 ++++--
.../shared/pages/Configuration/index.tsx | 35 +++++++++++++++++--
.../pages/Configuration/styles.module.scss | 13 +++++++
3 files changed, 53 insertions(+), 5 deletions(-)
diff --git a/ui/packages/shared/pages/Configuration/InputWithTooltip/index.tsx b/ui/packages/shared/pages/Configuration/InputWithTooltip/index.tsx
index 27920ae38..cf55574b5 100644
--- a/ui/packages/shared/pages/Configuration/InputWithTooltip/index.tsx
+++ b/ui/packages/shared/pages/Configuration/InputWithTooltip/index.tsx
@@ -21,25 +21,28 @@ export const InputWithTooltip = ({
error,
onChange,
tooltipText,
+ disabled,
}: {
value?: string
onChange: (e: React.ChangeEvent) => void
tooltipText: () => React.ReactNode
label: string
error?: string
+ disabled: boolean
}) => {
const classes = useStyles()
return (
{tooltipText()}
}>
@@ -54,6 +57,7 @@ export const InputWithChip = ({
id,
onChange,
tooltipText,
+ disabled,
handleDeleteDatabase,
}: {
value: string
@@ -62,6 +66,7 @@ export const InputWithChip = ({
handleDeleteDatabase: (event: any, database: string) => void
label: string
id: string
+ disabled: boolean
}) => {
const classes = useStyles()
@@ -69,11 +74,12 @@ export const InputWithChip = ({
('')
@@ -166,6 +174,12 @@ export const Configuration = observer(
return (
+
@@ -175,6 +189,7 @@ export const Configuration = observer(
formik.setFieldValue('debug', e.target.checked)
}
@@ -197,6 +212,7 @@ export const Configuration = observer(
value={formik.values.dockerImage}
error={formik.errors.dockerImage}
tooltipText={tooltipText.dockerImage}
+ disabled={!isConfigurationActive}
onChange={(e) =>
formik.setFieldValue('dockerImage', e.target.value)
}
@@ -212,6 +228,7 @@ export const Configuration = observer(
label="configs.shared_buffers"
value={formik.values.sharedBuffers}
tooltipText={tooltipText.sharedBuffers}
+ disabled={!isConfigurationActive}
onChange={(e) =>
formik.setFieldValue('sharedBuffers', e.target.value)
}
@@ -220,6 +237,7 @@ export const Configuration = observer(
label="configs.shared_preload_libraries"
value={formik.values.sharedPreloadLibraries}
tooltipText={tooltipText.sharedPreloadLibraries}
+ disabled={!isConfigurationActive}
onChange={(e) =>
formik.setFieldValue('sharedPreloadLibraries', e.target.value)
}
@@ -239,6 +257,7 @@ export const Configuration = observer(
value={formik.values.host}
error={formik.errors.host}
tooltipText={tooltipText.host}
+ disabled={!isConfigurationActive}
onChange={(e) => formik.setFieldValue('host', e.target.value)}
/>
formik.setFieldValue('port', e.target.value)}
/>
formik.setFieldValue('username', e.target.value)
}
@@ -260,6 +281,7 @@ export const Configuration = observer(
formik.setFieldValue('password', e.target.value)
}
@@ -269,6 +291,7 @@ export const Configuration = observer(
value={formik.values.dbname}
error={formik.errors.dbname}
tooltipText={tooltipText.dbname}
+ disabled={!isConfigurationActive}
onChange={(e) =>
formik.setFieldValue('dbname', e.target.value)
}
@@ -279,6 +302,7 @@ export const Configuration = observer(
id="databases"
tooltipText={tooltipText.databases}
handleDeleteDatabase={handleDeleteDatabase}
+ disabled={!isConfigurationActive}
onChange={(e) =>
formik.setFieldValue('databases', e.target.value)
}
@@ -288,7 +312,9 @@ export const Configuration = observer(
variant="primary"
size="medium"
onClick={onTestConnectionClick}
- isDisabled={isTestConnectionLoading}
+ isDisabled={
+ isTestConnectionLoading || !isConfigurationActive
+ }
>
Test connection
{isTestConnectionLoading && (
@@ -308,12 +334,14 @@ export const Configuration = observer(
label="pg_dump jobs"
value={formik.values.pg_dump}
tooltipText={tooltipText.pg_dump}
+ disabled={!isConfigurationActive}
onChange={(e) => formik.setFieldValue('pg_dump', e.target.value)}
/>
formik.setFieldValue('pg_restore', e.target.value)
}
@@ -341,6 +369,7 @@ export const Configuration = observer(
label="timetable"
value={formik.values.timetable}
tooltipText={tooltipText.timetable}
+ disabled={!isConfigurationActive}
onChange={(e) =>
formik.setFieldValue('timetable', e.target.value)
}
@@ -358,7 +387,7 @@ export const Configuration = observer(
variant="primary"
size="medium"
onClick={formik.submitForm}
- isDisabled={formik.isSubmitting}
+ isDisabled={formik.isSubmitting || !isConfigurationActive}
>
Apply changes
{formik.isSubmitting && (
diff --git a/ui/packages/shared/pages/Configuration/styles.module.scss b/ui/packages/shared/pages/Configuration/styles.module.scss
index 3eb1ae21d..a9d756ded 100644
--- a/ui/packages/shared/pages/Configuration/styles.module.scss
+++ b/ui/packages/shared/pages/Configuration/styles.module.scss
@@ -11,6 +11,11 @@
label {
font-size: 10px;
}
+
+ :disabled {
+ cursor: not-allowed;
+ color: rgba(0, 0, 0, 0.38)
+ }
}
.databasesContainer {
@@ -89,3 +94,11 @@
.firaCodeFont {
font-family: 'Fira Code', monospace !important;
}
+
+.snackbar {
+ div {
+ background-color: #ff6212;
+ color: #fff;
+ border-radius: 4px;
+ }
+}
\ No newline at end of file
--
GitLab
From 1526a0d8ff44c6484ddc3241bf8dfa68035bdc0c Mon Sep 17 00:00:00 2001
From: Lasha Kakabadze
Date: Thu, 22 Sep 2022 15:03:21 +0400
Subject: [PATCH 6/7] move snackbar position (#434)
---
ui/packages/shared/pages/Configuration/index.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/packages/shared/pages/Configuration/index.tsx b/ui/packages/shared/pages/Configuration/index.tsx
index 2971050d1..fd0f9d581 100644
--- a/ui/packages/shared/pages/Configuration/index.tsx
+++ b/ui/packages/shared/pages/Configuration/index.tsx
@@ -175,7 +175,7 @@ export const Configuration = observer(
return (
Date: Thu, 22 Sep 2022 11:24:32 +0000
Subject: [PATCH 7/7] Apply 1 suggestion(s) to 1 file(s)
---
ui/packages/shared/pages/Configuration/index.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/packages/shared/pages/Configuration/index.tsx b/ui/packages/shared/pages/Configuration/index.tsx
index fd0f9d581..2428f23d7 100644
--- a/ui/packages/shared/pages/Configuration/index.tsx
+++ b/ui/packages/shared/pages/Configuration/index.tsx
@@ -177,7 +177,7 @@ export const Configuration = observer(
--
GitLab