Skip to content

Commit e45f4bd

Browse files
Merge branch 'main' into robertbrignull/legacy-conversion
2 parents 7ba58b6 + f4d74c7 commit e45f4bd

File tree

5 files changed

+47
-7
lines changed

5 files changed

+47
-7
lines changed

extensions/ql-vscode/src/model-editor/method.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ResolvableLocationValue } from "../common/bqrs-cli-types";
2-
import { ModeledMethodType } from "./modeled-method";
2+
import { ModeledMethod, ModeledMethodType } from "./modeled-method";
33

44
export type Call = {
55
label: string;
@@ -65,3 +65,15 @@ export function getArgumentsList(methodParameters: string): string[] {
6565

6666
return methodParameters.substring(1, methodParameters.length - 1).split(",");
6767
}
68+
69+
export function canMethodBeModeled(
70+
method: Method,
71+
modeledMethod: ModeledMethod | undefined,
72+
methodIsUnsaved: boolean,
73+
): boolean {
74+
return (
75+
!method.supported ||
76+
(modeledMethod && modeledMethod?.type !== "none") ||
77+
methodIsUnsaved
78+
);
79+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import * as React from "react";
2+
3+
import { Meta, StoryFn } from "@storybook/react";
4+
5+
import { MethodAlreadyModeled as MethodAlreadyModeledComponent } from "../../view/method-modeling/MethodAlreadyModeled";
6+
7+
export default {
8+
title: "Method Modeling/Method Already Modeled",
9+
component: MethodAlreadyModeledComponent,
10+
} as Meta<typeof MethodAlreadyModeledComponent>;
11+
12+
const Template: StoryFn<typeof MethodAlreadyModeledComponent> = () => (
13+
<MethodAlreadyModeledComponent />
14+
);
15+
16+
export const MethodAlreadyModeled = Template.bind({});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import * as React from "react";
2+
import { ResponsiveContainer } from "../common/ResponsiveContainer";
3+
4+
export const MethodAlreadyModeled = () => {
5+
return <ResponsiveContainer>Method already modeled</ResponsiveContainer>;
6+
};

extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from "react";
22
import { useEffect, useMemo, useState } from "react";
33
import { MethodModeling } from "./MethodModeling";
44
import { getModelingStatus } from "../../model-editor/shared/modeling-status";
5-
import { Method } from "../../model-editor/method";
5+
import { Method, canMethodBeModeled } from "../../model-editor/method";
66
import { ToMethodModelingMessage } from "../../common/interface-types";
77
import { assertNever } from "../../common/helpers-pure";
88
import { ModeledMethod } from "../../model-editor/modeled-method";
@@ -11,6 +11,7 @@ import { NotInModelingMode } from "./NotInModelingMode";
1111
import { NoMethodSelected } from "./NoMethodSelected";
1212
import { MethodModelingPanelViewState } from "../../model-editor/shared/view-state";
1313
import { convertFromLegacyModeledMethod } from "../../model-editor/shared/modeled-methods-legacy";
14+
import { MethodAlreadyModeled } from "./MethodAlreadyModeled";
1415

1516
type Props = {
1617
initialViewState?: MethodModelingPanelViewState;
@@ -88,6 +89,10 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element {
8889
return <NoMethodSelected />;
8990
}
9091

92+
if (!canMethodBeModeled(method, modeledMethod, isMethodModified)) {
93+
return <MethodAlreadyModeled />;
94+
}
95+
9196
const onChange = (modeledMethod: ModeledMethod) => {
9297
vscode.postMessage({
9398
t: "setModeledMethod",

extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
VSCodeDataGridRow,
66
} from "@vscode/webview-ui-toolkit/react";
77
import { MethodRow } from "./MethodRow";
8-
import { Method } from "../../model-editor/method";
8+
import { Method, canMethodBeModeled } from "../../model-editor/method";
99
import { ModeledMethod } from "../../model-editor/modeled-method";
1010
import { useMemo } from "react";
1111
import { sortMethods } from "../../model-editor/shared/sorting";
@@ -47,10 +47,11 @@ export const ModeledMethodDataGrid = ({
4747
for (const method of sortMethods(methods)) {
4848
const modeledMethod = modeledMethods[method.signature];
4949
const methodIsUnsaved = modifiedSignatures.has(method.signature);
50-
const methodCanBeModeled =
51-
!method.supported ||
52-
(modeledMethod && modeledMethod?.type !== "none") ||
53-
methodIsUnsaved;
50+
const methodCanBeModeled = canMethodBeModeled(
51+
method,
52+
modeledMethod,
53+
methodIsUnsaved,
54+
);
5455

5556
if (methodCanBeModeled || !hideModeledMethods) {
5657
methodsWithModelability.push({ method, methodCanBeModeled });

0 commit comments

Comments
 (0)