Skip to content

Commit efbd753

Browse files
committed
scm: use list persistence
fixes microsoft#18672
1 parent 7d2bf6a commit efbd753

1 file changed

Lines changed: 24 additions & 10 deletions

File tree

src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ import { isDarkTheme } from 'vs/platform/theme/common/themes';
3535
import { SCMEditor } from './scmEditor';
3636
import { IModelService } from 'vs/editor/common/services/modelService';
3737

38+
function isSCMResource(element: ISCMResourceGroup | ISCMResource): element is ISCMResource {
39+
return !!(element as ISCMResource).uri;
40+
}
41+
42+
function getElementId(element: ISCMResourceGroup | ISCMResource) {
43+
if (isSCMResource(element)) {
44+
return `${element.resourceGroupId}:${element.uri.toString()}`;
45+
} else {
46+
return `${element.id}`;
47+
}
48+
}
49+
3850
interface SearchInputEvent extends Event {
3951
target: HTMLInputElement;
4052
immediate?: boolean;
@@ -135,7 +147,7 @@ class Delegate implements IDelegate<ISCMResourceGroup | ISCMResource> {
135147
getHeight() { return 22; }
136148

137149
getTemplateId(element: ISCMResourceGroup | ISCMResource) {
138-
return (element as ISCMResource).uri ? ResourceRenderer.TEMPLATE_ID : ResourceGroupRenderer.TEMPLATE_ID;
150+
return isSCMResource(element) ? ResourceRenderer.TEMPLATE_ID : ResourceGroupRenderer.TEMPLATE_ID;
139151
}
140152
}
141153

@@ -198,17 +210,21 @@ export class SCMViewlet extends Viewlet {
198210
const delegate = new Delegate();
199211

200212
const actionItemProvider = action => this.getActionItem(action);
201-
202-
this.list = new List(this.listContainer, delegate, [
213+
const renderers = [
203214
new ResourceGroupRenderer(this.menus, actionItemProvider),
204215
this.instantiationService.createInstance(ResourceRenderer, this.menus, actionItemProvider),
205-
], { keyboardSupport: false });
216+
];
217+
218+
this.list = new List(this.listContainer, delegate, renderers, {
219+
identityProvider: e => getElementId(e),
220+
keyboardSupport: false
221+
});
206222

207223
this.disposables.push(this.listService.register(this.list));
208224

209225
chain(this.list.onSelectionChange)
210226
.map(e => e.elements[0])
211-
.filter(e => !!e && !!(e as ISCMResource).uri)
227+
.filter(e => !!e && isSCMResource(e))
212228
.on(this.open, this, this.disposables);
213229

214230
this.list.onContextMenu(this.onListContextMenu, this, this.disposables);
@@ -279,12 +295,10 @@ export class SCMViewlet extends Viewlet {
279295
const element = e.element;
280296
let actions: IAction[];
281297

282-
if ((element as ISCMResource).uri) {
283-
const resource = element as ISCMResource;
284-
actions = this.menus.getResourceContextActions(resource);
298+
if (isSCMResource(element)) {
299+
actions = this.menus.getResourceContextActions(element);
285300
} else {
286-
const resourceGroup = element as ISCMResourceGroup;
287-
actions = this.menus.getResourceGroupContextActions(resourceGroup);
301+
actions = this.menus.getResourceGroupContextActions(element);
288302
}
289303

290304
this.contextMenuService.showContextMenu({

0 commit comments

Comments
 (0)