Skip to content

Commit fc866ac

Browse files
Show when there are unsaved changes to a model
1 parent 2c5b1da commit fc866ac

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ export function DataExtensionsEditor({
6767
const [externalApiUsages, setExternalApiUsages] = useState<
6868
ExternalApiUsage[]
6969
>(initialExternalApiUsages);
70+
const [unsavedModels, setUnsavedModels] = useState<Set<string>>(new Set());
71+
7072
const [modeledMethods, setModeledMethods] = useState<
7173
Record<string, ModeledMethod>
7274
>(initialModeledMethods);
@@ -86,6 +88,7 @@ export function DataExtensionsEditor({
8688
break;
8789
case "setExternalApiUsages":
8890
setExternalApiUsages(msg.externalApiUsages);
91+
setUnsavedModels(new Set());
8992
break;
9093
case "showProgress":
9194
setProgress(msg);
@@ -130,11 +133,14 @@ export function DataExtensionsEditor({
130133
const unModeledPercentage = 100 - modeledPercentage;
131134

132135
const onChange = useCallback(
133-
(method: ExternalApiUsage, model: ModeledMethod) => {
136+
(modelName: string, method: ExternalApiUsage, model: ModeledMethod) => {
134137
setModeledMethods((oldModeledMethods) => ({
135138
...oldModeledMethods,
136139
[method.signature]: model,
137140
}));
141+
setUnsavedModels(
142+
(oldUnsavedModels) => new Set([...oldUnsavedModels, modelName]),
143+
);
138144
},
139145
[],
140146
);
@@ -254,6 +260,7 @@ export function DataExtensionsEditor({
254260
</ButtonsContainer>
255261
<ModeledMethodsList
256262
externalApiUsages={externalApiUsages}
263+
unsavedModels={unsavedModels}
257264
modeledMethods={modeledMethods}
258265
mode={viewState?.mode ?? Mode.Application}
259266
onChange={onChange}

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ type Props = {
7878
mode: Mode;
7979
hasUnsavedChanges: boolean;
8080
onChange: (
81+
modelName: string,
8182
externalApiUsage: ExternalApiUsage,
8283
modeledMethod: ModeledMethod,
8384
) => void;
@@ -116,6 +117,13 @@ export const LibraryRow = ({
116117
e.preventDefault();
117118
}, []);
118119

120+
const onChangeWithModelName = useCallback(
121+
(externalApiUsage: ExternalApiUsage, modeledMethod: ModeledMethod) => {
122+
onChange(title, externalApiUsage, modeledMethod);
123+
},
124+
[onChange, title],
125+
);
126+
119127
return (
120128
<LibraryContainer>
121129
<TitleContainer onClick={toggleExpanded} aria-expanded={isExpanded}>
@@ -147,11 +155,13 @@ export const LibraryRow = ({
147155
externalApiUsages={externalApiUsages}
148156
modeledMethods={modeledMethods}
149157
mode={mode}
150-
onChange={onChange}
158+
onChange={onChangeWithModelName}
151159
/>
152160
<SectionDivider />
153161
<ButtonsContainer>
154-
<VSCodeButton onClick={handleSave}>Save</VSCodeButton>
162+
<VSCodeButton onClick={handleSave} disabled={!hasUnsavedChanges}>
163+
Save
164+
</VSCodeButton>
155165
</ButtonsContainer>
156166
</>
157167
)}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,19 @@ import {
1111

1212
type Props = {
1313
externalApiUsages: ExternalApiUsage[];
14+
unsavedModels: Set<string>;
1415
modeledMethods: Record<string, ModeledMethod>;
1516
mode: Mode;
1617
onChange: (
18+
modelName: string,
1719
externalApiUsage: ExternalApiUsage,
1820
modeledMethod: ModeledMethod,
1921
) => void;
2022
};
2123

2224
export const ModeledMethodsList = ({
2325
externalApiUsages,
26+
unsavedModels,
2427
modeledMethods,
2528
mode,
2629
onChange,
@@ -39,9 +42,9 @@ export const ModeledMethodsList = ({
3942
key={libraryName}
4043
title={libraryName}
4144
externalApiUsages={grouped[libraryName]}
45+
hasUnsavedChanges={unsavedModels.has(libraryName)}
4246
modeledMethods={modeledMethods}
4347
mode={mode}
44-
hasUnsavedChanges={false}
4548
onChange={onChange}
4649
/>
4750
))}

0 commit comments

Comments
 (0)