CB-3300 feat: dataset editing (#1614)

* CB-3300 feat: dataset editing

* CB-3300 chore: remove unused styles

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
This commit is contained in:
Alexey
2023-04-19 19:01:44 +03:00
committed by GitHub
co-authored by mr-anton-t
parent 200105f692
commit 736fd39d08
34 changed files with 304 additions and 64 deletions
@@ -19,7 +19,7 @@ import { ActionService, ACTION_SAVE, DATA_CONTEXT_MENU, MenuService } from '@clo
import { NavigationTabsService } from '@cloudbeaver/plugin-navigation-tabs';
import { NavResourceNodeService, ResourceManagerService, getResourceKeyFromNodeId } from '@cloudbeaver/plugin-resource-manager';
import { ResourceManagerScriptsService, SaveScriptDialog, SCRIPTS_TYPE_ID } from '@cloudbeaver/plugin-resource-manager-scripts';
import { DATA_CONTEXT_SQL_EDITOR_STATE, ESqlDataSourceFeatures, getSqlEditorName, ISqlDataSource, SqlDataSourceService, SqlEditorSettingsService, SQL_EDITOR_ACTIONS_MENU } from '@cloudbeaver/plugin-sql-editor';
import { DATA_CONTEXT_SQL_EDITOR_STATE, ESqlDataSourceFeatures, getSqlEditorName, ISqlDataSource, SqlDataSourceService, SqlEditorSettingsService, MemorySqlDataSource, LocalStorageSqlDataSource, SQL_EDITOR_TOOLS_MENU } from '@cloudbeaver/plugin-sql-editor';
import { isSQLEditorTab, SqlEditorNavigatorService } from '@cloudbeaver/plugin-sql-editor-navigation-tab';
import { ResourceSqlDataSource } from './ResourceSqlDataSource';
@@ -66,7 +66,12 @@ export class PluginBootstrap extends Bootstrap {
return false;
}
return !(this.sqlDataSourceService.get(state.editorId) instanceof ResourceSqlDataSource);
const dataSource = this.sqlDataSourceService.get(state.editorId);
return (
dataSource instanceof MemorySqlDataSource
|| dataSource instanceof LocalStorageSqlDataSource
);
}
return false;
@@ -182,7 +187,7 @@ export class PluginBootstrap extends Bootstrap {
return (
this.resourceManagerService.enabled
&& context.get(DATA_CONTEXT_MENU) === SQL_EDITOR_ACTIONS_MENU
&& context.get(DATA_CONTEXT_MENU) === SQL_EDITOR_TOOLS_MENU
&& !!dataSource?.hasFeature(ESqlDataSourceFeatures.script)
);
},
@@ -89,14 +89,18 @@ export class ResourceSqlDataSource extends BaseSqlDataSource {
get features():ESqlDataSourceFeatures[] {
if (this.isReadonly()) {
return [ESqlDataSourceFeatures.script];
return [ESqlDataSourceFeatures.script, ESqlDataSourceFeatures.query, ESqlDataSourceFeatures.executable];
}
return [ESqlDataSourceFeatures.script, ESqlDataSourceFeatures.setName];
return [
ESqlDataSourceFeatures.script,
ESqlDataSourceFeatures.query,
ESqlDataSourceFeatures.executable,
ESqlDataSourceFeatures.setName,
];
}
private _script: string;
private saved: boolean;
private actions?: IResourceActions;
private info?: IResourceInfo;
private lastAction?: () => Promise<void>;
@@ -114,7 +118,6 @@ export class ResourceSqlDataSource extends BaseSqlDataSource {
super();
this.state = state;
this._script = '';
this.saved = true;
this.loaded = false;
this.resourceUseKeyId = null;
this.scheduler = new TaskScheduler(() => true);
@@ -207,7 +210,6 @@ export class ResourceSqlDataSource extends BaseSqlDataSource {
this._script = script;
super.setScript(script);
this.saved = false;
if (previous !== script) {
this.debouncedWrite();
@@ -347,6 +349,7 @@ export class ResourceSqlDataSource extends BaseSqlDataSource {
this.markUpdated();
this.loaded = true;
super.setScript(this.script);
this.saved = true;
} catch (exception: any) {
this.exception = exception;
} finally {
@@ -377,6 +380,10 @@ export class ResourceSqlDataSource extends BaseSqlDataSource {
});
}
async save(): Promise<void> {
await this.write();
}
private async saveProperties() {
await this.scheduler.schedule(undefined, async () => {
if (!this.actions || !this.resourceKey) {