Merge pull request #2588 from github/robertbrignull/data-save-single-model

Implement saving only one model at a time
This commit is contained in:
Robert
2023-07-07 09:50:19 +01:00
committed by GitHub
3 changed files with 45 additions and 7 deletions

View File

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

View File

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

View File

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