From 1cbbe14cf6395cd32e13780c839efe2ca12642f5 Mon Sep 17 00:00:00 2001 From: Wroud Date: Fri, 15 Apr 2022 11:57:02 +0300 Subject: [PATCH 1/4] chore(core-blocks): CB-1825 make onUpdate callback in useUserData optional --- webapp/packages/core-blocks/src/useUserData.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/packages/core-blocks/src/useUserData.ts b/webapp/packages/core-blocks/src/useUserData.ts index 616f1a9356..dca96b9805 100644 --- a/webapp/packages/core-blocks/src/useUserData.ts +++ b/webapp/packages/core-blocks/src/useUserData.ts @@ -14,7 +14,7 @@ import { useService } from '@cloudbeaver/core-di'; export function useUserData( key: string, defaultValue: () => T, - onUpdate: (data: T) => void, + onUpdate?: (data: T) => void, validate?: (data: T) => boolean ): T { const userDataService = useService(UserDataService); @@ -25,7 +25,7 @@ export function useUserData( useEffect(() => { if (previous !== data) { - onUpdate(data); + onUpdate?.(data); } }); From f92d56bafdaa4aaf080004fefbb8d75b7c5696db Mon Sep 17 00:00:00 2001 From: Alexander Skoblikov Date: Fri, 15 Apr 2022 12:24:47 +0300 Subject: [PATCH 2/4] CB-1930 reset userId on logout --- .../src/io/cloudbeaver/model/session/WebSession.java | 1 + 1 file changed, 1 insertion(+) diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java index 0c71a6e502..f00dd02e59 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java @@ -882,6 +882,7 @@ public class WebSession extends AbstractSessionPersistent implements SMSession, public synchronized void resetAuthToken() { this.sessionPermissions = null; this.smAuthToken = null; + this.user = null; } public synchronized void updateSMAuthInfo(SMAuthInfo smAuthInfo) throws DBCException { From eac4886593d8274ff6e05692a5ac0d63bf364682 Mon Sep 17 00:00:00 2001 From: Wroud Date: Fri, 15 Apr 2022 12:50:03 +0300 Subject: [PATCH 3/4] feat(plugin-erd-viewer): CB-1878 diagram settings --- .../ElementsTreeTools/ElementsTreeTools.tsx | 2 +- .../NavigationTreeSettings.tsx | 2 +- webapp/packages/core-app/src/locales/en.ts | 1 - webapp/packages/core-app/src/locales/it.ts | 1 - webapp/packages/core-app/src/locales/ru.ts | 1 - webapp/packages/core-app/src/locales/zh.ts | 1 - .../packages/core-connections/src/locales/en.ts | 1 - .../packages/core-connections/src/locales/it.ts | 1 - .../packages/core-connections/src/locales/ru.ts | 1 - .../packages/core-connections/src/locales/zh.ts | 1 - .../packages/core-localization/src/locales/it.ts | 2 +- .../packages/core-localization/src/locales/zh.ts | 2 +- .../src/Action/Actions/ACTION_SETTINGS.ts | 15 +++++++++++++++ webapp/packages/core-view/src/index.ts | 1 + .../src/ConnectionForm/Options/Options.tsx | 2 +- 15 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 webapp/packages/core-view/src/Action/Actions/ACTION_SETTINGS.ts diff --git a/webapp/packages/core-app/src/NavigationTree/ElementsTree/ElementsTreeTools/ElementsTreeTools.tsx b/webapp/packages/core-app/src/NavigationTree/ElementsTree/ElementsTreeTools/ElementsTreeTools.tsx index 20eb30e697..7fe4d7d43b 100644 --- a/webapp/packages/core-app/src/NavigationTree/ElementsTree/ElementsTreeTools/ElementsTreeTools.tsx +++ b/webapp/packages/core-app/src/NavigationTree/ElementsTree/ElementsTreeTools/ElementsTreeTools.tsx @@ -119,7 +119,7 @@ export const ElementsTreeTools = observer(function ElementsTreeTools({ {tree.settings?.configurable && ( setOpen(!opened)} diff --git a/webapp/packages/core-app/src/NavigationTree/ElementsTree/ElementsTreeTools/NavigationTreeSettings/NavigationTreeSettings.tsx b/webapp/packages/core-app/src/NavigationTree/ElementsTree/ElementsTreeTools/NavigationTreeSettings/NavigationTreeSettings.tsx index 0c7cf6ee3a..71d85f3861 100644 --- a/webapp/packages/core-app/src/NavigationTree/ElementsTree/ElementsTreeTools/NavigationTreeSettings/NavigationTreeSettings.tsx +++ b/webapp/packages/core-app/src/NavigationTree/ElementsTree/ElementsTreeTools/NavigationTreeSettings/NavigationTreeSettings.tsx @@ -49,7 +49,7 @@ export const NavigationTreeSettings = observer(function NavigationTreeSet return styled(styles)( - {translate('app_navigationTree_settings_title')} + {translate('ui_settings')} = observe )} {driverMap.isLoaded() && driver?.providerProperties && driver.providerProperties.length > 0 && ( - {translate('connections_connection_edit_settings')} + {translate('ui_settings')} {booleanProviderProperties && booleanProviderProperties.length > 0 && ( Date: Fri, 15 Apr 2022 15:24:52 +0300 Subject: [PATCH 4/4] feat(plugin-sql-editor): CB-1825 script preview --- .../plugin-sql-editor/src/SQLParser.ts | 29 ++++++++++ .../SqlEditor/DATA_CONTEXT_SQL_EDITOR_DATA.ts | 14 +++++ .../src/SqlEditor/ISQLEditorData.ts | 58 +++++++++++++++++++ .../useSQLCodeEditorPanel.ts | 2 +- .../src/SqlEditor/useSqlEditor.ts | 41 +------------ .../src/SqlEditorModeService.ts | 2 +- .../packages/plugin-sql-editor/src/index.ts | 2 + 7 files changed, 108 insertions(+), 40 deletions(-) create mode 100644 webapp/packages/plugin-sql-editor/src/SqlEditor/DATA_CONTEXT_SQL_EDITOR_DATA.ts create mode 100644 webapp/packages/plugin-sql-editor/src/SqlEditor/ISQLEditorData.ts diff --git a/webapp/packages/plugin-sql-editor/src/SQLParser.ts b/webapp/packages/plugin-sql-editor/src/SQLParser.ts index 48b9e5a0b1..802a6d039e 100644 --- a/webapp/packages/plugin-sql-editor/src/SQLParser.ts +++ b/webapp/packages/plugin-sql-editor/src/SQLParser.ts @@ -6,6 +6,8 @@ * you may not use this file except in compliance with the License. */ +import { action, computed, makeObservable, observable } from 'mobx'; + import type { SqlDialectInfo } from '@cloudbeaver/core-sdk'; type RequireOne = { @@ -100,6 +102,33 @@ export class SQLParser { this.lines = []; this.customScriptDelimiters = []; this.customQuotes = [["'", "'"]]; + + makeObservable(this, { + scriptDelimiters: computed, + quoteStrings: computed, + singleLineComments: computed, + multiLineComments: computed, + actualScript: computed, + dialect: observable.ref, + _scripts: observable.shallow, + script: observable.ref, + parsedScript: observable.ref, + lines: observable.shallow, + customScriptDelimiters: observable.ref, + customQuotes: observable.ref, + getScriptSegment: action, + getSegment: action, + getQueryAtPos: action, + getLineAtPos: action, + getScriptLineAtPos: action, + setScript: action, + setDialect: action, + setCustomDelimiters: action, + parse: action, + setQueries: action, + isEndsWithDelimiter: action, + update: action, + }); } getScriptSegment(): ISQLScriptSegment { diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/DATA_CONTEXT_SQL_EDITOR_DATA.ts b/webapp/packages/plugin-sql-editor/src/SqlEditor/DATA_CONTEXT_SQL_EDITOR_DATA.ts new file mode 100644 index 0000000000..5521150295 --- /dev/null +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/DATA_CONTEXT_SQL_EDITOR_DATA.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 { createDataContext } from '@cloudbeaver/core-view'; + +import type { ISQLEditorData } from './ISQLEditorData'; + + +export const DATA_CONTEXT_SQL_EDITOR_DATA = createDataContext('sql-editor-data'); diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/ISQLEditorData.ts b/webapp/packages/plugin-sql-editor/src/SqlEditor/ISQLEditorData.ts new file mode 100644 index 0000000000..1f967b34d2 --- /dev/null +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/ISQLEditorData.ts @@ -0,0 +1,58 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2019-2022 DBeaver Corp + * + * All Rights Reserved + * + * NOTICE: All information contained herein is, and remains + * the property of DBeaver Corp and its suppliers, if any. + * The intellectual and technical concepts contained + * herein are proprietary to DBeaver Corp and its suppliers + * and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from DBeaver Corp. + */ + +import type { ISyncExecutor } from '@cloudbeaver/core-executor'; +import type { SqlDialectInfo } from '@cloudbeaver/core-sdk'; + +import type { SQLProposal } from '../SqlEditorService'; +import type { SQLParser, ISQLScriptSegment } from '../SQLParser'; + +export interface ISegmentExecutionData { + segment: ISQLScriptSegment; + type: 'start' | 'end' | 'error'; +} + +export interface ISQLEditorData { + readonly parser: SQLParser; + readonly dialect: SqlDialectInfo | undefined; + readonly activeSegment: ISQLScriptSegment | undefined; + readonly cursorSegment: ISQLScriptSegment | undefined; + readonly readonly: boolean; + readonly isLineScriptEmpty: boolean; + readonly isScriptEmpty: boolean; + readonly isDisabled: boolean; + readonly value: string; + readonly onExecute: ISyncExecutor; + readonly onSegmentExecute: ISyncExecutor; + readonly onUpdate: ISyncExecutor; + updateParserScriptsThrottle(): Promise; + setQuery(query: string): void; + init(): void; + destruct(): void; + setCursor(begin: number, end?: number): void; + formatScript(): Promise; + executeQuery (): Promise; + executeQueryNewTab(): Promise; + showExecutionPlan(): Promise; + executeScript(): Promise; + getHintProposals(position: number, simple: boolean): Promise; + executeQueryAction( + segment: ISQLScriptSegment | undefined, + action: (query: ISQLScriptSegment) => Promise, + passEmpty?: boolean + ): Promise; +} \ No newline at end of file diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/SQLCodeEditorPanel/useSQLCodeEditorPanel.ts b/webapp/packages/plugin-sql-editor/src/SqlEditor/SQLCodeEditorPanel/useSQLCodeEditorPanel.ts index 61e18f4683..5d89a7eba2 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditor/SQLCodeEditorPanel/useSQLCodeEditorPanel.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/SQLCodeEditorPanel/useSQLCodeEditorPanel.ts @@ -20,8 +20,8 @@ import type { IControlledCodeMirror } from 'react-codemirror2'; import { useExecutor, useObservableRef } from '@cloudbeaver/core-blocks'; import type { SqlCompletionProposal } from '@cloudbeaver/core-sdk'; +import type { ISQLEditorData } from '../ISQLEditorData'; import type { SQLCodeEditorController } from '../SQLCodeEditor/SQLCodeEditorController'; -import type { ISQLEditorData } from '../useSqlEditor'; interface ISQLCodeEditorPanelData { proposalsWordFrom: Position | null; diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts b/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts index 9c39336aba..ab8a603104 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts @@ -13,59 +13,24 @@ import { useObservableRef } from '@cloudbeaver/core-blocks'; import { ConnectionExecutionContextService } from '@cloudbeaver/core-connections'; import { useService } from '@cloudbeaver/core-di'; import { CommonDialogService, ConfirmationDialog, DialogueStateResult } from '@cloudbeaver/core-dialogs'; -import { ISyncExecutor, SyncExecutor } from '@cloudbeaver/core-executor'; +import { SyncExecutor } from '@cloudbeaver/core-executor'; import type { SqlDialectInfo } from '@cloudbeaver/core-sdk'; import { throttleAsync } from '@cloudbeaver/core-utils'; import type { ISqlEditorTabState } from '../ISqlEditorTabState'; import { SqlDialectInfoService } from '../SqlDialectInfoService'; -import { SqlEditorService, SQLProposal } from '../SqlEditorService'; +import { SqlEditorService } from '../SqlEditorService'; import { ISQLScriptSegment, SQLParser } from '../SQLParser'; import { SqlExecutionPlanService } from '../SqlResultTabs/ExecutionPlan/SqlExecutionPlanService'; import { SqlQueryService } from '../SqlResultTabs/SqlQueryService'; import { SqlResultTabsService } from '../SqlResultTabs/SqlResultTabsService'; +import type { ISQLEditorData } from './ISQLEditorData'; interface ICursor { begin: number; end: number; } -interface ISegmentExecutionData { - segment: ISQLScriptSegment; - type: 'start' | 'end' | 'error'; -} - -export interface ISQLEditorData { - readonly parser: SQLParser; - readonly dialect: SqlDialectInfo | undefined; - readonly activeSegment: ISQLScriptSegment | undefined; - readonly cursorSegment: ISQLScriptSegment | undefined; - readonly readonly: boolean; - readonly isLineScriptEmpty: boolean; - readonly isScriptEmpty: boolean; - readonly isDisabled: boolean; - readonly value: string; - readonly onExecute: ISyncExecutor; - readonly onSegmentExecute: ISyncExecutor; - readonly onUpdate: ISyncExecutor; - updateParserScriptsThrottle(): Promise; - setQuery(query: string): void; - init(): void; - destruct(): void; - setCursor(begin: number, end?: number): void; - formatScript(): Promise; - executeQuery (): Promise; - executeQueryNewTab(): Promise; - showExecutionPlan(): Promise; - executeScript(): Promise; - getHintProposals(position: number, simple: boolean): Promise; - executeQueryAction( - segment: ISQLScriptSegment | undefined, - action: (query: ISQLScriptSegment) => Promise, - passEmpty?: boolean - ): Promise; -} - interface ISQLEditorDataPrivate extends ISQLEditorData { readonly sqlDialectInfoService: SqlDialectInfoService; readonly connectionExecutionContextService: ConnectionExecutionContextService; diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditorModeService.ts b/webapp/packages/plugin-sql-editor/src/SqlEditorModeService.ts index 595ef5e16a..da31b3d2a4 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditorModeService.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlEditorModeService.ts @@ -10,7 +10,7 @@ import { injectable } from '@cloudbeaver/core-di'; import { TabsContainer } from '@cloudbeaver/core-ui'; import type { ISqlEditorTabState } from '@cloudbeaver/plugin-sql-editor'; -import type { ISQLEditorData } from './SqlEditor/useSqlEditor'; +import type { ISQLEditorData } from './SqlEditor/ISQLEditorData'; export interface ISqlEditorModeProps { state: ISqlEditorTabState; diff --git a/webapp/packages/plugin-sql-editor/src/index.ts b/webapp/packages/plugin-sql-editor/src/index.ts index fa404dcfc2..ac3f784077 100644 --- a/webapp/packages/plugin-sql-editor/src/index.ts +++ b/webapp/packages/plugin-sql-editor/src/index.ts @@ -1,5 +1,7 @@ import { sqlEditorPluginManifest } from './manifest'; export * from './SqlEditor/SQLCodeEditor/SQLCodeEditorLoader'; +export * from './SqlEditor/ISQLEditorData'; +export * from './SqlEditor/DATA_CONTEXT_SQL_EDITOR_DATA'; export * from './SqlResultTabs/DATA_CONTEXT_SQL_EDITOR_RESULT_ID'; export * from './SqlResultTabs/SqlResultTabsService'; export * from './DATA_CONTEXT_SQL_EDITOR_STATE';