Skip to content

Commit 3828fbb

Browse files
committed
Fix error when submitting reaction on new issue created through a reaction button
1 parent f72044b commit 3828fbb

File tree

2 files changed

+40
-20
lines changed

2 files changed

+40
-20
lines changed

src/post-reaction-component.ts

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1-
import { Issue, ReactionID, Reactions, reactionTypes, toggleReaction } from './github';
1+
import {
2+
createIssue as createGitHubIssue,
3+
Issue, loadIssueByNumber,
4+
ReactionID,
5+
Reactions,
6+
reactionTypes,
7+
toggleReaction
8+
} from './github';
29
import { EmptyReactions, reactionEmoji, reactionNames } from './reactions';
10+
import { pageAttributes as page } from './page-attributes';
311

412
export class PostReactionComponent {
513
public readonly element: HTMLElement;
@@ -11,7 +19,7 @@ export class PostReactionComponent {
1119

1220
constructor(
1321
private issue: Issue | null,
14-
private createIssue: () => Promise<null>
22+
private createIssueCallback: (issue: Issue) => Promise<null>
1523
) {
1624
this.element = document.createElement('section');
1725
this.element.classList.add('post-reactions');
@@ -41,22 +49,33 @@ export class PostReactionComponent {
4149
const handler = async (event: Event) => {
4250
event.preventDefault();
4351

52+
const button = event.target as HTMLButtonElement;
53+
button.disabled = true;
54+
const id = button.value as ReactionID;
4455
const issueExists = !!this.issue;
56+
4557
if (!issueExists) {
46-
await this.createIssue();
58+
const newIssue = await createGitHubIssue(
59+
page.issueTerm as string,
60+
page.url,
61+
page.title,
62+
page.description || '',
63+
page.label
64+
);
65+
const issue = await loadIssueByNumber(newIssue.number);
66+
this.issue = issue;
67+
this.reactions = issue.reactions;
68+
await this.createIssueCallback(issue);
4769
}
4870

49-
const button = event.target as HTMLButtonElement;
50-
button.disabled = true;
51-
const url = button.formAction;
52-
const id = button.value as ReactionID;
71+
const url = this.reactions.url;
5372
const {deleted} = await toggleReaction(url, id);
5473
const delta = deleted ? -1 : 1;
5574
this.reactions[id] += delta;
5675
this.reactions.total_count += delta;
5776
this.issue!.reactions = this.reactions;
58-
this.setIssue(this.issue);
5977
button.disabled = false;
78+
this.setIssue(this.issue);
6079
}
6180

6281
const buttons = this.element.querySelectorAll('button[post-reaction]');

src/utterances.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,11 @@ async function bootstrap() {
4444
startMeasuring(page.origin);
4545

4646
const timeline = new TimelineComponent(user, issue);
47-
const createIssue = async () => {
48-
const newIssue = await createGitHubIssue(
49-
page.issueTerm as string,
50-
page.url,
51-
page.title,
52-
page.description || '',
53-
page.label
54-
)
55-
issue = await loadIssueByNumber(newIssue.number)
47+
const createIssueCallback = async (newIssue: Issue) => {
48+
issue = newIssue;
5649
timeline.setIssue(issue);
57-
postReactionComponent.setIssue(issue);
5850
}
59-
const postReactionComponent = new PostReactionComponent(issue, createIssue);
51+
const postReactionComponent = new PostReactionComponent(issue, createIssueCallback);
6052
main.appendChild(postReactionComponent.element);
6153
main.appendChild(timeline.element);
6254

@@ -75,7 +67,16 @@ async function bootstrap() {
7567
const submit = async (markdown: string) => {
7668
await assertOrigin();
7769
if (!issue) {
78-
await createIssue();
70+
const newIssue = await createGitHubIssue(
71+
page.issueTerm as string,
72+
page.url,
73+
page.title,
74+
page.description || '',
75+
page.label
76+
);
77+
issue = await loadIssueByNumber(newIssue.number);
78+
timeline.setIssue(issue);
79+
postReactionComponent.setIssue(issue);
7980
}
8081
const comment = await postComment(issue.number, markdown);
8182
timeline.insertComment(comment, true);

0 commit comments

Comments
 (0)