Skip to content

Commit 095f5ae

Browse files
committed
Use SetMultipleModeledMethodsMessage in modeled methods panel
1 parent 1993db5 commit 095f5ae

File tree

9 files changed

+50
-56
lines changed

9 files changed

+50
-56
lines changed

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -572,11 +572,6 @@ interface HideModeledMethodsMessage {
572572
hideModeledMethods: boolean;
573573
}
574574

575-
interface SetModeledMethodMessage {
576-
t: "setModeledMethod";
577-
method: ModeledMethod;
578-
}
579-
580575
interface SetMultipleModeledMethodsMessage {
581576
t: "setMultipleModeledMethods";
582577
methodSignature: string;
@@ -627,7 +622,7 @@ interface StartModelingMessage {
627622

628623
export type FromMethodModelingMessage =
629624
| CommonFromViewMessages
630-
| SetModeledMethodMessage
625+
| SetMultipleModeledMethodsMessage
631626
| RevealInEditorMessage
632627
| StartModelingMessage;
633628

extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { assertNever } from "../../common/helpers-pure";
1414
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
1515
import { ModelConfigListener } from "../../config";
1616
import { DatabaseItem } from "../../databases/local-databases";
17-
import { convertFromLegacyModeledMethod } from "../shared/modeled-methods-legacy";
1817

1918
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
2019
ToMethodModelingMessage,
@@ -108,19 +107,19 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
108107
);
109108
break;
110109

111-
case "setModeledMethod": {
110+
case "setMultipleModeledMethods": {
112111
if (!this.databaseItem) {
113112
return;
114113
}
115114

116115
this.modelingStore.updateModeledMethods(
117116
this.databaseItem,
118-
msg.method.signature,
119-
convertFromLegacyModeledMethod(msg.method),
117+
msg.methodSignature,
118+
msg.modeledMethods,
120119
);
121120
this.modelingStore.addModifiedMethod(
122121
this.databaseItem,
123-
msg.method.signature,
122+
msg.methodSignature,
124123
);
125124
break;
126125
}

extensions/ql-vscode/src/model-editor/shared/modeled-methods-legacy.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,5 @@
11
import { ModeledMethod } from "../modeled-method";
22

3-
/**
4-
* Converts a single ModeledMethod to a ModeledMethod[] for legacy usage. This function should always be used instead
5-
* of the trivial conversion to track usages of this conversion.
6-
*
7-
* This method should only be called inside a `onMessage` function (or its equivalent). If it's used anywhere else,
8-
* consider whether the boundary is correct: the boundary should as close as possible to the webview -> extension host
9-
* boundary.
10-
*
11-
* @param modeledMethod The single ModeledMethod
12-
*/
13-
export function convertFromLegacyModeledMethod(
14-
modeledMethod: ModeledMethod | undefined,
15-
): ModeledMethod[] {
16-
return modeledMethod ? [modeledMethod] : [];
17-
}
18-
193
/**
204
* Converts a ModeledMethod[] to a single ModeledMethod for legacy usage. This function should always be used instead
215
* of the trivial conversion to track usages of this conversion.

extensions/ql-vscode/src/stories/method-modeling/MultipleModeledMethodsPanel.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ const Template: StoryFn<typeof MultipleModeledMethodsPanelComponent> = (
2525
}, [args.modeledMethods]);
2626

2727
const handleChange = useCallback(
28-
(modeledMethods: ModeledMethod[]) => {
29-
args.onChange(modeledMethods);
28+
(methodSignature: string, modeledMethods: ModeledMethod[]) => {
29+
args.onChange(methodSignature, modeledMethods);
3030
setModeledMethods(modeledMethods);
3131
},
3232
[args],

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export type MethodModelingProps = {
5353
method: Method;
5454
modeledMethods: ModeledMethod[];
5555
showMultipleModels?: boolean;
56-
onChange: (modeledMethod: ModeledMethod) => void;
56+
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
5757
};
5858

5959
export const MethodModeling = ({

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,14 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element {
8686
return <MethodAlreadyModeled />;
8787
}
8888

89-
const onChange = (modeledMethod: ModeledMethod) => {
89+
const onChange = (
90+
methodSignature: string,
91+
modeledMethods: ModeledMethod[],
92+
) => {
9093
vscode.postMessage({
91-
t: "setModeledMethod",
92-
method: modeledMethod,
94+
t: "setMultipleModeledMethods",
95+
methodSignature,
96+
modeledMethods,
9397
});
9498
};
9599

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export type ModeledMethodsPanelProps = {
1111
method: Method;
1212
modeledMethods: ModeledMethod[];
1313
showMultipleModels: boolean;
14-
onChange: (modeledMethod: ModeledMethod) => void;
14+
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
1515
};
1616

1717
const SingleMethodModelingInputs = styled(MethodModelingInputs)`
@@ -24,9 +24,9 @@ export const ModeledMethodsPanel = ({
2424
showMultipleModels,
2525
onChange,
2626
}: ModeledMethodsPanelProps) => {
27-
const handleMultipleChange = useCallback(
28-
(modeledMethods: ModeledMethod[]) => {
29-
onChange(modeledMethods[0]);
27+
const handleSingleChange = useCallback(
28+
(modeledMethod: ModeledMethod) => {
29+
onChange(modeledMethod.signature, [modeledMethod]);
3030
},
3131
[onChange],
3232
);
@@ -36,7 +36,7 @@ export const ModeledMethodsPanel = ({
3636
<SingleMethodModelingInputs
3737
method={method}
3838
modeledMethod={convertToLegacyModeledMethod(modeledMethods)}
39-
onChange={onChange}
39+
onChange={handleSingleChange}
4040
/>
4141
);
4242
}
@@ -45,7 +45,7 @@ export const ModeledMethodsPanel = ({
4545
<MultipleModeledMethodsPanel
4646
method={method}
4747
modeledMethods={modeledMethods}
48-
onChange={handleMultipleChange}
48+
onChange={onChange}
4949
/>
5050
);
5151
};

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Codicon } from "../common";
1010
export type MultipleModeledMethodsPanelProps = {
1111
method: Method;
1212
modeledMethods: ModeledMethod[];
13-
onChange: (modeledMethods: ModeledMethod[]) => void;
13+
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
1414
};
1515

1616
const Container = styled.div`
@@ -70,7 +70,7 @@ export const MultipleModeledMethodsPanel = ({
7070

7171
const newModeledMethods = [...modeledMethods, newModeledMethod];
7272

73-
onChange(newModeledMethods);
73+
onChange(method.signature, newModeledMethods);
7474
setSelectedIndex(newModeledMethods.length - 1);
7575
}, [onChange, modeledMethods, method]);
7676

@@ -84,9 +84,9 @@ export const MultipleModeledMethodsPanel = ({
8484
? selectedIndex - 1
8585
: selectedIndex;
8686

87-
onChange(newModeledMethods);
87+
onChange(method.signature, newModeledMethods);
8888
setSelectedIndex(newSelectedIndex);
89-
}, [onChange, modeledMethods, selectedIndex]);
89+
}, [onChange, modeledMethods, selectedIndex, method]);
9090

9191
const anyUnmodeled = useMemo(
9292
() =>
@@ -100,12 +100,12 @@ export const MultipleModeledMethodsPanel = ({
100100
if (modeledMethods.length > 0) {
101101
const newModeledMethods = [...modeledMethods];
102102
newModeledMethods[selectedIndex] = modeledMethod;
103-
onChange(newModeledMethods);
103+
onChange(method.signature, newModeledMethods);
104104
} else {
105-
onChange([modeledMethod]);
105+
onChange(method.signature, [modeledMethod]);
106106
}
107107
},
108-
[modeledMethods, selectedIndex, onChange],
108+
[modeledMethods, selectedIndex, onChange, method],
109109
);
110110

111111
return (

extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
1414
reactRender(<MultipleModeledMethodsPanel {...props} />);
1515

1616
const method = createMethod();
17-
const onChange = jest.fn<void, [ModeledMethod[]]>();
17+
const onChange = jest.fn<void, [string, ModeledMethod[]]>();
1818

1919
describe("with no modeled methods", () => {
2020
const modeledMethods: ModeledMethod[] = [];
@@ -138,7 +138,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
138138

139139
await userEvent.click(screen.getByLabelText("Add modeling"));
140140

141-
expect(onChange).toHaveBeenCalledWith([
141+
expect(onChange).toHaveBeenCalledWith(method.signature, [
142142
...modeledMethods,
143143
{
144144
signature: method.signature,
@@ -265,7 +265,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
265265

266266
await userEvent.selectOptions(modelTypeDropdown, "source");
267267

268-
expect(onChange).toHaveBeenCalledWith([
268+
expect(onChange).toHaveBeenCalledWith(method.signature, [
269269
{
270270
signature: method.signature,
271271
packageName: method.packageName,
@@ -297,7 +297,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
297297

298298
await userEvent.selectOptions(modelTypeDropdown, "sink");
299299

300-
expect(onChange).toHaveBeenCalledWith([
300+
expect(onChange).toHaveBeenCalledWith(method.signature, [
301301
...modeledMethods.slice(0, 1),
302302
{
303303
signature: method.signature,
@@ -323,7 +323,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
323323

324324
await userEvent.click(screen.getByLabelText("Delete modeling"));
325325

326-
expect(onChange).toHaveBeenCalledWith(modeledMethods.slice(1));
326+
expect(onChange).toHaveBeenCalledWith(
327+
method.signature,
328+
modeledMethods.slice(1),
329+
);
327330
});
328331

329332
it("can add modeling", async () => {
@@ -335,7 +338,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
335338

336339
await userEvent.click(screen.getByLabelText("Add modeling"));
337340

338-
expect(onChange).toHaveBeenCalledWith([
341+
expect(onChange).toHaveBeenCalledWith(method.signature, [
339342
...modeledMethods,
340343
{
341344
signature: method.signature,
@@ -506,7 +509,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
506509

507510
await userEvent.click(screen.getByLabelText("Delete modeling"));
508511

509-
expect(onChange).toHaveBeenCalledWith(modeledMethods.slice(1));
512+
expect(onChange).toHaveBeenCalledWith(
513+
method.signature,
514+
modeledMethods.slice(1),
515+
);
510516
});
511517

512518
it("can delete second modeling", async () => {
@@ -519,7 +525,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
519525
await userEvent.click(screen.getByLabelText("Next modeling"));
520526
await userEvent.click(screen.getByLabelText("Delete modeling"));
521527

522-
expect(onChange).toHaveBeenCalledWith(modeledMethods.slice(0, 1));
528+
expect(onChange).toHaveBeenCalledWith(
529+
method.signature,
530+
modeledMethods.slice(0, 1),
531+
);
523532
});
524533

525534
it("can add modeling after deleting second modeling", async () => {
@@ -532,7 +541,10 @@ describe(MultipleModeledMethodsPanel.name, () => {
532541
await userEvent.click(screen.getByLabelText("Next modeling"));
533542
await userEvent.click(screen.getByLabelText("Delete modeling"));
534543

535-
expect(onChange).toHaveBeenCalledWith(modeledMethods.slice(0, 1));
544+
expect(onChange).toHaveBeenCalledWith(
545+
method.signature,
546+
modeledMethods.slice(0, 1),
547+
);
536548

537549
rerender(
538550
<MultipleModeledMethodsPanel
@@ -545,7 +557,7 @@ describe(MultipleModeledMethodsPanel.name, () => {
545557
onChange.mockReset();
546558
await userEvent.click(screen.getByLabelText("Add modeling"));
547559

548-
expect(onChange).toHaveBeenCalledWith([
560+
expect(onChange).toHaveBeenCalledWith(method.signature, [
549561
...modeledMethods.slice(0, 1),
550562
{
551563
signature: method.signature,

0 commit comments

Comments
 (0)