Skip to content

Commit e8310f3

Browse files
author
Rachel Macfarlane
committed
Update webview stored state new data is posted to it, fixes #251
1 parent 4787e35 commit e8310f3

File tree

1 file changed

+43
-10
lines changed

1 file changed

+43
-10
lines changed

preview-src/index.ts

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55
import './index.css';
6-
import { renderTimelineEvent, getStatus, renderComment, PullRequestStateEnum, renderReview } from './pullRequestOverviewRenderer';
6+
import { renderTimelineEvent, getStatus, renderComment, PullRequestStateEnum, renderReview, TimelineEvent, EventType } from './pullRequestOverviewRenderer';
77
import md from './mdRenderer';
88
import * as moment from 'moment';
99

@@ -22,19 +22,38 @@ const ElementIds = {
2222
TimelineEvents:'timeline-events' // If updating this value, change id in pullRequestOverview.ts as well.
2323
}
2424

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+
2543
window.onload = () => {
26-
const previousState = vscode.getState();
27-
if (previousState) {
28-
renderPullRequest(previousState.pullRequest);
44+
pullRequest = vscode.getState();
45+
if (pullRequest) {
46+
renderPullRequest(pullRequest);
2947
}
3048
}
3149

3250
function handleMessage(event: any) {
3351
const message = event.data; // The json data that the extension sent
3452
switch (message.command) {
3553
case 'pr.initialize':
36-
renderPullRequest(message.pullrequest);
37-
vscode.setState({ pullRequest: message.pullrequest });
54+
pullRequest = message.pullrequest;
55+
renderPullRequest(pullRequest);
56+
vscode.setState(pullRequest);
3857
break;
3958
case 'update-state':
4059
updatePullRequestState(message.state);
@@ -61,7 +80,7 @@ function handleMessage(event: any) {
6180

6281
window.addEventListener('message', handleMessage);
6382

64-
function renderPullRequest(pullRequest: any) {
83+
function renderPullRequest(pullRequest: PullRequest): void {
6584
document.getElementById(ElementIds.TimelineEvents)!.innerHTML = pullRequest.events.map(renderTimelineEvent).join('');
6685
setTitleHTML(pullRequest);
6786
setTextArea();
@@ -70,7 +89,10 @@ function renderPullRequest(pullRequest: any) {
7089
addEventListeners(pullRequest);
7190
}
7291

73-
function updatePullRequestState(state: PullRequestStateEnum) {
92+
function updatePullRequestState(state: PullRequestStateEnum): void {
93+
pullRequest.state = state;
94+
vscode.setState(pullRequest);
95+
7496
const close = (<HTMLButtonElement>document.getElementById(ElementIds.Close));
7597
if (close) {
7698
close.disabled = state !== PullRequestStateEnum.Open;
@@ -85,7 +107,7 @@ function updatePullRequestState(state: PullRequestStateEnum) {
85107
status!.innerHTML = getStatus(state);
86108
}
87109

88-
function setTitleHTML(pr: any) {
110+
function setTitleHTML(pr: PullRequest): void {
89111
document.getElementById('title')!.innerHTML = `
90112
<div class="details">
91113
<div class="overview-title">
@@ -106,7 +128,7 @@ function setTitleHTML(pr: any) {
106128
`;
107129
}
108130

109-
function addEventListeners(pr: any) {
131+
function addEventListeners(pr: PullRequest): void {
110132
document.getElementById(ElementIds.Checkout)!.addEventListener('click', () => {
111133
(<HTMLButtonElement>document.getElementById(ElementIds.Checkout)).disabled = true;
112134
(<HTMLButtonElement>document.getElementById(ElementIds.Checkout)).innerHTML = 'Checking Out...';
@@ -179,18 +201,29 @@ function submitComment() {
179201
}
180202

181203
function appendReview(review: any): void {
204+
review.event = EventType.Reviewed;
205+
pullRequest.events.push(review);
206+
vscode.setState(pullRequest);
207+
182208
const newReview = renderReview(review);
183209
document.getElementById(ElementIds.TimelineEvents)!.insertAdjacentHTML('beforeend', newReview);
184210
clearTextArea();
185211
}
186212

187213
function appendComment(comment: any) {
214+
comment.event = EventType.Commented;
215+
pullRequest.events.push(comment);
216+
vscode.setState(pullRequest);
217+
188218
let newComment = renderComment(comment);
189219
document.getElementById(ElementIds.TimelineEvents)!.insertAdjacentHTML('beforeend', newComment);
190220
clearTextArea();
191221
}
192222

193223
function updateCheckoutButton(isCheckedOut: boolean) {
224+
pullRequest.isCurrentlyCheckedOut = isCheckedOut;
225+
vscode.setState(pullRequest);
226+
194227
const checkoutButton = (<HTMLButtonElement>document.getElementById(ElementIds.Checkout));
195228
const checkoutMasterButton = (<HTMLButtonElement>document.getElementById(ElementIds.CheckoutDefaultBranch));
196229
checkoutButton.disabled = isCheckedOut;

0 commit comments

Comments
 (0)