diff --git a/webapp/packages/core-administration/src/Administration/ItemContent.tsx b/webapp/packages/core-administration/src/Administration/ItemContent.tsx
index 3b47d6e722..18346d6e77 100644
--- a/webapp/packages/core-administration/src/Administration/ItemContent.tsx
+++ b/webapp/packages/core-administration/src/Administration/ItemContent.tsx
@@ -40,7 +40,7 @@ export const ItemContent = observer(function ItemContent({
if (activeItemSub) {
const sub = administrationItemService.getItemSub(item, activeItemSub);
if (sub) {
- const Component = sub.getComponent();
+ const Component = sub.getComponent ? sub.getComponent() : item.getContentComponent();
return ;
}
diff --git a/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts b/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts
index 228f4971ec..98313809a4 100644
--- a/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts
+++ b/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts
@@ -49,7 +49,7 @@ export type AdministrationItemSubCanActivateEvent = (
export interface IAdministrationItemSubItem {
name: string;
- getComponent(): AdministrationItemSubContentComponent;
+ getComponent?: () => AdministrationItemSubContentComponent;
onActivate?: AdministrationItemSubEvent;
canActivate?: AdministrationItemSubCanActivateEvent;
}
diff --git a/webapp/packages/core-connections/src/Administration/Connections/ConnectionsAdministrationController.ts b/webapp/packages/core-connections/src/Administration/Connections/ConnectionsAdministrationController.ts
index d9e03c5135..3f5e005db9 100644
--- a/webapp/packages/core-connections/src/Administration/Connections/ConnectionsAdministrationController.ts
+++ b/webapp/packages/core-connections/src/Administration/Connections/ConnectionsAdministrationController.ts
@@ -11,8 +11,7 @@ import { observable, computed } from 'mobx';
import { injectable } from '@cloudbeaver/core-di';
import { CommonDialogService, ConfirmationDialog } from '@cloudbeaver/core-dialogs';
import { NotificationService } from '@cloudbeaver/core-events';
-import { ErrorDetailsDialog } from '@cloudbeaver/core-notifications';
-import { GQLErrorCatcher, resourceKeyList } from '@cloudbeaver/core-sdk';
+import { resourceKeyList } from '@cloudbeaver/core-sdk';
import { ConnectionsResource, isSearchedConnection } from '../ConnectionsResource';
import { ConnectionsAdministrationNavService } from './ConnectionsAdministrationNavService';
@@ -22,8 +21,6 @@ export class ConnectionsAdministrationController {
@observable isProcessing = false;
readonly selectedItems = observable(new Map())
readonly expandedItems = observable(new Map())
- readonly error = new GQLErrorCatcher();
-
@computed
get connections() {
return Array.from(this.connectionsResource.data.values())
@@ -65,9 +62,7 @@ export class ConnectionsAdministrationController {
try {
await this.connectionsResource.refresh('all');
} catch (exception) {
- if (!this.error.catch(exception)) {
- this.notificationService.logException(exception, 'Connections update failed');
- }
+ this.notificationService.logException(exception, 'Connections update failed');
}
}
@@ -108,17 +103,9 @@ export class ConnectionsAdministrationController {
this.expandedItems.delete(id);
}
} catch (exception) {
- if (!this.error.catch(exception)) {
- this.notificationService.logException(exception, 'Connections delete failed');
- }
+ this.notificationService.logException(exception, 'Connections delete failed');
} finally {
this.isProcessing = false;
}
}
-
- showDetails = () => {
- if (this.error.exception) {
- this.commonDialogService.open(ErrorDetailsDialog, this.error.exception);
- }
- }
}
diff --git a/webapp/packages/core-connections/src/Administration/Connections/ConnectionsAdministrationService.ts b/webapp/packages/core-connections/src/Administration/Connections/ConnectionsAdministrationService.ts
index 2cdf222e7d..110b90b1f4 100644
--- a/webapp/packages/core-connections/src/Administration/Connections/ConnectionsAdministrationService.ts
+++ b/webapp/packages/core-connections/src/Administration/Connections/ConnectionsAdministrationService.ts
@@ -36,10 +36,7 @@ export class ConnectionsAdministrationService extends Bootstrap {
description: 'connections_administration_configuration_wizard_step_description',
},
sub: [
- {
- name: 'create',
- getComponent: () => ConnectionsAdministration,
- },
+ { name: 'create' },
],
getContentComponent: () => ConnectionsAdministration,
getDrawerComponent: () => ConnectionsDrawerItem,
diff --git a/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/CreateConnection.tsx b/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/CreateConnection.tsx
index fc5ec32189..0470ff1752 100644
--- a/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/CreateConnection.tsx
+++ b/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/CreateConnection.tsx
@@ -202,10 +202,10 @@ export const CreateConnection = observer(function CreateConnection({
- {translate('Driver')}
+ {translate('connections_connection_driver')}
- {translate('Search Database')}
+ {translate('connections_connection_create_search_database')}
diff --git a/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/CreateConnectionController.tsx b/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/CreateConnectionController.tsx
index 0675851835..40be90b9f0 100644
--- a/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/CreateConnectionController.tsx
+++ b/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/CreateConnectionController.tsx
@@ -9,15 +9,12 @@
import { observable, computed } from 'mobx';
import { injectable } from '@cloudbeaver/core-di';
-import { CommonDialogService } from '@cloudbeaver/core-dialogs';
import { NotificationService } from '@cloudbeaver/core-events';
-import { ErrorDetailsDialog } from '@cloudbeaver/core-notifications';
-import { GQLErrorCatcher, AdminConnectionSearchInfo, ConnectionInfo } from '@cloudbeaver/core-sdk';
+import { AdminConnectionSearchInfo, ConnectionInfo } from '@cloudbeaver/core-sdk';
import { uuid } from '@cloudbeaver/core-utils';
import { DBDriverResource } from '../../../DBDriverResource';
import { ConnectionsResource } from '../../ConnectionsResource';
-import { ConnectionsAdministrationNavService } from '../ConnectionsAdministrationNavService';
@injectable()
export class CreateConnectionController {
@@ -37,14 +34,10 @@ export class CreateConnectionController {
return this.dbDriverResource.get(this.connection.driverId);
}
- readonly error = new GQLErrorCatcher();
-
constructor(
private notificationService: NotificationService,
private connectionsResource: ConnectionsResource,
- private commonDialogService: CommonDialogService,
private dbDriverResource: DBDriverResource,
- private connectionsAdministrationNavService: ConnectionsAdministrationNavService
) {
this.credentials = {};
this.databases = [];
@@ -67,9 +60,7 @@ export class CreateConnectionController {
this.databases = await this.connectionsResource.searchDatabases(hosts);
} catch (exception) {
- if (!this.error.catch(exception)) {
- this.notificationService.logException(exception, 'Databases search failed');
- }
+ this.notificationService.logException(exception, 'Databases search failed');
} finally {
this.isProcessing = false;
}
@@ -109,10 +100,4 @@ export class CreateConnectionController {
this.connection = null;
this.availableDrivers = [];
}
-
- showDetails = () => {
- if (this.error.exception) {
- this.commonDialogService.open(ErrorDetailsDialog, this.error.exception);
- }
- }
}
diff --git a/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/DriverList.tsx b/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/DriverList.tsx
index fb9b36aca5..1dfad0a024 100644
--- a/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/DriverList.tsx
+++ b/webapp/packages/core-connections/src/Administration/Connections/CreateConnection/DriverList.tsx
@@ -10,6 +10,7 @@ import { observer } from 'mobx-react';
import { useState, useMemo } from 'react';
import { ItemListSearch, ItemList } from '@cloudbeaver/core-blocks';
+import { useTranslate } from '@cloudbeaver/core-localization';
import { DBDriver } from '../../../DBDriverResource';
import { Driver } from './Driver';
@@ -21,6 +22,7 @@ type Props = {
}
export const DriverList = observer(function DriverList({ drivers, className, onSelect }: Props) {
+ const translate = useTranslate();
const [search, setSearch] = useState('');
const filteredDrivers = useMemo(() => {
if (!search) {
@@ -31,7 +33,7 @@ export const DriverList = observer(function DriverList({ drivers, className, onS
return (
-
+
{filteredDrivers.map(driver => )}
);
diff --git a/webapp/packages/core-connections/src/Administration/Connections/DatabasesSearch.tsx b/webapp/packages/core-connections/src/Administration/Connections/DatabasesSearch.tsx
deleted file mode 100644
index d7b2791e8e..0000000000
--- a/webapp/packages/core-connections/src/Administration/Connections/DatabasesSearch.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * cloudbeaver - Cloud Database Manager
- * Copyright (C) 2020 DBeaver Corp and others
- *
- * Licensed under the Apache License, Version 2.0.
- * you may not use this file except in compliance with the License.
- */
-
-import { observer } from 'mobx-react';
-import styled, { css } from 'reshadow';
-
-import { Button, InputField, SubmittingForm } from '@cloudbeaver/core-blocks';
-import { useTranslate } from '@cloudbeaver/core-localization';
-import { useStyles, composes } from '@cloudbeaver/core-theming';
-
-const styles = composes(
- css`
- SubmittingForm {
- composes: theme-border-color-background from global;
- }
- `,
- css`
- SubmittingForm {
- flex: 1;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- border-top: solid 1px;
- }
-
- group {
- box-sizing: border-box;
- display: flex;
- }
-
- action {
- padding-left: 24px;
- }
-
- InputField {
- width: 450px;
- }
- `
-);
-
-type Props = {
- hosts: string;
- className?: string;
- onChange(hosts: string): void;
- onSearch(): void;
- disabled?: boolean;
-}
-
-export const DatabasesSearch = observer(function DatabasesSearch({
- hosts,
- className,
- onChange,
- onSearch,
- disabled,
-}: Props) {
- const translate = useTranslate();
-
- return styled(useStyles(styles))(
-
-
-
- {translate('connections_connection_edit_search_hosts')}
-
-
-
-
-
-
- );
-});
diff --git a/webapp/packages/core-connections/src/locales/en.ts b/webapp/packages/core-connections/src/locales/en.ts
index 62b1f171a5..e6a3e0f8b0 100644
--- a/webapp/packages/core-connections/src/locales/en.ts
+++ b/webapp/packages/core-connections/src/locales/en.ts
@@ -5,6 +5,7 @@ export default [
['connections_administration_new_connection', 'New connection'],
['connections_administration_configuration_wizard_step_title', 'Database connections'],
['connections_administration_configuration_wizard_step_description', 'Database connections'],
+ ['connections_connection_create_search_database', 'Search Database'],
['connections_connection_edit_authentication', 'Authentication'],
['connections_connection_edit_access', 'Access'],
['connections_connection_edit_access_load_failed', 'Connection access loading failed'],
@@ -19,4 +20,5 @@ export default [
['connections_connection_port', 'Port'],
['connections_connection_template', 'Template'],
['connections_connection_test', 'Test Connection'],
+ ['connections_driver_search_placeholder', 'Type driver name...'],
];
diff --git a/webapp/packages/core-connections/src/locales/ru.ts b/webapp/packages/core-connections/src/locales/ru.ts
index e479556b49..dcf5c3b659 100644
--- a/webapp/packages/core-connections/src/locales/ru.ts
+++ b/webapp/packages/core-connections/src/locales/ru.ts
@@ -5,6 +5,7 @@ export default [
['connections_administration_new_connection', 'Создание подключения'],
['connections_administration_configuration_wizard_step_title', 'Подключения к базам'],
['connections_administration_configuration_wizard_step_description', 'Подключения к базам'],
+ ['connections_connection_create_search_database', 'Поиск баз'],
['connections_connection_edit_authentication', 'Авторизация'],
['connections_connection_edit_access', 'Доступ'],
['connections_connection_edit_access_load_failed', 'Не удалось загрузить информацию доступа'],
@@ -14,9 +15,10 @@ export default [
['connections_connection_address', 'Адрес'],
['connections_connection_name', 'Название'],
['connections_connection_description', 'Описапние'],
- ['connections_connection_driver', 'Driver'],
+ ['connections_connection_driver', 'Драйвер'],
['connections_connection_host', 'Хост'],
['connections_connection_port', 'Порт'],
['connections_connection_template', 'Шаблон'],
['connections_connection_test', 'Проверить подключение'],
+ ['connections_driver_search_placeholder', 'Введите название драйвера...'],
];
diff --git a/webapp/packages/plugin-authentication/src/Administration/Users/UsersAdministrationService.ts b/webapp/packages/plugin-authentication/src/Administration/Users/UsersAdministrationService.ts
index de2cec3da0..9078aaa62c 100644
--- a/webapp/packages/plugin-authentication/src/Administration/Users/UsersAdministrationService.ts
+++ b/webapp/packages/plugin-authentication/src/Administration/Users/UsersAdministrationService.ts
@@ -32,7 +32,6 @@ export class UsersAdministrationService extends Bootstrap {
sub: [
{
name: UsersAdministrationNavigationService.AddItemName,
- getComponent: () => UsersAdministration,
onActivate: this.onCreateActivate.bind(this),
},
],
diff --git a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelector.tsx b/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelector.tsx
index e0a21f4a0d..ef5938490c 100644
--- a/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelector.tsx
+++ b/webapp/packages/plugin-connection-custom/src/CustomConnection/DriverSelectorDialog/DriverSelector.tsx
@@ -10,6 +10,7 @@ import { observer } from 'mobx-react';
import { useState, useMemo } from 'react';
import { ItemListSearch, ItemList } from '@cloudbeaver/core-blocks';
+import { useTranslate } from '@cloudbeaver/core-localization';
import { Driver, IDriver } from './Driver';
@@ -20,6 +21,7 @@ type DriverSelectorProps = {
}
export const DriverSelector = observer(function DriverSelector({ drivers, className, onSelect }: DriverSelectorProps) {
+ const translate = useTranslate();
const [search, setSearch] = useState('');
const filteredDrivers = useMemo(() => {
if (!search) {
@@ -30,7 +32,7 @@ export const DriverSelector = observer(function DriverSelector({ drivers, classN
return (
-
+
{filteredDrivers.map(driver => )}
);