[feat][Remote objects] Edit a connection (for pg) (#5210)

## Context
#4774 

## How was it tested
Locally

## In further PRs
- Update connection status upon page change
- Adapt Info banner to dark mode
- placeholders for form
This commit is contained in:
Marie
2024-04-30 17:46:30 +02:00
committed by GitHub
parent 3bf9045990
commit 1b2ed80c1c
39 changed files with 727 additions and 195 deletions

View File

@ -0,0 +1,75 @@
import { identity, isEmpty, pickBy } from 'lodash';
import { z } from 'zod';
import { settingsIntegrationPostgreSQLConnectionFormSchema } from '@/settings/integrations/database-connection/components/SettingsIntegrationDatabaseConnectionForm';
import { RemoteServer } from '~/generated-metadata/graphql';
export const getEditionSchemaForForm = (databaseKey: string) => {
switch (databaseKey) {
case 'postgresql':
return settingsIntegrationPostgreSQLConnectionFormSchema.extend({
password: z.string().optional(),
});
default:
throw new Error(`No schema found for database key: ${databaseKey}`);
}
};
export const getFormDefaultValuesFromConnection = ({
databaseKey,
connection,
}: {
databaseKey: string;
connection: RemoteServer;
}) => {
switch (databaseKey) {
case 'postgresql':
return {
dbname: connection.foreignDataWrapperOptions.dbname,
host: connection.foreignDataWrapperOptions.host,
port: connection.foreignDataWrapperOptions.port,
username: connection.userMappingOptions?.username || undefined,
schema: connection.schema || undefined,
password: '',
};
default:
throw new Error(
`No default form values for database key: ${databaseKey}`,
);
}
};
export const formatValuesForUpdate = ({
databaseKey,
formValues,
}: {
databaseKey: string;
formValues: any;
}) => {
switch (databaseKey) {
case 'postgresql': {
const formattedValues = {
userMappingOptions: pickBy(
{
username: formValues.username,
password: formValues.password,
},
identity,
),
foreignDataWrapperOptions: pickBy(
{
dbname: formValues.dbname,
host: formValues.host,
port: formValues.port,
},
identity,
),
schema: formValues.schema,
};
return pickBy(formattedValues, (obj) => !isEmpty(obj));
}
default:
throw new Error(`Cannot format values for database key: ${databaseKey}`);
}
};