Add selected method and usage state to modeling store (#2869)
This commit is contained in:
@@ -15,11 +15,11 @@ import { isQueryLanguage } from "../common/query-language";
|
||||
import { DisposableObject } from "../common/disposable-object";
|
||||
import { MethodsUsagePanel } from "./methods-usage/methods-usage-panel";
|
||||
import { Mode } from "./shared/mode";
|
||||
import { showResolvableLocation } from "../databases/local-databases/locations";
|
||||
import { Method, Usage } from "./method";
|
||||
import { setUpPack } from "./model-editor-queries";
|
||||
import { MethodModelingPanel } from "./method-modeling/method-modeling-panel";
|
||||
import { ModelingStore } from "./modeling-store";
|
||||
import { showResolvableLocation } from "../databases/local-databases/locations";
|
||||
|
||||
const SUPPORTED_LANGUAGES: string[] = ["java", "csharp"];
|
||||
|
||||
@@ -43,6 +43,8 @@ export class ModelEditorModule extends DisposableObject {
|
||||
new MethodsUsagePanel(this.modelingStore, cliServer),
|
||||
);
|
||||
this.methodModelingPanel = this.push(new MethodModelingPanel(app));
|
||||
|
||||
this.registerToModelingStoreEvents();
|
||||
}
|
||||
|
||||
public static async initialize(
|
||||
@@ -151,7 +153,6 @@ export class ModelEditorModule extends DisposableObject {
|
||||
db,
|
||||
modelFile,
|
||||
Mode.Application,
|
||||
this.showMethod.bind(this),
|
||||
);
|
||||
|
||||
this.modelingStore.onDbClosed(async (dbUri) => {
|
||||
@@ -179,8 +180,7 @@ export class ModelEditorModule extends DisposableObject {
|
||||
usage: Usage,
|
||||
databaseItem: DatabaseItem,
|
||||
) => {
|
||||
await this.methodModelingPanel.setMethod(method);
|
||||
await showResolvableLocation(usage.url, databaseItem, this.app.logger);
|
||||
this.modelingStore.setSelectedMethod(databaseItem, method, usage);
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -189,8 +189,21 @@ export class ModelEditorModule extends DisposableObject {
|
||||
await ensureDir(this.queryStorageDir);
|
||||
}
|
||||
|
||||
private async showMethod(method: Method, usage: Usage): Promise<void> {
|
||||
private registerToModelingStoreEvents(): void {
|
||||
this.push(
|
||||
this.modelingStore.onSelectedMethodChanged(async (event) => {
|
||||
await this.showMethod(event.databaseItem, event.method, event.usage);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
private async showMethod(
|
||||
databaseItem: DatabaseItem,
|
||||
method: Method,
|
||||
usage: Usage,
|
||||
): Promise<void> {
|
||||
await this.methodsUsagePanel.revealItem(usage);
|
||||
await this.methodModelingPanel.setMethod(method);
|
||||
await showResolvableLocation(usage.url, databaseItem, this.app.logger);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ import { asError, assertNever, getErrorMessage } from "../common/helpers-pure";
|
||||
import { runFlowModelQueries } from "./flow-model-queries";
|
||||
import { promptImportGithubDatabase } from "../databases/database-fetcher";
|
||||
import { App } from "../common/app";
|
||||
import { showResolvableLocation } from "../databases/local-databases/locations";
|
||||
import { redactableError } from "../common/errors";
|
||||
import {
|
||||
externalApiQueriesProgressMaxStep,
|
||||
@@ -61,10 +60,6 @@ export class ModelEditorView extends AbstractWebview<
|
||||
private readonly databaseItem: DatabaseItem,
|
||||
private readonly extensionPack: ExtensionPack,
|
||||
private mode: Mode,
|
||||
private readonly showMethod: (
|
||||
method: Method,
|
||||
usage: Usage,
|
||||
) => Promise<void>,
|
||||
) {
|
||||
super(app);
|
||||
|
||||
@@ -359,8 +354,7 @@ export class ModelEditorView extends AbstractWebview<
|
||||
}
|
||||
|
||||
protected async handleJumpToUsage(method: Method, usage: Usage) {
|
||||
await this.showMethod(method, usage);
|
||||
await showResolvableLocation(usage.url, this.databaseItem, this.app.logger);
|
||||
this.modelingStore.setSelectedMethod(this.databaseItem, method, usage);
|
||||
}
|
||||
|
||||
protected async loadExistingModeledMethods(): Promise<void> {
|
||||
@@ -511,7 +505,6 @@ export class ModelEditorView extends AbstractWebview<
|
||||
addedDatabase,
|
||||
modelFile,
|
||||
Mode.Framework,
|
||||
this.showMethod,
|
||||
);
|
||||
await view.openView();
|
||||
});
|
||||
|
||||
@@ -2,7 +2,7 @@ import { App } from "../common/app";
|
||||
import { DisposableObject } from "../common/disposable-object";
|
||||
import { AppEvent, AppEventEmitter } from "../common/events";
|
||||
import { DatabaseItem } from "../databases/local-databases";
|
||||
import { Method } from "./method";
|
||||
import { Method, Usage } from "./method";
|
||||
import { ModeledMethod } from "./modeled-method";
|
||||
import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "./shared/hide-modeled-methods";
|
||||
|
||||
@@ -12,6 +12,8 @@ interface DbModelingState {
|
||||
hideModeledMethods: boolean;
|
||||
modeledMethods: Record<string, ModeledMethod>;
|
||||
modifiedMethodSignatures: Set<string>;
|
||||
selectedMethod: Method | undefined;
|
||||
selectedUsage: Usage | undefined;
|
||||
}
|
||||
|
||||
interface MethodsChangedEvent {
|
||||
@@ -37,6 +39,14 @@ interface ModifiedMethodsChangedEvent {
|
||||
isActiveDb: boolean;
|
||||
}
|
||||
|
||||
interface SelectedMethodChangedEvent {
|
||||
databaseItem: DatabaseItem;
|
||||
method: Method;
|
||||
usage: Usage;
|
||||
modeledMethod: ModeledMethod | undefined;
|
||||
isModified: boolean;
|
||||
}
|
||||
|
||||
export class ModelingStore extends DisposableObject {
|
||||
public readonly onActiveDbChanged: AppEvent<void>;
|
||||
public readonly onDbClosed: AppEvent<string>;
|
||||
@@ -44,6 +54,7 @@ export class ModelingStore extends DisposableObject {
|
||||
public readonly onHideModeledMethodsChanged: AppEvent<HideModeledMethodsChangedEvent>;
|
||||
public readonly onModeledMethodsChanged: AppEvent<ModeledMethodsChangedEvent>;
|
||||
public readonly onModifiedMethodsChanged: AppEvent<ModifiedMethodsChangedEvent>;
|
||||
public readonly onSelectedMethodChanged: AppEvent<SelectedMethodChangedEvent>;
|
||||
|
||||
private readonly state: Map<string, DbModelingState>;
|
||||
private activeDb: string | undefined;
|
||||
@@ -54,6 +65,7 @@ export class ModelingStore extends DisposableObject {
|
||||
private readonly onHideModeledMethodsChangedEventEmitter: AppEventEmitter<HideModeledMethodsChangedEvent>;
|
||||
private readonly onModeledMethodsChangedEventEmitter: AppEventEmitter<ModeledMethodsChangedEvent>;
|
||||
private readonly onModifiedMethodsChangedEventEmitter: AppEventEmitter<ModifiedMethodsChangedEvent>;
|
||||
private readonly onSelectedMethodChangedEventEmitter: AppEventEmitter<SelectedMethodChangedEvent>;
|
||||
|
||||
constructor(app: App) {
|
||||
super();
|
||||
@@ -92,6 +104,12 @@ export class ModelingStore extends DisposableObject {
|
||||
);
|
||||
this.onModifiedMethodsChanged =
|
||||
this.onModifiedMethodsChangedEventEmitter.event;
|
||||
|
||||
this.onSelectedMethodChangedEventEmitter = this.push(
|
||||
app.createEventEmitter<SelectedMethodChangedEvent>(),
|
||||
);
|
||||
this.onSelectedMethodChanged =
|
||||
this.onSelectedMethodChangedEventEmitter.event;
|
||||
}
|
||||
|
||||
public initializeStateForDb(databaseItem: DatabaseItem) {
|
||||
@@ -102,6 +120,8 @@ export class ModelingStore extends DisposableObject {
|
||||
hideModeledMethods: INITIAL_HIDE_MODELED_METHODS_VALUE,
|
||||
modeledMethods: {},
|
||||
modifiedMethodSignatures: new Set(),
|
||||
selectedMethod: undefined,
|
||||
selectedUsage: undefined,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -229,6 +249,21 @@ export class ModelingStore extends DisposableObject {
|
||||
});
|
||||
}
|
||||
|
||||
public setSelectedMethod(dbItem: DatabaseItem, method: Method, usage: Usage) {
|
||||
const dbState = this.getState(dbItem);
|
||||
|
||||
dbState.selectedMethod = method;
|
||||
dbState.selectedUsage = usage;
|
||||
|
||||
this.onSelectedMethodChangedEventEmitter.fire({
|
||||
databaseItem: dbItem,
|
||||
method,
|
||||
usage,
|
||||
modeledMethod: dbState.modeledMethods[method.signature],
|
||||
isModified: dbState.modifiedMethodSignatures.has(method.signature),
|
||||
});
|
||||
}
|
||||
|
||||
private getState(databaseItem: DatabaseItem): DbModelingState {
|
||||
if (!this.state.has(databaseItem.databaseUri.toString())) {
|
||||
throw Error(
|
||||
|
||||
@@ -31,7 +31,6 @@ describe("ModelEditorView", () => {
|
||||
dataExtensions: ["models/**/*.yml"],
|
||||
};
|
||||
const mode = Mode.Application;
|
||||
const showMethod = jest.fn();
|
||||
|
||||
let view: ModelEditorView;
|
||||
|
||||
@@ -47,7 +46,6 @@ describe("ModelEditorView", () => {
|
||||
databaseItem,
|
||||
extensionPack,
|
||||
mode,
|
||||
showMethod,
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user