Merge pull request #2943 from github/koesie10/state-confusion

Fix confusion between modeling store and view states
This commit is contained in:
Koen Vlaswinkel
2023-10-11 09:45:58 +02:00
committed by GitHub
3 changed files with 17 additions and 23 deletions

View File

@@ -8,7 +8,7 @@ import { extLogger } from "../../common/logging/vscode/loggers";
import { App } from "../../common/app";
import { redactableError } from "../../common/errors";
import { Method } from "../method";
import { DbModelingState, ModelingStore } from "../modeling-store";
import { ModelingStore } from "../modeling-store";
import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webview-view-provider";
import { assertNever } from "../../common/helpers-pure";
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
@@ -71,6 +71,9 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
if (this.modelingStore.hasStateForActiveDb()) {
const selectedMethod = this.modelingStore.getSelectedMethodDetails();
if (selectedMethod) {
this.databaseItem = selectedMethod.databaseItem;
this.method = selectedMethod.method;
await this.postMessage({
t: "setSelectedMethod",
method: selectedMethod.method,
@@ -111,15 +114,17 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
break;
case "setModeledMethod": {
const activeState = this.ensureActiveState();
if (!this.databaseItem) {
return;
}
this.modelingStore.updateModeledMethods(
activeState.databaseItem,
this.databaseItem,
msg.method.signature,
convertFromLegacyModeledMethod(msg.method),
);
this.modelingStore.addModifiedMethod(
activeState.databaseItem,
this.databaseItem,
msg.method.signature,
);
break;
@@ -140,10 +145,12 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
}
private async revealInModelEditor(method: Method): Promise<void> {
const activeState = this.ensureActiveState();
if (!this.databaseItem) {
return;
}
const views = this.editorViewTracker.getViews(
activeState.databaseItem.databaseUri.toString(),
this.databaseItem.databaseUri.toString(),
);
if (views.length === 0) {
return;
@@ -152,15 +159,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
await Promise.all(views.map((view) => view.revealMethod(method)));
}
private ensureActiveState(): DbModelingState {
const activeState = this.modelingStore.getStateForActiveDb();
if (!activeState) {
throw new Error("No active state found in modeling store");
}
return activeState;
}
private registerToModelingStoreEvents(): void {
this.push(
this.modelingStore.onModeledMethodsChanged(async (e) => {

View File

@@ -676,16 +676,11 @@ export class ModelEditorView extends AbstractWebview<
}
private setModeledMethods(signature: string, methods: ModeledMethod[]) {
const state = this.modelingStore.getStateForActiveDb();
if (!state) {
throw new Error("Attempting to set modeled method without active db");
}
this.modelingStore.updateModeledMethods(
state.databaseItem,
this.databaseItem,
signature,
methods,
);
this.modelingStore.addModifiedMethod(state.databaseItem, signature);
this.modelingStore.addModifiedMethod(this.databaseItem, signature);
}
}

View File

@@ -6,7 +6,7 @@ import { Method, Usage } from "./method";
import { ModeledMethod } from "./modeled-method";
import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "./shared/hide-modeled-methods";
export interface DbModelingState {
interface DbModelingState {
databaseItem: DatabaseItem;
methods: Method[];
hideModeledMethods: boolean;
@@ -347,6 +347,7 @@ export class ModelingStore extends DisposableObject {
}
return {
databaseItem: dbState.databaseItem,
method: selectedMethod,
usage: dbState.selectedUsage,
modeledMethods: dbState.modeledMethods[selectedMethod.signature] ?? [],