Skip to content

Commit dc5e558

Browse files
committed
the closing issues (linked issues) are listed in the UI; only the icons are missing
1 parent d714138 commit dc5e558

File tree

7 files changed

+52
-38
lines changed

7 files changed

+52
-38
lines changed

src/github/graphql.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -636,8 +636,8 @@ export interface PullRequest extends Issue {
636636
nodes: {
637637
id: number,
638638
title: string,
639-
number: number
640-
639+
number: number,
640+
state: 'CLOSED' | 'OPEN'
641641
}[];
642642
};
643643
}

src/github/interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ export interface PullRequest extends Issue {
223223
mergeCommitMeta?: { title: string, description: string };
224224
squashCommitMeta?: { title: string, description: string };
225225
suggestedReviewers?: ISuggestedReviewer[];
226-
closingIssues?: Pick<Issue, 'id' | 'title' | 'number'>[]
226+
closingIssues?: Pick<Issue, 'id' | 'title' | 'number' | 'state'>[]
227227
hasComments?: boolean;
228228
}
229229

src/github/pullRequestModel.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ import {
5757
IGitTreeItem,
5858
IRawFileChange,
5959
IRawFileContent,
60-
Issue,
6160
ISuggestedReviewer,
6261
ITeam,
6362
MergeMethod,
@@ -122,7 +121,7 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
122121
public conflicts?: string[];
123122
public suggestedReviewers?: ISuggestedReviewer[];
124123
public hasChangesSinceLastReview?: boolean;
125-
public closingIssues: Pick<Issue, 'id' | 'title' | 'number'>[];
124+
public closingIssues: Pick<IssueModel, 'id' | 'title' | 'number' | 'state'>[];
126125
private _showChangesSinceReview: boolean;
127126
private _hasPendingReview: boolean = false;
128127
private _onDidChangePendingReviewState: vscode.EventEmitter<boolean> = new vscode.EventEmitter<boolean>();
@@ -250,8 +249,10 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
250249
super.update(item);
251250
this.isDraft = item.isDraft;
252251
this.suggestedReviewers = item.suggestedReviewers;
253-
this.closingIssues = item.closingIssues ?? [];
254-
252+
this.closingIssues = (item.closingIssues ?? []).map(issue => ({
253+
...issue,
254+
state: issue.state as GithubItemStateEnum
255+
}));
255256
if (item.isRemoteHeadDeleted != null) {
256257
this.isRemoteHeadDeleted = item.isRemoteHeadDeleted;
257258
}

src/github/queries.gql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ fragment PullRequestFragment on PullRequest {
209209
id
210210
number
211211
title
212+
state
212213
}
213214
}
214215
merged

