diff --git a/frontend/src/lib/components/ApiConnectForm.svelte b/frontend/src/lib/components/ApiConnectForm.svelte index efb53f54ae..0807777b66 100644 --- a/frontend/src/lib/components/ApiConnectForm.svelte +++ b/frontend/src/lib/components/ApiConnectForm.svelte @@ -7,6 +7,8 @@ import Toggle from './Toggle.svelte' import TestConnection from './TestConnection.svelte' import SupabaseIcon from './icons/SupabaseIcon.svelte' + import Popup from './common/popup/Popup.svelte' + import Button from './common/button/Button.svelte' export let resource_type: string export let args: Record | any = {} @@ -67,6 +69,38 @@ } $: resource_type == 'postgresql' && isSupabaseAvailable() + + let connectionString = '' + let validConnectionString = true + function parseConnectionString(close: (_: any) => void) { + // parse postgres connection string + const regex = + /postgres:\/\/(?[^:@]+)(?::(?[^@]+))?@(?[^:\/?]+)(?::(?\d+))?\/(?[^\?]+)?(?:\?.*sslmode=(?[^&]+))?/ + const match = connectionString.match(regex) + if (match) { + validConnectionString = true + const { user, password, host, port, dbname, sslmode } = match.groups! + rawCode = JSON.stringify( + { + ...args, + user, + password: password || args?.password, + host, + port: port || args?.port, + dbname: dbname || args?.dbname, + sslmode: sslmode || args?.sslmode + }, + null, + 2 + ) + rawCodeEditor?.setCode(rawCode) + close(null) + } else { + validConnectionString = false + } + } + + let rawCodeEditor: SimpleEditor | undefined = undefined {#if !notFound} @@ -78,6 +112,52 @@ }} /> + {#if resource_type == 'postgresql'} + + + + +
+
+
+ + +
+ {#if !validConnectionString} +

Could not parse connection string

+ {/if} +
+
+
+ {/if} {#if resource_type == 'postgresql' && supabaseWizard} {error}{:else}
{/if} - + {:else} {/if}