11import { REPO_PULL_REQUESTS } from './queries/repo-pull-requests' ;
22import { useAuth } from '../auth' ;
33import FetchApi from './api' ;
4- import { GITHUB_GRAPHQL } from '../utils/constants' ;
4+ import { GITHUB_GRAPHQL , SEARCH_PULLS } from '../utils/constants' ;
5+ import { parseLabels , parseMilestones } from '../utils/parseFunctions' ;
6+ import parseRestAPIPullRequests from '../utils/parseRestAPIPullRequest' ;
57
68function parsePullRequests ( connection ) {
79 if ( ! connection ) {
@@ -60,23 +62,6 @@ function parsePullRequests(connection) {
6062 return { pullRequests, totalCount, pageInfo } ;
6163}
6264
63- function parseLabels ( labels ) {
64- const nodes = labels ?. nodes || [ ] ;
65- return nodes . reduce ( ( labels , label ) => {
66- if ( ! label ) {
67- return labels ;
68- }
69-
70- return [
71- ...labels ,
72- {
73- color : label . color ,
74- name : label . name ,
75- } ,
76- ] ;
77- } , [ ] ) ;
78- }
79-
8065/**
8166 *
8267 * @param {
@@ -97,6 +82,7 @@ const getRepoPullRequests = async ({
9782 orderBy,
9883 direction,
9984 labels,
85+ milestone,
10086 before,
10187 after,
10288 first,
@@ -121,22 +107,66 @@ const getRepoPullRequests = async ({
121107 authorization : `Bearer ${ authStore . token } ` ,
122108 } ,
123109 } ;
124- const resp = await FetchApi ( data ) ;
125110
126- const openPullRequests = parsePullRequests (
127- resp . data . repository ?. openPullRequest
128- ) ;
129- const closedPullRequests = parsePullRequests (
130- resp . data . repository ?. closedPullRequest
131- ) ;
111+ if ( milestone ) {
112+ //Using REST API for filters involving milestone as filter by milestone isn't supported on the Graphql
113+ const pulls_data = {
114+ owner,
115+ name,
116+ labels : labels ?. [ 0 ] ?? undefined ,
117+ sort : orderBy ,
118+ direction,
119+ first,
120+ type : 'pull-request' ,
121+ milestone,
122+ } ;
123+ const restOpenPullRequests = await FetchApi ( {
124+ url : SEARCH_PULLS ( {
125+ ...pulls_data ,
126+ state : 'open' ,
127+ } ) ,
128+ headersOptions : {
129+ authorization : `Bearer ${ authStore . token } ` ,
130+ } ,
131+ } ) ;
132+ const restClosedPullRequests = await FetchApi ( {
133+ url : SEARCH_PULLS ( {
134+ ...pulls_data ,
135+ state : 'closed' ,
136+ } ) ,
137+ headersOptions : {
138+ authorization : `Bearer ${ authStore . token } ` ,
139+ } ,
140+ } ) ;
141+
142+ const openPullRequests = parseRestAPIPullRequests ( restOpenPullRequests ) ;
143+ const closedPullRequests = parseRestAPIPullRequests ( restClosedPullRequests ) ;
132144
133- const labelMap = parseLabels ( resp . data . repository ?. labels ) ;
145+ return {
146+ openPullRequests,
147+ closedPullRequests,
148+ } ;
149+ } else {
150+ const resp = await FetchApi ( data ) ;
151+ const openPullRequests = parsePullRequests (
152+ resp . data . repository ?. openPullRequest
153+ ) ;
134154
135- return {
136- openPullRequests,
137- closedPullRequests,
138- labels : labelMap ,
139- } ;
155+ const closedPullRequests = parsePullRequests (
156+ resp . data . repository ?. closedPullRequest
157+ ) ;
158+
159+ const milestones = parseMilestones ( resp . data . repository ?. milestones ) ;
160+
161+ const labelMap = parseLabels ( resp . data . repository ?. labels ) ;
162+
163+ return {
164+ openPullRequests,
165+ closedPullRequests,
166+ labels : labelMap ,
167+ milestones,
168+ } ;
169+ }
140170} ;
141171
142172export default getRepoPullRequests ;
0 commit comments