Skip to content

Commit dae74e8

Browse files
Merge pull request #2588 from github/robertbrignull/data-save-single-model
Implement saving only one model at a time
2 parents e2dc0d6 + e67f93c commit dae74e8

File tree

3 files changed

+45
-7
lines changed

3 files changed

+45
-7
lines changed

extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ export function DataExtensionsEditor({
8888
break;
8989
case "setExternalApiUsages":
9090
setExternalApiUsages(msg.externalApiUsages);
91-
setUnsavedModels(new Set());
9291
break;
9392
case "showProgress":
9493
setProgress(msg);
@@ -151,14 +150,35 @@ export function DataExtensionsEditor({
151150
});
152151
}, []);
153152

154-
const onApplyClick = useCallback(() => {
153+
const onSaveAllClick = useCallback(() => {
155154
vscode.postMessage({
156155
t: "saveModeledMethods",
157156
externalApiUsages,
158157
modeledMethods,
159158
});
159+
setUnsavedModels(new Set());
160160
}, [externalApiUsages, modeledMethods]);
161161

162+
const onSaveModelClick = useCallback(
163+
(
164+
modelName: string,
165+
externalApiUsages: ExternalApiUsage[],
166+
modeledMethods: Record<string, ModeledMethod>,
167+
) => {
168+
vscode.postMessage({
169+
t: "saveModeledMethods",
170+
externalApiUsages,
171+
modeledMethods,
172+
});
173+
setUnsavedModels((oldUnsavedModels) => {
174+
const newUnsavedModels = new Set(oldUnsavedModels);
175+
newUnsavedModels.delete(modelName);
176+
return newUnsavedModels;
177+
});
178+
},
179+
[],
180+
);
181+
162182
const onGenerateClick = useCallback(() => {
163183
vscode.postMessage({
164184
t: "generateExternalApi",
@@ -239,7 +259,7 @@ export function DataExtensionsEditor({
239259

240260
<EditorContainer>
241261
<ButtonsContainer>
242-
<VSCodeButton onClick={onApplyClick}>Apply</VSCodeButton>
262+
<VSCodeButton onClick={onSaveAllClick}>Apply</VSCodeButton>
243263
{viewState?.enableFrameworkMode && (
244264
<VSCodeButton appearance="secondary" onClick={onRefreshClick}>
245265
Refresh
@@ -264,6 +284,7 @@ export function DataExtensionsEditor({
264284
modeledMethods={modeledMethods}
265285
mode={viewState?.mode ?? Mode.Application}
266286
onChange={onChange}
287+
onSaveModelClick={onSaveModelClick}
267288
/>
268289
</EditorContainer>
269290
</>

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ type Props = {
7676
externalApiUsage: ExternalApiUsage,
7777
modeledMethod: ModeledMethod,
7878
) => void;
79+
onSaveModelClick: (
80+
modelName: string,
81+
externalApiUsages: ExternalApiUsage[],
82+
modeledMethods: Record<string, ModeledMethod>,
83+
) => void;
7984
};
8085

8186
export const LibraryRow = ({
@@ -85,6 +90,7 @@ export const LibraryRow = ({
8590
mode,
8691
hasUnsavedChanges,
8792
onChange,
93+
onSaveModelClick,
8894
}: Props) => {
8995
const modeledPercentage = useMemo(() => {
9096
return calculateModeledPercentage(externalApiUsages);
@@ -106,10 +112,14 @@ export const LibraryRow = ({
106112
e.preventDefault();
107113
}, []);
108114

109-
const handleSave = useCallback(async (e: React.MouseEvent) => {
110-
e.stopPropagation();
111-
e.preventDefault();
112-
}, []);
115+
const handleSave = useCallback(
116+
async (e: React.MouseEvent) => {
117+
onSaveModelClick(title, externalApiUsages, modeledMethods);
118+
e.stopPropagation();
119+
e.preventDefault();
120+
},
121+
[title, externalApiUsages, modeledMethods, onSaveModelClick],
122+
);
113123

114124
const onChangeWithModelName = useCallback(
115125
(externalApiUsage: ExternalApiUsage, modeledMethod: ModeledMethod) => {

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ type Props = {
1919
externalApiUsage: ExternalApiUsage,
2020
modeledMethod: ModeledMethod,
2121
) => void;
22+
onSaveModelClick: (
23+
modelName: string,
24+
externalApiUsages: ExternalApiUsage[],
25+
modeledMethods: Record<string, ModeledMethod>,
26+
) => void;
2227
};
2328

2429
export const ModeledMethodsList = ({
@@ -27,6 +32,7 @@ export const ModeledMethodsList = ({
2732
modeledMethods,
2833
mode,
2934
onChange,
35+
onSaveModelClick,
3036
}: Props) => {
3137
const grouped = useMemo(
3238
() => groupMethods(externalApiUsages, mode),
@@ -46,6 +52,7 @@ export const ModeledMethodsList = ({
4652
modeledMethods={modeledMethods}
4753
mode={mode}
4854
onChange={onChange}
55+
onSaveModelClick={onSaveModelClick}
4956
/>
5057
))}
5158
</>

0 commit comments

Comments
 (0)