Skip to content

Commit 9da3dc9

Browse files
Allow editing multiple models in model editor
1 parent c7451fc commit 9da3dc9

7 files changed

Lines changed: 36 additions & 21 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ export type FromModelEditorMessage =
614614
| StopGeneratingMethodsFromLlmMessage
615615
| ModelDependencyMessage
616616
| HideModeledMethodsMessage
617-
| SetModeledMethodMessage;
617+
| SetMultipleModeledMethodsMessage;
618618

619619
interface RevealInEditorMessage {
620620
t: "revealInModelEditor";

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ import { AutoModeler } from "./auto-modeler";
4343
import { telemetryListener } from "../common/vscode/telemetry";
4444
import { ModelingStore } from "./modeling-store";
4545
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
46-
import { convertFromLegacyModeledMethod } from "./shared/modeled-methods-legacy";
4746

4847
export class ModelEditorView extends AbstractWebview<
4948
ToModelEditorMessage,
@@ -309,11 +308,8 @@ export class ModelEditorView extends AbstractWebview<
309308
"model-editor-hide-modeled-methods",
310309
);
311310
break;
312-
case "setModeledMethod": {
313-
this.setModeledMethods(
314-
msg.method.signature,
315-
convertFromLegacyModeledMethod(msg.method),
316-
);
311+
case "setMultipleModeledMethods": {
312+
this.setModeledMethods(msg.methodSignature, msg.modeledMethods);
317313
break;
318314
}
319315
case "telemetry":

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export type LibraryRowProps = {
7777
viewState: ModelEditorViewState;
7878
hideModeledMethods: boolean;
7979
revealedMethodSignature: string | null;
80-
onChange: (modeledMethod: ModeledMethod) => void;
80+
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
8181
onSaveModelClick: (methodSignatures: string[]) => void;
8282
onGenerateFromLlmClick: (
8383
dependencyName: string,

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

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export type MethodRowProps = {
6868
modelingInProgress: boolean;
6969
viewState: ModelEditorViewState;
7070
revealedMethodSignature: string | null;
71-
onChange: (modeledMethod: ModeledMethod) => void;
71+
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
7272
};
7373

7474
export const MethodRow = (props: MethodRowProps) => {
@@ -113,6 +113,21 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
113113
[modeledMethodsProp, viewState],
114114
);
115115

116+
const modeledMethodChangedHandlers = useMemo(
117+
() =>
118+
modeledMethods.map((_, index) => (modeledMethod: ModeledMethod) => {
119+
const newModeledMethods = [...modeledMethods];
120+
newModeledMethods[index] = modeledMethod;
121+
onChange(
122+
method.signature,
123+
newModeledMethods.filter(
124+
(m): m is ModeledMethod => m !== undefined,
125+
),
126+
);
127+
}),
128+
[method, modeledMethods, onChange],
129+
);
130+
116131
const jumpToMethod = useCallback(
117132
() => sendJumpToMethodMessage(method),
118133
[method],
@@ -164,7 +179,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
164179
key={index}
165180
method={method}
166181
modeledMethod={modeledMethod}
167-
onChange={onChange}
182+
onChange={modeledMethodChangedHandlers[index]}
168183
/>
169184
))}
170185
</MultiModelColumn>
@@ -174,7 +189,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
174189
key={index}
175190
method={method}
176191
modeledMethod={modeledMethod}
177-
onChange={onChange}
192+
onChange={modeledMethodChangedHandlers[index]}
178193
/>
179194
))}
180195
</MultiModelColumn>
@@ -184,7 +199,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
184199
key={index}
185200
method={method}
186201
modeledMethod={modeledMethod}
187-
onChange={onChange}
202+
onChange={modeledMethodChangedHandlers[index]}
188203
/>
189204
))}
190205
</MultiModelColumn>
@@ -194,7 +209,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
194209
key={index}
195210
method={method}
196211
modeledMethod={modeledMethod}
197-
onChange={onChange}
212+
onChange={modeledMethodChangedHandlers[index]}
198213
/>
199214
))}
200215
</MultiModelColumn>

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,16 @@ export function ModelEditor({
180180
[methods],
181181
);
182182

183-
const onChange = useCallback((model: ModeledMethod) => {
184-
vscode.postMessage({
185-
t: "setModeledMethod",
186-
method: model,
187-
});
188-
}, []);
183+
const onChange = useCallback(
184+
(methodSignature: string, modeledMethods: ModeledMethod[]) => {
185+
vscode.postMessage({
186+
t: "setMultipleModeledMethods",
187+
methodSignature,
188+
modeledMethods,
189+
});
190+
},
191+
[],
192+
);
189193

190194
const onRefreshClick = useCallback(() => {
191195
vscode.postMessage({

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export type ModeledMethodDataGridProps = {
2424
viewState: ModelEditorViewState;
2525
hideModeledMethods: boolean;
2626
revealedMethodSignature: string | null;
27-
onChange: (modeledMethod: ModeledMethod) => void;
27+
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
2828
};
2929

3030
export const ModeledMethodDataGrid = ({

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export type ModeledMethodsListProps = {
1919
revealedMethodSignature: string | null;
2020
viewState: ModelEditorViewState;
2121
hideModeledMethods: boolean;
22-
onChange: (modeledMethod: ModeledMethod) => void;
22+
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
2323
onSaveModelClick: (methodSignatures: string[]) => void;
2424
onGenerateFromLlmClick: (
2525
packageName: string,

0 commit comments

Comments
 (0)