@@ -45,7 +45,7 @@ const databaseTypeDropdownItems: IDropdownItem<Record<string, string>>[] = [
45
45
id : "MongoDB" ,
46
46
label : "MongoDB" ,
47
47
icon : Icons . Logos . MongoDB ,
48
- extra : { "Port" : "27017" , "URL Params [starts with ?] " : "?" } ,
48
+ extra : { "Port" : "27017" , "URL Params" : "?" } ,
49
49
} ,
50
50
{
51
51
id : "Redis" ,
@@ -159,6 +159,21 @@ export const LoginPage: FC = () => {
159
159
}
160
160
} , [ searchParams ] ) ;
161
161
162
+ const handleHoseNameChange = useCallback ( ( newHostName : string ) => {
163
+ if ( databaseType . id !== DatabaseType . MongoDb || ! newHostName . startsWith ( "mongodb+srv://" ) ) {
164
+ return setHostName ( newHostName ) ;
165
+ }
166
+ const url = new URL ( newHostName ) ;
167
+ setHostName ( url . hostname ) ;
168
+ setUsername ( url . username ) ;
169
+ setPassword ( url . password ) ;
170
+ setDatabase ( url . pathname . substring ( 1 ) ) ;
171
+ setAdvancedForm ( { "Port" : url . port , "URL Params" : `?${ url . searchParams . toString ( ) } ` } ) ;
172
+ if ( url . port != null || url . searchParams . size !== 0 ) {
173
+ setShowAdvanced ( true ) ;
174
+ }
175
+ } , [ databaseType . id ] ) ;
176
+
162
177
const fields = useMemo ( ( ) => {
163
178
if ( databaseType . id === DatabaseType . Sqlite3 ) {
164
179
return < >
@@ -174,19 +189,19 @@ export const LoginPage: FC = () => {
174
189
</ >
175
190
}
176
191
return < >
177
- < InputWithlabel label = "Host Name" value = { hostName } setValue = { setHostName } />
192
+ < InputWithlabel label = { databaseType . id === DatabaseType . MongoDb ? "Host Name (or paste Connection URL)" : "Host Name" } value = { hostName } setValue = { handleHoseNameChange } />
178
193
{ databaseType . id !== DatabaseType . Redis && < InputWithlabel label = "Username" value = { username } setValue = { setUsername } /> }
179
194
< InputWithlabel label = "Password" value = { password } setValue = { setPassword } type = "password" />
180
195
{ ( databaseType . id !== DatabaseType . MongoDb && databaseType . id !== DatabaseType . Redis && databaseType . id !== DatabaseType . ElasticSearch ) && < InputWithlabel label = "Database" value = { database } setValue = { setDatabase } /> }
181
196
</ >
182
- } , [ database , databaseType . id , databasesLoading , foundDatabases ?. Database , hostName , password , username ] ) ;
197
+ } , [ database , databaseType . id , databasesLoading , foundDatabases ?. Database , handleHoseNameChange , hostName , password , username ] ) ;
183
198
184
199
if ( loading ) {
185
200
return (
186
201
< Page className = "justify-center items-center" >
187
202
< div className = { twMerge ( BASE_CARD_CLASS , "w-[350px] h-fit flex-col gap-4 justify-center py-16" ) } >
188
203
< Loading hideText = { true } />
189
- < div className = "text-gray-600 text-center" >
204
+ < div className = "text-neutral-800 text-center dark:text-neutral-300 " >
190
205
Logging in
191
206
</ div >
192
207
</ div >
0 commit comments