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

View File

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

View File

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

View File

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