3
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
4
*--------------------------------------------------------------------------------------------*/
5
5
import './index.css' ;
6
- import { renderTimelineEvent , getStatus , renderComment , PullRequestStateEnum , renderReview } from './pullRequestOverviewRenderer' ;
6
+ import { renderTimelineEvent , getStatus , renderComment , PullRequestStateEnum , renderReview , TimelineEvent , EventType } from './pullRequestOverviewRenderer' ;
7
7
import md from './mdRenderer' ;
8
8
import * as moment from 'moment' ;
9
9
@@ -22,19 +22,38 @@ const ElementIds = {
22
22
TimelineEvents :'timeline-events' // If updating this value, change id in pullRequestOverview.ts as well.
23
23
}
24
24
25
+ interface PullRequest {
26
+ number : number ;
27
+ title : string ;
28
+ url : string ;
29
+ createdAt : Date ;
30
+ body : string ;
31
+ author : any ;
32
+ state : PullRequestStateEnum ;
33
+ events : TimelineEvent [ ] ;
34
+ isCurrentlyCheckedOut : boolean ;
35
+ base : string ;
36
+ head : string ;
37
+ commitsCount : number ;
38
+ repositoryDefaultBranch : any ;
39
+ }
40
+
41
+ let pullRequest : PullRequest ;
42
+
25
43
window . onload = ( ) => {
26
- const previousState = vscode . getState ( ) ;
27
- if ( previousState ) {
28
- renderPullRequest ( previousState . pullRequest ) ;
44
+ pullRequest = vscode . getState ( ) ;
45
+ if ( pullRequest ) {
46
+ renderPullRequest ( pullRequest ) ;
29
47
}
30
48
}
31
49
32
50
function handleMessage ( event : any ) {
33
51
const message = event . data ; // The json data that the extension sent
34
52
switch ( message . command ) {
35
53
case 'pr.initialize' :
36
- renderPullRequest ( message . pullrequest ) ;
37
- vscode . setState ( { pullRequest : message . pullrequest } ) ;
54
+ pullRequest = message . pullrequest ;
55
+ renderPullRequest ( pullRequest ) ;
56
+ vscode . setState ( pullRequest ) ;
38
57
break ;
39
58
case 'update-state' :
40
59
updatePullRequestState ( message . state ) ;
@@ -61,7 +80,7 @@ function handleMessage(event: any) {
61
80
62
81
window . addEventListener ( 'message' , handleMessage ) ;
63
82
64
- function renderPullRequest ( pullRequest : any ) {
83
+ function renderPullRequest ( pullRequest : PullRequest ) : void {
65
84
document . getElementById ( ElementIds . TimelineEvents ) ! . innerHTML = pullRequest . events . map ( renderTimelineEvent ) . join ( '' ) ;
66
85
setTitleHTML ( pullRequest ) ;
67
86
setTextArea ( ) ;
@@ -70,7 +89,10 @@ function renderPullRequest(pullRequest: any) {
70
89
addEventListeners ( pullRequest ) ;
71
90
}
72
91
73
- function updatePullRequestState ( state : PullRequestStateEnum ) {
92
+ function updatePullRequestState ( state : PullRequestStateEnum ) : void {
93
+ pullRequest . state = state ;
94
+ vscode . setState ( pullRequest ) ;
95
+
74
96
const close = ( < HTMLButtonElement > document . getElementById ( ElementIds . Close ) ) ;
75
97
if ( close ) {
76
98
close . disabled = state !== PullRequestStateEnum . Open ;
@@ -85,7 +107,7 @@ function updatePullRequestState(state: PullRequestStateEnum) {
85
107
status ! . innerHTML = getStatus ( state ) ;
86
108
}
87
109
88
- function setTitleHTML ( pr : any ) {
110
+ function setTitleHTML ( pr : PullRequest ) : void {
89
111
document . getElementById ( 'title' ) ! . innerHTML = `
90
112
<div class="details">
91
113
<div class="overview-title">
@@ -106,7 +128,7 @@ function setTitleHTML(pr: any) {
106
128
` ;
107
129
}
108
130
109
- function addEventListeners ( pr : any ) {
131
+ function addEventListeners ( pr : PullRequest ) : void {
110
132
document . getElementById ( ElementIds . Checkout ) ! . addEventListener ( 'click' , ( ) => {
111
133
( < HTMLButtonElement > document . getElementById ( ElementIds . Checkout ) ) . disabled = true ;
112
134
( < HTMLButtonElement > document . getElementById ( ElementIds . Checkout ) ) . innerHTML = 'Checking Out...' ;
@@ -179,18 +201,29 @@ function submitComment() {
179
201
}
180
202
181
203
function appendReview ( review : any ) : void {
204
+ review . event = EventType . Reviewed ;
205
+ pullRequest . events . push ( review ) ;
206
+ vscode . setState ( pullRequest ) ;
207
+
182
208
const newReview = renderReview ( review ) ;
183
209
document . getElementById ( ElementIds . TimelineEvents ) ! . insertAdjacentHTML ( 'beforeend' , newReview ) ;
184
210
clearTextArea ( ) ;
185
211
}
186
212
187
213
function appendComment ( comment : any ) {
214
+ comment . event = EventType . Commented ;
215
+ pullRequest . events . push ( comment ) ;
216
+ vscode . setState ( pullRequest ) ;
217
+
188
218
let newComment = renderComment ( comment ) ;
189
219
document . getElementById ( ElementIds . TimelineEvents ) ! . insertAdjacentHTML ( 'beforeend' , newComment ) ;
190
220
clearTextArea ( ) ;
191
221
}
192
222
193
223
function updateCheckoutButton ( isCheckedOut : boolean ) {
224
+ pullRequest . isCurrentlyCheckedOut = isCheckedOut ;
225
+ vscode . setState ( pullRequest ) ;
226
+
194
227
const checkoutButton = ( < HTMLButtonElement > document . getElementById ( ElementIds . Checkout ) ) ;
195
228
const checkoutMasterButton = ( < HTMLButtonElement > document . getElementById ( ElementIds . CheckoutDefaultBranch ) ) ;
196
229
checkoutButton . disabled = isCheckedOut ;
0 commit comments