-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpullRequestsState.ts
More file actions
88 lines (82 loc) · 2.55 KB
/
pullRequestsState.ts
File metadata and controls
88 lines (82 loc) · 2.55 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
import { ExtensionContext, StatusBarItem, window, commands } from 'vscode'
import { Authorization } from './authorization'
import { StatusBar } from '../views/statusBar/statusBar'
import { StatusBarState } from './types'
import { ActivePullRequests } from '../models/activePullRequests'
import { Store } from './store'
import { Command } from './commands'
import { log } from './logger'
const MAX_ERROR_COUNT = 3
const module = 'pullRequestState.ts'
const DELAY_TIME = 30000 // 30 seconds
export const PullRequestState = {
update: async ({
context,
statusBar,
showLoading = false,
errorCount,
}: {
context: ExtensionContext
statusBar: StatusBarItem
showLoading?: boolean
errorCount: { count: number }
}) => {
const session = await Authorization.currentSession(context)
if (!session) {
StatusBar.update({ context, statusBar, state: StatusBarState.SignedOut })
return
}
if (showLoading)
StatusBar.update({ context, statusBar, state: StatusBarState.Loading })
log.info(
`updating pull requests for ${JSON.stringify(session.account)}`,
module
)
const codeReviews = await ActivePullRequests.get({
accessToken: session.accessToken,
context,
})
// if codeReviews contain error message
if (codeReviews.requireRelogin) {
log.error(codeReviews.error, module)
window.showInformationMessage(`PullFlow: Please login again`)
commands.executeCommand(Command.signOut)
return
}
if (codeReviews.error) {
errorCount.count = codeReviews.error ? errorCount.count + 1 : 0
if (errorCount.count >= MAX_ERROR_COUNT) {
StatusBar.update({ context, statusBar, state: StatusBarState.Error })
}
window.showErrorMessage(
`PullFlow: Couldn't fetch pull requests. ${codeReviews.error.message}`
)
return
}
await Store.set(context, {
pendingUserCodeReviews: codeReviews.data?.pending,
userAuthoredCodeReviews: codeReviews.data?.authored,
isFocused: window.state.focused,
...(window.state.focused
? { lastFocusedTime: new Date().getTime() }
: { lastFocusedTime: null }),
})
StatusBar.update({ context, statusBar, state: StatusBarState.SignedIn })
},
updateWithDelay: ({
context,
statusBar,
}: {
context: ExtensionContext
statusBar: StatusBarItem
}) => {
setTimeout(async () => {
await PullRequestState.update({
context,
statusBar,
showLoading: true,
errorCount: { count: 0 },
})
}, DELAY_TIME)
},
}