Skip to content

Commit 4bb3809

Browse files
committed
Add 'Collapse All Diffs' action button to multi-diff editor
1 parent 2863766 commit 4bb3809

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

src/vs/editor/browser/widget/multiDiffEditorWidget/multiDiffEditorViewModel.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ export class MultiDiffEditorViewModel extends Disposable {
2727
}
2828
}
2929

30+
public collapseAll(): void {
31+
for (const d of this.items.get()) {
32+
d.collapsed.set(true, undefined);
33+
}
34+
}
35+
3036
constructor(
3137
private readonly _model: IMultiDiffEditorModel,
3238
private readonly _instantiationService: IInstantiationService,

src/vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditor.contribution.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { Action2, MenuId, registerAction2 } from 'vs/platform/actions/common/act
2323
import { URI } from 'vs/base/common/uri';
2424
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
2525
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
26+
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
2627

2728
class MultiDiffEditorResolverContribution extends Disposable {
2829

@@ -127,4 +128,31 @@ export class GoToFileAction extends Action2 {
127128
}
128129
}
129130

131+
export class CollapseAllAction extends Action2 {
132+
constructor() {
133+
super({
134+
id: 'multiDiffEditor.collapseAll',
135+
title: { value: localize('collapseAllDiffs', "Collapse All Diffs"), original: 'Collapse All Diffs' },
136+
icon: Codicon.collapseAll,
137+
precondition: ContextKeyExpr.equals('activeEditor', MultiDiffEditor.ID),
138+
menu: {
139+
when: ContextKeyExpr.equals('activeEditor', MultiDiffEditor.ID),
140+
id: MenuId.EditorTitle,
141+
group: 'navigation',
142+
},
143+
});
144+
}
145+
146+
async run(accessor: ServicesAccessor, ...args: any[]): Promise<void> {
147+
const editorService = accessor.get(IEditorService);
148+
const activeEditor = editorService.activeEditor;
149+
150+
if (activeEditor instanceof MultiDiffEditorInput) {
151+
const viewModel = await activeEditor.getViewModel();
152+
viewModel.collapseAll();
153+
}
154+
}
155+
}
156+
130157
registerAction2(GoToFileAction);
158+
registerAction2(CollapseAllAction);

src/vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditor.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,18 @@ import { MultiDiffEditorInput } from 'vs/workbench/contrib/multiDiffEditor/brows
2323
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
2424
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
2525
import { URI } from 'vs/base/common/uri';
26+
import { MultiDiffEditorViewModel } from 'vs/editor/browser/widget/multiDiffEditorWidget/multiDiffEditorViewModel';
2627

2728
export class MultiDiffEditor extends AbstractEditorWithViewState<IMultiDiffEditorViewState> {
2829
static readonly ID = 'multiDiffEditor';
2930

3031
private _multiDiffEditorWidget: MultiDiffEditorWidget | undefined = undefined;
32+
private _viewModel: MultiDiffEditorViewModel | undefined;
33+
34+
public get viewModel(): MultiDiffEditorViewModel | undefined {
35+
return this._viewModel;
36+
}
37+
3138

3239
constructor(
3340
@IInstantiationService instantiationService: InstantiationService,
@@ -65,8 +72,8 @@ export class MultiDiffEditor extends AbstractEditorWithViewState<IMultiDiffEdito
6572

6673
override async setInput(input: MultiDiffEditorInput, options: IEditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise<void> {
6774
await super.setInput(input, options, context, token);
68-
const vm = await input.getViewModel();
69-
this._multiDiffEditorWidget!.setViewModel(vm);
75+
this._viewModel = await input.getViewModel();
76+
this._multiDiffEditorWidget!.setViewModel(this._viewModel);
7077

7178
const viewState = this.loadEditorViewState(input, context);
7279
if (viewState) {

0 commit comments

Comments
 (0)