Skip to content

Commit a5139b7

Browse files
authored
Convert InProgressMethods to an interface (#2970)
1 parent f5f5b39 commit a5139b7

8 files changed

Lines changed: 44 additions & 43 deletions

File tree

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,28 @@
11
/**
2-
* A class that keeps track of which methods are in progress for each package.
3-
*
4-
* This class is immutable and therefore is safe to be used in a React useState hook.
2+
* An interface to help keep track of which methods are in progress for each package.
53
*/
6-
export class InProgressMethods {
7-
// A map of in-progress method signatures for each package.
8-
private readonly methodMap: ReadonlyMap<string, Set<string>>;
4+
export type InProgressMethods = Record<string, string[]>;
95

10-
constructor(methodMap?: ReadonlyMap<string, Set<string>>) {
11-
this.methodMap = methodMap ?? new Map<string, Set<string>>();
12-
}
6+
export function setPackageInProgressMethods(
7+
inProgressMethods: InProgressMethods,
8+
packageName: string,
9+
methods: string[],
10+
): InProgressMethods {
11+
return {
12+
...inProgressMethods,
13+
[packageName]: methods,
14+
};
15+
}
1316

14-
/**
15-
* Sets the in-progress methods for the given package.
16-
* Returns a new InProgressMethods instance.
17-
*/
18-
public setPackageMethods(
19-
packageName: string,
20-
methods: Set<string>,
21-
): InProgressMethods {
22-
const newMethodMap = new Map<string, Set<string>>(this.methodMap);
23-
newMethodMap.set(packageName, methods);
24-
return new InProgressMethods(newMethodMap);
17+
export function hasInProgressMethod(
18+
inProgressMethods: InProgressMethods,
19+
packageName: string,
20+
method: string,
21+
): boolean {
22+
const methods = inProgressMethods[packageName];
23+
if (methods) {
24+
return methods.includes(method);
2525
}
2626

27-
public hasMethod(packageName: string, method: string): boolean {
28-
const methods = this.methodMap.get(packageName);
29-
if (methods) {
30-
return methods.has(method);
31-
}
32-
return false;
33-
}
27+
return false;
3428
}

extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { Meta, StoryFn } from "@storybook/react";
55
import { Mode } from "../../model-editor/shared/mode";
66
import { LibraryRow as LibraryRowComponent } from "../../view/model-editor/LibraryRow";
77
import { CallClassification } from "../../model-editor/method";
8-
import { InProgressMethods } from "../../model-editor/shared/in-progress-methods";
98
import { createMockExtensionPack } from "../../../test/factories/model-editor/extension-pack";
109

1110
export default {
@@ -219,7 +218,7 @@ LibraryRow.args = {
219218
],
220219
},
221220
modifiedSignatures: new Set(["org.sql2o.Sql2o#Sql2o(String)"]),
222-
inProgressMethods: new InProgressMethods(),
221+
inProgressMethods: {},
223222
viewState: {
224223
extensionPack: createMockExtensionPack(),
225224
showFlowGeneration: true,

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ import {
1414
VSCodeTag,
1515
} from "@vscode/webview-ui-toolkit/react";
1616
import { ModelEditorViewState } from "../../model-editor/shared/view-state";
17-
import { InProgressMethods } from "../../model-editor/shared/in-progress-methods";
17+
import {
18+
InProgressMethods,
19+
hasInProgressMethod,
20+
} from "../../model-editor/shared/in-progress-methods";
1821

1922
const LibraryContainer = styled.div`
2023
background-color: var(--vscode-peekViewResult-background);
@@ -177,7 +180,7 @@ export const LibraryRow = ({
177180

178181
const canStopAutoModeling = useMemo(() => {
179182
return methods.some((method) =>
180-
inProgressMethods.hasMethod(title, method.signature),
183+
hasInProgressMethod(inProgressMethods, title, method.signature),
181184
);
182185
}, [methods, title, inProgressMethods]);
183186

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ import { ModelEditorViewState } from "../../model-editor/shared/view-state";
1717
import { ModeledMethodsList } from "./ModeledMethodsList";
1818
import { percentFormatter } from "./formatters";
1919
import { Mode } from "../../model-editor/shared/mode";
20-
import { InProgressMethods } from "../../model-editor/shared/in-progress-methods";
20+
import {
21+
InProgressMethods,
22+
setPackageInProgressMethods,
23+
} from "../../model-editor/shared/in-progress-methods";
2124
import { getLanguageDisplayName } from "../../common/query-language";
2225
import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "../../model-editor/shared/hide-modeled-methods";
2326

@@ -94,7 +97,7 @@ export function ModelEditor({
9497
);
9598

9699
const [inProgressMethods, setInProgressMethods] = useState<InProgressMethods>(
97-
new InProgressMethods(),
100+
{},
98101
);
99102

100103
const [hideModeledMethods, setHideModeledMethods] = useState(
@@ -135,9 +138,10 @@ export function ModelEditor({
135138
break;
136139
case "setInProgressMethods":
137140
setInProgressMethods((oldInProgressMethods) =>
138-
oldInProgressMethods.setPackageMethods(
141+
setPackageInProgressMethods(
142+
oldInProgressMethods,
139143
msg.packageName,
140-
new Set(msg.inProgressMethods),
144+
msg.inProgressMethods,
141145
),
142146
);
143147
break;

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ 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";
12-
import { InProgressMethods } from "../../model-editor/shared/in-progress-methods";
12+
import {
13+
InProgressMethods,
14+
hasInProgressMethod,
15+
} from "../../model-editor/shared/in-progress-methods";
1316
import { HiddenMethodsRow } from "./HiddenMethodsRow";
1417
import { ModelEditorViewState } from "../../model-editor/shared/view-state";
1518
import { ScreenReaderOnly } from "../common/ScreenReaderOnly";
@@ -107,7 +110,8 @@ export const ModeledMethodDataGrid = ({
107110
methodCanBeModeled={methodCanBeModeled}
108111
modeledMethods={modeledMethods}
109112
methodIsUnsaved={modifiedSignatures.has(method.signature)}
110-
modelingInProgress={inProgressMethods.hasMethod(
113+
modelingInProgress={hasInProgressMethod(
114+
inProgressMethods,
111115
packageName,
112116
method.signature,
113117
)}

extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import * as React from "react";
22
import { render as reactRender, screen } from "@testing-library/react";
33
import { createMethod } from "../../../../test/factories/model-editor/method-factories";
44
import { LibraryRow, LibraryRowProps } from "../LibraryRow";
5-
import { InProgressMethods } from "../../../model-editor/shared/in-progress-methods";
65
import { createMockExtensionPack } from "../../../../test/factories/model-editor/extension-pack";
76
import { Mode } from "../../../model-editor/shared/mode";
87
import { ModelEditorViewState } from "../../../model-editor/shared/view-state";
@@ -44,7 +43,7 @@ describe(LibraryRow.name, () => {
4443
],
4544
}}
4645
modifiedSignatures={new Set([method.signature])}
47-
inProgressMethods={new InProgressMethods()}
46+
inProgressMethods={{}}
4847
viewState={viewState}
4948
hideModeledMethods={false}
5049
revealedMethodSignature={null}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as React from "react";
22
import { render as reactRender, screen } from "@testing-library/react";
33
import { createMethod } from "../../../../test/factories/model-editor/method-factories";
4-
import { InProgressMethods } from "../../../model-editor/shared/in-progress-methods";
54
import { Mode } from "../../../model-editor/shared/mode";
65
import {
76
ModeledMethodDataGrid,
@@ -70,7 +69,7 @@ describe(ModeledMethodDataGrid.name, () => {
7069
],
7170
}}
7271
modifiedSignatures={new Set([method1.signature])}
73-
inProgressMethods={new InProgressMethods()}
72+
inProgressMethods={{}}
7473
viewState={viewState}
7574
hideModeledMethods={false}
7675
revealedMethodSignature={null}

extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as React from "react";
22
import { render as reactRender, screen } from "@testing-library/react";
33
import { createMethod } from "../../../../test/factories/model-editor/method-factories";
4-
import { InProgressMethods } from "../../../model-editor/shared/in-progress-methods";
54
import { createMockExtensionPack } from "../../../../test/factories/model-editor/extension-pack";
65
import { Mode } from "../../../model-editor/shared/mode";
76
import { ModelEditorViewState } from "../../../model-editor/shared/view-state";
@@ -70,7 +69,7 @@ describe(ModeledMethodsList.name, () => {
7069
],
7170
}}
7271
modifiedSignatures={new Set([method1.signature])}
73-
inProgressMethods={new InProgressMethods()}
72+
inProgressMethods={{}}
7473
viewState={viewState}
7574
hideModeledMethods={false}
7675
revealedMethodSignature={null}

0 commit comments

Comments
 (0)