103 lines
3.1 KiB
TypeScript
103 lines
3.1 KiB
TypeScript
import * as React from "react";
|
|
import { useMemo } from "react";
|
|
import { Method } from "../../model-editor/method";
|
|
import { ModeledMethod } from "../../model-editor/modeled-method";
|
|
import { LibraryRow } from "./LibraryRow";
|
|
import { Mode } from "../../model-editor/shared/mode";
|
|
import {
|
|
groupMethods,
|
|
sortGroupNames,
|
|
} from "../../model-editor/shared/sorting";
|
|
import { ModelEditorViewState } from "../../model-editor/shared/view-state";
|
|
import { InProgressMethods } from "../../model-editor/shared/in-progress-methods";
|
|
|
|
export type ModeledMethodsListProps = {
|
|
methods: Method[];
|
|
modeledMethods: Record<string, ModeledMethod>;
|
|
modifiedSignatures: Set<string>;
|
|
inProgressMethods: InProgressMethods;
|
|
revealedMethodSignature: string | null;
|
|
viewState: ModelEditorViewState;
|
|
hideModeledMethods: boolean;
|
|
onChange: (modeledMethod: ModeledMethod) => void;
|
|
onSaveModelClick: (methodSignatures: string[]) => void;
|
|
onGenerateFromLlmClick: (
|
|
packageName: string,
|
|
methods: Method[],
|
|
modeledMethods: Record<string, ModeledMethod>,
|
|
) => void;
|
|
onStopGenerateFromLlmClick: (packageName: string) => void;
|
|
onGenerateFromSourceClick: () => void;
|
|
onModelDependencyClick: () => void;
|
|
};
|
|
|
|
const libraryNameOverrides: Record<string, string> = {
|
|
rt: "Java Runtime",
|
|
};
|
|
|
|
export const ModeledMethodsList = ({
|
|
methods,
|
|
modeledMethods,
|
|
modifiedSignatures,
|
|
inProgressMethods,
|
|
viewState,
|
|
hideModeledMethods,
|
|
revealedMethodSignature,
|
|
onChange,
|
|
onSaveModelClick,
|
|
onGenerateFromLlmClick,
|
|
onStopGenerateFromLlmClick,
|
|
onGenerateFromSourceClick,
|
|
onModelDependencyClick,
|
|
}: ModeledMethodsListProps) => {
|
|
const grouped = useMemo(
|
|
() => groupMethods(methods, viewState.mode),
|
|
[methods, viewState.mode],
|
|
);
|
|
|
|
const libraryVersions = useMemo(() => {
|
|
if (viewState.mode !== Mode.Application) {
|
|
return {};
|
|
}
|
|
|
|
const libraryVersions: Record<string, string> = {};
|
|
|
|
for (const method of methods) {
|
|
const { library, libraryVersion } = method;
|
|
|
|
if (library && libraryVersion) {
|
|
libraryVersions[library] = libraryVersion;
|
|
}
|
|
}
|
|
|
|
return libraryVersions;
|
|
}, [methods, viewState.mode]);
|
|
|
|
const sortedGroupNames = useMemo(() => sortGroupNames(grouped), [grouped]);
|
|
|
|
return (
|
|
<>
|
|
{sortedGroupNames.map((libraryName) => (
|
|
<LibraryRow
|
|
key={libraryName}
|
|
title={libraryNameOverrides[libraryName] ?? libraryName}
|
|
libraryVersion={libraryVersions[libraryName]}
|
|
methods={grouped[libraryName]}
|
|
modeledMethods={modeledMethods}
|
|
modifiedSignatures={modifiedSignatures}
|
|
inProgressMethods={inProgressMethods}
|
|
viewState={viewState}
|
|
hideModeledMethods={hideModeledMethods}
|
|
revealedMethodSignature={revealedMethodSignature}
|
|
onChange={onChange}
|
|
onSaveModelClick={onSaveModelClick}
|
|
onGenerateFromLlmClick={onGenerateFromLlmClick}
|
|
onStopGenerateFromLlmClick={onStopGenerateFromLlmClick}
|
|
onGenerateFromSourceClick={onGenerateFromSourceClick}
|
|
onModelDependencyClick={onModelDependencyClick}
|
|
/>
|
|
))}
|
|
</>
|
|
);
|
|
};
|