Convert SetSelectedMethodMessage to include multiple modeled methods

This commit is contained in:
Koen Vlaswinkel
2023-10-11 10:14:58 +02:00
parent e77cf28192
commit 4a62d05af6
5 changed files with 26 additions and 35 deletions

View File

@@ -577,6 +577,11 @@ interface SetModeledMethodMessage {
method: ModeledMethod;
}
interface SetMultipleModeledMethodsMessage {
t: "setMultipleModeledMethods";
modeledMethods: ModeledMethod[];
}
interface SetInModelingModeMessage {
t: "setInModelingMode";
inModelingMode: boolean;
@@ -643,14 +648,14 @@ interface SetMethodModifiedMessage {
interface SetSelectedMethodMessage {
t: "setSelectedMethod";
method: Method;
modeledMethod?: ModeledMethod;
modeledMethods: ModeledMethod[];
isModified: boolean;
}
export type ToMethodModelingMessage =
| SetMethodModelingPanelViewStateMessage
| SetMethodMessage
| SetModeledMethodMessage
| SetMultipleModeledMethodsMessage
| SetMethodModifiedMessage
| SetSelectedMethodMessage
| SetInModelingModeMessage;

View File

@@ -14,10 +14,7 @@ import { assertNever } from "../../common/helpers-pure";
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
import { ModelConfigListener } from "../../config";
import { DatabaseItem } from "../../databases/local-databases";
import {
convertFromLegacyModeledMethod,
convertToLegacyModeledMethod,
} from "../shared/modeled-methods-legacy";
import { convertFromLegacyModeledMethod } from "../shared/modeled-methods-legacy";
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
ToMethodModelingMessage,
@@ -77,9 +74,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
await this.postMessage({
t: "setSelectedMethod",
method: selectedMethod.method,
modeledMethod: convertToLegacyModeledMethod(
selectedMethod.modeledMethods,
),
modeledMethods: selectedMethod.modeledMethods,
isModified: selectedMethod.isModified,
});
}
@@ -165,13 +160,10 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
if (this.webviewView && e.isActiveDb) {
const modeledMethods = e.modeledMethods[this.method?.signature ?? ""];
if (modeledMethods) {
const modeledMethod = convertToLegacyModeledMethod(modeledMethods);
if (modeledMethod) {
await this.postMessage({
t: "setModeledMethod",
method: modeledMethod,
});
}
await this.postMessage({
t: "setMultipleModeledMethods",
modeledMethods,
});
}
}
}),
@@ -198,7 +190,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
await this.postMessage({
t: "setSelectedMethod",
method: e.method,
modeledMethod: convertToLegacyModeledMethod(e.modeledMethods),
modeledMethods: e.modeledMethods,
isModified: e.isModified,
});
}

View File

@@ -68,12 +68,12 @@ export function getArgumentsList(methodParameters: string): string[] {
export function canMethodBeModeled(
method: Method,
modeledMethod: ModeledMethod | undefined,
modeledMethods: ModeledMethod[],
methodIsUnsaved: boolean,
): boolean {
return (
!method.supported ||
(modeledMethod && modeledMethod?.type !== "none") ||
modeledMethods.some((modeledMethod) => modeledMethod.type !== "none") ||
methodIsUnsaved
);
}

View File

@@ -10,7 +10,6 @@ import { vscode } from "../vscode-api";
import { NotInModelingMode } from "./NotInModelingMode";
import { NoMethodSelected } from "./NoMethodSelected";
import { MethodModelingPanelViewState } from "../../model-editor/shared/view-state";
import { convertFromLegacyModeledMethod } from "../../model-editor/shared/modeled-methods-legacy";
import { MethodAlreadyModeled } from "./MethodAlreadyModeled";
type Props = {
@@ -25,19 +24,13 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element {
const [method, setMethod] = useState<Method | undefined>(undefined);
const [modeledMethod, setModeledMethod] = React.useState<
ModeledMethod | undefined
>(undefined);
const [modeledMethods, setModeledMethods] = useState<ModeledMethod[]>([]);
const [isMethodModified, setIsMethodModified] = useState<boolean>(false);
const modelingStatus = useMemo(
() =>
getModelingStatus(
convertFromLegacyModeledMethod(modeledMethod),
isMethodModified,
),
[modeledMethod, isMethodModified],
() => getModelingStatus(modeledMethods, isMethodModified),
[modeledMethods, isMethodModified],
);
useEffect(() => {
@@ -54,15 +47,15 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element {
case "setMethod":
setMethod(msg.method);
break;
case "setModeledMethod":
setModeledMethod(msg.method);
case "setMultipleModeledMethods":
setModeledMethods(msg.modeledMethods);
break;
case "setMethodModified":
setIsMethodModified(msg.isModified);
break;
case "setSelectedMethod":
setMethod(msg.method);
setModeledMethod(msg.modeledMethod);
setModeledMethods(msg.modeledMethods);
setIsMethodModified(msg.isModified);
break;
default:
@@ -89,7 +82,7 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element {
return <NoMethodSelected />;
}
if (!canMethodBeModeled(method, modeledMethod, isMethodModified)) {
if (!canMethodBeModeled(method, modeledMethods, isMethodModified)) {
return <MethodAlreadyModeled />;
}
@@ -104,7 +97,7 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element {
<MethodModeling
modelingStatus={modelingStatus}
method={method}
modeledMethods={convertFromLegacyModeledMethod(modeledMethod)}
modeledMethods={modeledMethods}
showMultipleModels={viewState?.showMultipleModels}
onChange={onChange}
/>

View File

@@ -12,6 +12,7 @@ import { sortMethods } from "../../model-editor/shared/sorting";
import { InProgressMethods } from "../../model-editor/shared/in-progress-methods";
import { HiddenMethodsRow } from "./HiddenMethodsRow";
import { ModelEditorViewState } from "../../model-editor/shared/view-state";
import { convertFromLegacyModeledMethod } from "../../model-editor/shared/modeled-methods-legacy";
export const GRID_TEMPLATE_COLUMNS = "0.5fr 0.125fr 0.125fr 0.125fr 0.125fr";
@@ -49,7 +50,7 @@ export const ModeledMethodDataGrid = ({
const methodIsUnsaved = modifiedSignatures.has(method.signature);
const methodCanBeModeled = canMethodBeModeled(
method,
modeledMethod,
convertFromLegacyModeledMethod(modeledMethod),
methodIsUnsaved,
);