Skip to content

Commit c617d00

Browse files
authored
Update the Padawan decoration when the PRs list is refreshed (#7230) (#7243)
* Update the Padawan decoration when the PRs list is refreshed Fixes #7149 * Fix extra refresh * Review feedback
1 parent 14844d5 commit c617d00

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

src/github/githubRepository.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import * as limitedSchema from './queriesLimited.gql';
6767
import * as sharedSchema from './queriesShared.gql';
6868
import {
6969
convertRESTPullRequestToRawPullRequest,
70+
eventTime,
7071
getAvatarWithEnterpriseFallback,
7172
getOverrideBranch,
7273
insertNewCommitsSinceReview,
@@ -1478,7 +1479,7 @@ export class GitHubRepository extends Disposable {
14781479
/**
14791480
* TODO: @alexr00 we should delete this https://github.com/microsoft/vscode-pull-request-github/issues/6965
14801481
*/
1481-
async getCopilotTimelineEvents(issueModel: IssueModel): Promise<Common.TimelineEvent[]> {
1482+
async getCopilotTimelineEvents(issueModel: IssueModel, skipMerge: boolean = false): Promise<Common.TimelineEvent[]> {
14821483
if (!COPILOT_ACCOUNTS[issueModel.author.login]) {
14831484
return [];
14841485
}
@@ -1494,7 +1495,24 @@ export class GitHubRepository extends Disposable {
14941495
per_page: 100
14951496
});
14961497

1497-
return parseSelectRestTimelineEvents(issueModel, timeline);
1498+
const timelineEvents = parseSelectRestTimelineEvents(issueModel, timeline);
1499+
if (timelineEvents.length === 0) {
1500+
return [];
1501+
}
1502+
if (!skipMerge) {
1503+
const oldLastEvent = issueModel.timelineEvents.length > 0 ? issueModel.timelineEvents[issueModel.timelineEvents.length - 1] : undefined;
1504+
let allEvents: Common.TimelineEvent[];
1505+
if (!oldLastEvent) {
1506+
allEvents = timelineEvents;
1507+
} else {
1508+
const oldEventTime = (eventTime(oldLastEvent) ?? 0);
1509+
const newEvents = timelineEvents.filter(event => (eventTime(event) ?? 0) > oldEventTime);
1510+
allEvents = [...issueModel.timelineEvents, ...newEvents];
1511+
}
1512+
issueModel.timelineEvents = allEvents;
1513+
this._onDidChangePullRequests.fire();
1514+
}
1515+
return timelineEvents;
14981516
} catch (e) {
14991517
Logger.error(`Error fetching Copilot timeline events of issue #${issueModel.number} - ${formatError(e)}`, GitHubRepository.ID);
15001518
return [];
@@ -1520,7 +1538,7 @@ export class GitHubRepository extends Disposable {
15201538
return [];
15211539
}
15221540
const ret = data.repository.pullRequest.timelineItems.nodes;
1523-
const events = await parseCombinedTimelineEvents(ret, await this.getCopilotTimelineEvents(issueModel), this);
1541+
const events = await parseCombinedTimelineEvents(ret, await this.getCopilotTimelineEvents(issueModel, true), this);
15241542

15251543
const crossRefs = new Map(events
15261544
.filter((event): event is Common.CrossReferencedEvent => {
@@ -1604,7 +1622,7 @@ export class GitHubRepository extends Disposable {
16041622

16051623

16061624
const ret = data?.repository?.pullRequest.timelineItems.nodes ?? [];
1607-
const events = await parseCombinedTimelineEvents(ret, await this.getCopilotTimelineEvents(pullRequestModel), this);
1625+
const events = await parseCombinedTimelineEvents(ret, await this.getCopilotTimelineEvents(pullRequestModel, true), this);
16081626

16091627
this.addReviewTimelineEventComments(events, reviewThreads);
16101628
insertNewCommitsSinceReview(events, latestReviewCommitInfo?.sha, currentUser, pullRequestModel.head);

src/github/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1056,7 +1056,7 @@ export function parseSelectRestTimelineEvents(
10561056
return parsedEvents;
10571057
}
10581058

1059-
function eventTime(event: Common.TimelineEvent): Date | undefined {
1059+
export function eventTime(event: Common.TimelineEvent): Date | undefined {
10601060
switch (event.event) {
10611061
case Common.EventType.Committed:
10621062
return new Date(event.committedDate);

0 commit comments

Comments
 (0)