Allow editing multiple models in model editor

This commit is contained in:
Robert
2023-10-11 12:37:43 +01:00
parent c7451fc4c2
commit 9da3dc9a25
7 changed files with 36 additions and 21 deletions

View File

@@ -614,7 +614,7 @@ export type FromModelEditorMessage =
| StopGeneratingMethodsFromLlmMessage | StopGeneratingMethodsFromLlmMessage
| ModelDependencyMessage | ModelDependencyMessage
| HideModeledMethodsMessage | HideModeledMethodsMessage
| SetModeledMethodMessage; | SetMultipleModeledMethodsMessage;
interface RevealInEditorMessage { interface RevealInEditorMessage {
t: "revealInModelEditor"; t: "revealInModelEditor";

View File

@@ -43,7 +43,6 @@ import { AutoModeler } from "./auto-modeler";
import { telemetryListener } from "../common/vscode/telemetry"; import { telemetryListener } from "../common/vscode/telemetry";
import { ModelingStore } from "./modeling-store"; import { ModelingStore } from "./modeling-store";
import { ModelEditorViewTracker } from "./model-editor-view-tracker"; import { ModelEditorViewTracker } from "./model-editor-view-tracker";
import { convertFromLegacyModeledMethod } from "./shared/modeled-methods-legacy";
export class ModelEditorView extends AbstractWebview< export class ModelEditorView extends AbstractWebview<
ToModelEditorMessage, ToModelEditorMessage,
@@ -309,11 +308,8 @@ export class ModelEditorView extends AbstractWebview<
"model-editor-hide-modeled-methods", "model-editor-hide-modeled-methods",
); );
break; break;
case "setModeledMethod": { case "setMultipleModeledMethods": {
this.setModeledMethods( this.setModeledMethods(msg.methodSignature, msg.modeledMethods);
msg.method.signature,
convertFromLegacyModeledMethod(msg.method),
);
break; break;
} }
case "telemetry": case "telemetry":

View File

@@ -77,7 +77,7 @@ export type LibraryRowProps = {
viewState: ModelEditorViewState; viewState: ModelEditorViewState;
hideModeledMethods: boolean; hideModeledMethods: boolean;
revealedMethodSignature: string | null; revealedMethodSignature: string | null;
onChange: (modeledMethod: ModeledMethod) => void; onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
onSaveModelClick: (methodSignatures: string[]) => void; onSaveModelClick: (methodSignatures: string[]) => void;
onGenerateFromLlmClick: ( onGenerateFromLlmClick: (
dependencyName: string, dependencyName: string,

View File

@@ -68,7 +68,7 @@ export type MethodRowProps = {
modelingInProgress: boolean; modelingInProgress: boolean;
viewState: ModelEditorViewState; viewState: ModelEditorViewState;
revealedMethodSignature: string | null; revealedMethodSignature: string | null;
onChange: (modeledMethod: ModeledMethod) => void; onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
}; };
export const MethodRow = (props: MethodRowProps) => { export const MethodRow = (props: MethodRowProps) => {
@@ -113,6 +113,21 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
[modeledMethodsProp, viewState], [modeledMethodsProp, viewState],
); );
const modeledMethodChangedHandlers = useMemo(
() =>
modeledMethods.map((_, index) => (modeledMethod: ModeledMethod) => {
const newModeledMethods = [...modeledMethods];
newModeledMethods[index] = modeledMethod;
onChange(
method.signature,
newModeledMethods.filter(
(m): m is ModeledMethod => m !== undefined,
),
);
}),
[method, modeledMethods, onChange],
);
const jumpToMethod = useCallback( const jumpToMethod = useCallback(
() => sendJumpToMethodMessage(method), () => sendJumpToMethodMessage(method),
[method], [method],
@@ -164,7 +179,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
key={index} key={index}
method={method} method={method}
modeledMethod={modeledMethod} modeledMethod={modeledMethod}
onChange={onChange} onChange={modeledMethodChangedHandlers[index]}
/> />
))} ))}
</MultiModelColumn> </MultiModelColumn>
@@ -174,7 +189,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
key={index} key={index}
method={method} method={method}
modeledMethod={modeledMethod} modeledMethod={modeledMethod}
onChange={onChange} onChange={modeledMethodChangedHandlers[index]}
/> />
))} ))}
</MultiModelColumn> </MultiModelColumn>
@@ -184,7 +199,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
key={index} key={index}
method={method} method={method}
modeledMethod={modeledMethod} modeledMethod={modeledMethod}
onChange={onChange} onChange={modeledMethodChangedHandlers[index]}
/> />
))} ))}
</MultiModelColumn> </MultiModelColumn>
@@ -194,7 +209,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
key={index} key={index}
method={method} method={method}
modeledMethod={modeledMethod} modeledMethod={modeledMethod}
onChange={onChange} onChange={modeledMethodChangedHandlers[index]}
/> />
))} ))}
</MultiModelColumn> </MultiModelColumn>

View File

@@ -180,12 +180,16 @@ export function ModelEditor({
[methods], [methods],
); );
const onChange = useCallback((model: ModeledMethod) => { const onChange = useCallback(
vscode.postMessage({ (methodSignature: string, modeledMethods: ModeledMethod[]) => {
t: "setModeledMethod", vscode.postMessage({
method: model, t: "setMultipleModeledMethods",
}); methodSignature,
}, []); modeledMethods,
});
},
[],
);
const onRefreshClick = useCallback(() => { const onRefreshClick = useCallback(() => {
vscode.postMessage({ vscode.postMessage({

View File

@@ -24,7 +24,7 @@ export type ModeledMethodDataGridProps = {
viewState: ModelEditorViewState; viewState: ModelEditorViewState;
hideModeledMethods: boolean; hideModeledMethods: boolean;
revealedMethodSignature: string | null; revealedMethodSignature: string | null;
onChange: (modeledMethod: ModeledMethod) => void; onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
}; };
export const ModeledMethodDataGrid = ({ export const ModeledMethodDataGrid = ({

View File

@@ -19,7 +19,7 @@ export type ModeledMethodsListProps = {
revealedMethodSignature: string | null; revealedMethodSignature: string | null;
viewState: ModelEditorViewState; viewState: ModelEditorViewState;
hideModeledMethods: boolean; hideModeledMethods: boolean;
onChange: (modeledMethod: ModeledMethod) => void; onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
onSaveModelClick: (methodSignatures: string[]) => void; onSaveModelClick: (methodSignatures: string[]) => void;
onGenerateFromLlmClick: ( onGenerateFromLlmClick: (
packageName: string, packageName: string,