diff --git a/webapp/packages/core-app/public/icons/export.svg b/webapp/packages/core-app/public/icons/export.svg
new file mode 100644
index 0000000000..3669b1c7e9
--- /dev/null
+++ b/webapp/packages/core-app/public/icons/export.svg
@@ -0,0 +1,5 @@
+
diff --git a/webapp/packages/core-app/public/icons/import.svg b/webapp/packages/core-app/public/icons/import.svg
new file mode 100644
index 0000000000..7dc1e5b391
--- /dev/null
+++ b/webapp/packages/core-app/public/icons/import.svg
@@ -0,0 +1,5 @@
+
diff --git a/webapp/packages/core-app/public/icons/load.svg b/webapp/packages/core-app/public/icons/load.svg
deleted file mode 100644
index adf27b30d5..0000000000
--- a/webapp/packages/core-app/public/icons/load.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
\ No newline at end of file
diff --git a/webapp/packages/core-app/public/icons/save.svg b/webapp/packages/core-app/public/icons/save.svg
index 5068a1f702..45c88c723f 100644
--- a/webapp/packages/core-app/public/icons/save.svg
+++ b/webapp/packages/core-app/public/icons/save.svg
@@ -1,26 +1,5 @@
-
-
\ No newline at end of file
+
diff --git a/webapp/packages/plugin-sql-editor-navigation-tab-resource/src/SqlEditorTabResourceService.ts b/webapp/packages/plugin-sql-editor-navigation-tab-resource/src/SqlEditorTabResourceService.ts
index bb1e245873..1a1b413f16 100644
--- a/webapp/packages/plugin-sql-editor-navigation-tab-resource/src/SqlEditorTabResourceService.ts
+++ b/webapp/packages/plugin-sql-editor-navigation-tab-resource/src/SqlEditorTabResourceService.ts
@@ -9,6 +9,7 @@
import { makeObservable, observable } from 'mobx';
import { ITab, NavigationTabsService, NavTreeResource, NodeManagerUtils } from '@cloudbeaver/core-app';
+import { UserInfoResource } from '@cloudbeaver/core-authentication';
import { injectable } from '@cloudbeaver/core-di';
import { NotificationService } from '@cloudbeaver/core-events';
import { WindowEventsService } from '@cloudbeaver/core-root';
@@ -44,6 +45,7 @@ export class SqlEditorTabResourceService {
private readonly resourceManagerService: ResourceManagerService,
private readonly windowEventsService: WindowEventsService,
private readonly localStorageSaveService: LocalStorageSaveService,
+ private readonly userInfoResource: UserInfoResource
) {
this.state = new Map();
@@ -112,38 +114,26 @@ export class SqlEditorTabResourceService {
return null;
}
- private onTabResourceValueChangeHandler(data: IQueryChangeData) {
- if (data.prevQuery !== data.query) {
- this.updateResource(data.query);
- }
- }
-
- private async updateResource(value: string) {
- if (!this.resourceManagerService.enabled) {
+ private async onTabResourceValueChangeHandler(data: IQueryChangeData) {
+ if (!this.navigationTabsService.currentTab) {
return;
}
- const currentTab = this.navigationTabsService.currentTab;
-
- if (currentTab && this.state.has(currentTab.id)) {
- const state = this.state.get(currentTab.id)!;
- try {
- await this.navResourceNodeService.write(state.nodeId, value);
- } catch (exception) {
- this.notificationService.logException(exception as any, 'plugin_resource_manager_update_script_error');
- }
+ const tab = this.getTab(this.navigationTabsService.currentTab.id);
+ if (tab && data.prevQuery !== data.query) {
+ await this.updateResource(tab, data.query);
}
}
- private onFocusChangeHandler(focused: boolean) {
+ private async onFocusChangeHandler(focused: boolean) {
if (focused) {
- this.syncCurrentTab();
+ await this.syncCurrentTab();
}
}
- private onTabSelectHandler(tab: ITab) {
+ private async onTabSelectHandler(tab: ITab) {
if (isSQLEditorTab(tab)) {
- this.updateTabQuery(tab);
+ await this.updateTabQuery(tab);
}
}
@@ -166,42 +156,58 @@ export class SqlEditorTabResourceService {
});
}
+ private getTab(tabId: string) {
+ return this.sqlEditorTabService.sqlEditorTabs.find(tab => tab.id === tabId);
+ }
+
private closeTab(tabId: string) {
this.navigationTabsService.closeTab(tabId);
}
private async syncCurrentTab() {
- const current = this.sqlEditorTabService.sqlEditorTabs.find(
- tab => tab.id === this.navigationTabsService.currentTabId
- );
+ const tab = this.getTab(this.navigationTabsService.currentTabId);
- if (current) {
- await this.updateTabQuery(current);
+ if (tab) {
+ await this.updateTabQuery(tab);
}
}
- private async updateTabQuery(tab: ITab) {
- if (!this.resourceManagerService.enabled) {
+ private handleNotFound(tab: ITab) {
+ this.notificationService.logInfo({
+ title: 'plugin_resource_manager_script_not_found_title',
+ message: tab.handlerState.name,
+ persistent: true,
+ });
+
+ this.unlinkTab(tab.id);
+ }
+
+ private async updateResource(tab: ITab, value: string) {
+ const state = this.state.get(tab.id);
+
+ if (!this.resourceManagerService.enabled || !state || this.userInfoResource.getId() !== tab.userId) {
return;
}
try {
- const state = this.state.get(tab.id);
+ await this.navResourceNodeService.write(state.nodeId, value);
+ } catch (exception) {
+ this.notificationService.logException(exception as any, 'plugin_resource_manager_update_script_error');
+ }
+ }
- if (!state) {
- return;
- }
+ private async updateTabQuery(tab: ITab) {
+ const state = this.state.get(tab.id);
+ if (!this.resourceManagerService.enabled || !state || this.userInfoResource.getId() !== tab.userId) {
+ return;
+ }
+
+ try {
const found = await this.navTreeResource.preloadNodeParents(state.parents, state.nodeId);
if (!found) {
- this.notificationService.logInfo({
- title: 'plugin_resource_manager_script_not_found_title',
- message: tab.handlerState.name,
- persistent: true,
- });
-
- this.unlinkTab(tab.id);
+ this.handleNotFound(tab);
return;
}
diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditor.tsx b/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditor.tsx
index e09655774d..de0096376b 100644
--- a/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditor.tsx
+++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditor.tsx
@@ -205,7 +205,7 @@ export const SqlEditor = observer(function SqlEditor({ state, c
hidden={data.activeSegmentMode.activeSegmentMode}
onClick={() => tools.downloadScript(trimmedValue)}
>
-
+
{!data.activeSegmentMode.activeSegmentMode && (
(function SqlEditor({ state, c
onChange={handleScriptUpload}
>
-
+
)}