Skip to content

Commit 7a54b00

Browse files
Merge pull request #2583 from github/robertbrignull/data-unsaved-changes
Show when there are unsaved changes to a model
2 parents 614a8d1 + 7688542 commit 7a54b00

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
@@ -83,6 +83,7 @@ type Props = {
8383
mode: Mode;
8484
hasUnsavedChanges: boolean;
8585
onChange: (
86+
modelName: string,
8687
externalApiUsage: ExternalApiUsage,
8788
modeledMethod: ModeledMethod,
8889
) => void;
@@ -121,6 +122,13 @@ export const LibraryRow = ({
121122
e.preventDefault();
122123
}, []);
123124

125+
const onChangeWithModelName = useCallback(
126+
(externalApiUsage: ExternalApiUsage, modeledMethod: ModeledMethod) => {
127+
onChange(title, externalApiUsage, modeledMethod);
128+
},
129+
[onChange, title],
130+
);
131+
124132
return (
125133
<LibraryContainer>
126134
<TitleContainer onClick={toggleExpanded} aria-expanded={isExpanded}>
@@ -152,11 +160,13 @@ export const LibraryRow = ({
152160
externalApiUsages={externalApiUsages}
153161
modeledMethods={modeledMethods}
154162
mode={mode}
155-
onChange={onChange}
163+
onChange={onChangeWithModelName}
156164
/>
157165
<SectionDivider />
158166
<ButtonsContainer>
159-
<VSCodeButton onClick={handleSave}>Save</VSCodeButton>
167+
<VSCodeButton onClick={handleSave} disabled={!hasUnsavedChanges}>
168+
Save
169+
</VSCodeButton>
160170
</ButtonsContainer>
161171
</>
162172
)}

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)