Skip to content

Commit dfd97fb

Browse files
authored
Basic assigned and cross referenced events (#6810)
Part of microsoft/vscode-internalbacklog#5449
1 parent 5311cab commit dfd97fb

7 files changed

Lines changed: 126 additions & 10 deletions

File tree

resources/icons/link.svg

Lines changed: 1 addition & 0 deletions
Loading

src/common/timelineEvent.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export enum EventType {
1818
Assigned,
1919
HeadRefDeleted,
2020
Merged,
21+
CrossReferenced,
2122
Other,
2223
}
2324

@@ -94,8 +95,9 @@ export interface MergedEvent {
9495
export interface AssignEvent {
9596
id: number;
9697
event: EventType.Assigned;
97-
user: IAccount;
98+
assignee: IAccount;
9899
actor: IActor;
100+
createdAt: string;
99101
}
100102

101103
export interface HeadRefDeleteEvent {
@@ -106,4 +108,17 @@ export interface HeadRefDeleteEvent {
106108
headRef: string;
107109
}
108110

109-
export type TimelineEvent = CommitEvent | ReviewEvent | CommentEvent | NewCommitsSinceReviewEvent | MergedEvent | AssignEvent | HeadRefDeleteEvent;
111+
export interface CrossReferencedEvent {
112+
id: string;
113+
event: EventType.CrossReferenced
114+
actor: IActor;
115+
createdAt: string;
116+
source: {
117+
number: number;
118+
url: string;
119+
title: string;
120+
};
121+
willCloseTarget: boolean;
122+
}
123+
124+
export type TimelineEvent = CommitEvent | ReviewEvent | CommentEvent | NewCommitsSinceReviewEvent | MergedEvent | AssignEvent | HeadRefDeleteEvent | CrossReferencedEvent;

src/github/graphql.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,19 @@ export interface HeadRefDeletedEvent {
3434
headRefName: string;
3535
}
3636

37+
export interface CrossReferencedEvent {
38+
__typename: string;
39+
id: string;
40+
actor: Actor;
41+
createdAt: string;
42+
source: {
43+
number: number;
44+
url: string;
45+
title: string;
46+
};
47+
willCloseTarget: boolean;
48+
}
49+
3750
export interface AbbreviatedIssueComment {
3851
author: Account;
3952
body: string;
@@ -157,6 +170,7 @@ export interface AssignedEvent {
157170
id: number;
158171
actor: Actor;
159172
user: Account;
173+
createdAt: string;
160174
}
161175

162176
export interface MergeQueueEntry {

src/github/queriesShared.gql

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,29 @@ fragment AssignedEvent on AssignedEvent {
137137
...Actor
138138
...User
139139
}
140+
createdAt
141+
}
142+
143+
fragment CrossReferencedEvent on CrossReferencedEvent {
144+
id
145+
actor {
146+
...Node
147+
...Actor
148+
}
149+
createdAt
150+
source {
151+
... on PullRequest {
152+
number
153+
url
154+
title
155+
}
156+
... on Issue {
157+
number
158+
url
159+
title
160+
}
161+
}
162+
willCloseTarget
140163
}
141164

142165
fragment Review on PullRequestReview {
@@ -233,6 +256,7 @@ query TimelineEvents($owner: String!, $name: String!, $number: Int!, $last: Int
233256
...Commit
234257
...AssignedEvent
235258
...HeadRefDeleted
259+
...CrossReferencedEvent
236260
}
237261
}
238262
}
@@ -250,6 +274,7 @@ query IssueTimelineEvents($owner: String!, $name: String!, $number: Int!, $last:
250274
__typename
251275
...Comment
252276
...AssignedEvent
277+
...CrossReferencedEvent
253278
}
254279
}
255280
}

src/github/utils.ts

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,8 @@ export function convertGraphQLEventType(text: string) {
458458
return Common.EventType.Reviewed;
459459
case 'MergedEvent':
460460
return Common.EventType.Merged;
461-
461+
case 'CrossReferencedEvent':
462+
return Common.EventType.CrossReferenced;
462463
default:
463464
return Common.EventType.Other;
464465
}
@@ -964,6 +965,7 @@ export function parseGraphQLTimelineEvents(
964965
| GraphQL.Commit
965966
| GraphQL.AssignedEvent
966967
| GraphQL.HeadRefDeletedEvent
968+
| GraphQL.CrossReferencedEvent
967969
)[],
968970
githubRepository: GitHubRepository,
969971
): Common.TimelineEvent[] {
@@ -1037,8 +1039,9 @@ export function parseGraphQLTimelineEvents(
10371039
normalizedEvents.push({
10381040
id: assignEv.id,
10391041
event: type,
1040-
user: parseAccount(assignEv.user, githubRepository),
1041-
actor: assignEv.actor,
1042+
assignee: parseAccount(assignEv.user, githubRepository),
1043+
actor: parseAccount(assignEv.actor),
1044+
createdAt: assignEv.createdAt,
10421045
});
10431046
return;
10441047
case Common.EventType.HeadRefDeleted:
@@ -1047,11 +1050,27 @@ export function parseGraphQLTimelineEvents(
10471050
normalizedEvents.push({
10481051
id: deletedEv.id,
10491052
event: type,
1050-
actor: parseActor(deletedEv.actor, githubRepository),
1053+
actor: parseAccount(deletedEv.actor, githubRepository),
10511054
createdAt: deletedEv.createdAt,
10521055
headRef: deletedEv.headRefName,
10531056
});
10541057
return;
1058+
case Common.EventType.CrossReferenced:
1059+
const crossRefEv = event as GraphQL.CrossReferencedEvent;
1060+
1061+
normalizedEvents.push({
1062+
id: crossRefEv.id,
1063+
event: type,
1064+
actor: parseAccount(crossRefEv.actor, githubRepository),
1065+
createdAt: crossRefEv.createdAt,
1066+
source: {
1067+
url: crossRefEv.source.url,
1068+
number: crossRefEv.source.number,
1069+
title: crossRefEv.source.title
1070+
},
1071+
willCloseTarget: crossRefEv.willCloseTarget
1072+
});
1073+
return;
10551074
default:
10561075
break;
10571076
}

webviews/components/icon.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,4 @@ export const sparkleIcon = <Icon src={require('../../resources/icons/sparkle.svg
4545
export const stopCircleIcon = <Icon src={require('../../resources/icons/stop-circle.svg')} />;
4646
export const issueIcon = <Icon src={require('../../resources/icons/issue.svg')} />;
4747
export const issueClosedIcon = <Icon src={require('../../resources/icons/issue_closed.svg')} />;
48+
export const linkIcon = <Icon src={require('../../resources/icons/link.svg')} />;

webviews/components/timeline.tsx

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
AssignEvent,
1010
CommentEvent,
1111
CommitEvent,
12+
CrossReferencedEvent,
1213
EventType,
1314
HeadRefDeleteEvent,
1415
MergedEvent,
@@ -20,7 +21,7 @@ import { ReviewType } from '../../src/github/views';
2021
import PullRequestContext from '../common/context';
2122
import { CommentView } from './comment';
2223
import Diff from './diff';
23-
import { commitIcon, mergeIcon, plusIcon } from './icon';
24+
import { assigneeIcon, commitIcon, linkIcon, mergeIcon, plusIcon } from './icon';
2425
import { nbsp } from './space';
2526
import { Timestamp } from './timestamp';
2627
import { AuthorLink, Avatar } from './user';
@@ -41,6 +42,8 @@ export const Timeline = ({ events }: { events: TimelineEvent[] }) => (
4142
return <AssignEventView key={`assign${event.id}`} {...event} />;
4243
case EventType.HeadRefDeleted:
4344
return <HeadDeleteEventView key={`head${event.id}`} {...event} />;
45+
case EventType.CrossReferenced:
46+
return <CrossReferencedEventView key={`cross${event.id}`} {...event} />;
4447
case EventType.NewCommitsSinceReview:
4548
return <NewCommitsSinceReviewEventView key={`newCommits${event.id}`} />;
4649
default:
@@ -282,6 +285,44 @@ const HeadDeleteEventView = (event: HeadRefDeleteEvent) => (
282285
</div>
283286
);
284287

285-
// TODO: We should show these, but the pre-React overview page didn't. Add
286-
// support in a separate PR.
287-
const AssignEventView = (event: AssignEvent) => null;
288+
const CrossReferencedEventView = (event: CrossReferencedEvent) => {
289+
const { source } = event;
290+
return (
291+
<div className="comment-container commit">
292+
<div className="commit-message">
293+
{linkIcon}
294+
{nbsp}
295+
<div className="avatar-container">
296+
<Avatar for={event.actor} />
297+
</div>
298+
<AuthorLink for={event.actor} />
299+
<div className="message">
300+
linked <a href={source.url}>#{source.number}</a> {source.title}
301+
{nbsp}
302+
{event.willCloseTarget ? 'which will close this issue' : ''}
303+
</div>
304+
</div>
305+
<Timestamp date={event.createdAt} />
306+
</div>
307+
);
308+
};
309+
310+
const AssignEventView = (event: AssignEvent) => {
311+
const { actor, assignee } = event;
312+
return (
313+
<div className="comment-container commit">
314+
<div className="commit-message">
315+
{assigneeIcon}
316+
{nbsp}
317+
<div className="avatar-container">
318+
<Avatar for={actor} />
319+
</div>
320+
<AuthorLink for={actor} />
321+
<div className="message">
322+
assigned <AuthorLink for={assignee} /> to this pull request
323+
</div>
324+
</div>
325+
<Timestamp date={event.createdAt} />
326+
</div>
327+
);
328+
};

0 commit comments

Comments
 (0)