Skip to content

Commit 3696f88

Browse files
committed
fix integration config forms to consistently handle incoming config
1 parent c70e5c9 commit 3696f88

File tree

6 files changed

+96
-66
lines changed

6 files changed

+96
-66
lines changed

src/webviews/webview-side/integrations/AlloyDBForm.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ export interface IAlloyDBFormProps {
1010
onCancel: () => void;
1111
}
1212

13-
function createEmptyAlloyDBConfig(
14-
integrationId: string,
15-
defaultName?: string
16-
): Extract<DatabaseIntegrationConfig, { type: 'alloydb' }> {
13+
function createEmptyAlloyDBConfig(params: {
14+
id: string;
15+
name?: string;
16+
}): Extract<DatabaseIntegrationConfig, { type: 'alloydb' }> {
1717
const unnamedIntegration = getLocString('integrationsUnnamedIntegration', 'Unnamed Integration ({0})');
1818

1919
return {
20-
id: integrationId,
21-
name: (defaultName || format(unnamedIntegration, integrationId)).trim(),
20+
id: params.id,
21+
name: (params.name || format(unnamedIntegration, params.id)).trim(),
2222
type: 'alloydb',
2323
metadata: {
2424
host: '',
@@ -37,14 +37,18 @@ export const AlloyDBForm: React.FC<IAlloyDBFormProps> = ({
3737
onCancel
3838
}) => {
3939
const [pendingConfig, setPendingConfig] = React.useState<Extract<DatabaseIntegrationConfig, { type: 'alloydb' }>>(
40-
() => existingConfig || createEmptyAlloyDBConfig(integrationId, defaultName)
40+
existingConfig
41+
? structuredClone(existingConfig)
42+
: createEmptyAlloyDBConfig({ id: integrationId, name: defaultName })
4143
);
4244

4345
React.useEffect(() => {
44-
if (existingConfig) {
45-
setPendingConfig(existingConfig);
46-
}
47-
}, [existingConfig]);
46+
setPendingConfig(
47+
existingConfig
48+
? structuredClone(existingConfig)
49+
: createEmptyAlloyDBConfig({ id: integrationId, name: defaultName })
50+
);
51+
}, [existingConfig, integrationId, defaultName]);
4852

4953
const handleSubmit = (e: React.FormEvent) => {
5054
e.preventDefault();

src/webviews/webview-side/integrations/ClickHouseForm.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ export interface IClickHouseFormProps {
1010
onCancel: () => void;
1111
}
1212

13-
function createEmptyClickHouseConfig(
14-
integrationId: string,
15-
defaultName?: string
16-
): Extract<DatabaseIntegrationConfig, { type: 'clickhouse' }> {
13+
function createEmptyClickHouseConfig(params: {
14+
id: string;
15+
name?: string;
16+
}): Extract<DatabaseIntegrationConfig, { type: 'clickhouse' }> {
1717
const unnamedIntegration = getLocString('integrationsUnnamedIntegration', 'Unnamed Integration ({0})');
1818

1919
return {
20-
id: integrationId,
21-
name: (defaultName || format(unnamedIntegration, integrationId)).trim(),
20+
id: params.id,
21+
name: (params.name || format(unnamedIntegration, params.id)).trim(),
2222
type: 'clickhouse',
2323
metadata: {
2424
host: '',
@@ -37,13 +37,19 @@ export const ClickHouseForm: React.FC<IClickHouseFormProps> = ({
3737
}) => {
3838
const [pendingConfig, setPendingConfig] = React.useState<
3939
Extract<DatabaseIntegrationConfig, { type: 'clickhouse' }>
40-
>(() => existingConfig || createEmptyClickHouseConfig(integrationId, defaultName));
40+
>(
41+
existingConfig
42+
? structuredClone(existingConfig)
43+
: createEmptyClickHouseConfig({ id: integrationId, name: defaultName })
44+
);
4145

4246
React.useEffect(() => {
43-
if (existingConfig) {
44-
setPendingConfig(existingConfig);
45-
}
46-
}, [existingConfig]);
47+
setPendingConfig(
48+
existingConfig
49+
? structuredClone(existingConfig)
50+
: createEmptyClickHouseConfig({ id: integrationId, name: defaultName })
51+
);
52+
}, [existingConfig, integrationId, defaultName]);
4753

4854
const handleSubmit = (e: React.FormEvent) => {
4955
e.preventDefault();

src/webviews/webview-side/integrations/MaterializeForm.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ export interface IMaterializeFormProps {
1010
onCancel: () => void;
1111
}
1212

13-
function createEmptyMaterializeConfig(
14-
integrationId: string,
15-
defaultName?: string
16-
): Extract<DatabaseIntegrationConfig, { type: 'materialize' }> {
13+
function createEmptyMaterializeConfig(params: {
14+
id: string;
15+
name?: string;
16+
}): Extract<DatabaseIntegrationConfig, { type: 'materialize' }> {
1717
const unnamedIntegration = getLocString('integrationsUnnamedIntegration', 'Unnamed Integration ({0})');
1818

1919
return {
20-
id: integrationId,
21-
name: (defaultName || format(unnamedIntegration, integrationId)).trim(),
20+
id: params.id,
21+
name: (params.name || format(unnamedIntegration, params.id)).trim(),
2222
type: 'materialize',
2323
metadata: {
2424
host: '',
@@ -39,13 +39,19 @@ export const MaterializeForm: React.FC<IMaterializeFormProps> = ({
3939
}) => {
4040
const [pendingConfig, setPendingConfig] = React.useState<
4141
Extract<DatabaseIntegrationConfig, { type: 'materialize' }>
42-
>(() => existingConfig || createEmptyMaterializeConfig(integrationId, defaultName));
42+
>(
43+
existingConfig
44+
? structuredClone(existingConfig)
45+
: createEmptyMaterializeConfig({ id: integrationId, name: defaultName })
46+
);
4347

4448
React.useEffect(() => {
45-
if (existingConfig) {
46-
setPendingConfig(existingConfig);
47-
}
48-
}, [existingConfig]);
49+
setPendingConfig(
50+
existingConfig
51+
? structuredClone(existingConfig)
52+
: createEmptyMaterializeConfig({ id: integrationId, name: defaultName })
53+
);
54+
}, [existingConfig, integrationId, defaultName]);
4955

5056
const handleSubmit = (e: React.FormEvent) => {
5157
e.preventDefault();

src/webviews/webview-side/integrations/MindsDBForm.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ export interface IMindsDBFormProps {
1010
onCancel: () => void;
1111
}
1212

13-
function createEmptyMindsDBConfig(
14-
integrationId: string,
15-
defaultName?: string
16-
): Extract<DatabaseIntegrationConfig, { type: 'mindsdb' }> {
13+
function createEmptyMindsDBConfig(params: {
14+
id: string;
15+
name?: string;
16+
}): Extract<DatabaseIntegrationConfig, { type: 'mindsdb' }> {
1717
const unnamedIntegration = getLocString('integrationsUnnamedIntegration', 'Unnamed Integration ({0})');
1818

1919
return {
20-
id: integrationId,
21-
name: (defaultName || format(unnamedIntegration, integrationId)).trim(),
20+
id: params.id,
21+
name: (params.name || format(unnamedIntegration, params.id)).trim(),
2222
type: 'mindsdb',
2323
metadata: {
2424
host: '',
@@ -37,14 +37,18 @@ export const MindsDBForm: React.FC<IMindsDBFormProps> = ({
3737
onCancel
3838
}) => {
3939
const [pendingConfig, setPendingConfig] = React.useState<Extract<DatabaseIntegrationConfig, { type: 'mindsdb' }>>(
40-
() => existingConfig || createEmptyMindsDBConfig(integrationId, defaultName)
40+
existingConfig
41+
? structuredClone(existingConfig)
42+
: createEmptyMindsDBConfig({ id: integrationId, name: defaultName })
4143
);
4244

4345
React.useEffect(() => {
44-
if (existingConfig) {
45-
setPendingConfig(existingConfig);
46-
}
47-
}, [existingConfig]);
46+
setPendingConfig(
47+
existingConfig
48+
? structuredClone(existingConfig)
49+
: createEmptyMindsDBConfig({ id: integrationId, name: defaultName })
50+
);
51+
}, [existingConfig, integrationId, defaultName]);
4852

4953
const handleSubmit = (e: React.FormEvent) => {
5054
e.preventDefault();

src/webviews/webview-side/integrations/SQLServerForm.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ export interface ISQLServerFormProps {
1010
onCancel: () => void;
1111
}
1212

13-
function createEmptySQLServerConfig(
14-
integrationId: string,
15-
defaultName?: string
16-
): Extract<DatabaseIntegrationConfig, { type: 'sql-server' }> {
13+
function createEmptySQLServerConfig(params: {
14+
id: string;
15+
name?: string;
16+
}): Extract<DatabaseIntegrationConfig, { type: 'sql-server' }> {
1717
const unnamedIntegration = getLocString('integrationsUnnamedIntegration', 'Unnamed Integration ({0})');
1818

1919
return {
20-
id: integrationId,
21-
name: (defaultName || format(unnamedIntegration, integrationId)).trim(),
20+
id: params.id,
21+
name: (params.name || format(unnamedIntegration, params.id)).trim(),
2222
type: 'sql-server',
2323
metadata: {
2424
host: '',
@@ -39,13 +39,19 @@ export const SQLServerForm: React.FC<ISQLServerFormProps> = ({
3939
}) => {
4040
const [pendingConfig, setPendingConfig] = React.useState<
4141
Extract<DatabaseIntegrationConfig, { type: 'sql-server' }>
42-
>(() => existingConfig || createEmptySQLServerConfig(integrationId, defaultName));
42+
>(
43+
existingConfig
44+
? structuredClone(existingConfig)
45+
: createEmptySQLServerConfig({ id: integrationId, name: defaultName })
46+
);
4347

4448
React.useEffect(() => {
45-
if (existingConfig) {
46-
setPendingConfig(existingConfig);
47-
}
48-
}, [existingConfig]);
49+
setPendingConfig(
50+
existingConfig
51+
? structuredClone(existingConfig)
52+
: createEmptySQLServerConfig({ id: integrationId, name: defaultName })
53+
);
54+
}, [existingConfig, integrationId, defaultName]);
4955

5056
const handleSubmit = (e: React.FormEvent) => {
5157
e.preventDefault();

src/webviews/webview-side/integrations/TrinoForm.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ export interface ITrinoFormProps {
1010
onCancel: () => void;
1111
}
1212

13-
function createEmptyTrinoConfig(
14-
integrationId: string,
15-
defaultName?: string
16-
): Extract<DatabaseIntegrationConfig, { type: 'trino' }> {
13+
function createEmptyTrinoConfig(params: {
14+
id: string;
15+
name?: string;
16+
}): Extract<DatabaseIntegrationConfig, { type: 'trino' }> {
1717
const unnamedIntegration = getLocString('integrationsUnnamedIntegration', 'Unnamed Integration ({0})');
1818

1919
return {
20-
id: integrationId,
21-
name: (defaultName || format(unnamedIntegration, integrationId)).trim(),
20+
id: params.id,
21+
name: (params.name || format(unnamedIntegration, params.id)).trim(),
2222
type: 'trino',
2323
metadata: {
2424
host: '',
@@ -38,14 +38,18 @@ export const TrinoForm: React.FC<ITrinoFormProps> = ({
3838
onCancel
3939
}) => {
4040
const [pendingConfig, setPendingConfig] = React.useState<Extract<DatabaseIntegrationConfig, { type: 'trino' }>>(
41-
() => existingConfig || createEmptyTrinoConfig(integrationId, defaultName)
41+
existingConfig
42+
? structuredClone(existingConfig)
43+
: createEmptyTrinoConfig({ id: integrationId, name: defaultName })
4244
);
4345

4446
React.useEffect(() => {
45-
if (existingConfig) {
46-
setPendingConfig(existingConfig);
47-
}
48-
}, [existingConfig]);
47+
setPendingConfig(
48+
existingConfig
49+
? structuredClone(existingConfig)
50+
: createEmptyTrinoConfig({ id: integrationId, name: defaultName })
51+
);
52+
}, [existingConfig, integrationId, defaultName]);
4953

5054
const handleSubmit = (e: React.FormEvent) => {
5155
e.preventDefault();

0 commit comments

Comments
 (0)