@@ -3,7 +3,15 @@ import { browser } from 'webextension-polyfill-ts';
3
3
import { Gitlab } from '@gitbeaker/browser' ;
4
4
import { getSettings } from '../utils/getSettings' ;
5
5
import { fetchMRExtraInfo } from '../utils/fetchMRExtraInfo' ;
6
- import { MergeRequests , GetSettingsResponse , MergeRequestsDetails , Todo , GitlabAPI , Issue } from '../types' ;
6
+ import {
7
+ MergeRequests ,
8
+ GetSettingsResponse ,
9
+ MergeRequestsDetails ,
10
+ Todo ,
11
+ GitlabAPI ,
12
+ Issue ,
13
+ CurrentUser
14
+ } from '../types' ;
7
15
import { setBadge } from '../utils/setBadge' ;
8
16
import {
9
17
FailFetchIssues ,
@@ -14,10 +22,11 @@ import {
14
22
GitLabAddressNotSet ,
15
23
GitLabTokenNotSet
16
24
} from '../errors' ;
25
+ import { removeDuplicateObjectFromArray } from '../../popup/helpers' ;
17
26
18
27
export const getLatestDataFromGitLab = ( cb : CallbackErrorOnly ) => {
19
- interface ReviewRequests {
20
- mrAssigned : MergeRequestsDetails [ ] ;
28
+ interface ReviewReceived {
29
+ mrReceived : MergeRequestsDetails [ ] ;
21
30
mrToReview : number ;
22
31
}
23
32
@@ -29,7 +38,10 @@ export const getLatestDataFromGitLab = (cb: CallbackErrorOnly) => {
29
38
interface AsyncResults {
30
39
getSettings : GetSettingsResponse ;
31
40
gitlabApi : GitlabAPI ;
32
- reviewRequests : ReviewRequests ;
41
+ currentUser : CurrentUser ;
42
+ assignedRequests : MergeRequests [ ] ;
43
+ reviewerRequests : MergeRequests [ ] ;
44
+ receivedRequests : ReviewReceived ;
33
45
givenRequests : ReviewGiven ;
34
46
issuesAssigned : Issue [ ] ;
35
47
todos : Todo [ ] ;
@@ -65,46 +77,53 @@ export const getLatestDataFromGitLab = (cb: CallbackErrorOnly) => {
65
77
return cb ( null , api ) ;
66
78
}
67
79
] ,
68
- reviewRequests : [
69
- 'getSettings' ,
80
+ currentUser : [
70
81
'gitlabApi' ,
71
82
( results , cb ) => {
72
- const { gitlabApi, getSettings } = results ;
83
+ const { gitlabApi } = results ;
84
+ gitlabApi . Users . current ( )
85
+ . then ( ( currentUser : CurrentUser ) => {
86
+ return cb ( null , currentUser ) ;
87
+ } )
88
+ . catch ( ( error : Error ) => {
89
+ if ( error ) {
90
+ return cb ( error ) ;
91
+ }
92
+ } ) ;
93
+ }
94
+ ] ,
95
+ assignedRequests : [
96
+ 'gitlabApi' ,
97
+ ( results , cb ) => {
98
+ const { gitlabApi } = results ;
73
99
74
100
gitlabApi . MergeRequests . all ( {
75
101
state : 'opened' ,
76
- scope : 'assigned_to_me' ,
77
- wip : 'no'
102
+ scope : 'assigned_to_me'
78
103
} )
79
- . then ( ( mrAssigned : MergeRequests [ ] ) => {
80
- return fetchMRExtraInfo (
81
- {
82
- gitlabApi,
83
- mrList : mrAssigned ,
84
- gitlabCE : getSettings . gitlabCE
85
- } ,
86
- ( error , mrAssignedDetails ) => {
87
- if ( error ) {
88
- return cb ( error ) ;
89
- }
90
-
91
- if ( ! mrAssignedDetails ) {
92
- return cb ( new FailFetchMergeRequestsAssigned ( ) ) ;
93
- }
94
-
95
- let mrToReview = 0 ;
96
- mrAssignedDetails . forEach ( ( mr ) => {
97
- if ( ! mr . approvals . user_has_approved ) {
98
- mrToReview += 1 ;
99
- }
100
- } ) ;
104
+ . then ( ( mrReceived : MergeRequests [ ] ) => {
105
+ return cb ( null , mrReceived ) ;
106
+ } )
107
+ . catch ( ( error : Error ) => {
108
+ if ( error ) {
109
+ return cb ( error ) ;
110
+ }
111
+ } ) ;
112
+ }
113
+ ] ,
114
+ reviewerRequests : [
115
+ 'gitlabApi' ,
116
+ 'currentUser' ,
117
+ ( results , cb ) => {
118
+ const { gitlabApi, currentUser } = results ;
101
119
102
- return cb ( null , {
103
- mrAssigned : mrAssignedDetails ,
104
- mrToReview
105
- } ) ;
106
- }
107
- ) ;
120
+ gitlabApi . MergeRequests . all ( {
121
+ state : 'opened' ,
122
+ scope : 'all' ,
123
+ reviewer_id : currentUser . id
124
+ } )
125
+ . then ( ( mrReceived : MergeRequests [ ] ) => {
126
+ return cb ( null , mrReceived ) ;
108
127
} )
109
128
. catch ( ( error : Error ) => {
110
129
if ( error ) {
@@ -113,6 +132,46 @@ export const getLatestDataFromGitLab = (cb: CallbackErrorOnly) => {
113
132
} ) ;
114
133
}
115
134
] ,
135
+ receivedRequests : [
136
+ 'getSettings' ,
137
+ 'gitlabApi' ,
138
+ 'assignedRequests' ,
139
+ 'reviewerRequests' ,
140
+ ( results , cb ) => {
141
+ const { gitlabApi, getSettings, assignedRequests, reviewerRequests } = results ;
142
+
143
+ const requests = removeDuplicateObjectFromArray ( [ ...assignedRequests , ...reviewerRequests ] , 'iid' ) ;
144
+
145
+ return fetchMRExtraInfo (
146
+ {
147
+ gitlabApi,
148
+ mrList : requests ,
149
+ gitlabCE : getSettings . gitlabCE
150
+ } ,
151
+ ( error , mrReceivedDetails ) => {
152
+ if ( error ) {
153
+ return cb ( error ) ;
154
+ }
155
+
156
+ if ( ! mrReceivedDetails ) {
157
+ return cb ( new FailFetchMergeRequestsAssigned ( ) ) ;
158
+ }
159
+
160
+ let mrToReview = 0 ;
161
+ mrReceivedDetails . forEach ( ( mr ) => {
162
+ if ( ! mr . approvals . user_has_approved ) {
163
+ mrToReview += 1 ;
164
+ }
165
+ } ) ;
166
+
167
+ return cb ( null , {
168
+ mrReceived : mrReceivedDetails ,
169
+ mrToReview
170
+ } ) ;
171
+ }
172
+ ) ;
173
+ }
174
+ ] ,
116
175
givenRequests : [
117
176
'getSettings' ,
118
177
'gitlabApi' ,
@@ -189,7 +248,8 @@ export const getLatestDataFromGitLab = (cb: CallbackErrorOnly) => {
189
248
const { gitlabApi } = results ;
190
249
191
250
gitlabApi . Todos . all ( {
192
- state : 'pending'
251
+ state : 'pending' ,
252
+ per_page : 100
193
253
} )
194
254
. then ( ( todos : Todo [ ] ) => {
195
255
if ( ! todos ) {
@@ -207,14 +267,14 @@ export const getLatestDataFromGitLab = (cb: CallbackErrorOnly) => {
207
267
] ,
208
268
updateBadge : [
209
269
'getSettings' ,
210
- 'reviewRequests ' ,
270
+ 'receivedRequests ' ,
211
271
'givenRequests' ,
212
272
'issuesAssigned' ,
213
273
'todos' ,
214
274
( results , cb ) => {
215
275
const {
216
276
getSettings : { alertBadgeCounters } ,
217
- reviewRequests : { mrToReview } ,
277
+ receivedRequests : { mrToReview } ,
218
278
givenRequests : { mrReviewed } ,
219
279
issuesAssigned,
220
280
todos
@@ -249,19 +309,19 @@ export const getLatestDataFromGitLab = (cb: CallbackErrorOnly) => {
249
309
}
250
310
] ,
251
311
saveLocalStorage : [
252
- 'reviewRequests ' ,
312
+ 'receivedRequests ' ,
253
313
'givenRequests' ,
254
314
'issuesAssigned' ,
255
315
'todos' ,
256
316
( results , cb ) => {
257
- const { mrAssigned , mrToReview } = results . reviewRequests ;
317
+ const { mrReceived , mrToReview } = results . receivedRequests ;
258
318
const { mrGiven, mrReviewed } = results . givenRequests ;
259
319
const { todos, issuesAssigned } = results ;
260
320
const lastUpdateDateUnix = new Date ( ) . getTime ( ) ;
261
321
262
322
browser . storage . local
263
323
. set ( {
264
- mrAssigned ,
324
+ mrReceived ,
265
325
mrToReview,
266
326
mrGiven,
267
327
mrReviewed,
0 commit comments