src/github/utils.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { GitHubRepository, ViewerPermission } from './githubRepository';
2626
import * as GraphQL from './graphql';
2727
import {
2828
AccountType,
29+
GithubItemStateEnum,
2930
IAccount,
3031
IActor,
3132
IGitHubRef,
@@ -924,16 +925,17 @@ function parseSuggestedReviewers(
924925
}
925926

926927
function parseClosingIssuesReferences(
927-
closingIssuesReferences: Array<{ id: number, number: number, title: string }> | undefined
928-
): Array<{ id: number, number: number, title: string }> {
928+
closingIssuesReferences: Array<{ id: number, number: number, title: string, state: 'CLOSED' | 'OPEN' }> | undefined
929+
): Array<{ id: number, number: number, title: string, state: GithubItemStateEnum }> {
929930
if (!closingIssuesReferences) {
930931
return [];
931932
}
932933

933934
return closingIssuesReferences.map(issue => ({
934935
id: issue.id,
935936
number: issue.number,
936-
title: issue.title
937+
title: issue.title,
938+
state: issue.state as GithubItemStateEnum
937939
}));
938940
}
939941

src/github/views.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export interface PullRequest extends Issue {
9696
lastReviewType?: ReviewType;
9797
revertable?: boolean;
9898
busy?: boolean;
99-
closingIssues: Pick<Issue, 'title' | 'number'>[];
99+
closingIssues: Pick<Issue, 'title' | 'number' | 'state'>[];
100100
}
101101

102102
export interface ProjectItemsReply {

webviews/components/sidebar.tsx

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import React, { useContext } from 'react';
77
import { COPILOT_LOGINS } from '../../src/common/copilot';
88
import { gitHubLabelColor } from '../../src/common/utils';
9-
import { IMilestone, IProjectItem, reviewerId } from '../../src/github/interface';
9+
import { IMilestone, IProjectItem, Issue, reviewerId, } from '../../src/github/interface';
1010
import { PullRequest } from '../../src/github/views';
1111
import PullRequestContext from '../common/context';
1212
import { Label } from '../common/label';
@@ -54,7 +54,7 @@ export default function Sidebar({ reviewers, labels, closingIssues, hasWritePerm
5454
</div>
5555
{reviewers && reviewers.length ? (
5656
reviewers.map(state => (
57-
<Reviewer key={reviewerId(state.reviewer)} {...{reviewState: state}} />
57+
<Reviewer key={reviewerId(state.reviewer)} {...{ reviewState: state }} />
5858
))
5959
) : (
6060
<div className="section-placeholder">None yet</div>
@@ -199,32 +199,29 @@ export default function Sidebar({ reviewers, labels, closingIssues, hasWritePerm
199199
{milestone ? (
200200
<Milestone key={milestone.title} {...milestone} canDelete={hasWritePermission} />
201201
) : (
202-
<>
203-
<div className="section-placeholder">No milestoooone</div>
204-
<button onClick={() => {
205-
console.log('Sidebar props:', { reviewers, labels, closingIssues, hasWritePermission, isIssue, projects, milestone, assignees, canAssignCopilot });
206-
207-
}}>Click me to test</button>
208-
</>
202+
<>
203+
<div className="section-placeholder">No milestone</div>
204+
</>
209205
)}
210206
</div>
211-
{/* <div id="linked-issues" className="section">
212-
<div className="section-header" onClick={async () => {
213-
const newMilestone = await addMilestone();
214-
updatePR({ milestone: newMilestone.added });
215-
}}>
216-
<div className="section-title">Linked issues</div>
207+
<div id="closingIssues" className="section">
208+
<div className="section-header">
209+
<div className="section-title">Linked Issues</div>
217210
</div>
218-
{closingIssues.length ? (
219-
<div className="issues-list">
211+
{closingIssues.length > 0 ? (
212+
<div className="p-2">
220213
{closingIssues.map(issue => (
221-
<Issue key={issue.title} {...issue} />
214+
<div className="section-item reviewer">
215+
<div className="avatar-with-author gap-2">
216+
<IssueItem key={issue.title} issue={issue} />
217+
</div>
218+
</div>
222219
))}
223220
</div>
224221
) : (
225-
<div className="section-placeholder">None yet</div>
222+
<div className="p-4 text-sm text-gray-500 text-center">None yet</div>
226223
)}
227-
</div> */}
224+
</div>
228225
</div>
229226
);
230227
}
@@ -297,13 +294,26 @@ function Project(project: IProjectItem & { canDelete: boolean }) {
297294
);
298295
}
299296

300-
function Issue(issue: any) {
297+
function IssueItem({ issue }: { issue: Pick<Issue, 'title' | 'number' | 'state'> }) {
301298
return (
302-
<div className="issues-list">
303-
<div className="issue-item">
304-
<h1>{issue.title}</h1>
305-
{/* Add more details about the issue as needed */}
306-
</div>
307-
</div>
299+
<>
300+
<IssueStateIcon state={issue.state} />
301+
<span className="h2">{issue.title}</span>
302+
</>
303+
308304
);
309305
}
306+
307+
function IssueStateIcon({ state }: { state: string }) {
308+
const normalizedState = state.toLowerCase().trim();
309+
310+
switch (normalizedState) {
311+
case 'open':
312+
return settingsIcon;
313+
case 'closed':
314+
return closeIcon;
315+
default:
316+
return closeIcon;
317+
}
318+
}
319+

0 commit comments

Comments
 (0)