Skip to content

Commit a402de3

Browse files
committed
Persists show more during changes
Fixes show more in file/line history
1 parent 578f103 commit a402de3

14 files changed

+173
-90
lines changed

package.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2978,6 +2978,15 @@
29782978
"light": "images/light/icon-refresh.svg"
29792979
}
29802980
},
2981+
{
2982+
"command": "gitlens.views.showMoreChildren",
2983+
"title": "Show More",
2984+
"category": "GitLens",
2985+
"icon": {
2986+
"dark": "images/dark/icon-unfold.svg",
2987+
"light": "images/light/icon-unfold.svg"
2988+
}
2989+
},
29812990
{
29822991
"command": "gitlens.views.showAllChildren",
29832992
"title": "Show All",
@@ -3646,6 +3655,10 @@
36463655
"command": "gitlens.views.refreshNode",
36473656
"when": "false"
36483657
},
3658+
{
3659+
"command": "gitlens.views.showMoreChildren",
3660+
"when": "false"
3661+
},
36493662
{
36503663
"command": "gitlens.views.showAllChildren",
36513664
"when": "false"

src/views/nodes/branchNode.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ import { getBranchesAndTagTipsFn, insertDateMarkers } from './helpers';
1313
import { PageableViewNode, ResourceType, ViewNode, ViewRefNode } from './viewNode';
1414

1515
export class BranchNode extends ViewRefNode<RepositoriesView> implements PageableViewNode {
16-
readonly supportsPaging: boolean = true;
17-
maxCount: number | undefined;
16+
readonly supportsPaging = true;
17+
readonly rememberLastMaxCount = true;
18+
maxCount: number | undefined = this.view.getNodeLastMaxCount(this);
1819

1920
private _children: ViewNode[] | undefined;
2021

@@ -94,7 +95,9 @@ export class BranchNode extends ViewRefNode<RepositoriesView> implements Pageabl
9495
);
9596

9697
if (log.truncated) {
97-
children.push(new ShowMoreNode(this.view, this, 'Commits', children[children.length - 1]));
98+
children.push(
99+
new ShowMoreNode(this.view, this, 'Commits', log.maxCount, children[children.length - 1])
100+
);
98101
}
99102

100103
this._children = children;
@@ -204,7 +207,7 @@ export class BranchNode extends ViewRefNode<RepositoriesView> implements Pageabl
204207

205208
@gate()
206209
@debug()
207-
refresh(reset: boolean = false) {
210+
refresh() {
208211
this._children = undefined;
209212
}
210213
}

src/views/nodes/branchTrackingStatusNode.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ export interface BranchTrackingStatus {
1717
}
1818

1919
export class BranchTrackingStatusNode extends ViewNode<ViewWithFiles> implements PageableViewNode {
20-
readonly supportsPaging: boolean = true;
21-
maxCount: number | undefined;
20+
readonly supportsPaging = true;
21+
readonly rememberLastMaxCount = true;
22+
maxCount: number | undefined = this.view.getNodeLastMaxCount(this);
2223

2324
constructor(
2425
view: ViewWithFiles,
@@ -74,7 +75,7 @@ export class BranchTrackingStatusNode extends ViewNode<ViewWithFiles> implements
7475
}
7576

7677
if (log.truncated) {
77-
children.push(new ShowMoreNode(this.view, this, 'Commits', children[children.length - 1]));
78+
children.push(new ShowMoreNode(this.view, this, 'Commits', log.maxCount, children[children.length - 1]));
7879
}
7980
return children;
8081
}

src/views/nodes/common.ts

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import { Command, ThemeIcon, TreeItem, TreeItemCollapsibleState, Uri } from 'vsc
22
import { GlyphChars } from '../../constants';
33
import { Container } from '../../container';
44
import { View } from '../viewBase';
5-
import { RefreshNodeCommandArgs } from '../viewCommands';
6-
import { ResourceType, unknownGitUri, ViewNode } from './viewNode';
5+
import { PageableViewNode, ResourceType, unknownGitUri, ViewNode } from './viewNode';
76

87
export class MessageNode extends ViewNode {
98
constructor(
@@ -137,23 +136,29 @@ export class UpdateableMessageNode extends ViewNode {
137136
}
138137

139138
export abstract class PagerNode extends ViewNode {
140-
protected _args: RefreshNodeCommandArgs = {};
141-
142139
constructor(
143140
view: View,
144-
parent: ViewNode,
141+
parent: ViewNode & PageableViewNode,
145142
protected readonly message: string,
146-
previousNode?: ViewNode,
147-
maxCount: number = Container.config.views.pageItemLimit
143+
maxCount: number | undefined,
144+
private readonly _previousNode?: ViewNode,
145+
private readonly _pageSize: number = Container.config.views.pageItemLimit
148146
) {
149147
super(unknownGitUri, view, parent);
150148

151-
this._args.maxCount = maxCount;
152-
this._args.previousNode = previousNode;
149+
parent.maxCount = maxCount;
150+
}
151+
152+
showMore() {
153+
return this.view.showMoreNodeChildren(
154+
this.parent! as ViewNode & PageableViewNode,
155+
this._pageSize,
156+
this._previousNode
157+
);
153158
}
154159

155160
showAll() {
156-
this.view.refreshNode(this.parent!, true, { ...this._args, maxCount: 0 });
161+
return this.view.showMoreNodeChildren(this.parent! as ViewNode & PageableViewNode, 0, this._previousNode);
157162
}
158163

159164
getChildren(): ViewNode[] | Promise<ViewNode[]> {
@@ -173,23 +178,31 @@ export abstract class PagerNode extends ViewNode {
173178

174179
getCommand(): Command | undefined {
175180
return {
176-
title: 'Refresh',
177-
command: 'gitlens.views.refreshNode',
178-
arguments: [this.parent, true, this._args]
181+
title: 'Show More',
182+
command: 'gitlens.views.showMoreChildren',
183+
arguments: [this]
179184
};
180185
}
181186
}
182187

183188
export class ShowMoreNode extends PagerNode {
184-
constructor(view: View, parent: ViewNode, itemType: string, previousNode: ViewNode, maxCount?: number) {
189+
constructor(
190+
view: View,
191+
parent: ViewNode & PageableViewNode,
192+
itemType: string,
193+
maxCount: number | undefined,
194+
previousNode: ViewNode,
195+
pageSize?: number
196+
) {
185197
super(
186198
view,
187199
parent,
188-
maxCount === 0
200+
pageSize === 0
189201
? `Show All ${itemType} ${GlyphChars.Space}${GlyphChars.Dash}${GlyphChars.Space} this may take a while`
190202
: `Show More ${itemType}`,
203+
maxCount,
191204
previousNode,
192-
maxCount
205+
pageSize
193206
);
194207
}
195208
}

src/views/nodes/contributorNode.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import { CommitNode } from './commitNode';
1111
import { GlyphChars } from '../../constants';
1212

1313
export class ContributorNode extends ViewNode<RepositoriesView> implements PageableViewNode {
14-
readonly supportsPaging: boolean = true;
15-
maxCount: number | undefined;
14+
readonly supportsPaging = true;
15+
readonly rememberLastMaxCount = true;
16+
maxCount: number | undefined = this.view.getNodeLastMaxCount(this);
1617

1718
constructor(uri: GitUri, view: RepositoriesView, parent: ViewNode, public readonly contributor: GitContributor) {
1819
super(uri, view, parent);
@@ -41,7 +42,7 @@ export class ContributorNode extends ViewNode<RepositoriesView> implements Pagea
4142
];
4243

4344
if (log.truncated) {
44-
children.push(new ShowMoreNode(this.view, this, 'Commits', children[children.length - 1]));
45+
children.push(new ShowMoreNode(this.view, this, 'Commits', log.maxCount, children[children.length - 1]));
4546
}
4647
return children;
4748
}

src/views/nodes/fileHistoryNode.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { insertDateMarkers } from './helpers';
1919
import { PageableViewNode, ResourceType, SubscribeableViewNode, ViewNode } from './viewNode';
2020

2121
export class FileHistoryNode extends SubscribeableViewNode implements PageableViewNode {
22-
readonly supportsPaging: boolean = true;
22+
readonly supportsPaging = true;
2323
maxCount: number | undefined;
2424

2525
constructor(uri: GitUri, view: View, parent: ViewNode) {
@@ -89,7 +89,9 @@ export class FileHistoryNode extends SubscribeableViewNode implements PageableVi
8989
);
9090

9191
if (log.truncated) {
92-
children.push(new ShowMoreNode(this.view, this, 'Commits', children[children.length - 1]));
92+
children.push(
93+
new ShowMoreNode(this.view, this, 'Commits', log.maxCount, children[children.length - 1])
94+
);
9395
}
9496
}
9597

src/views/nodes/lineHistoryNode.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { insertDateMarkers } from './helpers';
1818
import { PageableViewNode, ResourceType, SubscribeableViewNode, ViewNode } from './viewNode';
1919

2020
export class LineHistoryNode extends SubscribeableViewNode implements PageableViewNode {
21-
readonly supportsPaging: boolean = true;
21+
readonly supportsPaging = true;
2222
maxCount: number | undefined;
2323

2424
constructor(
@@ -111,7 +111,9 @@ export class LineHistoryNode extends SubscribeableViewNode implements PageableVi
111111
);
112112

113113
if (log.truncated) {
114-
children.push(new ShowMoreNode(this.view, this, 'Commits', children[children.length - 1]));
114+
children.push(
115+
new ShowMoreNode(this.view, this, 'Commits', log.maxCount, children[children.length - 1])
116+
);
115117
}
116118
}
117119

src/views/nodes/reflogNode.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import { debug, gate } from '../../system';
99
import { MessageNode, ShowMoreNode } from './common';
1010

1111
export class ReflogNode extends ViewNode<RepositoriesView> implements PageableViewNode {
12-
readonly supportsPaging: boolean = true;
13-
maxCount: number | undefined;
12+
readonly supportsPaging = true;
13+
readonly rememberLastMaxCount = true;
14+
maxCount: number | undefined = this.view.getNodeLastMaxCount(this);
1415

1516
private _children: ViewNode[] | undefined;
1617

@@ -37,7 +38,9 @@ export class ReflogNode extends ViewNode<RepositoriesView> implements PageableVi
3738
children.push(...reflog.records.map(r => new ReflogRecordNode(this.view, this, r)));
3839

3940
if (reflog.truncated) {
40-
children.push(new ShowMoreNode(this.view, this, 'Activity', children[children.length - 1]));
41+
children.push(
42+
new ShowMoreNode(this.view, this, 'Activity', reflog.maxCount, children[children.length - 1])
43+
);
4144
}
4245

4346
this._children = children;

src/views/nodes/reflogRecordNode.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import { MessageNode, ShowMoreNode } from './common';
1010
import { PageableViewNode, ResourceType, ViewNode } from './viewNode';
1111

1212
export class ReflogRecordNode extends ViewNode<ViewWithFiles> implements PageableViewNode {
13-
readonly supportsPaging: boolean = true;
14-
maxCount: number | undefined;
13+
readonly supportsPaging = true;
14+
readonly rememberLastMaxCount = true;
15+
maxCount: number | undefined = this.view.getNodeLastMaxCount(this);
1516

1617
constructor(view: ViewWithFiles, parent: ViewNode, public readonly record: GitReflogRecord) {
1718
super(GitUri.fromRepoPath(record.repoPath), view, parent);
@@ -37,7 +38,7 @@ export class ReflogRecordNode extends ViewNode<ViewWithFiles> implements Pageabl
3738
];
3839

3940
if (log.truncated) {
40-
children.push(new ShowMoreNode(this.view, this, 'Commits', children[children.length - 1]));
41+
children.push(new ShowMoreNode(this.view, this, 'Commits', log.maxCount, children[children.length - 1]));
4142
}
4243
return children;
4344
}

src/views/nodes/resultsCommitsNode.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@ export interface CommitsQueryResults {
1515
}
1616

1717
export class ResultsCommitsNode extends ViewNode<ViewWithFiles> implements PageableViewNode {
18-
readonly supportsPaging: boolean = true;
19-
maxCount: number | undefined;
20-
21-
// Generate a unique id so the node order is preserved, since we update the label when the query completes
22-
private readonly _uniqueId: number = getNextId('ResultsCommitsNode');
18+
readonly supportsPaging = true;
19+
readonly rememberLastMaxCount = true;
20+
maxCount: number | undefined = this.view.getNodeLastMaxCount(this);
2321

2422
constructor(
2523
view: ViewWithFiles,
@@ -58,7 +56,9 @@ export class ResultsCommitsNode extends ViewNode<ViewWithFiles> implements Pagea
5856
];
5957

6058
if (log.truncated) {
61-
children.push(new ShowMoreNode(this.view, this, 'Results', children[children.length - 1], this.maxCount));
59+
children.push(
60+
new ShowMoreNode(this.view, this, 'Results', log.maxCount, children[children.length - 1], this.maxCount)
61+
);
6262
}
6363

6464
return children;

0 commit comments

Comments
 (0)