@@ -13,13 +13,9 @@ class Unapproved extends BaseCommand {
13
13
return this . projects
14
14
. then ( projects => Promise . all ( projects . map ( this . __getUnapprovedRequests ) ) )
15
15
. then ( this . __sortRequests )
16
- . then ( this . __buildMessage )
17
- . then ( message => {
18
- this . logger . info ( "Sending message" )
19
- this . logger . info ( JSON . stringify ( message ) )
20
- return message
21
- } )
22
- . then ( this . messenger . send )
16
+ . then ( this . __buildMessages )
17
+ . then ( this . __logMessages )
18
+ . then ( this . messenger . sendMany )
23
19
. catch ( err => {
24
20
if ( err instanceof NetworkError ) {
25
21
logger . error ( err )
@@ -31,35 +27,49 @@ class Unapproved extends BaseCommand {
31
27
} )
32
28
}
33
29
34
- __buildMessage = requests => {
30
+ __buildMessages = requests => {
35
31
const markup = markupUtils [ this . __getConfigSetting ( "messenger.markup" ) ]
36
32
37
33
if ( requests . length ) {
38
- return this . __buildListMessage ( requests , markup )
34
+ return this . __buildListMessages ( requests , markup )
39
35
} else {
40
- return this . __buildEmptyListMessage ( requests , markup )
36
+ return this . __buildEmptyListMessage ( markup )
41
37
}
42
38
}
43
39
44
- __buildListMessage = ( requests , markup ) => {
45
- const headText = "Hey, there are a couple of requests waiting for your review"
46
- const list = this . __buildRequestsMessage ( requests , markup )
40
+ __logMessages = messages => {
41
+ this . logger . info ( "Sending messages" )
42
+ this . logger . info ( JSON . stringify ( messages ) )
43
+ return messages
44
+ }
47
45
46
+ __buildListMessages = ( requests , markup ) => {
47
+ const headText = "Hey, there are a couple of requests waiting for your review"
48
+ const messages = this . __buildRequestsMessages ( requests , markup )
48
49
const header = markup . makeHeader ( headText )
49
- const bodyParts = markup . flatten ( list )
50
50
51
- return markup . composeMsg ( header , bodyParts )
51
+ return messages . map ( ( message , idx ) => {
52
+ const parts = markup . flatten ( message )
53
+
54
+ if ( idx === 0 ) {
55
+ return markup . composeMsg (
56
+ markup . withHeader ( header , parts ) ,
57
+ )
58
+ }
59
+
60
+ return markup . composeMsg ( parts )
61
+ } )
52
62
}
53
63
54
- __buildRequestsMessage = ( requests , markup ) => {
64
+ __buildRequestsMessages = ( requests , markup ) => {
55
65
const splitByReviewProgress =
56
66
this . __getConfigSetting ( "unapproved.splitByReviewProgress" )
57
67
58
68
if ( splitByReviewProgress ) {
59
- return this . __buildByReviewProgressMessage ( requests , markup )
69
+ return this . __buildByReviewProgressMessages ( requests , markup )
60
70
}
61
71
62
- return this . __buildGeneralRequestsMessage ( requests , markup )
72
+ return this . __buildGeneralRequestsMessages ( requests , markup )
63
73
}
64
74
65
75
__buildEmptyListMessage = markup => {
@@ -69,13 +79,10 @@ class Unapproved extends BaseCommand {
69
79
const header = markup . makeHeader ( headText )
70
80
const body = markup . makePrimaryInfo ( markup . makeText ( bodyText ) )
71
81
72
- return markup . composeMsg ( header , body )
82
+ return markup . composeMsg ( markup . withHeader ( header , body ) )
73
83
}
74
84
75
- __buildGeneralRequestsMessage = ( requests , markup ) => requests
76
- . map ( this . __buildRequestDescription ) . map ( markup . addDivider )
77
-
78
- __buildByReviewProgressMessage = ( requests , markup ) => {
85
+ __buildByReviewProgressMessages = ( requests , markup ) => {
79
86
const messages = [ ]
80
87
const [ toReviewRequests , underReviewRequests ] = _ . partition ( requests , req => (
81
88
req . approvals_left > 0 && ! this . __isRequestUnderReview ( req )
@@ -90,15 +97,33 @@ class Unapproved extends BaseCommand {
90
97
const toReviewSection = makeSection ( "Unapproved" )
91
98
const underReviewSection = makeSection ( "Under review" )
92
99
93
- const toReviewMessage = this . __buildGeneralRequestsMessage ( toReviewRequests , markup )
94
- const underReviewMessage = this . __buildGeneralRequestsMessage ( underReviewRequests , markup )
100
+ const toReviewMessages = this . __buildGeneralRequestsMessages ( toReviewRequests , markup )
101
+ const underReviewMessages = this . __buildGeneralRequestsMessages ( underReviewRequests , markup )
102
+
103
+ toReviewMessages . forEach ( ( chunk , idx ) => {
104
+ messages . push ( idx === 0 ? [ toReviewSection , ...chunk ] : chunk )
105
+ } )
95
106
96
- toReviewMessage . length && messages . push ( toReviewSection , ...toReviewMessage )
97
- underReviewMessage . length && messages . push ( underReviewSection , ...underReviewMessage )
107
+ underReviewMessages . forEach ( ( chunk , idx ) => {
108
+ messages . push ( idx === 0 ? [ underReviewSection , ...chunk ] : chunk )
109
+ } )
98
110
99
111
return messages
100
112
}
101
113
114
+ __buildGeneralRequestsMessages = ( requests , markup ) => (
115
+ this . __chunkRequests ( requests ) . map ( chunk => (
116
+ chunk . map ( this . __buildRequestDescription ) . map ( markup . addDivider )
117
+ ) )
118
+ )
119
+
120
+ __chunkRequests = requests => {
121
+ const requestsPerMessage = this . __getConfigSetting ( "unapproved.requestsPerMessage" )
122
+ if ( ! requestsPerMessage ) return [ requests ]
123
+
124
+ return _ . chunk ( requests , requestsPerMessage )
125
+ }
126
+
102
127
__buildRequestDescription = request =>
103
128
new UnapprovedRequestDescription ( request , this . config ) . build ( )
104
129
0 commit comments