diff --git a/webapp/packages/core-app/public/icons/icons.svg b/webapp/packages/core-app/public/icons/icons.svg index fff77bb643..7fa0c782b1 100644 --- a/webapp/packages/core-app/public/icons/icons.svg +++ b/webapp/packages/core-app/public/icons/icons.svg @@ -328,4 +328,7 @@ + + + diff --git a/webapp/packages/core-blocks/src/Link.tsx b/webapp/packages/core-blocks/src/Link.tsx index 1e70b6da73..60f3d4dbc9 100644 --- a/webapp/packages/core-blocks/src/Link.tsx +++ b/webapp/packages/core-blocks/src/Link.tsx @@ -8,12 +8,16 @@ import styled, { css, use } from 'reshadow'; +import { IconOrImage } from './IconOrImage'; + interface Props extends React.AnchorHTMLAttributes { wrapper?: boolean; + indicator?: boolean; } const styles = css` a { + position: relative; cursor: pointer; } a[|wrapper] { @@ -23,17 +27,29 @@ const styles = css` outline: none; } } + IconOrImage { + position: absolute; + width: 8px; + left: calc(100% + 4px); + } `; export const Link: React.FC = function Link({ wrapper, + indicator, className, children, ...rest }) { return styled(styles)(
- {children} + + {indicator && } + {children} +
); }; diff --git a/webapp/packages/core-localization/src/locales/en.ts b/webapp/packages/core-localization/src/locales/en.ts index 10c802f867..9d12629725 100644 --- a/webapp/packages/core-localization/src/locales/en.ts +++ b/webapp/packages/core-localization/src/locales/en.ts @@ -66,6 +66,7 @@ export const defaultENLocale = [ ['ui_close_others', 'Close others'], ['ui_close_all_to_the_right', 'Close all to the Right'], ['ui_close_all_to_the_left', 'Close all to the Left'], + ['ui_or', 'Or'], ['root_permission_denied', "You don't have permissions"], ['root_permission_no_permission', "You don't have permission for this action"], diff --git a/webapp/packages/core-localization/src/locales/it.ts b/webapp/packages/core-localization/src/locales/it.ts index f5c115e4b2..dbf35b6dad 100644 --- a/webapp/packages/core-localization/src/locales/it.ts +++ b/webapp/packages/core-localization/src/locales/it.ts @@ -45,6 +45,7 @@ export const defaultITLocale = [ ['ui_close_others', 'Close others'], ['ui_close_all_to_the_right', 'Close all to the Right'], ['ui_close_all_to_the_left', 'Close all to the Left'], + ['ui_or', 'Or'], ['root_permission_denied', 'Non hai i permessi'], ['app_root_session_expire_warning_title', 'La sessione sta per scadere'], diff --git a/webapp/packages/core-localization/src/locales/ru.ts b/webapp/packages/core-localization/src/locales/ru.ts index 2cdc886248..4a394f4b99 100644 --- a/webapp/packages/core-localization/src/locales/ru.ts +++ b/webapp/packages/core-localization/src/locales/ru.ts @@ -64,6 +64,7 @@ export const defaultRULocale = [ ['ui_close_others', 'Закрыть другие'], ['ui_close_all_to_the_right', 'Закрыть все справа'], ['ui_close_all_to_the_left', 'Закрыть все слева'], + ['ui_or', 'Или'], ['root_permission_denied', 'Отказано в доступе'], ['root_permission_no_permission', 'У вас нет разрешения на это действие'], diff --git a/webapp/packages/core-localization/src/locales/zh.ts b/webapp/packages/core-localization/src/locales/zh.ts index 3d5706496b..dbc7b05495 100644 --- a/webapp/packages/core-localization/src/locales/zh.ts +++ b/webapp/packages/core-localization/src/locales/zh.ts @@ -43,7 +43,7 @@ export const defaultZHLocale = [ ['ui_rename', '重命名'], ['ui_rename_processing', '重命名中...'], ['ui_name', '名称'], - ['ui_cant_delete_item', "此项目不能删除"], + ['ui_cant_delete_item', '此项目不能删除'], ['ui_no_items_placeholder', '还没有项目'], ['ui_search_no_result_placeholder', '没有找到结果'], ['ui_save_reminder', '您有未保存的更改'], @@ -66,9 +66,10 @@ export const defaultZHLocale = [ ['ui_close_others', 'Close others'], ['ui_close_all_to_the_right', 'Close all to the Right'], ['ui_close_all_to_the_left', 'Close all to the Left'], + ['ui_or', 'Or'], - ['root_permission_denied', "您没有权限"], - ['root_permission_no_permission', "您没有权限执行此操作"], + ['root_permission_denied', '您没有权限'], + ['root_permission_no_permission', '您没有权限执行此操作'], ['app_root_session_expire_warning_title', '会话即将过期'], ['app_root_session_expire_warning_message', '您的会话将在5分钟内到期。要继续工作,请关闭此弹出窗口。'], ['app_root_session_expire_warning_button', '我在'], diff --git a/webapp/packages/plugin-help/.gitignore b/webapp/packages/plugin-help/.gitignore new file mode 100644 index 0000000000..15bc16c7c3 --- /dev/null +++ b/webapp/packages/plugin-help/.gitignore @@ -0,0 +1,17 @@ +# dependencies +/node_modules + +# testing +/coverage + +# production +/lib + +# misc +.DS_Store +.env* + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/webapp/packages/plugin-help/package.json b/webapp/packages/plugin-help/package.json new file mode 100644 index 0000000000..6c66b2f746 --- /dev/null +++ b/webapp/packages/plugin-help/package.json @@ -0,0 +1,46 @@ +{ + "name": "@cloudbeaver/plugin-help", + "sideEffects": false, + "version": "0.1.0", + "description": "", + "license": "Apache-2.0", + "main": "lib/index.js", + "module": "lib/index.js", + "types": "src/index.ts", + "scripts": { + "prebuild": "rimraf lib/*", + "build": "webpack --config ../../configs/webpack.plugin.config.js", + "postbuild": "tsc", + "lint": "eslint ./src/ --ext .ts,.tsx", + "lint-fix": "eslint ./src/ --ext .ts,.tsx --fix" + }, + "peerDependencies": { + "@cloudbeaver/core-administration": "^0.1.0", + "@cloudbeaver/core-app": "^0.1.0", + "@cloudbeaver/core-authentication": "^0.1.0", + "@cloudbeaver/core-blocks": "^0.1.0", + "@cloudbeaver/core-connections": "^0.1.0", + "@cloudbeaver/core-di": "^0.1.0", + "@cloudbeaver/core-dialogs": "^0.1.0", + "@cloudbeaver/core-events": "^0.1.0", + "@cloudbeaver/core-executor": "^0.1.0", + "@cloudbeaver/core-extensions": "^0.1.0", + "@cloudbeaver/core-localization": "^0.1.0", + "@cloudbeaver/core-notifications": "^0.1.0", + "@cloudbeaver/core-plugin": "^0.1.0", + "@cloudbeaver/core-product": "^0.1.0", + "@cloudbeaver/core-root": "^0.1.0", + "@cloudbeaver/core-routing": "^0.1.0", + "@cloudbeaver/core-sdk": "^0.1.0", + "@cloudbeaver/core-settings": "^0.1.0", + "@cloudbeaver/core-theming": "^0.1.0", + "@cloudbeaver/core-ui": "^0.1.0", + "@cloudbeaver/core-utils": "^0.1.0", + "@cloudbeaver/core-version-update": "^0.1.0", + "@cloudbeaver/core-view": "^0.1.0", + "mobx": "^6.x.x", + "mobx-react-lite": "^3.x.x", + "react": "^17.x.x", + "reshadow": "^0.x.x" + } +} diff --git a/webapp/packages/plugin-help/src/Help.tsx b/webapp/packages/plugin-help/src/Help.tsx new file mode 100644 index 0000000000..2132866d36 --- /dev/null +++ b/webapp/packages/plugin-help/src/Help.tsx @@ -0,0 +1,48 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 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-lite'; +import styled, { css } from 'reshadow'; + +import { IconOrImage } from '@cloudbeaver/core-blocks'; +import { useService } from '@cloudbeaver/core-di'; +import { CommonDialogService } from '@cloudbeaver/core-dialogs'; +import { composes, useStyles } from '@cloudbeaver/core-theming'; + +import { ShortcutsDialog } from './Shortcuts/ShortcutsDialog'; + +const styles = composes( + css` + container { + composes: theme-ripple from global; + } + `, + css` + container { + height: 100%; + display: flex; + align-items: center; + padding: 0 16px; + cursor: pointer; + & IconOrImage { + width: 24px; + } + } + ` +); + +export const Help = observer(function Help() { + const style = useStyles(styles); + const commonDialogService = useService(CommonDialogService); + + return styled(style)( + commonDialogService.open(ShortcutsDialog, null)}> + + + ); +}); \ No newline at end of file diff --git a/webapp/packages/plugin-help/src/LocaleService.ts b/webapp/packages/plugin-help/src/LocaleService.ts new file mode 100644 index 0000000000..c6a5d9b3c9 --- /dev/null +++ b/webapp/packages/plugin-help/src/LocaleService.ts @@ -0,0 +1,36 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 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(); + } + + register(): void | Promise { + this.localizationService.addProvider(this.provider.bind(this)); + } + + load(): void | Promise { } + + private async provider(locale: string) { + switch (locale) { + case 'ru': + return (await import('./locales/ru')).default; + case 'it': + return (await import('./locales/it')).default; + case 'zh': + return (await import('./locales/zh')).default; + default: + return (await import('./locales/en')).default; + } + } +} diff --git a/webapp/packages/plugin-help/src/PluginBootstrap.ts b/webapp/packages/plugin-help/src/PluginBootstrap.ts new file mode 100644 index 0000000000..36b2e2d21e --- /dev/null +++ b/webapp/packages/plugin-help/src/PluginBootstrap.ts @@ -0,0 +1,27 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 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 { TopNavService } from '@cloudbeaver/core-app'; +import { Bootstrap, injectable } from '@cloudbeaver/core-di'; + +import { Help } from './Help'; + +@injectable() +export class PluginBootstrap extends Bootstrap { + constructor( + private readonly topNavService: TopNavService + ) { + super(); + } + + async load(): Promise { } + + register(): void { + this.topNavService.placeholder.add(Help, 4); + } +} diff --git a/webapp/packages/plugin-help/src/Shortcuts/IShortcut.ts b/webapp/packages/plugin-help/src/Shortcuts/IShortcut.ts new file mode 100644 index 0000000000..83a79c7ee8 --- /dev/null +++ b/webapp/packages/plugin-help/src/Shortcuts/IShortcut.ts @@ -0,0 +1,14 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 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 '@cloudbeaver/core-localization'; + +export interface IShortcut { + label: TLocalizationToken; + code: string[]; +} \ No newline at end of file diff --git a/webapp/packages/plugin-help/src/Shortcuts/SHORTCUTS_DATA.ts b/webapp/packages/plugin-help/src/Shortcuts/SHORTCUTS_DATA.ts new file mode 100644 index 0000000000..cd66ec14ca --- /dev/null +++ b/webapp/packages/plugin-help/src/Shortcuts/SHORTCUTS_DATA.ts @@ -0,0 +1,63 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 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 { IShortcut } from './IShortcut'; + +export const DATA_VIEWER_SHORTCUTS: IShortcut[] = [ + { + label: 'data_viewer_shortcut_start_inline_editing', + code: ['Enter', 'Backspace'], + }, + { + label: 'data_viewer_shortcut_add_new_row', + code: ['Alt + Insert'], + }, + { + label: 'data_viewer_shortcut_duplicate_row', + code: ['Ctrl + Alt + Insert'], + }, + { + label: 'data_viewer_shortcut_delete_row', + code: ['Delete'], + }, + { + label: 'data_viewer_shortcut_revert_inline_editor_changes', + code: ['Escape'], + }, + { + label: 'data_viewer_shortcut_past_value', + code: ['Ctrl + V'], + }, + { + label: 'data_viewer_shortcut_copy_value', + code: ['Ctrl + C'], + }, +]; + +export const SQL_EDITOR_SHORTCUTS: IShortcut[] = [ + { + label: 'sql_editor_shortcut_execute_statement', + code: ['Ctrl + Enter'], + }, + { + label: 'sql_editor_shortcut_execute_statement_new_tab', + code: ['Ctrl + \\', 'Ctrl + Shift + Enter'], + }, + { + label: 'sql_editor_shortcut_execute_script', + code: ['Alt + X'], + }, + { + label: 'sql_editor_shortcut_show_execution_plan', + code: ['Shift + Ctrl + E'], + }, + { + label: 'sql_editor_shortcut_open_editor_in_new_tab', + code: ['Alt + T'], + }, +]; \ No newline at end of file diff --git a/webapp/packages/plugin-help/src/Shortcuts/Shortcut.tsx b/webapp/packages/plugin-help/src/Shortcuts/Shortcut.tsx new file mode 100644 index 0000000000..23f756cb4d --- /dev/null +++ b/webapp/packages/plugin-help/src/Shortcuts/Shortcut.tsx @@ -0,0 +1,74 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 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 styled, { css } from 'reshadow'; + +import { useTranslate } from '@cloudbeaver/core-localization'; +import { composes, useStyles } from '@cloudbeaver/core-theming'; + +import type { IShortcut } from './IShortcut'; + +interface Props { + shortcut: IShortcut; +} + +const style = composes( + css` + shortcut-code { + composes: theme-background-secondary theme-text-on-secondary from global; + } + `, + css` + shortcut-container { + display: flex; + align-items: center; + justify-content: space-between; + } + shortcut-label { + margin-right: 8px; + } + shortcut-content { + display: flex; + align-items: center; + gap: 4px; + } + shortcut-code { + flex-shrink: 0; + font-family: monospace; + font-weight: bold; + border-radius: 4px; + width: max-content; + padding: 4px 8px; + } + span { + white-space: nowrap; + text-transform: lowercase; + } +`); + +export const Shortcut: React.FC = function Shortcut({ shortcut }) { + const translate = useTranslate(); + + return styled(useStyles(style))( + + + {translate(shortcut.label)} + + + {shortcut.code.map((code, index) => ( + <> + {index > 0 && {translate('ui_or')}} + + {code} + + + ))} + + + ); +}; \ No newline at end of file diff --git a/webapp/packages/plugin-help/src/Shortcuts/ShortcutsDialog.tsx b/webapp/packages/plugin-help/src/Shortcuts/ShortcutsDialog.tsx new file mode 100644 index 0000000000..a6feb60901 --- /dev/null +++ b/webapp/packages/plugin-help/src/Shortcuts/ShortcutsDialog.tsx @@ -0,0 +1,76 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 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 styled, { css } from 'reshadow'; + +import { BASE_CONTAINERS_STYLES, Button, Container, Group, GroupTitle, Link } from '@cloudbeaver/core-blocks'; +import { CommonDialogWrapper, DialogComponent } from '@cloudbeaver/core-dialogs'; +import { useTranslate } from '@cloudbeaver/core-localization'; +import { useStyles } from '@cloudbeaver/core-theming'; + +import { Shortcut } from './Shortcut'; +import { DATA_VIEWER_SHORTCUTS, SQL_EDITOR_SHORTCUTS } from './SHORTCUTS_DATA'; + + +const style = css` + CommonDialogWrapper { + max-width: 1100px; + } + Button { + margin-left: auto; + } + Container { + composes: theme-typography--body2 from global; + gap: 16px; + } + Group { + gap: 16px; + } + GroupTitle, Group { + padding: 0 !important; + } +`; + +export const ShortcutsDialog: DialogComponent = function ShortcutsDialog({ + rejectDialog, +}) { + const translate = useTranslate(); + const styles = useStyles(BASE_CONTAINERS_STYLES, style); + + return styled(styles)( + + {translate('ui_close')} + + )} + size='large' + onReject={rejectDialog} + > + + + + + Data Viewer + + + {DATA_VIEWER_SHORTCUTS.map(shortcut => )} + + + + + SQL Editor + + + {SQL_EDITOR_SHORTCUTS.map(shortcut => )} + + + + ); +}; \ No newline at end of file diff --git a/webapp/packages/plugin-help/src/index.ts b/webapp/packages/plugin-help/src/index.ts new file mode 100644 index 0000000000..15bc2512af --- /dev/null +++ b/webapp/packages/plugin-help/src/index.ts @@ -0,0 +1,3 @@ +import { manifest } from './manifest'; + +export default manifest; \ No newline at end of file diff --git a/webapp/packages/plugin-help/src/locales/en.ts b/webapp/packages/plugin-help/src/locales/en.ts new file mode 100644 index 0000000000..69695c68e9 --- /dev/null +++ b/webapp/packages/plugin-help/src/locales/en.ts @@ -0,0 +1,17 @@ +export default [ + ['shortcuts_title', 'Shortcuts'], + + ['data_viewer_shortcut_start_inline_editing', 'Open Inline Editor for the selected Cell'], + ['data_viewer_shortcut_add_new_row', 'Add a new Row'], + ['data_viewer_shortcut_duplicate_row', 'Duplicate row'], + ['data_viewer_shortcut_delete_row', 'Delete row'], + ['data_viewer_shortcut_revert_inline_editor_changes', 'Revert Inline Editor changes'], + ['data_viewer_shortcut_past_value', 'Past value to the Cell from the Clipboard'], + ['data_viewer_shortcut_copy_value', 'Copy Cell value to the Clipboard'], + + ['sql_editor_shortcut_execute_statement', 'Execute SQL statement'], + ['sql_editor_shortcut_execute_statement_new_tab', 'Execute SQL statement in the new Tab'], + ['sql_editor_shortcut_execute_script', 'Execute script'], + ['sql_editor_shortcut_show_execution_plan', 'Show Execution plan'], + ['sql_editor_shortcut_open_editor_in_new_tab', 'Open SQL Editor in the separate browser Tab'], +]; diff --git a/webapp/packages/plugin-help/src/locales/it.ts b/webapp/packages/plugin-help/src/locales/it.ts new file mode 100644 index 0000000000..69695c68e9 --- /dev/null +++ b/webapp/packages/plugin-help/src/locales/it.ts @@ -0,0 +1,17 @@ +export default [ + ['shortcuts_title', 'Shortcuts'], + + ['data_viewer_shortcut_start_inline_editing', 'Open Inline Editor for the selected Cell'], + ['data_viewer_shortcut_add_new_row', 'Add a new Row'], + ['data_viewer_shortcut_duplicate_row', 'Duplicate row'], + ['data_viewer_shortcut_delete_row', 'Delete row'], + ['data_viewer_shortcut_revert_inline_editor_changes', 'Revert Inline Editor changes'], + ['data_viewer_shortcut_past_value', 'Past value to the Cell from the Clipboard'], + ['data_viewer_shortcut_copy_value', 'Copy Cell value to the Clipboard'], + + ['sql_editor_shortcut_execute_statement', 'Execute SQL statement'], + ['sql_editor_shortcut_execute_statement_new_tab', 'Execute SQL statement in the new Tab'], + ['sql_editor_shortcut_execute_script', 'Execute script'], + ['sql_editor_shortcut_show_execution_plan', 'Show Execution plan'], + ['sql_editor_shortcut_open_editor_in_new_tab', 'Open SQL Editor in the separate browser Tab'], +]; diff --git a/webapp/packages/plugin-help/src/locales/ru.ts b/webapp/packages/plugin-help/src/locales/ru.ts new file mode 100644 index 0000000000..c93b206974 --- /dev/null +++ b/webapp/packages/plugin-help/src/locales/ru.ts @@ -0,0 +1,17 @@ +export default [ + ['shortcuts_title', 'Горячие клавиши'], + + ['data_viewer_shortcut_start_inline_editing', 'Начать редактирование ячейки во встроенном редакторе'], + ['data_viewer_shortcut_add_new_row', 'Добавить новую строку'], + ['data_viewer_shortcut_duplicate_row', 'Продублировать строку'], + ['data_viewer_shortcut_delete_row', 'Удалить строку'], + ['data_viewer_shortcut_revert_inline_editor_changes', 'Отменить изменения во встроенном редакторе'], + ['data_viewer_shortcut_past_value', 'Вставить значение из буфера обмена в ячейку'], + ['data_viewer_shortcut_copy_value', 'Скопировать значение ячейки в буфер обмена'], + + ['sql_editor_shortcut_execute_statement', 'Выполнить SQL выражение'], + ['sql_editor_shortcut_execute_statement_new_tab', 'Выполнить SQL выражение в новой вкладке'], + ['sql_editor_shortcut_execute_script', 'Выполнить скрипт'], + ['sql_editor_shortcut_show_execution_plan', 'Показать план выполнения'], + ['sql_editor_shortcut_open_editor_in_new_tab', 'Открыть SQL редактор в новой бразуерной вкладке'], +]; diff --git a/webapp/packages/plugin-help/src/locales/zh.ts b/webapp/packages/plugin-help/src/locales/zh.ts new file mode 100644 index 0000000000..69695c68e9 --- /dev/null +++ b/webapp/packages/plugin-help/src/locales/zh.ts @@ -0,0 +1,17 @@ +export default [ + ['shortcuts_title', 'Shortcuts'], + + ['data_viewer_shortcut_start_inline_editing', 'Open Inline Editor for the selected Cell'], + ['data_viewer_shortcut_add_new_row', 'Add a new Row'], + ['data_viewer_shortcut_duplicate_row', 'Duplicate row'], + ['data_viewer_shortcut_delete_row', 'Delete row'], + ['data_viewer_shortcut_revert_inline_editor_changes', 'Revert Inline Editor changes'], + ['data_viewer_shortcut_past_value', 'Past value to the Cell from the Clipboard'], + ['data_viewer_shortcut_copy_value', 'Copy Cell value to the Clipboard'], + + ['sql_editor_shortcut_execute_statement', 'Execute SQL statement'], + ['sql_editor_shortcut_execute_statement_new_tab', 'Execute SQL statement in the new Tab'], + ['sql_editor_shortcut_execute_script', 'Execute script'], + ['sql_editor_shortcut_show_execution_plan', 'Show Execution plan'], + ['sql_editor_shortcut_open_editor_in_new_tab', 'Open SQL Editor in the separate browser Tab'], +]; diff --git a/webapp/packages/plugin-help/src/manifest.ts b/webapp/packages/plugin-help/src/manifest.ts new file mode 100644 index 0000000000..7fdc69a18a --- /dev/null +++ b/webapp/packages/plugin-help/src/manifest.ts @@ -0,0 +1,23 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 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 { PluginManifest } from '@cloudbeaver/core-di'; + +import { LocaleService } from './LocaleService'; +import { PluginBootstrap } from './PluginBootstrap'; + +export const manifest: PluginManifest = { + info: { + name: 'Help plugin', + }, + + providers: [ + PluginBootstrap, + LocaleService, + ], +}; diff --git a/webapp/packages/plugin-help/tsconfig.json b/webapp/packages/plugin-help/tsconfig.json new file mode 100644 index 0000000000..2a4cc370f7 --- /dev/null +++ b/webapp/packages/plugin-help/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib", + "composite": true + }, + "include": ["src"], + "exclude": ["**/node_modules", "**/.*/"], + "references": [{ "path": "../*" }] +} diff --git a/webapp/packages/plugin-settings-menu/src/PluginBootstrap.ts b/webapp/packages/plugin-settings-menu/src/PluginBootstrap.ts index 2411eeeada..27486d6f96 100644 --- a/webapp/packages/plugin-settings-menu/src/PluginBootstrap.ts +++ b/webapp/packages/plugin-settings-menu/src/PluginBootstrap.ts @@ -8,6 +8,7 @@ import { TopNavService } from '@cloudbeaver/core-app'; import { Bootstrap, injectable } from '@cloudbeaver/core-di'; + import { SettingsMenu } from './SettingsMenu/SettingsMenu'; @injectable() @@ -19,7 +20,7 @@ export class PluginBootstrap extends Bootstrap { } register(): void | Promise { - this.topNavService.placeholder.add(SettingsMenu, 5); + this.topNavService.placeholder.add(SettingsMenu, 6); } load(): void | Promise { } diff --git a/webapp/packages/plugin-user-profile/src/PluginBootstrap.ts b/webapp/packages/plugin-user-profile/src/PluginBootstrap.ts index 5349a46cb4..8c28886ed7 100644 --- a/webapp/packages/plugin-user-profile/src/PluginBootstrap.ts +++ b/webapp/packages/plugin-user-profile/src/PluginBootstrap.ts @@ -20,7 +20,7 @@ export class PluginBootstrap extends Bootstrap { } register(): void { - this.topNavService.placeholder.add(UserMenu, 4); + this.topNavService.placeholder.add(UserMenu, 5); } load(): void { } diff --git a/webapp/packages/product-default/src/index.ts b/webapp/packages/product-default/src/index.ts index d0e21384ba..11367ef31d 100644 --- a/webapp/packages/product-default/src/index.ts +++ b/webapp/packages/product-default/src/index.ts @@ -5,8 +5,6 @@ import type { PluginManifest } from '@cloudbeaver/core-di'; import administration from '@cloudbeaver/plugin-administration'; import authentication from '@cloudbeaver/plugin-authentication'; import authenticationAdministration from '@cloudbeaver/plugin-authentication-administration'; -import theme from '@cloudbeaver/plugin-theme'; -import localization from '@cloudbeaver/plugin-localization'; import connectionCustom from '@cloudbeaver/plugin-connection-custom'; import connectionTemplate from '@cloudbeaver/plugin-connection-template'; import connectionPlugin from '@cloudbeaver/plugin-connections'; @@ -16,16 +14,19 @@ import spreadsheetNew from '@cloudbeaver/plugin-data-spreadsheet-new'; import dataViewer from '@cloudbeaver/plugin-data-viewer'; import ddlViewer from '@cloudbeaver/plugin-ddl-viewer'; import gisViewer from '@cloudbeaver/plugin-gis-viewer'; +import help from '@cloudbeaver/plugin-help'; +import localization from '@cloudbeaver/plugin-localization'; import objectViewer from '@cloudbeaver/plugin-object-viewer'; import productPlugin from '@cloudbeaver/plugin-product'; +import settingsMenu from '@cloudbeaver/plugin-settings-menu'; +import settingsMenuAdministration from '@cloudbeaver/plugin-settings-menu-administration'; import sqlEditor from '@cloudbeaver/plugin-sql-editor'; import sqlEditorTab from '@cloudbeaver/plugin-sql-editor-navigation-tab'; import sqlEditorScreen from '@cloudbeaver/plugin-sql-editor-screen'; +import theme from '@cloudbeaver/plugin-theme'; import userProfile from '@cloudbeaver/plugin-user-profile'; import userProfileAdministration from '@cloudbeaver/plugin-user-profile-administration'; import versionUpdate from '@cloudbeaver/plugin-version-update-administration'; -import settingsMenu from '@cloudbeaver/plugin-settings-menu'; -import settingsMenuAdministration from '@cloudbeaver/plugin-settings-menu-administration'; import { defaultProductManifest } from './manifest'; @@ -55,6 +56,7 @@ const PLUGINS: PluginManifest[] = [ productPlugin, settingsMenu, settingsMenuAdministration, + help, ]; bootstrap(PLUGINS);