-
-
Notifications
You must be signed in to change notification settings - Fork 216
Expand file tree
/
Copy pathindex.js
More file actions
executable file
·126 lines (114 loc) · 2.77 KB
/
index.js
File metadata and controls
executable file
·126 lines (114 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import React, { Component } from 'react';
import { Mutation } from 'react-apollo';
import { GET_COMMENTS_OF_ISSUE } from '../CommentList/queries';
import { ADD_COMMENT } from './mutations';
import TextArea from '../../TextArea';
import Button from '../../Button';
import ErrorMessage from '../../Error';
const updateComments = ({
repositoryOwner,
repositoryName,
issue
},
client,
{
data: {
addComment: {
commentEdge
}
}
}
) => {
const data = client.readQuery({
query: GET_COMMENTS_OF_ISSUE,
variables: {
repositoryOwner,
repositoryName,
number: issue.number
}
});
client.writeQuery({
query: GET_COMMENTS_OF_ISSUE,
variables: {
repositoryOwner,
repositoryName,
number: issue.number
},
data: {
...data,
repository: {
...data.repository,
issue: {
...data.repository.issue,
comments: {
...data.repository.issue.comments,
edges: [
...data.repository.issue.comments.edges,
commentEdge
]
}
}
}
}
})
};
class CommentAdd extends Component {
state = {
value: '',
};
onChange = value => {
this.setState({ value });
};
onSubmit = (event, addComment) => {
addComment().then(() => this.setState({ value: '' }));
event.preventDefault();
};
render() {
const { issue, repositoryOwner, repositoryName } = this.props;
const { value } = this.state;
return (
<Mutation
mutation={ADD_COMMENT}
variables={{ body: value, subjectId: issue.id }}
optimisticResponse={{
addComment: {
__typename: 'Mutation',
commentEdge: {
__typename: 'IssueCommentEdge',
node: {
__typename: 'IssueComment',
id: new Date().getTime() + '',
databaseId: new Date().getTime(),
author: {
__typename: 'User',
login: 'me'
},
bodyHTML: value
}
}
}
}}
update={(client, data) => updateComments({
repositoryOwner,
repositoryName,
issue
}, client, data)}
>
{(addComment, { data, loading, error }) => (
<div>
{error && <ErrorMessage error={error} />}
<form onSubmit={e => this.onSubmit(e, addComment)}>
<TextArea
value={value}
onChange={e => this.onChange(e.target.value)}
placeholder="Leave a comment"
/>
<Button type="submit">Comment</Button>
</form>
</div>
)}
</Mutation>
);
}
}
export default CommentAdd;