Skip to content

Commit c8b4060

Browse files
authored
1 parent 8a06cae commit c8b4060

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

src/vs/workbench/services/views/browser/viewDescriptorService.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor
5454
private readonly viewsRegistry: IViewsRegistry;
5555
private readonly viewContainersRegistry: IViewContainersRegistry;
5656

57-
private readonly viewContainersCustomLocations: Map<string, ViewContainerLocation>;
58-
private readonly viewDescriptorsCustomLocations: Map<string, string>;
57+
private viewContainersCustomLocations: Map<string, ViewContainerLocation>;
58+
private viewDescriptorsCustomLocations: Map<string, string>;
5959

6060
private readonly _onDidChangeViewContainers = this._register(new Emitter<{ added: ReadonlyArray<{ container: ViewContainer; location: ViewContainerLocation }>; removed: ReadonlyArray<{ container: ViewContainer; location: ViewContainerLocation }> }>());
6161
readonly onDidChangeViewContainers = this._onDidChangeViewContainers.event;
@@ -567,6 +567,9 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor
567567
for (const { views, from, to } of viewsToMove) {
568568
this.moveViewsWithoutSaving(views, from, to);
569569
}
570+
571+
this.viewContainersCustomLocations = newViewContainerCustomizations;
572+
this.viewDescriptorsCustomLocations = newViewDescriptorCustomizations;
570573
}
571574

572575
// Generated Container Id Format

src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,4 +621,47 @@ suite('ViewDescriptorService', () => {
621621
assert.deepStrictEqual(actual, viewsCustomizations);
622622
});
623623

624+
test('storage change also updates locations even if views do not exists and views are registered later', async function () {
625+
const storageService = instantiationService.get(IStorageService);
626+
const testObject = aViewDescriptorService();
627+
628+
const generateViewContainerId = `workbench.views.service.${ViewContainerLocationToString(ViewContainerLocation.AuxiliaryBar)}.${generateUuid()}`;
629+
const viewsCustomizations = {
630+
viewContainerLocations: {
631+
[generateViewContainerId]: ViewContainerLocation.AuxiliaryBar,
632+
},
633+
viewLocations: {
634+
'view1': generateViewContainerId
635+
}
636+
};
637+
storageService.store('views.customizations', JSON.stringify(viewsCustomizations), StorageScope.PROFILE, StorageTarget.USER);
638+
639+
const viewContainer = ViewContainersRegistry.registerViewContainer({ id: `${viewContainerIdPrefix}-${generateUuid()}`, title: 'test', ctorDescriptor: new SyncDescriptor(<any>{}) }, ViewContainerLocation.Sidebar);
640+
const viewDescriptors: IViewDescriptor[] = [
641+
{
642+
id: 'view1',
643+
ctorDescriptor: null!,
644+
name: 'Test View 1',
645+
canMoveView: true
646+
},
647+
{
648+
id: 'view2',
649+
ctorDescriptor: null!,
650+
name: 'Test View 2',
651+
canMoveView: true
652+
}
653+
];
654+
ViewsRegistry.registerViews(viewDescriptors, viewContainer);
655+
656+
testObject.onDidRegisterExtensions();
657+
658+
const viewContainer1Views = testObject.getViewContainerModel(viewContainer);
659+
assert.deepStrictEqual(viewContainer1Views.allViewDescriptors.map(v => v.id), ['view2']);
660+
661+
const generateViewContainer = testObject.getViewContainerById(generateViewContainerId)!;
662+
assert.deepStrictEqual(testObject.getViewContainerLocation(generateViewContainer), ViewContainerLocation.AuxiliaryBar);
663+
const generatedViewContainerModel = testObject.getViewContainerModel(generateViewContainer);
664+
assert.deepStrictEqual(generatedViewContainerModel.allViewDescriptors.map(v => v.id), ['view1']);
665+
});
666+
624667
});

0 commit comments

Comments
 (0)