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 => )} );