Skip to content

Commit 039b282

Browse files
committed
Only allow 1 view in the view tracker
This will change the model editor view tracker to only store 1 view per database item instead of an array of views per database item.
1 parent 76db520 commit 039b282

File tree

5 files changed

+24
-36
lines changed

5 files changed

+24
-36
lines changed

extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,10 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
149149
return;
150150
}
151151

152-
const views = this.editorViewTracker.getViews(
152+
const view = this.editorViewTracker.getView(
153153
this.databaseItem.databaseUri.toString(),
154154
);
155-
if (views.length === 0) {
156-
return;
157-
}
158-
159-
await Promise.all(views.map((view) => view.revealMethod(method)));
155+
await view?.revealMethod(method);
160156
}
161157

162158
private registerToModelingStoreEvents(): void {

extensions/ql-vscode/src/model-editor/model-editor-module.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,11 @@ export class ModelEditorModule extends DisposableObject {
128128
return;
129129
}
130130

131-
const existingViews = this.editorViewTracker.getViews(
131+
const existingView = this.editorViewTracker.getView(
132132
db.databaseUri.toString(),
133133
);
134-
if (existingViews.length > 0) {
135-
await Promise.all(existingViews.map((view) => view.focusView()));
134+
if (existingView) {
135+
await existingView.focusView();
136136

137137
return;
138138
}
@@ -203,11 +203,11 @@ export class ModelEditorModule extends DisposableObject {
203203

204204
// Check again just before opening the editor to ensure no model editor has been opened between
205205
// our first check and now.
206-
const existingViews = this.editorViewTracker.getViews(
206+
const existingView = this.editorViewTracker.getView(
207207
db.databaseUri.toString(),
208208
);
209-
if (existingViews.length > 0) {
210-
await Promise.all(existingViews.map((view) => view.focusView()));
209+
if (existingView) {
210+
await existingView.focusView();
211211

212212
return;
213213
}

extensions/ql-vscode/src/model-editor/model-editor-view-tracker.ts

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,25 @@ interface ModelEditorViewInterface {
99
export class ModelEditorViewTracker<
1010
T extends ModelEditorViewInterface = ModelEditorViewInterface,
1111
> {
12-
private readonly views = new Map<string, T[]>();
12+
private readonly views = new Map<string, T>();
1313

1414
constructor() {}
1515

1616
public registerView(view: T): void {
1717
const databaseUri = view.databaseUri;
1818

19-
if (!this.views.has(databaseUri)) {
20-
this.views.set(databaseUri, []);
19+
if (this.views.has(databaseUri)) {
20+
throw new Error(`View for database ${databaseUri} already registered`);
2121
}
2222

23-
this.views.get(databaseUri)?.push(view);
23+
this.views.set(databaseUri, view);
2424
}
2525

2626
public unregisterView(view: T): void {
27-
const views = this.views.get(view.databaseUri);
28-
if (!views) {
29-
return;
30-
}
31-
32-
const index = views.indexOf(view);
33-
if (index !== -1) {
34-
views.splice(index, 1);
35-
}
27+
this.views.delete(view.databaseUri);
3628
}
3729

38-
public getViews(databaseUri: string): T[] {
39-
return this.views.get(databaseUri) ?? [];
30+
public getView(databaseUri: string): T | undefined {
31+
return this.views.get(databaseUri);
4032
}
4133
}

extensions/ql-vscode/src/model-editor/model-editor-view.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -524,11 +524,11 @@ export class ModelEditorView extends AbstractWebview<
524524
return;
525525
}
526526

527-
let existingViews = this.viewTracker.getViews(
527+
let existingView = this.viewTracker.getView(
528528
addedDatabase.databaseUri.toString(),
529529
);
530-
if (existingViews.length > 0) {
531-
await Promise.all(existingViews.map((view) => view.focusView()));
530+
if (existingView) {
531+
await existingView.focusView();
532532

533533
return;
534534
}
@@ -547,11 +547,11 @@ export class ModelEditorView extends AbstractWebview<
547547

548548
// Check again just before opening the editor to ensure no model editor has been opened between
549549
// our first check and now.
550-
existingViews = this.viewTracker.getViews(
550+
existingView = this.viewTracker.getView(
551551
addedDatabase.databaseUri.toString(),
552552
);
553-
if (existingViews.length > 0) {
554-
await Promise.all(existingViews.map((view) => view.focusView()));
553+
if (existingView) {
554+
await existingView.focusView();
555555

556556
return;
557557
}

extensions/ql-vscode/test/__mocks__/model-editor/modelEditorViewTrackerMock.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import { ModelEditorView } from "../../../src/model-editor/model-editor-view";
55
export function createMockModelEditorViewTracker({
66
registerView = jest.fn(),
77
unregisterView = jest.fn(),
8-
getViews = jest.fn(),
8+
getView = jest.fn(),
99
}: {
1010
registerView?: ModelEditorViewTracker["registerView"];
1111
unregisterView?: ModelEditorViewTracker["unregisterView"];
12-
getViews?: ModelEditorViewTracker["getViews"];
12+
getView?: ModelEditorViewTracker["getView"];
1313
} = {}): ModelEditorViewTracker<ModelEditorView> {
1414
return mockedObject<ModelEditorViewTracker<ModelEditorView>>({
1515
registerView,
1616
unregisterView,
17-
getViews,
17+
getView,
1818
});
1919
}

0 commit comments

Comments
 (0)