diff --git a/README.md b/README.md index cce2fd8ea8..037b73d0dc 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,15 @@ You can see a live demo of CloudBeaver here: https://demo.cloudbeaver.io ## Changelog +### 24.2.3. 2024-10-21 +- Important update: + - Connections Templates feature is declared as obsolete and will be removed in future releases. +- General: + - Data editor enhancements: Rows with focused cells are specially marked to make it easier to locate a position in large tables; + - DB2i driver has been updated to version 20.0.7; + - The URL mode for PostgreSQL now supports connecting to multiple databases; + - The issue with displaying BLOB data types in DuckDB has been resolved. + ### 24.2.2. 2024-10-07 - Schemas were added to the SQL autocompletion for PostgreSQL, H2, and SQL Server; - CloudBeaver can now correctly display negative dates for MySQL database; diff --git a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls index e89cd4bbfa..bcd3ffb4df 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls @@ -514,18 +514,21 @@ input ConnectionConfig { # Host, port, serverName, databaseName are also stored in mainPropertyValues for custom pages mainPropertyValues: Object @since(version: "24.1.2") - # Connection url jdbc:{driver}://{host}[:{port}]/[{database}] + # Return connection URL jdbc:{driver}://{host}[:{port}]/[{database}] url: String - # Properties + + # Return properties list properties: Object - # Keep-Alive interval + # Return keep-alive interval keepAliveInterval: Int + + # Return auto-commit connection state autocommit: Boolean - # Template connection + # Return template connection state template: Boolean - # Read-onyl connection + # Return read-only connection state readOnly: Boolean # User credentials @@ -536,12 +539,10 @@ input ConnectionConfig { selectedSecretId: ID @since(version: "23.3.5") credentials: Object - # Map of provider properties (name/value) - + # Return map of provider properties (name/value) providerProperties: Object - # Network handlers. Map of id->property map (name/value). - + # Return network handlers configuration. Map of id->property map (name/value). networkHandlersConfig: [NetworkHandlerConfigInput!] #### deprecated fields @@ -565,15 +566,16 @@ input ConnectionConfig { #################################################### extend type Query { - # Returns server config + # Return server config serverConfig: ServerConfig! + # Return product settings productSettings: ProductSettings! @since(version: "24.0.1") - # Returns session state ( initialize if not ) + # Return session state ( initialize if not ) sessionState: SessionInfo! - # Session permissions + # Return session permissions sessionPermissions: [ID]! # Get driver info @@ -581,9 +583,10 @@ extend type Query { authModels: [DatabaseAuthModel!]! networkHandlers: [NetworkHandlerDescriptor!]! - # List of user connections. + # Return list of user connections userConnections( projectId: ID, id: ID, projectIds: [ID!] ): [ ConnectionInfo! ]! - # List of template connections. + + # Return list of template connections by project ID templateConnections( projectId: ID ): [ ConnectionInfo! ]! # List of connection folders @@ -613,21 +616,25 @@ extend type Mutation { # Refresh session connection list refreshSessionConnections: Boolean - # Refreshes session on server and returns its state + # Change session language to specified changeSessionLanguage(locale: String): Boolean - # Create new custom connection. Custom connections exist only within the current session. + # Create new custom connection createConnection( config: ConnectionConfig!, projectId: ID ): ConnectionInfo! + # Update specified connection updateConnection( config: ConnectionConfig!, projectId: ID ): ConnectionInfo! + # Delete specified connection deleteConnection( id: ID!, projectId: ID ): Boolean! + # Create new custom connection from template createConnectionFromTemplate( templateId: ID!, projectId: ID!, connectionName: String ): ConnectionInfo! - # Create new folder + # Create new folder for connections createConnectionFolder(parentFolderPath: ID, folderName: String!, projectId: ID ): ConnectionFolderInfo! + # Delete specified connection folder deleteConnectionFolder( folderPath: ID!, projectId: ID ): Boolean! # Copies connection configuration from node @@ -636,7 +643,7 @@ extend type Mutation { # Test connection configuration. Returns remote server version testConnection( config: ConnectionConfig!, projectId: ID): ConnectionInfo! - # Test connection configuration. Returns remote server version + # Test network handler testNetworkHandler( config: NetworkHandlerConfigInput! ): NetworkEndpointInfo! # Initiate existing connection @@ -646,7 +653,7 @@ extend type Mutation { # Disconnect from database closeConnection( id: ID!, projectId: ID ): ConnectionInfo! - # Changes navigator settings for connection + # Change navigator settings for connection setConnectionNavigatorSettings( id: ID!, projectId: ID, settings: NavigatorSettingsInput!): ConnectionInfo! #### Generic async functions diff --git a/webapp/packages/core-blocks/src/PropertiesTable/PropertyItem.module.css b/webapp/packages/core-blocks/src/PropertiesTable/PropertyItem.module.css index e5f4de4251..2b044e1be9 100644 --- a/webapp/packages/core-blocks/src/PropertiesTable/PropertyItem.module.css +++ b/webapp/packages/core-blocks/src/PropertiesTable/PropertyItem.module.css @@ -56,6 +56,11 @@ display: flex; } +.remove, +.select { + margin: 0 2px; +} + .container:hover .remove { opacity: 1; } @@ -106,7 +111,6 @@ .button, .propertyValueSelector { composes: theme-form-element-radius from global; - margin: 2px; overflow: hidden; } diff --git a/webapp/packages/plugin-authentication/src/Dialog/AuthProviderForm/ConfigurationsList.tsx b/webapp/packages/plugin-authentication/src/Dialog/AuthProviderForm/ConfigurationsList.tsx index 79121c5031..bcdc9740da 100644 --- a/webapp/packages/plugin-authentication/src/Dialog/AuthProviderForm/ConfigurationsList.tsx +++ b/webapp/packages/plugin-authentication/src/Dialog/AuthProviderForm/ConfigurationsList.tsx @@ -17,6 +17,7 @@ import { import { Button, Cell, + Clickable, Container, Filter, getComputed, @@ -150,13 +151,15 @@ export const ConfigurationsList = observer(function ConfigurationsList({ const title = `${configuration.displayName}\n${configuration.description || ''}`; return ( login(false, provider, configuration)}> - : undefined} - description={configuration.description} - > - {configuration.displayName} - + + : undefined} + description={configuration.description} + > + {configuration.displayName} + + ); })}