mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
Merge remote-tracking branch 'origin/devel' into devel
This commit is contained in:
Vendored
+1
-1
@@ -18,7 +18,7 @@
|
||||
{
|
||||
"type": "java",
|
||||
"name": "CloudBeaver CE Server",
|
||||
"cwd": "${workspaceFolder}/workspace-dev-ce",
|
||||
"cwd": "${workspaceFolder}/../opt/cbce",
|
||||
"request": "launch",
|
||||
"mainClass": "org.jkiss.dbeaver.launcher.DBeaverLauncher",
|
||||
"args": [
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
plugin.sql-editor.maxFileSize: 10240,
|
||||
plugin.log-viewer.disabled: false,
|
||||
plugin.log-viewer.logBatchSize: 1000,
|
||||
plugin.log-viewer.maxFailedRequests: 3,
|
||||
plugin.log-viewer.maxLogRecords: 2000,
|
||||
plugin.log-viewer.refreshTimeout: 3000,
|
||||
sql.proposals.insert.table.alias: PLAIN
|
||||
},
|
||||
|
||||
|
||||
@@ -19,9 +19,7 @@
|
||||
plugin.sql-editor.maxFileSize: 10240,
|
||||
plugin.log-viewer.disabled: false,
|
||||
plugin.log-viewer.logBatchSize: 1000,
|
||||
plugin.log-viewer.maxFailedRequests: 3,
|
||||
plugin.log-viewer.maxLogRecords: 2000,
|
||||
plugin.log-viewer.refreshTimeout: 3000,
|
||||
sql.proposals.insert.table.alias: PLAIN
|
||||
},
|
||||
|
||||
|
||||
@@ -50,7 +50,17 @@ export const Body = observer(function Body() {
|
||||
return (
|
||||
<DNDProvider>
|
||||
<Loader className={s(styles, { loader: true })} suspense>
|
||||
<div ref={ref} className={s(styles, { bodyContent: true }, `theme-${themeService.currentTheme.id}`)}>
|
||||
<div
|
||||
ref={ref}
|
||||
className={s(
|
||||
styles,
|
||||
{ bodyContent: true },
|
||||
`theme-${themeService.currentTheme.id}`,
|
||||
'theme-typography--body2',
|
||||
'theme-background-surface',
|
||||
'theme-text-on-surface',
|
||||
)}
|
||||
>
|
||||
<Loader className={s(styles, { loader: true })} suspense>
|
||||
{Screen && <Screen {...screenService.routerService.params} />}
|
||||
</Loader>
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
"@cloudbeaver/core-settings": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"msw": "^2",
|
||||
"typescript": "^5"
|
||||
}
|
||||
|
||||
@@ -34,7 +34,10 @@ export class AuthSettingsService {
|
||||
private registerSettings() {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// key: 'disableAnonymousAccess',
|
||||
// key: 'core.authentication.disableAnonymousAccess',
|
||||
// access: {
|
||||
// scope: ['server'],
|
||||
// },
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// name: 'settings_authentication_disable_anonymous_access_name',
|
||||
// description: 'settings_authentication_disable_anonymous_access_description',
|
||||
|
||||
@@ -49,8 +49,8 @@
|
||||
"@cloudbeaver/core-utils": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@testing-library/react": "^16",
|
||||
"@types/jest": "^29",
|
||||
"@types/react": "^18",
|
||||
"mobx": "^6",
|
||||
"react": "^18",
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
import { useService } from '@cloudbeaver/core-di';
|
||||
import { LocalizationService, type TLocalizationToken } from '@cloudbeaver/core-localization';
|
||||
import { LocalizationService, type TranslateFn } from '@cloudbeaver/core-localization';
|
||||
|
||||
export function useTranslate(): <T extends TLocalizationToken | undefined>(token: T, fallback?: T, args?: Record<string | number, any>) => T {
|
||||
export function useTranslate(): TranslateFn {
|
||||
const localizationService = useService(LocalizationService);
|
||||
|
||||
return localizationService.translate;
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"@cloudbeaver/core-settings": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module.exports = {
|
||||
testEnvironment: require.resolve('../tests/test.environment.js'),
|
||||
rootDir: path.resolve('./'),
|
||||
moduleFileExtensions: ['js', 'jsx', 'json'],
|
||||
testMatch: ['<rootDir>/(packages/*/|)dist/?(*.)+(spec|test).js?(x)'],
|
||||
testMatch: ['<rootDir>/packages/*/dist/?(*.)+(spec|test).js?(x)', '<rootDir>/dist/?(*.)+(spec|test).js?(x)'],
|
||||
transformIgnorePatterns: [
|
||||
'\\.pnp\\.[^\\/]+$',
|
||||
'node_modules/(?!@ngrx|(?!deck.gl)|ng-dynamic)',
|
||||
|
||||
@@ -32,13 +32,17 @@ export class ConnectionsSettingsService extends Dependency {
|
||||
}
|
||||
|
||||
private registerSettings() {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// group: CONNECTIONS_SETTINGS_GROUP,
|
||||
// key: 'disabled',
|
||||
// name: 'Disable',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// },
|
||||
]);
|
||||
// this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// group: CONNECTIONS_SETTINGS_GROUP,
|
||||
// key: 'core.connections.disabled',
|
||||
// access: {
|
||||
// scope: ['server'],
|
||||
// },
|
||||
// name: 'core_connections_settings_disable',
|
||||
// description: 'core_connections_settings_disable_description',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// },
|
||||
// ]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,4 +55,7 @@ export default [
|
||||
['connections_network_handler_ssh_tunnel_advanced_settings', 'Erweiterte Einstellungen'],
|
||||
['connections_not_found', 'Es wurden keine Datenbankverbindungen gefunden'],
|
||||
['connections_connection_autocommit', 'Auto commit'],
|
||||
|
||||
['core_connections_settings_disable', 'Disable'],
|
||||
['core_connections_settings_disable_description', 'Disable the ability to create new connections'],
|
||||
];
|
||||
|
||||
@@ -99,4 +99,7 @@ export default [
|
||||
'cloud_connections_access_placeholder',
|
||||
'Cloud connections are visible to all users. Access management can be configured in "AWS Management Console".',
|
||||
],
|
||||
|
||||
['core_connections_settings_disable', 'Disable'],
|
||||
['core_connections_settings_disable_description', 'Disable the ability to create new connections'],
|
||||
];
|
||||
|
||||
@@ -108,4 +108,7 @@ export default [
|
||||
'cloud_connections_access_placeholder',
|
||||
'Les connexions cloud sont visibles par tous les utilisateurs. La gestion des accès peut être configurée dans la "AWS Management Console".',
|
||||
],
|
||||
|
||||
['core_connections_settings_disable', 'Disable'],
|
||||
['core_connections_settings_disable_description', 'Disable the ability to create new connections'],
|
||||
];
|
||||
|
||||
@@ -97,4 +97,7 @@ export default [
|
||||
'cloud_connections_access_placeholder',
|
||||
'Connessioni Cloud sono visibili a tutti gli utenti. Il gestore degli accessi può essere configurato in "AWS Management Console".',
|
||||
],
|
||||
|
||||
['core_connections_settings_disable', 'Disable'],
|
||||
['core_connections_settings_disable_description', 'Disable the ability to create new connections'],
|
||||
];
|
||||
|
||||
@@ -100,4 +100,7 @@ export default [
|
||||
['connections_not_found', 'Подключения к базам данных не найдены'],
|
||||
|
||||
['cloud_connections_access_placeholder', 'Облачные подключения видны всем пользователям. Вы можете настроить доступ в "Консоль Управления AWS".'],
|
||||
|
||||
['core_connections_settings_disable', 'Отключить'],
|
||||
['core_connections_settings_disable_description', 'Отключить возможность создания новых подключений'],
|
||||
];
|
||||
|
||||
@@ -92,4 +92,7 @@ export default [
|
||||
['connections_not_found', '未找到数据库连接'],
|
||||
|
||||
['cloud_connections_access_placeholder', '云连接对所有用户可见。可以在“AWS管理控制台”中配置访问管理。'],
|
||||
|
||||
['core_connections_settings_disable', 'Disable'],
|
||||
['core_connections_settings_disable_description', 'Disable the ability to create new connections'],
|
||||
];
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"peerDependencies": {},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "^29",
|
||||
"@types/jest": "^29",
|
||||
"@types/react": "^18",
|
||||
"typescript": "^5"
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"dependencies": {
|
||||
"@cloudbeaver/core-di": "^0",
|
||||
"@cloudbeaver/core-executor": "^0",
|
||||
"@cloudbeaver/core-localization": "^0",
|
||||
"@cloudbeaver/core-sdk": "^0",
|
||||
"@cloudbeaver/core-settings": "^0",
|
||||
"@cloudbeaver/core-utils": "^0",
|
||||
@@ -35,7 +36,7 @@
|
||||
"@cloudbeaver/core-settings": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,14 +56,21 @@ export class EventsSettingsService extends Dependency {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// group: NOTIFICATIONS_SETTINGS_GROUP,
|
||||
// key: 'maxPersistentAllow',
|
||||
// key: 'plugin.notifications.maxPersistentAllow',
|
||||
// access: {
|
||||
// scope: ['client'],
|
||||
// },
|
||||
// name: 'Max persistent notifications count',
|
||||
// type: ESettingsValueType.Input,
|
||||
// },
|
||||
// {
|
||||
// group: NOTIFICATIONS_SETTINGS_GROUP,
|
||||
// key: 'notificationsPool',
|
||||
// name: 'Max notifications count',
|
||||
// key: 'plugin.notifications.notificationsPool',
|
||||
// access: {
|
||||
// scope: ['client'],
|
||||
// },
|
||||
// name: 'core_events_notifications_settings_pool_size',
|
||||
// description: 'core_events_notifications_settings_pool_size_description',
|
||||
// type: ESettingsValueType.Input,
|
||||
// },
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 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 { Bootstrap, injectable } from '@cloudbeaver/core-di';
|
||||
import { LocalizationService } from '@cloudbeaver/core-localization';
|
||||
|
||||
@injectable()
|
||||
export class LocaleService extends Bootstrap {
|
||||
constructor(private readonly localizationService: LocalizationService) {
|
||||
super();
|
||||
}
|
||||
|
||||
override register(): void {
|
||||
this.localizationService.addProvider(this.provider.bind(this));
|
||||
}
|
||||
|
||||
private async provider(locale: string) {
|
||||
switch (locale) {
|
||||
case 'ru':
|
||||
return (await import('./locales/ru.js')).default;
|
||||
case 'it':
|
||||
return (await import('./locales/it.js')).default;
|
||||
case 'zh':
|
||||
return (await import('./locales/zh.js')).default;
|
||||
case 'fr':
|
||||
return (await import('./locales/fr.js')).default;
|
||||
default:
|
||||
return (await import('./locales/en.js')).default;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,6 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
import { ROOT_SETTINGS_GROUP } from '@cloudbeaver/core-settings';
|
||||
import { INTERFACE_SETTINGS_GROUP } from '@cloudbeaver/core-settings';
|
||||
|
||||
export const NOTIFICATIONS_SETTINGS_GROUP = ROOT_SETTINGS_GROUP.createSubGroup('core_events_notifications_settings_group');
|
||||
export const NOTIFICATIONS_SETTINGS_GROUP = INTERFACE_SETTINGS_GROUP.createSubGroup('core_events_notifications_settings_group');
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['core_events_notifications_settings_group', 'Notifications'],
|
||||
['core_events_notifications_settings_pool_size', 'Max notifications count'],
|
||||
['core_events_notifications_settings_pool_size_description', 'Exceeding this amount, the oldest notifications will be deleted'],
|
||||
];
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['core_events_notifications_settings_group', 'Notifications'],
|
||||
['core_events_notifications_settings_pool_size', 'Max notifications count'],
|
||||
['core_events_notifications_settings_pool_size_description', 'Exceeding this amount, the oldest notifications will be deleted'],
|
||||
];
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['core_events_notifications_settings_group', 'Notifications'],
|
||||
['core_events_notifications_settings_pool_size', 'Max notifications count'],
|
||||
['core_events_notifications_settings_pool_size_description', 'Exceeding this amount, the oldest notifications will be deleted'],
|
||||
];
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['core_events_notifications_settings_group', 'Уведомления'],
|
||||
['core_events_notifications_settings_pool_size', 'Максимальное количество уведомлений'],
|
||||
['core_events_notifications_settings_pool_size_description', 'Превышение этого количества приведет к удалению самых старых уведомлений'],
|
||||
];
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['core_events_notifications_settings_group', 'Notifications'],
|
||||
['core_events_notifications_settings_pool_size', 'Max notifications count'],
|
||||
['core_events_notifications_settings_pool_size_description', 'Exceeding this amount, the oldest notifications will be deleted'],
|
||||
];
|
||||
@@ -16,5 +16,6 @@ export const coreEventsManifest: PluginManifest = {
|
||||
() => import('./NotificationService.js').then(m => m.NotificationService),
|
||||
() => import('./ExceptionsCatcherService.js').then(m => m.ExceptionsCatcherService),
|
||||
() => import('./EventsSettingsService.js').then(m => m.EventsSettingsService),
|
||||
() => import('./LocaleService.js').then(m => m.LocaleService),
|
||||
],
|
||||
};
|
||||
|
||||
@@ -18,6 +18,9 @@
|
||||
{
|
||||
"path": "../core-localization/tsconfig.json"
|
||||
},
|
||||
{
|
||||
"path": "../core-localization/tsconfig.json"
|
||||
},
|
||||
{
|
||||
"path": "../core-root/tsconfig.json"
|
||||
},
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 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 type { TLocalizationToken } from './TLocalizationToken.js';
|
||||
|
||||
export type TranslateFn = <T extends TLocalizationToken | undefined>(token: T, fallback?: T, args?: Record<string | number, any>) => T;
|
||||
@@ -10,3 +10,4 @@ export * from './LocalizationService.js';
|
||||
export * from './Locale.js';
|
||||
export * from './TLocalizationToken.js';
|
||||
export * from './DEFAULT_LOCALE.js';
|
||||
export * from './TranslateFn.js';
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
"@cloudbeaver/core-view": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,28 +60,37 @@ export class NavTreeSettingsService extends Dependency {
|
||||
}
|
||||
|
||||
private registerSettings() {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// key: 'childrenLimit',
|
||||
// access: {
|
||||
// accessor: ['server'],
|
||||
// },
|
||||
// group: NAVIGATION_TREE_SETTINGS_GROUP,
|
||||
// name: 'Children limit',
|
||||
// type: ESettingsValueType.Input,
|
||||
// },
|
||||
// {
|
||||
// group: NAVIGATION_TREE_SETTINGS_GROUP,
|
||||
// key: 'editing',
|
||||
// name: 'Editing',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// },
|
||||
// {
|
||||
// group: NAVIGATION_TREE_SETTINGS_GROUP,
|
||||
// key: 'deleting',
|
||||
// name: 'Deleting',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// },
|
||||
]);
|
||||
// this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// key: 'core.navigation-tree.childrenLimit',
|
||||
// access: {
|
||||
// scope: ['server'],
|
||||
// },
|
||||
// group: NAVIGATION_TREE_SETTINGS_GROUP,
|
||||
// name: 'core_navigation_tree_settings_children_limit',
|
||||
// description: 'core_navigation_tree_settings_children_limit_description',
|
||||
// type: ESettingsValueType.Input,
|
||||
// },
|
||||
// {
|
||||
// group: NAVIGATION_TREE_SETTINGS_GROUP,
|
||||
// key: 'core.navigation-tree.editing',
|
||||
// access: {
|
||||
// scope: ['server'],
|
||||
// },
|
||||
// name: 'core_navigation_tree_settings_editing',
|
||||
// description: 'core_navigation_tree_settings_editing_description',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// },
|
||||
// {
|
||||
// group: NAVIGATION_TREE_SETTINGS_GROUP,
|
||||
// key: 'core.navigation-tree.deleting',
|
||||
// access: {
|
||||
// scope: ['server'],
|
||||
// },
|
||||
// name: 'core_navigation_tree_settings_deleting',
|
||||
// description: 'core_navigation_tree_settings_deleting_description',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// },
|
||||
// ]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,16 @@
|
||||
export default [['core_navigation_tree_navigation_tree_settings_group', 'Navigation Tree']];
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['core_navigation_tree_navigation_tree_settings_group', 'Navigation Tree'],
|
||||
['core_navigation_tree_settings_children_limit', 'Amount of nodes to load'],
|
||||
['core_navigation_tree_settings_children_limit_description', 'Amount of nodes to load in a single request'],
|
||||
['core_navigation_tree_settings_editing', 'Editing'],
|
||||
['core_navigation_tree_settings_editing_description', 'Allow editing nodes such as renaming'],
|
||||
['core_navigation_tree_settings_deleting', 'Deleting'],
|
||||
['core_navigation_tree_settings_deleting_description', 'Allow deleting nodes'],
|
||||
];
|
||||
|
||||
@@ -5,4 +5,12 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [['core_navigation_tree_navigation_tree_settings_group', 'Arborescence de navigation']];
|
||||
export default [
|
||||
['core_navigation_tree_navigation_tree_settings_group', 'Arborescence de navigation'],
|
||||
['core_navigation_tree_settings_children_limit', 'Amount of nodes to load'],
|
||||
['core_navigation_tree_settings_children_limit_description', 'Amount of nodes to load in a single request'],
|
||||
['core_navigation_tree_settings_editing', 'Editing'],
|
||||
['core_navigation_tree_settings_editing_description', 'Allow editing nodes such as renaming'],
|
||||
['core_navigation_tree_settings_deleting', 'Deleting'],
|
||||
['core_navigation_tree_settings_deleting_description', 'Allow deleting nodes'],
|
||||
];
|
||||
|
||||
@@ -1 +1,16 @@
|
||||
export default [['core_navigation_tree_navigation_tree_settings_group', 'Navigation Tree']];
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['core_navigation_tree_navigation_tree_settings_group', 'Navigation Tree'],
|
||||
['core_navigation_tree_settings_children_limit', 'Amount of nodes to load'],
|
||||
['core_navigation_tree_settings_children_limit_description', 'Amount of nodes to load in a single request'],
|
||||
['core_navigation_tree_settings_editing', 'Editing'],
|
||||
['core_navigation_tree_settings_editing_description', 'Allow editing nodes such as renaming'],
|
||||
['core_navigation_tree_settings_deleting', 'Deleting'],
|
||||
['core_navigation_tree_settings_deleting_description', 'Allow deleting nodes'],
|
||||
];
|
||||
|
||||
@@ -1 +1,16 @@
|
||||
export default [['core_navigation_tree_navigation_tree_settings_group', 'Дерево навигации']];
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['core_navigation_tree_navigation_tree_settings_group', 'Дерево навигации'],
|
||||
['core_navigation_tree_settings_children_limit', 'Количество загружаемых дочерних элементов'],
|
||||
['core_navigation_tree_settings_children_limit_description', 'Количество загружаемых дочерних элементов за один запрос'],
|
||||
['core_navigation_tree_settings_editing', 'Редактирование'],
|
||||
['core_navigation_tree_settings_editing_description', 'Разрешить редактирование узлов, такое как переименование'],
|
||||
['core_navigation_tree_settings_deleting', 'Удаление'],
|
||||
['core_navigation_tree_settings_deleting_description', 'Разрешить удаление узлов'],
|
||||
];
|
||||
|
||||
@@ -5,4 +5,12 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [['core_navigation_tree_navigation_tree_settings_group', '导航树']];
|
||||
export default [
|
||||
['core_navigation_tree_navigation_tree_settings_group', '导航树'],
|
||||
['core_navigation_tree_settings_children_limit', 'Amount of nodes to load'],
|
||||
['core_navigation_tree_settings_children_limit_description', 'Amount of nodes to load in a single request'],
|
||||
['core_navigation_tree_settings_editing', 'Editing'],
|
||||
['core_navigation_tree_settings_editing_description', 'Allow editing nodes such as renaming'],
|
||||
['core_navigation_tree_settings_deleting', 'Deleting'],
|
||||
['core_navigation_tree_settings_deleting_description', 'Allow deleting nodes'],
|
||||
];
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "^29",
|
||||
"@types/jest": "^29",
|
||||
"mobx": "^6",
|
||||
"typescript": "^5"
|
||||
},
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
"@cloudbeaver/core-sdk": "^0",
|
||||
"@cloudbeaver/core-website": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@types/jest": "^29",
|
||||
"msw": "^2",
|
||||
"typescript": "^5"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
import { injectable } from '@cloudbeaver/core-di';
|
||||
import { CachedDataResource } from '@cloudbeaver/core-resource';
|
||||
import { GraphQLService, type ServerConfigFragment, type ServerConfigInput } from '@cloudbeaver/core-sdk';
|
||||
import { isArraysEqual } from '@cloudbeaver/core-utils';
|
||||
|
||||
import { DataSynchronizationQueue } from './DataSynchronization/DataSynchronizationQueue.js';
|
||||
import { DataSynchronizationService } from './DataSynchronization/DataSynchronizationService.js';
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"@cloudbeaver/core-settings": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"@cloudbeaver/core-executor": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
"@material/switch": "^4",
|
||||
"@material/theme": "^4",
|
||||
"@material/typography": "^4",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"typescript": "^5",
|
||||
"typescript-plugin-css-modules": "^5"
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
"peerDependencies": {},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "^29",
|
||||
"@types/jest": "^29",
|
||||
"@types/md5": "^2",
|
||||
"@types/underscore": "^1",
|
||||
"@types/uuid": "^10",
|
||||
|
||||
@@ -5,8 +5,9 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
import { CONNECTIONS_SETTINGS_GROUP } from '@cloudbeaver/core-connections';
|
||||
import { Dependency, injectable } from '@cloudbeaver/core-di';
|
||||
import { SettingsManagerService, SettingsProvider, SettingsProviderService } from '@cloudbeaver/core-settings';
|
||||
import { ESettingsValueType, SettingsManagerService, SettingsProvider, SettingsProviderService } from '@cloudbeaver/core-settings';
|
||||
import { schema, schemaExtra } from '@cloudbeaver/core-utils';
|
||||
|
||||
const settings = schema.object({
|
||||
@@ -32,12 +33,16 @@ export class ConnectionSearchSettingsService extends Dependency {
|
||||
|
||||
private registerSettings() {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// group: CONNECTIONS_SETTINGS_GROUP,
|
||||
// key: 'disabled',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// name: 'Disable connection search',
|
||||
// },
|
||||
{
|
||||
group: CONNECTIONS_SETTINGS_GROUP,
|
||||
key: 'plugin.connection-search.disabled',
|
||||
access: {
|
||||
scope: ['server'],
|
||||
},
|
||||
type: ESettingsValueType.Checkbox,
|
||||
name: 'plugin_connection_search_settings_disable',
|
||||
description: 'plugin_connection_search_settings_disable_description',
|
||||
},
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,12 @@
|
||||
export default [['plugin_connection_search_action_search_label', 'Find Local Database']];
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['plugin_connection_search_action_search_label', 'Find Local Database'],
|
||||
['plugin_connection_search_settings_disable', 'Disable "{alias:plugin_connection_search_action_search_label}"'],
|
||||
['plugin_connection_search_settings_disable_description', 'Disable the ability to search connections on a specific address'],
|
||||
];
|
||||
|
||||
@@ -5,4 +5,8 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [['plugin_connection_search_action_search_label', 'Trouver une base de données locale']];
|
||||
export default [
|
||||
['plugin_connection_search_action_search_label', 'Trouver une base de données locale'],
|
||||
['plugin_connection_search_settings_disable', 'Disable "{alias:plugin_connection_search_action_search_label}"'],
|
||||
['plugin_connection_search_settings_disable_description', 'Disable the ability to search connections on a specific address'],
|
||||
];
|
||||
|
||||
@@ -1 +1,12 @@
|
||||
export default [['plugin_connection_search_action_search_label', 'Find Local Database']];
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['plugin_connection_search_action_search_label', 'Find Local Database'],
|
||||
['plugin_connection_search_settings_disable', 'Disable "{alias:plugin_connection_search_action_search_label}"'],
|
||||
['plugin_connection_search_settings_disable_description', 'Disable the ability to search connections on a specific address'],
|
||||
];
|
||||
|
||||
@@ -1 +1,12 @@
|
||||
export default [['plugin_connection_search_action_search_label', 'Найти локальную базу данных']];
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['plugin_connection_search_action_search_label', 'Найти локальную базу данных'],
|
||||
['plugin_connection_search_settings_disable', 'Отключить "{alias:plugin_connection_search_action_search_label}"'],
|
||||
['plugin_connection_search_settings_disable_description', 'Отключить возможность поиска подключений по заданному адресу'],
|
||||
];
|
||||
|
||||
@@ -5,4 +5,8 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [['plugin_connection_search_action_search_label', '查找本地数据库']];
|
||||
export default [
|
||||
['plugin_connection_search_action_search_label', '查找本地数据库'],
|
||||
['plugin_connection_search_settings_disable', 'Disable "{alias:plugin_connection_search_action_search_label}"'],
|
||||
['plugin_connection_search_settings_disable_description', 'Disable the ability to search connections on a specific address'],
|
||||
];
|
||||
|
||||
@@ -33,14 +33,18 @@ export class PluginConnectionsSettingsService extends Dependency {
|
||||
}
|
||||
|
||||
private registerSettings() {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// key: 'hideConnectionViewForUsers',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// name: 'settings_connections_hide_connections_view_name',
|
||||
// description: 'settings_connections_hide_connections_view_description',
|
||||
// group: CONNECTIONS_SETTINGS_GROUP,
|
||||
// },
|
||||
]);
|
||||
// todo: probably not working as a separate setting
|
||||
// this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// key: 'plugin.connections.hideConnectionViewForUsers',
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// access: {
|
||||
// scope: ['server'],
|
||||
// },
|
||||
// name: 'settings_connections_hide_connections_view_name',
|
||||
// description: 'settings_connections_hide_connections_view_description',
|
||||
// group: CONNECTIONS_SETTINGS_GROUP,
|
||||
// },
|
||||
// ]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ export default [
|
||||
['plugin_connections_menu_connections_label', 'Connection'],
|
||||
['plugin_connections_action_disconnect_all_label', 'Disconnect All'],
|
||||
['settings_connections', 'Connections'],
|
||||
['settings_connections_hide_connections_view_name', 'Show connections to admins only'],
|
||||
['settings_connections_hide_connections_view_description', 'Show connections to admins only'],
|
||||
['settings_connections_hide_connections_view_name', 'Hide connections'],
|
||||
['settings_connections_hide_connections_view_description', 'Connections will be hidden for all users except administrators'],
|
||||
|
||||
['connections_public_connection_ssl_enable', 'Enable SSL'],
|
||||
|
||||
|
||||
@@ -7,28 +7,40 @@
|
||||
*/
|
||||
export default [
|
||||
['connections_public_connection_edit_menu_item_title', 'Modifier la connexion'],
|
||||
['connections_public_connection_edit_cancel_title', 'Confirmation d\'annulation'],
|
||||
['connections_public_connection_edit_cancel_message', 'Vous allez annuler les modifications de la connexion. Les modifications non enregistrées seront perdues. Êtes-vous sûr ?'],
|
||||
['connections_public_connection_edit_cancel_title', "Confirmation d'annulation"],
|
||||
[
|
||||
'connections_public_connection_edit_cancel_message',
|
||||
'Vous allez annuler les modifications de la connexion. Les modifications non enregistrées seront perdues. Êtes-vous sûr ?',
|
||||
],
|
||||
['connections_public_connection_edit_reconnect_title', 'Connexion mise à jour'],
|
||||
['connections_public_connection_edit_reconnect_message', 'La connexion a été mise à jour. Voulez-vous vous reconnecter ?'],
|
||||
['connections_public_connection_edit_reconnect_failed', 'Échec de la reconnexion'],
|
||||
['connections_public_connection_folder_move_failed', 'Échec du déplacement vers le dossier'],
|
||||
['connections_public_connection_folder_move_duplication', 'Le dossier cible ou les dossiers sélectionnés contiennent un dossier portant le même nom ({arg:name})'],
|
||||
['connections_public_connection_cloud_auth_required', 'Vous devez vous connecter avec les identifiants "{arg:providerLabel}" pour travailler avec cette connexion.'],
|
||||
['plugin_connections_connection_form_project_invalid', 'Vous n\'avez pas accès à la création de connexions dans le projet sélectionné'],
|
||||
['plugin_connections_connection_form_host_configuration_invalid', 'La configuration de l\'hôte n\'est pas supportée'],
|
||||
[
|
||||
'connections_public_connection_folder_move_duplication',
|
||||
'Le dossier cible ou les dossiers sélectionnés contiennent un dossier portant le même nom ({arg:name})',
|
||||
],
|
||||
[
|
||||
'connections_public_connection_cloud_auth_required',
|
||||
'Vous devez vous connecter avec les identifiants "{arg:providerLabel}" pour travailler avec cette connexion.',
|
||||
],
|
||||
['plugin_connections_connection_form_project_invalid', "Vous n'avez pas accès à la création de connexions dans le projet sélectionné"],
|
||||
['plugin_connections_connection_form_host_configuration_invalid', "La configuration de l'hôte n'est pas supportée"],
|
||||
['plugin_connections_connection_form_name_invalid', 'Le champ "Nom de la connexion" ne peut pas être vide'],
|
||||
['plugin_connections_connection_form_host_invalid', 'Le champ "Hôte" ne peut pas être vide'],
|
||||
['connections_public_connection_folder_delete_confirmation', 'Vous allez supprimer "{arg:name}". Les connexions ne seront pas supprimées. Êtes-vous sûr ?'],
|
||||
[
|
||||
'connections_public_connection_folder_delete_confirmation',
|
||||
'Vous allez supprimer "{arg:name}". Les connexions ne seront pas supprimées. Êtes-vous sûr ?',
|
||||
],
|
||||
['plugin_connections_menu_connections_label', 'Connexion'],
|
||||
['plugin_connections_action_disconnect_all_label', 'Déconnecter tout'],
|
||||
['settings_connections', 'Connexions'],
|
||||
['settings_connections_hide_connections_view_name', 'Afficher les connexions uniquement aux administrateurs'],
|
||||
['settings_connections_hide_connections_view_description', 'Afficher les connexions uniquement aux administrateurs'],
|
||||
['settings_connections_hide_connections_view_name', 'Hide connections'],
|
||||
['settings_connections_hide_connections_view_description', 'Connections will be hidden for all users except administrators'],
|
||||
|
||||
['connections_public_connection_ssl_enable', 'Activer SSL'],
|
||||
|
||||
['plugin_connections_connection_form_shared_credentials_manage_info', 'Vous pouvez gérer les identifiants dans l\'onglet '],
|
||||
['plugin_connections_connection_form_shared_credentials_manage_info', "Vous pouvez gérer les identifiants dans l'onglet "],
|
||||
['plugin_connections_connection_form_shared_credentials_manage_info_tab_link', 'Onglet Identifiants'],
|
||||
['plugin_connections_connection_auth_secret_description', 'Veuillez sélectionner les identifiants fournis par une de vos équipes'],
|
||||
];
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['connections_public_connection_edit_menu_item_title', 'Modifica Connessione'],
|
||||
['connections_public_connection_edit_cancel_title', "Conferma l'annullamento"],
|
||||
@@ -18,8 +25,8 @@ export default [
|
||||
['plugin_connections_menu_connections_label', 'Connessione'],
|
||||
['plugin_connections_action_disconnect_all_label', 'Scollegati da tutto'],
|
||||
['settings_connections', 'Connections'],
|
||||
['settings_connections_hide_connections_view_name', 'Show connections to admins only'],
|
||||
['settings_connections_hide_connections_view_description', 'Show connections to admins only'],
|
||||
['settings_connections_hide_connections_view_name', 'Hide connections'],
|
||||
['settings_connections_hide_connections_view_description', 'Connections will be hidden for all users except administrators'],
|
||||
|
||||
['connections_public_connection_ssl_enable', 'Enable SSL'],
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@ export default [
|
||||
['plugin_connections_menu_connections_label', 'Подключение'],
|
||||
['plugin_connections_action_disconnect_all_label', 'Отключить все'],
|
||||
['settings_connections', 'Подключения'],
|
||||
['settings_connections_hide_connections_view_name', 'Показывать подключения только администраторам'],
|
||||
['settings_connections_hide_connections_view_description', 'Показывать подключения только администраторам'],
|
||||
['settings_connections_hide_connections_view_name', 'Скрыть подключения'],
|
||||
['settings_connections_hide_connections_view_description', 'Подключения будут скрыты для всех пользователей, кроме администраторов'],
|
||||
|
||||
['connections_public_connection_ssl_enable', 'Включить SSL'],
|
||||
|
||||
|
||||
@@ -22,15 +22,12 @@ export default [
|
||||
['plugin_connections_menu_connections_label', '连接'],
|
||||
['plugin_connections_action_disconnect_all_label', '断开所有连接'],
|
||||
['settings_connections', '连接'],
|
||||
['settings_connections_hide_connections_view_name', '仅对管理员显示连接'],
|
||||
['settings_connections_hide_connections_view_description', '仅对管理员显示连接'],
|
||||
['settings_connections_hide_connections_view_name', 'Hide connections'],
|
||||
['settings_connections_hide_connections_view_description', 'Connections will be hidden for all users except administrators'],
|
||||
|
||||
['connections_public_connection_ssl_enable', '启用 SSL'],
|
||||
|
||||
['plugin_connections_connection_form_shared_credentials_manage_info', '您可在此管理凭证 '],
|
||||
['plugin_connections_connection_form_shared_credentials_manage_info_tab_link', '凭证页签'],
|
||||
[
|
||||
'plugin_connections_connection_auth_secret_description',
|
||||
'有多个凭证可用于身份验证.\n请选择您要使用的凭证。',
|
||||
],
|
||||
['plugin_connections_connection_auth_secret_description', '有多个凭证可用于身份验证.\n请选择您要使用的凭证。'],
|
||||
];
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
"@cloudbeaver/plugin-object-viewer": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"@types/react": "^18",
|
||||
"typescript": "^5",
|
||||
"typescript-plugin-css-modules": "^5"
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
"@cloudbeaver/plugin-object-viewer": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"@types/react": "^18",
|
||||
"typescript": "^5",
|
||||
"typescript-plugin-css-modules": "^5"
|
||||
|
||||
@@ -13,8 +13,9 @@ import { StorageService } from '@cloudbeaver/core-storage';
|
||||
|
||||
interface IDevToolsSettings {
|
||||
enabled: boolean;
|
||||
distributed: boolean;
|
||||
configuration: boolean;
|
||||
override: boolean;
|
||||
distributed: boolean | null;
|
||||
configuration: boolean | null;
|
||||
}
|
||||
|
||||
const DEVTOOLS = 'devtools';
|
||||
@@ -25,12 +26,23 @@ export class DevToolsService {
|
||||
return this.settings.enabled;
|
||||
}
|
||||
|
||||
get isOverride(): boolean {
|
||||
return this.settings.override;
|
||||
}
|
||||
|
||||
get isDistributed(): boolean {
|
||||
return this.settings.distributed;
|
||||
if (!this.isOverride) {
|
||||
return this.serverConfigResource.data?.distributed ?? false;
|
||||
}
|
||||
|
||||
return this.settings.distributed ?? this.serverConfigResource.data?.distributed ?? false;
|
||||
}
|
||||
|
||||
get isConfiguration(): boolean {
|
||||
return this.settings.configuration;
|
||||
if (!this.isOverride) {
|
||||
return this.serverConfigResource.data?.configurationMode ?? false;
|
||||
}
|
||||
return this.settings.configuration ?? this.serverConfigResource.data?.configurationMode ?? false;
|
||||
}
|
||||
|
||||
private readonly settings: IDevToolsSettings;
|
||||
@@ -53,6 +65,11 @@ export class DevToolsService {
|
||||
this.syncSettingsOverride();
|
||||
}
|
||||
|
||||
setOverride(override: boolean) {
|
||||
this.settings.override = override;
|
||||
this.syncSettingsOverride();
|
||||
}
|
||||
|
||||
setDistributedMode(distributed: boolean) {
|
||||
this.settings.distributed = distributed;
|
||||
this.syncSettingsOverride();
|
||||
@@ -64,10 +81,14 @@ export class DevToolsService {
|
||||
}
|
||||
|
||||
private syncSettingsOverride() {
|
||||
if (this.isEnabled) {
|
||||
if (this.isOverride && this.isEnabled) {
|
||||
if (this.serverConfigResource.data) {
|
||||
this.serverConfigResource.data.distributed = this.isDistributed;
|
||||
this.serverConfigResource.data.configurationMode = this.isConfiguration;
|
||||
if (this.settings.distributed !== null) {
|
||||
this.serverConfigResource.data.distributed = this.isDistributed;
|
||||
}
|
||||
if (this.settings.configuration !== null) {
|
||||
this.serverConfigResource.data.configurationMode = this.isConfiguration;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,7 +97,8 @@ export class DevToolsService {
|
||||
function getDefaultDevToolsSettings(): IDevToolsSettings {
|
||||
return {
|
||||
enabled: process.env['NODE_ENV'] === 'development',
|
||||
distributed: false,
|
||||
configuration: false,
|
||||
override: false,
|
||||
distributed: null,
|
||||
configuration: null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import { MENU_USER_PROFILE } from '@cloudbeaver/plugin-user-profile';
|
||||
import { ACTION_DEVTOOLS } from './actions/ACTION_DEVTOOLS.js';
|
||||
import { ACTION_DEVTOOLS_MODE_CONFIGURATION } from './actions/ACTION_DEVTOOLS_MODE_CONFIGURATION.js';
|
||||
import { ACTION_DEVTOOLS_MODE_DISTRIBUTED } from './actions/ACTION_DEVTOOLS_MODE_DISTRIBUTED.js';
|
||||
import { ACTION_DEVTOOLS_OVERRIDE } from './actions/ACTION_DEVTOOLS_OVERRIDE.js';
|
||||
import { DATA_CONTEXT_MENU_SEARCH } from './ContextMenu/DATA_CONTEXT_MENU_SEARCH.js';
|
||||
import { SearchResourceMenuItem } from './ContextMenu/SearchResourceMenuItem.js';
|
||||
import { DevToolsService } from './DevToolsService.js';
|
||||
@@ -89,7 +90,14 @@ export class PluginBootstrap extends Bootstrap {
|
||||
];
|
||||
}
|
||||
|
||||
return [new SearchResourceMenuItem(), ACTION_DEVTOOLS_MODE_DISTRIBUTED, ACTION_DEVTOOLS_MODE_CONFIGURATION, MENU_PLUGINS, ...items];
|
||||
return [
|
||||
new SearchResourceMenuItem(),
|
||||
ACTION_DEVTOOLS_OVERRIDE,
|
||||
ACTION_DEVTOOLS_MODE_DISTRIBUTED,
|
||||
ACTION_DEVTOOLS_MODE_CONFIGURATION,
|
||||
MENU_PLUGINS,
|
||||
...items,
|
||||
];
|
||||
},
|
||||
});
|
||||
|
||||
@@ -97,6 +105,7 @@ export class PluginBootstrap extends Bootstrap {
|
||||
id: 'devtools-mode-configuration',
|
||||
actions: [ACTION_DEVTOOLS_MODE_CONFIGURATION],
|
||||
isChecked: () => this.devToolsService.isConfiguration,
|
||||
isDisabled: () => !this.devToolsService.isOverride,
|
||||
handler: () => {
|
||||
this.devToolsService.setConfigurationMode(!this.devToolsService.isConfiguration);
|
||||
},
|
||||
@@ -106,11 +115,21 @@ export class PluginBootstrap extends Bootstrap {
|
||||
id: 'devtools-mode-distributed',
|
||||
actions: [ACTION_DEVTOOLS_MODE_DISTRIBUTED],
|
||||
isChecked: () => this.devToolsService.isDistributed,
|
||||
isDisabled: () => !this.devToolsService.isOverride,
|
||||
handler: () => {
|
||||
this.devToolsService.setDistributedMode(!this.devToolsService.isDistributed);
|
||||
},
|
||||
});
|
||||
|
||||
this.actionService.addHandler({
|
||||
id: 'devtools-override',
|
||||
actions: [ACTION_DEVTOOLS_OVERRIDE],
|
||||
isChecked: () => this.devToolsService.isOverride,
|
||||
handler: () => {
|
||||
this.devToolsService.setOverride(!this.devToolsService.isOverride);
|
||||
},
|
||||
});
|
||||
|
||||
this.menuService.addCreator({
|
||||
menus: [MENU_PLUGINS],
|
||||
getItems: (context, items) => [
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 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 { createAction } from '@cloudbeaver/core-view';
|
||||
|
||||
export const ACTION_DEVTOOLS_OVERRIDE = createAction('devtools-override', {
|
||||
type: 'checkbox',
|
||||
label: 'Override',
|
||||
tooltip: 'Override server settings',
|
||||
});
|
||||
@@ -50,7 +50,7 @@
|
||||
"@cloudbeaver/plugin-tools-panel": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"@types/react": "^18",
|
||||
"typescript": "^5",
|
||||
"typescript-plugin-css-modules": "^5"
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
import { ROOT_SETTINGS_GROUP } from '@cloudbeaver/core-settings';
|
||||
import { TOOLS_PANEL_SETTINGS_GROUP } from '@cloudbeaver/plugin-tools-panel';
|
||||
|
||||
export const LOG_VIEWER_SETTINGS_GROUP = ROOT_SETTINGS_GROUP.createSubGroup('plugin_log_viewer_log_viewer_settings_group');
|
||||
export const LOG_VIEWER_SETTINGS_GROUP = TOOLS_PANEL_SETTINGS_GROUP.createSubGroup('plugin_log_viewer_log_viewer_settings_group');
|
||||
|
||||
@@ -53,19 +53,15 @@ const app = createApp(
|
||||
);
|
||||
|
||||
const deprecatedSettings = {
|
||||
'core.app.logViewer.refreshTimeout': 1,
|
||||
'core.app.logViewer.maxLogRecords': 2,
|
||||
'core.app.logViewer.logBatchSize': 3,
|
||||
'core.app.logViewer.maxFailedRequests': 4,
|
||||
'core.app.logViewer.disabled': true,
|
||||
};
|
||||
|
||||
const newSettings = {
|
||||
...deprecatedSettings,
|
||||
'plugin.log-viewer.refreshTimeout': 5,
|
||||
'plugin.log-viewer.maxLogRecords': 6,
|
||||
'plugin.log-viewer.logBatchSize': 7,
|
||||
'plugin.log-viewer.maxFailedRequests': 8,
|
||||
'plugin.log-viewer.disabled': false,
|
||||
};
|
||||
|
||||
@@ -77,10 +73,8 @@ test('New settings override deprecated settings', async () => {
|
||||
|
||||
await config.refresh();
|
||||
|
||||
expect(settings.refreshTimeout).toBe(5);
|
||||
expect(settings.maxLogRecords).toBe(6);
|
||||
expect(settings.logBatchSize).toBe(7);
|
||||
expect(settings.maxFailedRequests).toBe(8);
|
||||
expect(settings.disabled).toBe(false);
|
||||
expectNoDeprecatedSettingMessage();
|
||||
});
|
||||
@@ -93,10 +87,8 @@ test('Deprecated settings are used if new settings are not defined', async () =>
|
||||
|
||||
await config.refresh();
|
||||
|
||||
expect(settings.refreshTimeout).toBe(1);
|
||||
expect(settings.maxLogRecords).toBe(2);
|
||||
expect(settings.logBatchSize).toBe(3);
|
||||
expect(settings.maxFailedRequests).toBe(4);
|
||||
expect(settings.disabled).toBe(true);
|
||||
expectDeprecatedSettingMessage();
|
||||
});
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
import { Dependency, injectable } from '@cloudbeaver/core-di';
|
||||
import {
|
||||
createSettingsAliasResolver,
|
||||
ESettingsValueType,
|
||||
ROOT_SETTINGS_LAYER,
|
||||
SettingsManagerService,
|
||||
SettingsProvider,
|
||||
@@ -15,12 +16,11 @@ import {
|
||||
SettingsResolverService,
|
||||
} from '@cloudbeaver/core-settings';
|
||||
import { schema, schemaExtra } from '@cloudbeaver/core-utils';
|
||||
import { TOOLS_PANEL_SETTINGS_GROUP } from '@cloudbeaver/plugin-tools-panel';
|
||||
|
||||
const defaultSettings = schema.object({
|
||||
'plugin.log-viewer.refreshTimeout': schema.coerce.number().default(3000),
|
||||
'plugin.log-viewer.maxLogRecords': schema.coerce.number().default(1000),
|
||||
'plugin.log-viewer.logBatchSize': schema.coerce.number().default(2000),
|
||||
'plugin.log-viewer.maxFailedRequests': schema.coerce.number().default(3),
|
||||
'plugin.log-viewer.disabled': schemaExtra.stringedBoolean().default(false),
|
||||
});
|
||||
|
||||
@@ -32,10 +32,6 @@ export class LogViewerSettingsService extends Dependency {
|
||||
return this.settings.getValue('plugin.log-viewer.disabled');
|
||||
}
|
||||
|
||||
get refreshTimeout(): number {
|
||||
return this.settings.getValue('plugin.log-viewer.refreshTimeout');
|
||||
}
|
||||
|
||||
get maxLogRecords(): number {
|
||||
return this.settings.getValue('plugin.log-viewer.maxLogRecords');
|
||||
}
|
||||
@@ -44,10 +40,6 @@ export class LogViewerSettingsService extends Dependency {
|
||||
return this.settings.getValue('plugin.log-viewer.logBatchSize');
|
||||
}
|
||||
|
||||
get maxFailedRequests(): number {
|
||||
return this.settings.getValue('plugin.log-viewer.maxFailedRequests');
|
||||
}
|
||||
|
||||
readonly settings: SettingsProvider<typeof defaultSettings>;
|
||||
|
||||
constructor(
|
||||
@@ -63,9 +55,7 @@ export class LogViewerSettingsService extends Dependency {
|
||||
createSettingsAliasResolver(this.settingsResolverService, this.settings, {
|
||||
'plugin.log-viewer.disabled': 'core.app.logViewer.disabled',
|
||||
'plugin.log-viewer.logBatchSize': 'core.app.logViewer.logBatchSize',
|
||||
'plugin.log-viewer.maxFailedRequests': 'core.app.logViewer.maxFailedRequests',
|
||||
'plugin.log-viewer.maxLogRecords': 'core.app.logViewer.maxLogRecords',
|
||||
'plugin.log-viewer.refreshTimeout': 'core.app.logViewer.refreshTimeout',
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -76,42 +66,34 @@ export class LogViewerSettingsService extends Dependency {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// group: LOG_VIEWER_SETTINGS_GROUP,
|
||||
// key: 'refreshTimeout',
|
||||
// type: ESettingsValueType.Input,
|
||||
// name: 'Refresh timeout',
|
||||
// description: 'Refresh timeout in milliseconds',
|
||||
// },
|
||||
// {
|
||||
// group: LOG_VIEWER_SETTINGS_GROUP,
|
||||
// key: 'maxLogRecords',
|
||||
// type: ESettingsValueType.Input,
|
||||
// name: 'Max log records',
|
||||
// description: 'Max log records',
|
||||
// },
|
||||
// {
|
||||
// group: LOG_VIEWER_SETTINGS_GROUP,
|
||||
// key: 'logBatchSize',
|
||||
// type: ESettingsValueType.Input,
|
||||
// name: 'Log batch size',
|
||||
// description: 'Log batch size',
|
||||
// },
|
||||
// {
|
||||
// group: LOG_VIEWER_SETTINGS_GROUP,
|
||||
// key: 'maxFailedRequests',
|
||||
// type: ESettingsValueType.Input,
|
||||
// name: 'Max failed requests',
|
||||
// description: 'Max failed requests',
|
||||
// },
|
||||
// {
|
||||
// key: 'plugin.log-viewer.disabled',
|
||||
// key: 'plugin.log-viewer.maxLogRecords',
|
||||
// access: {
|
||||
// scope: ['server', 'client'],
|
||||
// scope: ['client'],
|
||||
// },
|
||||
// group: LOG_VIEWER_SETTINGS_GROUP,
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// name: 'Disable log viewer',
|
||||
// description: 'Disable log viewer',
|
||||
// type: ESettingsValueType.Input,
|
||||
// name: 'plugin_log_viewer_settings_max_log_records',
|
||||
// description: 'plugin_log_viewer_settings_max_log_records_description',
|
||||
// },
|
||||
// {
|
||||
// group: LOG_VIEWER_SETTINGS_GROUP,
|
||||
// key: 'plugin.log-viewer.logBatchSize',
|
||||
// access: {
|
||||
// scope: ['client'],
|
||||
// },
|
||||
// type: ESettingsValueType.Input,
|
||||
// name: 'plugin_log_viewer_settings_log_batch_size',
|
||||
// description: 'plugin_log_viewer_settings_log_batch_size_description',
|
||||
// },
|
||||
{
|
||||
key: 'plugin.log-viewer.disabled',
|
||||
access: {
|
||||
scope: ['server'],
|
||||
},
|
||||
group: TOOLS_PANEL_SETTINGS_GROUP,
|
||||
type: ESettingsValueType.Checkbox,
|
||||
name: 'plugin_log_viewer_settings_disable',
|
||||
description: 'plugin_log_viewer_settings_disable_description',
|
||||
},
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,10 +53,11 @@ export class SessionLogsResource extends CachedDataResource<ILogEntry[]> {
|
||||
}
|
||||
|
||||
protected async loader(): Promise<ILogEntry[]> {
|
||||
const maxLogEntries = this.logViewerSettingsService.logBatchSize;
|
||||
const maxLogRecords = this.logViewerSettingsService.maxLogRecords;
|
||||
const batchSize = this.logViewerSettingsService.logBatchSize;
|
||||
|
||||
const { log } = await this.graphQLService.sdk.readSessionLog({
|
||||
maxEntries: maxLogEntries,
|
||||
maxEntries: batchSize,
|
||||
clearEntries: true,
|
||||
});
|
||||
|
||||
@@ -68,8 +69,8 @@ export class SessionLogsResource extends CachedDataResource<ILogEntry[]> {
|
||||
runInAction(() => {
|
||||
this.data.unshift(...logs.reverse());
|
||||
|
||||
if (this.data.length > maxLogEntries) {
|
||||
this.data.splice(maxLogEntries, this.data.length - maxLogEntries);
|
||||
if (this.data.length > maxLogRecords) {
|
||||
this.data.splice(maxLogRecords, this.data.length - maxLogRecords);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
|
||||
export default [
|
||||
['plugin_log_viewer_log_viewer_settings_group', 'Log viewer'],
|
||||
['plugin_log_viewer_action_enable_label', 'Log viewer'],
|
||||
@@ -7,4 +15,10 @@ export default [
|
||||
['plugin_log_viewer_entry_timestamp', 'Time'],
|
||||
['plugin_log_viewer_entry_message', 'Message'],
|
||||
['plugin_log_viewer_entry_details', 'Details'],
|
||||
['plugin_log_viewer_settings_disable', 'Disable log viewer'],
|
||||
['plugin_log_viewer_settings_disable_description', 'Disable the ability to view logs for all users'],
|
||||
['plugin_log_viewer_settings_max_log_records', 'Max log records'],
|
||||
['plugin_log_viewer_settings_max_log_records_description', 'Max log records to store in the log viewer, older records will be deleted'],
|
||||
['plugin_log_viewer_settings_log_batch_size', 'Amount of log records to load'],
|
||||
['plugin_log_viewer_settings_log_batch_size_description', 'Amount of log records to load in a single request'],
|
||||
];
|
||||
|
||||
@@ -14,4 +14,10 @@ export default [
|
||||
['plugin_log_viewer_entry_timestamp', 'Heure'],
|
||||
['plugin_log_viewer_entry_message', 'Message'],
|
||||
['plugin_log_viewer_entry_details', 'Détails'],
|
||||
['plugin_log_viewer_settings_disable', 'Disable log viewer'],
|
||||
['plugin_log_viewer_settings_disable_description', 'Disable the ability to view logs for all users'],
|
||||
['plugin_log_viewer_settings_max_log_records', 'Max log records'],
|
||||
['plugin_log_viewer_settings_max_log_records_description', 'Max log records to store in the log viewer, older records will be deleted'],
|
||||
['plugin_log_viewer_settings_log_batch_size', 'Amount of log records to load'],
|
||||
['plugin_log_viewer_settings_log_batch_size_description', 'Amount of log records to load in a single request'],
|
||||
];
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['plugin_log_viewer_log_viewer_settings_group', 'Log viewer'],
|
||||
['plugin_log_viewer_action_enable_label', 'Visualizzatore del log'],
|
||||
@@ -7,4 +14,10 @@ export default [
|
||||
['plugin_log_viewer_entry_timestamp', 'Time'],
|
||||
['plugin_log_viewer_entry_message', 'Messaggio'],
|
||||
['plugin_log_viewer_entry_details', 'Dettagli'],
|
||||
['plugin_log_viewer_settings_disable', 'Disable log viewer'],
|
||||
['plugin_log_viewer_settings_disable_description', 'Disable the ability to view logs for all users'],
|
||||
['plugin_log_viewer_settings_max_log_records', 'Max log records'],
|
||||
['plugin_log_viewer_settings_max_log_records_description', 'Max log records to store in the log viewer, older records will be deleted'],
|
||||
['plugin_log_viewer_settings_log_batch_size', 'Amount of log records to load'],
|
||||
['plugin_log_viewer_settings_log_batch_size_description', 'Amount of log records to load in a single request'],
|
||||
];
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['plugin_log_viewer_log_viewer_settings_group', 'Log viewer'],
|
||||
['plugin_log_viewer_log_viewer_settings_group', 'Просмотр логов'],
|
||||
['plugin_log_viewer_action_enable_label', 'Просмотр логов'],
|
||||
['plugin_log_viewer_placeholder', 'Просмотр логов неактивен'],
|
||||
['plugin_log_viewer_clear_log', 'Очистить лог'],
|
||||
@@ -7,4 +14,10 @@ export default [
|
||||
['plugin_log_viewer_entry_timestamp', 'Время'],
|
||||
['plugin_log_viewer_entry_message', 'Сообщение'],
|
||||
['plugin_log_viewer_entry_details', 'Детали'],
|
||||
['plugin_log_viewer_settings_disable', 'Отключить просмотр логов'],
|
||||
['plugin_log_viewer_settings_disable_description', 'Отключить возможность просмотра логов для всех пользователей'],
|
||||
['plugin_log_viewer_settings_max_log_records', 'Максимальное количество записей'],
|
||||
['plugin_log_viewer_settings_max_log_records_description', 'Максимальное количество записей для хранения, старые записи будут удалены'],
|
||||
['plugin_log_viewer_settings_log_batch_size', 'Количество записей для загрузки'],
|
||||
['plugin_log_viewer_settings_log_batch_size_description', 'Количество записей для загрузки за один запрос'],
|
||||
];
|
||||
|
||||
@@ -14,4 +14,10 @@ export default [
|
||||
['plugin_log_viewer_entry_timestamp', '时间戳'],
|
||||
['plugin_log_viewer_entry_message', '消息'],
|
||||
['plugin_log_viewer_entry_details', '详情'],
|
||||
['plugin_log_viewer_settings_disable', 'Disable log viewer'],
|
||||
['plugin_log_viewer_settings_disable_description', 'Disable the ability to view logs for all users'],
|
||||
['plugin_log_viewer_settings_max_log_records', 'Max log records'],
|
||||
['plugin_log_viewer_settings_max_log_records_description', 'Max log records to store in the log viewer, older records will be deleted'],
|
||||
['plugin_log_viewer_settings_log_batch_size', 'Amount of log records to load'],
|
||||
['plugin_log_viewer_settings_log_batch_size_description', 'Amount of log records to load in a single request'],
|
||||
];
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
"@cloudbeaver/plugin-navigation-tabs": "^0",
|
||||
"@cloudbeaver/tests-runner": "^0",
|
||||
"@jest/globals": "^29",
|
||||
"@testing-library/jest-dom": "^6",
|
||||
"@types/jest": "^29",
|
||||
"@types/react": "^18",
|
||||
"typescript": "^5",
|
||||
"typescript-plugin-css-modules": "^5"
|
||||
|
||||
+4
-4
@@ -5,12 +5,14 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
import { importLazyComponent } from '@cloudbeaver/core-blocks';
|
||||
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
|
||||
import { LeftBarPanelService } from '@cloudbeaver/core-ui';
|
||||
|
||||
import { NavigationTreeSettingsService } from '../NavigationTreeSettingsService.js';
|
||||
import { ElementsTreeToolsMenuService } from './ElementsTree/ElementsTreeTools/ElementsTreeToolsMenuService.js';
|
||||
import { NavigationTreePanel } from './NavigationTreePanel.js';
|
||||
|
||||
const NavigationTreePanel = importLazyComponent(() => import('./NavigationTreePanel.js').then(m => m.NavigationTreePanel));
|
||||
|
||||
@injectable()
|
||||
export class NavigationTreeBootstrap extends Bootstrap {
|
||||
@@ -22,7 +24,7 @@ export class NavigationTreeBootstrap extends Bootstrap {
|
||||
super();
|
||||
}
|
||||
|
||||
override register(): void | Promise<void> {
|
||||
override register(): void {
|
||||
this.elementsTreeToolsMenuService.register();
|
||||
this.leftBarPanelService.tabsContainer.add({
|
||||
key: 'navigation-tree-tab',
|
||||
@@ -32,6 +34,4 @@ export class NavigationTreeBootstrap extends Bootstrap {
|
||||
panel: () => NavigationTreePanel,
|
||||
});
|
||||
}
|
||||
|
||||
override async load(): Promise<void> {}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
import { computed, makeObservable } from 'mobx';
|
||||
|
||||
import { Dependency, injectable } from '@cloudbeaver/core-di';
|
||||
import { SettingsManagerService, SettingsProvider, SettingsProviderService } from '@cloudbeaver/core-settings';
|
||||
import { NAVIGATION_TREE_SETTINGS_GROUP } from '@cloudbeaver/core-navigation-tree';
|
||||
import { ESettingsValueType, SettingsManagerService, SettingsProvider, SettingsProviderService } from '@cloudbeaver/core-settings';
|
||||
import { schema, schemaExtra } from '@cloudbeaver/core-utils';
|
||||
|
||||
const defaultSettings = schema.object({
|
||||
@@ -43,9 +44,13 @@ export class NavigationTreeSettingsService extends Dependency {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// group: NAVIGATION_TREE_SETTINGS_GROUP,
|
||||
// key: 'disabled',
|
||||
// key: 'plugin.navigation-tree.disabled',
|
||||
// access: {
|
||||
// scope: ['server'],
|
||||
// },
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// name: 'Disable navigation tree',
|
||||
// name: 'plugin_navigation_tree_settings_disable',
|
||||
// description: 'plugin_navigation_tree_settings_disable_description',
|
||||
// },
|
||||
]);
|
||||
}
|
||||
|
||||
+2
-1
@@ -5,5 +5,6 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
import type { ITreeData } from '../ITreeData.js';
|
||||
|
||||
export type TreeDataTransformer<T> = (nodeId: string, data: T) => T;
|
||||
export type TreeDataTransformer<T> = (treeData: ITreeData, nodeId: string, data: T) => T;
|
||||
|
||||
+3
-2
@@ -5,15 +5,16 @@
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
import type { ITreeData } from '../ITreeData.js';
|
||||
import type { TreeDataTransformer } from './TreeDataTransformer.js';
|
||||
|
||||
export function applyTransforms<T>(id: string, data: T, transformers?: TreeDataTransformer<T>[]) {
|
||||
export function applyTransforms<T>(treeData: ITreeData, id: string, data: T, transformers?: TreeDataTransformer<T>[]) {
|
||||
if (!transformers) {
|
||||
return data;
|
||||
}
|
||||
|
||||
for (const transformer of transformers) {
|
||||
data = transformer(id, data);
|
||||
data = transformer(treeData, id, data);
|
||||
}
|
||||
|
||||
return data;
|
||||
|
||||
+2
-2
@@ -10,7 +10,7 @@ import type { INodeState } from '../INodeState.js';
|
||||
import type { TreeDataTransformer } from './TreeDataTransformer.js';
|
||||
|
||||
export function rootNodeStateTransformer(root: string): TreeDataTransformer<INodeState> {
|
||||
return function rootNodeStateTransformer(nodeId, data) {
|
||||
return function rootNodeStateTransformer(treeData, nodeId, data) {
|
||||
if (nodeId === root) {
|
||||
return {
|
||||
...data,
|
||||
@@ -23,7 +23,7 @@ export function rootNodeStateTransformer(root: string): TreeDataTransformer<INod
|
||||
}
|
||||
|
||||
export function rootNodeTransformer(root: string): TreeDataTransformer<INode> {
|
||||
return function rootNodeTransformer(nodeId, data) {
|
||||
return function rootNodeTransformer(treeData, nodeId, data) {
|
||||
if (nodeId === root) {
|
||||
return {
|
||||
...data,
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 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 type { INode } from './INode.js';
|
||||
import type { INodeState } from './INodeState.js';
|
||||
|
||||
export interface ITreeData {
|
||||
rootId: string;
|
||||
|
||||
getNode(id: string): INode;
|
||||
getChildren: (node: string) => string[];
|
||||
getState(id: string): Readonly<INodeState>;
|
||||
|
||||
updateAllState(state: Partial<INodeState>): void;
|
||||
updateState(id: string, state: Partial<INodeState>): void;
|
||||
load(nodeId: string, manual: boolean): Promise<void>;
|
||||
update(): Promise<void>;
|
||||
}
|
||||
@@ -13,10 +13,12 @@ import { getComputed, TreeNodeNested } from '@cloudbeaver/core-blocks';
|
||||
import { NodeSizeCacheContext } from './contexts/NodeSizeCacheContext.js';
|
||||
import { TreeDataContext } from './contexts/TreeDataContext.js';
|
||||
import { TreeVirtualizationContext } from './contexts/TreeVirtualizationContext.js';
|
||||
import type { NodeEmptyPlaceholderComponent } from './NodeEmptyPlaceholderComponent.js';
|
||||
import { NodeRenderer } from './NodeRenderer.js';
|
||||
|
||||
interface Props {
|
||||
nodeId: string;
|
||||
emptyPlaceholder?: NodeEmptyPlaceholderComponent;
|
||||
offsetHeight: number;
|
||||
root?: boolean;
|
||||
}
|
||||
@@ -31,7 +33,7 @@ function getPositionWithOverscan(position: number, forward: boolean) {
|
||||
return position - (position % OVERSCAN);
|
||||
}
|
||||
|
||||
const NodeChildrenObserved = observer<Props>(function NodeChildren({ nodeId, offsetHeight, root }) {
|
||||
const NodeChildrenObserved = observer<Props>(function NodeChildren({ nodeId, emptyPlaceholder, offsetHeight, root }) {
|
||||
const data = useContext(TreeDataContext)!;
|
||||
const optimization = useContext(TreeVirtualizationContext)!;
|
||||
const sizeCache = useContext(NodeSizeCacheContext)!;
|
||||
@@ -70,6 +72,11 @@ const NodeChildrenObserved = observer<Props>(function NodeChildren({ nodeId, off
|
||||
elements.push(<div key={lastId} style={{ height: postFillHeight }} />);
|
||||
}
|
||||
|
||||
if (elements.length === 0 && emptyPlaceholder) {
|
||||
const EmptyPlaceholder = emptyPlaceholder;
|
||||
elements.push(<EmptyPlaceholder key="empty" root={root} />);
|
||||
}
|
||||
|
||||
return elements;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
|
||||
export type NodeEmptyPlaceholderComponent = React.FC<{
|
||||
root?: boolean;
|
||||
}>;
|
||||
@@ -15,16 +15,18 @@ import { TreeDataContext } from './contexts/TreeDataContext.js';
|
||||
import { TreeDnDContext } from './contexts/TreeDnDContext.js';
|
||||
import { TreeVirtualizationContext } from './contexts/TreeVirtualizationContext.js';
|
||||
import type { INodeRenderer } from './INodeRenderer.js';
|
||||
import type { ITreeData } from './ITreeData.js';
|
||||
import { NodeChildren } from './NodeChildren.js';
|
||||
import type { NodeEmptyPlaceholderComponent } from './NodeEmptyPlaceholderComponent.js';
|
||||
import { useNodeSizeCache } from './useNodeSizeCache.js';
|
||||
import { useTree } from './useTree.js';
|
||||
import type { ITreeData } from './useTreeData.js';
|
||||
import { useTreeDnD } from './useTreeDnD.js';
|
||||
import { useTreeVirtualization } from './useTreeVirtualization.js';
|
||||
|
||||
export interface NavigationTreeNewProps {
|
||||
data: ITreeData;
|
||||
nodeRenderers?: INodeRenderer[];
|
||||
emptyPlaceholder?: NodeEmptyPlaceholderComponent;
|
||||
onNodeClick?(id: string): void | Promise<void>;
|
||||
onNodeDoubleClick?(id: string): void | Promise<void>;
|
||||
getNodeDnDContext?(id: string, context: IDataContext): void;
|
||||
@@ -34,6 +36,7 @@ export interface NavigationTreeNewProps {
|
||||
export const Tree = observer<NavigationTreeNewProps>(function Tree({
|
||||
data,
|
||||
nodeRenderers,
|
||||
emptyPlaceholder,
|
||||
onNodeClick,
|
||||
onNodeDoubleClick,
|
||||
getNodeDnDContext,
|
||||
@@ -59,7 +62,7 @@ export const Tree = observer<NavigationTreeNewProps>(function Tree({
|
||||
<TreeVirtualizationContext.Provider value={mountOptimization}>
|
||||
<TreeContext.Provider value={tree}>
|
||||
<TreeDnDContext.Provider value={treeDnD}>
|
||||
<NodeChildren nodeId={data.rootId} offsetHeight={0} root />
|
||||
<NodeChildren nodeId={data.rootId} offsetHeight={0} emptyPlaceholder={emptyPlaceholder} root />
|
||||
</TreeDnDContext.Provider>
|
||||
</TreeContext.Provider>
|
||||
</TreeVirtualizationContext.Provider>
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
*/
|
||||
import { createContext } from 'react';
|
||||
|
||||
import type { ITreeData } from '../useTreeData.js';
|
||||
import type { ITreeData } from '../ITreeData.js';
|
||||
|
||||
export const TreeDataContext = createContext<ITreeData | undefined>(undefined);
|
||||
|
||||
@@ -11,8 +11,8 @@ import { useState } from 'react';
|
||||
import { useObjectRef } from '@cloudbeaver/core-blocks';
|
||||
import { MetadataMap } from '@cloudbeaver/core-utils';
|
||||
|
||||
import type { ITreeData } from './ITreeData.js';
|
||||
import type { ITree } from './useTree.js';
|
||||
import type { ITreeData } from './useTreeData.js';
|
||||
|
||||
export interface INodeSizeCache {
|
||||
getSize(id: string): number;
|
||||
|
||||
@@ -10,7 +10,7 @@ import { observable } from 'mobx';
|
||||
import { useObservableRef } from '@cloudbeaver/core-blocks';
|
||||
|
||||
import type { INodeRenderer, NodeComponent } from './INodeRenderer.js';
|
||||
import type { ITreeData } from './useTreeData.js';
|
||||
import type { ITreeData } from './ITreeData.js';
|
||||
|
||||
interface IOptions {
|
||||
data: ITreeData;
|
||||
|
||||
@@ -16,6 +16,7 @@ import { rootNodeStateTransformer, rootNodeTransformer } from './DataTransformer
|
||||
import type { TreeDataTransformer } from './DataTransformers/TreeDataTransformer.js';
|
||||
import type { INode } from './INode.js';
|
||||
import type { INodeState } from './INodeState.js';
|
||||
import type { ITreeData } from './ITreeData.js';
|
||||
import type { TreeState } from './TreeState.js';
|
||||
import { useTreeState } from './useTreeState.js';
|
||||
|
||||
@@ -31,19 +32,6 @@ interface IOptions {
|
||||
stateTransformers?: TreeDataTransformer<INodeState>[];
|
||||
}
|
||||
|
||||
export interface ITreeData {
|
||||
rootId: string;
|
||||
|
||||
getNode(id: string): INode;
|
||||
getChildren: (node: string) => string[];
|
||||
getState(id: string): Readonly<INodeState>;
|
||||
|
||||
updateAllState(state: Partial<INodeState>): void;
|
||||
updateState(id: string, state: Partial<INodeState>): void;
|
||||
load(nodeId: string, manual: boolean): Promise<void>;
|
||||
update(): Promise<void>;
|
||||
}
|
||||
|
||||
export function useTreeData(options: IOptions): ITreeData {
|
||||
options = useObservableRef(
|
||||
{
|
||||
@@ -67,19 +55,23 @@ export function useTreeData(options: IOptions): ITreeData {
|
||||
const [nodeCache] = useState(
|
||||
() =>
|
||||
new MetadataMap<string, IComputedValue<INode>>(id =>
|
||||
computed(() => applyTransforms(id, options.getNode(id), [rootNodeTransformer(options.rootId), ...(options.nodeTransformers || [])])),
|
||||
computed(() =>
|
||||
applyTransforms(treeData, id, options.getNode(id), [rootNodeTransformer(options.rootId), ...(options.nodeTransformers || [])]),
|
||||
),
|
||||
),
|
||||
);
|
||||
const [childrenCache] = useState(
|
||||
() =>
|
||||
new MetadataMap<string, IComputedValue<string[]>>(id =>
|
||||
computed(() => applyTransforms(id, options.getChildren(id), options.childrenTransformers)),
|
||||
computed(() => applyTransforms(treeData, id, options.getChildren(id), options.childrenTransformers)),
|
||||
),
|
||||
);
|
||||
const [stateCache] = useState(
|
||||
() =>
|
||||
new MetadataMap<string, IComputedValue<INodeState>>(id =>
|
||||
computed(() => applyTransforms(id, state.getState(id), [rootNodeStateTransformer(options.rootId), ...(options.stateTransformers || [])])),
|
||||
computed(() =>
|
||||
applyTransforms(treeData, id, state.getState(id), [rootNodeStateTransformer(options.rootId), ...(options.stateTransformers || [])]),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 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 { observable } from 'mobx';
|
||||
|
||||
import { useObjectRef, useObservableRef } from '@cloudbeaver/core-blocks';
|
||||
|
||||
import type { TreeDataTransformer } from './DataTransformers/TreeDataTransformer.js';
|
||||
import type { ITreeData } from './ITreeData.js';
|
||||
|
||||
export interface ITreeFilterOptions {
|
||||
isNodeMatched?: (nodeId: string, filter: string, isMatched: boolean) => boolean;
|
||||
}
|
||||
|
||||
export interface ITreeFilter {
|
||||
filter: string;
|
||||
isNodeMatched(treeData: ITreeData, nodeId: string): boolean;
|
||||
transformer: TreeDataTransformer<string[]>;
|
||||
setFilter(filter: string): void;
|
||||
}
|
||||
|
||||
export function useTreeFilter(options: ITreeFilterOptions = {}): Readonly<ITreeFilter> {
|
||||
options = useObjectRef(options);
|
||||
return useObservableRef<ITreeFilter>(
|
||||
() => ({
|
||||
filter: '',
|
||||
isNodeMatched(treeData: ITreeData, nodeId: string): boolean {
|
||||
const filter = this.filter.trim();
|
||||
if (!filter) {
|
||||
return true;
|
||||
}
|
||||
|
||||
let isNodeMatched = treeData.getNode(nodeId).name.toLowerCase().includes(filter);
|
||||
|
||||
if (options?.isNodeMatched) {
|
||||
isNodeMatched = options.isNodeMatched(nodeId, filter, isNodeMatched);
|
||||
}
|
||||
|
||||
return isNodeMatched || treeData.getChildren(nodeId).length > 0;
|
||||
},
|
||||
transformer(treeData: ITreeData, nodeId: string, children: string[]): string[] {
|
||||
return children.filter(child => this.isNodeMatched(treeData, child));
|
||||
},
|
||||
setFilter(filter: string): void {
|
||||
this.filter = filter;
|
||||
},
|
||||
}),
|
||||
{
|
||||
filter: observable.ref,
|
||||
},
|
||||
false,
|
||||
['setFilter', 'isNodeMatched', 'transformer'],
|
||||
);
|
||||
}
|
||||
@@ -50,7 +50,10 @@ export * from './TreeNew/contexts/TreeContext.js';
|
||||
export * from './TreeNew/contexts/TreeDataContext.js';
|
||||
export * from './TreeNew/NodeControlLazy.js';
|
||||
export * from './TreeNew/useTreeData.js';
|
||||
export * from './TreeNew/ITreeData.js';
|
||||
export * from './TreeNew/useTreeFilter.js';
|
||||
export * from './TreeNew/INode.js';
|
||||
export * from './TreeNew/NodeEmptyPlaceholderComponent.js';
|
||||
|
||||
export * from './NavigationTree/getNavigationTreeUserSettingsId.js';
|
||||
export * from './NodesManager/NavNodeView/IFolderTransform.js';
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['plugin_navigation_tree_explorer_tab_title', 'Explorer'],
|
||||
['app_navigationTree_openNodeTab', 'Open'],
|
||||
@@ -36,4 +43,6 @@ export default [
|
||||
['app_navigationTree_drop_here', 'Drop here...'],
|
||||
['plugin_navigation_tree_settings_projects_description', 'Displays elements under project groups'],
|
||||
['plugin_navigation_tree_settings_projects_title', 'Group by Project'],
|
||||
['plugin_navigation_tree_settings_disable', 'Disable'],
|
||||
['plugin_navigation_tree_settings_disable_description', 'Disable navigation tree for all users'],
|
||||
];
|
||||
|
||||
@@ -42,4 +42,6 @@ export default [
|
||||
['app_navigationTree_drop_here', 'Déposer ici...'],
|
||||
['plugin_navigation_tree_settings_projects_description', 'Affiche les éléments sous les groupes de projets'],
|
||||
['plugin_navigation_tree_settings_projects_title', 'Grouper par projet'],
|
||||
['plugin_navigation_tree_settings_disable', 'Disable'],
|
||||
['plugin_navigation_tree_settings_disable_description', 'Disable navigation tree for all users'],
|
||||
];
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['plugin_navigation_tree_explorer_tab_title', 'Explorer'],
|
||||
['app_navigationTree_openNodeTab', 'Apri'],
|
||||
@@ -33,4 +40,6 @@ export default [
|
||||
['app_navigationTree_drop_here', 'Drop here...'],
|
||||
['plugin_navigation_tree_settings_projects_description', 'Displays elements under project groups'],
|
||||
['plugin_navigation_tree_settings_projects_title', 'Group by Project'],
|
||||
['plugin_navigation_tree_settings_disable', 'Disable'],
|
||||
['plugin_navigation_tree_settings_disable_description', 'Disable navigation tree for all users'],
|
||||
];
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* CloudBeaver - Cloud Database Manager
|
||||
* Copyright (C) 2020-2024 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0.
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
export default [
|
||||
['plugin_navigation_tree_explorer_tab_title', 'Проводник'],
|
||||
['app_navigationTree_openNodeTab', 'Открыть'],
|
||||
@@ -39,4 +46,6 @@ export default [
|
||||
['app_navigationTree_drop_here', 'Drop here...'],
|
||||
['plugin_navigation_tree_settings_projects_description', 'Группировать элементы по проектам'],
|
||||
['plugin_navigation_tree_settings_projects_title', 'Группировать по проектам'],
|
||||
['plugin_navigation_tree_settings_disable', 'Отключить'],
|
||||
['plugin_navigation_tree_settings_disable_description', 'Отключить дерево навигации для всех пользователей'],
|
||||
];
|
||||
|
||||
@@ -42,4 +42,6 @@ export default [
|
||||
['app_navigationTree_drop_here', '拖动至此...'],
|
||||
['plugin_navigation_tree_settings_projects_description', '在项目分组下显示'],
|
||||
['plugin_navigation_tree_settings_projects_title', '项目分组'],
|
||||
['plugin_navigation_tree_settings_disable', 'Disable'],
|
||||
['plugin_navigation_tree_settings_disable_description', 'Disable navigation tree for all users'],
|
||||
];
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
"@cloudbeaver/core-di": "^0",
|
||||
"@cloudbeaver/core-localization": "^0",
|
||||
"@cloudbeaver/core-resource": "^0",
|
||||
"@cloudbeaver/core-root": "^0",
|
||||
"@cloudbeaver/core-ui": "^0",
|
||||
"@cloudbeaver/core-version": "^0",
|
||||
"@cloudbeaver/core-version-update": "^0",
|
||||
"mobx": "^6",
|
||||
"mobx-react-lite": "^4",
|
||||
"react": "^18"
|
||||
},
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
{
|
||||
"path": "../core-resource/tsconfig.json"
|
||||
},
|
||||
{
|
||||
"path": "../core-root/tsconfig.json"
|
||||
},
|
||||
{
|
||||
"path": "../core-ui/tsconfig.json"
|
||||
},
|
||||
|
||||
+8
-3
@@ -6,7 +6,8 @@
|
||||
* you may not use this file except in compliance with the License.
|
||||
*/
|
||||
import { Dependency, injectable } from '@cloudbeaver/core-di';
|
||||
import { SettingsManagerService, SettingsProvider, SettingsProviderService } from '@cloudbeaver/core-settings';
|
||||
import { RESOURCE_MANAGER_SETTINGS_GROUP } from '@cloudbeaver/core-resource-manager';
|
||||
import { ESettingsValueType, SettingsManagerService, SettingsProvider, SettingsProviderService } from '@cloudbeaver/core-settings';
|
||||
import { schema, schemaExtra } from '@cloudbeaver/core-utils';
|
||||
|
||||
const settingsSchema = schema.object({
|
||||
@@ -37,9 +38,13 @@ export class ResourceManagerScriptsSettingsService extends Dependency {
|
||||
this.settingsManagerService.registerSettings(this.settings, () => [
|
||||
// {
|
||||
// group: RESOURCE_MANAGER_SETTINGS_GROUP,
|
||||
// key: 'disabled',
|
||||
// key: 'plugin.resource-manager-scripts.disabled',
|
||||
// access: {
|
||||
// scope: ['server'],
|
||||
// },
|
||||
// type: ESettingsValueType.Checkbox,
|
||||
// name: 'Disable resource manager scripts',
|
||||
// name: 'plugin_resource_manager_scripts_disable',
|
||||
// description: 'plugin_resource_manager_scripts_disable_description',
|
||||
// },
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -18,4 +18,6 @@ export default [
|
||||
'plugin_resource_manager_scripts_save_script_project_restriction_descripion',
|
||||
"The script's project can't be different from the connection's project",
|
||||
],
|
||||
['plugin_resource_manager_scripts_disable', 'Disable scripts'],
|
||||
['plugin_resource_manager_scripts_disable_description', 'Disable scripts explorer for all users'],
|
||||
];
|
||||
|
||||
@@ -18,4 +18,6 @@ export default [
|
||||
'plugin_resource_manager_scripts_save_script_project_restriction_description',
|
||||
'Le projet du script ne peut pas être différent de celui de la connexion',
|
||||
],
|
||||
['plugin_resource_manager_scripts_disable', 'Disable scripts'],
|
||||
['plugin_resource_manager_scripts_disable_description', 'Disable scripts explorer for all users'],
|
||||
];
|
||||
|
||||
@@ -18,4 +18,6 @@ export default [
|
||||
'plugin_resource_manager_scripts_save_script_project_restriction_descripion',
|
||||
"The script's project can't be different from the connection's project",
|
||||
],
|
||||
['plugin_resource_manager_scripts_disable', 'Disable scripts'],
|
||||
['plugin_resource_manager_scripts_disable_description', 'Disable scripts explorer for all users'],
|
||||
];
|
||||
|
||||
@@ -15,4 +15,6 @@ export default [
|
||||
'Имя скрипта не может содержать следующие символы / : " \\ \' <> | ? * и не может начинаться с точки',
|
||||
],
|
||||
['plugin_resource_manager_scripts_save_script_project_restriction_descripion', 'Проект скрипта не может отличаться от проекта подключения'],
|
||||
['plugin_resource_manager_scripts_disable', 'Отключить скрипты'],
|
||||
['plugin_resource_manager_scripts_disable_description', 'Отключить проводник скриптов для всех пользователей'],
|
||||
];
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user