Skip to content

Commit 41842ab

Browse files
committed
Refactor out state and an IssueReference
1 parent dc5e558 commit 41842ab

File tree

4 files changed

+28
-21
lines changed

4 files changed

+28
-21
lines changed

src/github/interface.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,13 @@ export interface Issue {
204204
reactionCount: number;
205205
}
206206

207+
export interface IssueReference {
208+
id: number;
209+
number: number;
210+
title: string;
211+
state: GithubItemStateEnum;
212+
}
213+
207214
export interface PullRequest extends Issue {
208215
isDraft?: boolean;
209216
isRemoteHeadDeleted?: boolean;
@@ -223,7 +230,7 @@ export interface PullRequest extends Issue {
223230
mergeCommitMeta?: { title: string, description: string };
224231
squashCommitMeta?: { title: string, description: string };
225232
suggestedReviewers?: ISuggestedReviewer[];
226-
closingIssues?: Pick<Issue, 'id' | 'title' | 'number' | 'state'>[]
233+
closingIssues?: IssueReference[]
227234
hasComments?: boolean;
228235
}
229236

src/github/issueModel.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
UpdateIssueResponse,
1919
} from './graphql';
2020
import { GithubItemStateEnum, IAccount, IIssueEditData, IMilestone, IProject, IProjectItem, Issue } from './interface';
21-
import { parseGraphQlIssueComment, parseGraphQLTimelineEvents } from './utils';
21+
import { parseGraphQlIssueComment, parseGraphQLTimelineEvents, parsePullRequestState } from './utils';
2222

2323
export class IssueModel<TItem extends Issue = Issue> {
2424
static ID = 'IssueModel';
@@ -104,11 +104,7 @@ export class IssueModel<TItem extends Issue = Issue> {
104104
}
105105

106106
protected updateState(state: string) {
107-
if (state.toLowerCase() === 'open') {
108-
this.state = GithubItemStateEnum.Open;
109-
} else {
110-
this.state = GithubItemStateEnum.Closed;
111-
}
107+
this.state = parsePullRequestState(state);
112108
}
113109

114110
update(issue: TItem): void {

src/github/pullRequestModel.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import {
5757
IGitTreeItem,
5858
IRawFileChange,
5959
IRawFileContent,
60+
IssueReference,
6061
ISuggestedReviewer,
6162
ITeam,
6263
MergeMethod,
@@ -83,6 +84,7 @@ import {
8384
parseGraphQLTimelineEvents,
8485
parseMergeability,
8586
parseMergeQueueEntry,
87+
parsePullRequestState,
8688
restPaginate,
8789
} from './utils';
8890

@@ -121,7 +123,7 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
121123
public conflicts?: string[];
122124
public suggestedReviewers?: ISuggestedReviewer[];
123125
public hasChangesSinceLastReview?: boolean;
124-
public closingIssues: Pick<IssueModel, 'id' | 'title' | 'number' | 'state'>[];
126+
public closingIssues: IssueReference[];
125127
private _showChangesSinceReview: boolean;
126128
private _hasPendingReview: boolean = false;
127129
private _onDidChangePendingReviewState: vscode.EventEmitter<boolean> = new vscode.EventEmitter<boolean>();
@@ -236,23 +238,15 @@ export class PullRequestModel extends IssueModel<PullRequest> implements IPullRe
236238
public base: GitHubRef;
237239

238240
protected override updateState(state: string) {
239-
if (state.toLowerCase() === 'open') {
240-
this.state = GithubItemStateEnum.Open;
241-
} else if (state.toLowerCase() === 'merged' || this.item.merged) {
242-
this.state = GithubItemStateEnum.Merged;
243-
} else {
244-
this.state = GithubItemStateEnum.Closed;
245-
}
241+
const newState = parsePullRequestState(state);
242+
this.state = this.item.merged ? GithubItemStateEnum.Merged : newState;
246243
}
247244

248245
override update(item: PullRequest): void {
249246
super.update(item);
250247
this.isDraft = item.isDraft;
251248
this.suggestedReviewers = item.suggestedReviewers;
252-
this.closingIssues = (item.closingIssues ?? []).map(issue => ({
253-
...issue,
254-
state: issue.state as GithubItemStateEnum
255-
}));
249+
this.closingIssues = item.closingIssues ?? [];
256250
if (item.isRemoteHeadDeleted != null) {
257251
this.isRemoteHeadDeleted = item.isRemoteHeadDeleted;
258252
}

src/github/utils.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,16 @@ export function parseMergeability(mergeability: 'UNKNOWN' | 'MERGEABLE' | 'CONFL
742742
return parsed;
743743
}
744744

745+
export function parsePullRequestState(state: string): GithubItemStateEnum {
746+
if (state.toLowerCase() === 'open') {
747+
return GithubItemStateEnum.Open;
748+
} else if (state.toLowerCase() === 'merged') {
749+
return GithubItemStateEnum.Merged;
750+
} else {
751+
return GithubItemStateEnum.Closed;
752+
}
753+
}
754+
745755
export function parseGraphQLPullRequest(
746756
graphQLPullRequest: GraphQL.PullRequest,
747757
githubRepository: GitHubRepository,
@@ -925,7 +935,7 @@ function parseSuggestedReviewers(
925935
}
926936

927937
function parseClosingIssuesReferences(
928-
closingIssuesReferences: Array<{ id: number, number: number, title: string, state: 'CLOSED' | 'OPEN' }> | undefined
938+
closingIssuesReferences: Array<{ id: number, number: number, title: string, state: string }> | undefined
929939
): Array<{ id: number, number: number, title: string, state: GithubItemStateEnum }> {
930940
if (!closingIssuesReferences) {
931941
return [];
@@ -935,7 +945,7 @@ function parseClosingIssuesReferences(
935945
id: issue.id,
936946
number: issue.number,
937947
title: issue.title,
938-
state: issue.state as GithubItemStateEnum
948+
state: parsePullRequestState(issue.state)
939949
}));
940950
}
941951

0 commit comments

Comments
 (0)