Implement saving only one model at a time

This commit is contained in:
Robert
2023-07-06 16:27:39 +01:00
parent 261f11e30e
commit e67f93c7bc
3 changed files with 45 additions and 7 deletions

View File

@@ -88,7 +88,6 @@ export function DataExtensionsEditor({
break; break;
case "setExternalApiUsages": case "setExternalApiUsages":
setExternalApiUsages(msg.externalApiUsages); setExternalApiUsages(msg.externalApiUsages);
setUnsavedModels(new Set());
break; break;
case "showProgress": case "showProgress":
setProgress(msg); setProgress(msg);
@@ -151,14 +150,35 @@ export function DataExtensionsEditor({
}); });
}, []); }, []);
const onApplyClick = useCallback(() => { const onSaveAllClick = useCallback(() => {
vscode.postMessage({ vscode.postMessage({
t: "saveModeledMethods", t: "saveModeledMethods",
externalApiUsages, externalApiUsages,
modeledMethods, modeledMethods,
}); });
setUnsavedModels(new Set());
}, [externalApiUsages, modeledMethods]); }, [externalApiUsages, modeledMethods]);
const onSaveModelClick = useCallback(
(
modelName: string,
externalApiUsages: ExternalApiUsage[],
modeledMethods: Record<string, ModeledMethod>,
) => {
vscode.postMessage({
t: "saveModeledMethods",
externalApiUsages,
modeledMethods,
});
setUnsavedModels((oldUnsavedModels) => {
const newUnsavedModels = new Set(oldUnsavedModels);
newUnsavedModels.delete(modelName);
return newUnsavedModels;
});
},
[],
);
const onGenerateClick = useCallback(() => { const onGenerateClick = useCallback(() => {
vscode.postMessage({ vscode.postMessage({
t: "generateExternalApi", t: "generateExternalApi",
@@ -239,7 +259,7 @@ export function DataExtensionsEditor({
<EditorContainer> <EditorContainer>
<ButtonsContainer> <ButtonsContainer>
<VSCodeButton onClick={onApplyClick}>Apply</VSCodeButton> <VSCodeButton onClick={onSaveAllClick}>Apply</VSCodeButton>
{viewState?.enableFrameworkMode && ( {viewState?.enableFrameworkMode && (
<VSCodeButton appearance="secondary" onClick={onRefreshClick}> <VSCodeButton appearance="secondary" onClick={onRefreshClick}>
Refresh Refresh
@@ -264,6 +284,7 @@ export function DataExtensionsEditor({
modeledMethods={modeledMethods} modeledMethods={modeledMethods}
mode={viewState?.mode ?? Mode.Application} mode={viewState?.mode ?? Mode.Application}
onChange={onChange} onChange={onChange}
onSaveModelClick={onSaveModelClick}
/> />
</EditorContainer> </EditorContainer>
</> </>

View File

@@ -87,6 +87,11 @@ type Props = {
externalApiUsage: ExternalApiUsage, externalApiUsage: ExternalApiUsage,
modeledMethod: ModeledMethod, modeledMethod: ModeledMethod,
) => void; ) => void;
onSaveModelClick: (
modelName: string,
externalApiUsages: ExternalApiUsage[],
modeledMethods: Record<string, ModeledMethod>,
) => void;
}; };
export const LibraryRow = ({ export const LibraryRow = ({
@@ -96,6 +101,7 @@ export const LibraryRow = ({
mode, mode,
hasUnsavedChanges, hasUnsavedChanges,
onChange, onChange,
onSaveModelClick,
}: Props) => { }: Props) => {
const modeledPercentage = useMemo(() => { const modeledPercentage = useMemo(() => {
return calculateModeledPercentage(externalApiUsages); return calculateModeledPercentage(externalApiUsages);
@@ -117,10 +123,14 @@ export const LibraryRow = ({
e.preventDefault(); e.preventDefault();
}, []); }, []);
const handleSave = useCallback(async (e: React.MouseEvent) => { const handleSave = useCallback(
e.stopPropagation(); async (e: React.MouseEvent) => {
e.preventDefault(); onSaveModelClick(title, externalApiUsages, modeledMethods);
}, []); e.stopPropagation();
e.preventDefault();
},
[title, externalApiUsages, modeledMethods, onSaveModelClick],
);
const onChangeWithModelName = useCallback( const onChangeWithModelName = useCallback(
(externalApiUsage: ExternalApiUsage, modeledMethod: ModeledMethod) => { (externalApiUsage: ExternalApiUsage, modeledMethod: ModeledMethod) => {

View File

@@ -19,6 +19,11 @@ type Props = {
externalApiUsage: ExternalApiUsage, externalApiUsage: ExternalApiUsage,
modeledMethod: ModeledMethod, modeledMethod: ModeledMethod,
) => void; ) => void;
onSaveModelClick: (
modelName: string,
externalApiUsages: ExternalApiUsage[],
modeledMethods: Record<string, ModeledMethod>,
) => void;
}; };
export const ModeledMethodsList = ({ export const ModeledMethodsList = ({
@@ -27,6 +32,7 @@ export const ModeledMethodsList = ({
modeledMethods, modeledMethods,
mode, mode,
onChange, onChange,
onSaveModelClick,
}: Props) => { }: Props) => {
const grouped = useMemo( const grouped = useMemo(
() => groupMethods(externalApiUsages, mode), () => groupMethods(externalApiUsages, mode),
@@ -46,6 +52,7 @@ export const ModeledMethodsList = ({
modeledMethods={modeledMethods} modeledMethods={modeledMethods}
mode={mode} mode={mode}
onChange={onChange} onChange={onChange}
onSaveModelClick={onSaveModelClick}
/> />
))} ))}
</> </>