Skip to content

Commit ea9f967

Browse files
张德明booxood
authored andcommitted
feat: add option number (gitalk#168)
1 parent d300b75 commit ea9f967

File tree

4 files changed

+63
-6
lines changed

4 files changed

+63
-6
lines changed

readme-cn.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ gitalk.render('gitalk-container')
8888
Default: `location.href`.
8989

9090
页面的唯一标识。长度必须小于50。
91+
92+
- **number** `Number`
93+
94+
Default: `null`.
95+
96+
页面的 issue ID 标识,若未定义`number`属性则会使用`id`进行定位。
9197

9298
- **labels** `Array`
9399

readme-zh.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@ gitalk.render('gitalk-container')
9090

9191
頁面的唯一標識。長度必須小於50。
9292

93+
- **number** `Number`
94+
95+
Default: `null`.
96+
97+
頁面的 issue ID,若未定義`number`屬性則會使用`id`進行定位。
98+
9399
- **labels** `Array`
94100

95101
Default: `['Gitalk']`.

readme.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ gitalk.render('gitalk-container')
9292

9393
The unique id of the page. Length must less than 50.
9494

95+
- **number** `Number`
96+
97+
Default: `location.href`.
98+
99+
The issue ID of the page, if the `number` attribute is not defined, issue will be located using `id`.
100+
95101
- **labels** `Array`
96102

97103
Default: `['Gitalk']`.

src/gitalk.jsx

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class GitalkComponent extends Component {
5151
super(props)
5252
this.options = Object.assign({}, {
5353
id: location.href,
54+
number: -1,
5455
labels: ['Gitalk'],
5556
title: document.title,
5657
body: '', // location.href + header.meta[description]
@@ -187,13 +188,36 @@ class GitalkComponent extends Component {
187188
this.logout()
188189
})
189190
}
190-
getIssue () {
191-
const { issue } = this.state
192-
if (issue) {
193-
this.setState({ isNoInit: false })
194-
return Promise.resolve(issue)
195-
}
191+
getIssueById () {
192+
const { owner, repo, number, clientID, clientSecret } = this.options
193+
const getUrl = `/repos/${owner}/${repo}/issues/${number}`
194+
195+
return new Promise((resolve, reject) => {
196+
axiosGithub.get(getUrl, {
197+
params: {
198+
client_id: clientID,
199+
client_secret: clientSecret,
200+
t: Date.now()
201+
}
202+
})
203+
.then(res => {
204+
let issue = null
205+
206+
if (res && res.data && res.data.number === number) {
207+
issue = res.data
196208

209+
this.setState({ issue, isNoInit: false })
210+
}
211+
resolve(issue)
212+
})
213+
.catch(err => {
214+
// When the status code is 404, promise will be resolved with null
215+
if (err.response.status === 404) resolve(null)
216+
reject(err)
217+
})
218+
})
219+
}
220+
getIssueByLabels () {
197221
const { owner, repo, id, labels, clientID, clientSecret } = this.options
198222

199223
return axiosGithub.get(`/repos/${owner}/${repo}/issues`, {
@@ -220,6 +244,21 @@ class GitalkComponent extends Component {
220244
return issue
221245
})
222246
}
247+
getIssue () {
248+
const { number, issue } = this.options
249+
if (issue) {
250+
this.setState({ isNoInit: false })
251+
return Promise.resolve(issue)
252+
}
253+
254+
if (typeof number === 'number' && number > 0) {
255+
return this.getIssueById().then(resIssue => {
256+
if (!resIssue) return this.getIssueByLabels()
257+
return resIssue
258+
})
259+
}
260+
return this.getIssueByLabels()
261+
}
223262
createIssue () {
224263
const { owner, repo, title, body, id, labels, url } = this.options
225264
return axiosGithub.post(`/repos/${owner}/${repo}/issues`, {

0 commit comments

Comments
 (0)