Skip to content

Commit 8a415d1

Browse files
committed
feat: filter out pull requests from issue fetching and enhance issue type handling
1 parent ad266df commit 8a415d1

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

client/app/actions/github.ts

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,10 @@ export async function getIssues(
7474
const data = await githubReadJson<GitHubIssuePayload[] | GitHubSearchIssuesPayload>(path);
7575

7676
const items = Array.isArray(data) ? data : data.items ?? [];
77+
const issueItems = items.filter((item) => !item.pull_request);
7778

7879
return {
79-
issues: items.map((item) => mapGitHubIssue(item)),
80+
issues: issueItems.map((item) => mapGitHubIssue(item)),
8081
hasMore: items.length === perPage,
8182
};
8283
}
@@ -113,15 +114,20 @@ export async function getLinkedPRsForIssues(
113114
}
114115

115116
interface GraphQLIssueNode {
117+
__typename: 'Issue';
116118
number: number;
117119
timelineItems?: {
118120
nodes?: Array<GraphQLCrossReferencedNode | null>;
119121
};
120122
}
121123

124+
interface GraphQLIssueLookupPullRequestNode {
125+
__typename: 'PullRequest';
126+
}
127+
122128
interface GraphQLLinkedPrsResponse {
123129
data?: {
124-
repository?: Record<string, GraphQLIssueNode | null> | null;
130+
repository?: Record<string, GraphQLIssueNode | GraphQLIssueLookupPullRequestNode | null> | null;
125131
};
126132
errors?: Array<{ message?: string }>;
127133
}
@@ -145,20 +151,23 @@ export async function getLinkedPRsForIssues(
145151
const aliases = uniqueIssueNumbers.map((_, index) => `issue_${index}`);
146152
const issueSelections = uniqueIssueNumbers
147153
.map((issueNumber, index) => `
148-
${aliases[index]}: issue(number: ${issueNumber}) {
149-
number
150-
timelineItems(first: 100, itemTypes: [CROSS_REFERENCED_EVENT]) {
151-
nodes {
152-
... on CrossReferencedEvent {
153-
source {
154-
__typename
155-
... on PullRequest {
156-
id
157-
number
158-
title
159-
url
160-
state
161-
mergedAt
154+
${aliases[index]}: issueOrPullRequest(number: ${issueNumber}) {
155+
__typename
156+
... on Issue {
157+
number
158+
timelineItems(first: 100, itemTypes: [CROSS_REFERENCED_EVENT]) {
159+
nodes {
160+
... on CrossReferencedEvent {
161+
source {
162+
__typename
163+
... on PullRequest {
164+
id
165+
number
166+
title
167+
url
168+
state
169+
mergedAt
170+
}
162171
}
163172
}
164173
}
@@ -204,7 +213,7 @@ export async function getLinkedPRsForIssues(
204213
if (!issueNumber) return;
205214

206215
const issueNode = repositoryNode[alias];
207-
if (!issueNode) return;
216+
if (!issueNode || issueNode.__typename !== 'Issue') return;
208217

209218
const prs: PullRequest[] = [];
210219
const seen = new Set<number>();

client/lib/github/mappers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ export interface GitHubIssuePayload {
4646
title: string;
4747
body?: string | null;
4848
state: 'open' | 'closed';
49+
pull_request?: {
50+
url?: string;
51+
html_url?: string;
52+
};
4953
repository?: GitHubRepositoryPayload;
5054
repository_url?: string;
5155
labels?: GitHubLabelPayload[];

0 commit comments

Comments
 (0)