mirror of
https://github.com/EnixCoda/Gitako.git
synced 2026-03-11 08:54:44 +00:00
refactor: switch listener in dispatch
Also disable listeners when gitako fail
This commit is contained in:
parent
d857537f64
commit
32c0b5f03c
2 changed files with 31 additions and 9 deletions
|
|
@ -23,6 +23,7 @@ class Gitako extends React.PureComponent<Props & ConnectorState> {
|
|||
compressSingletonFolder: true,
|
||||
copyFileButton: true,
|
||||
copySnippetButton: true,
|
||||
disabled: false,
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
|
|
@ -31,15 +32,13 @@ class Gitako extends React.PureComponent<Props & ConnectorState> {
|
|||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { onPJAXEnd, onKeyDown } = this.props
|
||||
window.addEventListener('pjax:complete', onPJAXEnd)
|
||||
window.addEventListener('keydown', onKeyDown)
|
||||
const { useListeners } = this.props
|
||||
useListeners(true)
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
const { onPJAXEnd, onKeyDown } = this.props
|
||||
window.removeEventListener('pjax:complete', onPJAXEnd)
|
||||
window.removeEventListener('keydown', onKeyDown)
|
||||
const { useListeners } = this.props
|
||||
useListeners(false)
|
||||
}
|
||||
|
||||
renderAccessDeniedError() {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import DOMHelper, { REPO_TYPE_PRIVATE } from 'utils/DOMHelper'
|
||||
import DOMHelper from 'utils/DOMHelper'
|
||||
import GitHubHelper, {
|
||||
NOT_FOUND,
|
||||
BAD_CREDENTIALS,
|
||||
|
|
@ -38,13 +38,15 @@ export type ConnectorState = {
|
|||
copyFileButton: boolean
|
||||
copySnippetButton: boolean
|
||||
logoContainerElement: Element | null
|
||||
disabled: boolean
|
||||
|
||||
init: () => void
|
||||
onPJAXEnd: () => void
|
||||
onKeyDown: (e: KeyboardEvent) => string
|
||||
toggleShowSideBar: () => void
|
||||
toggleShowSettings: () => void
|
||||
useListeners: (on: boolean) => void
|
||||
onAccessTokenChange: SettingsBar['props']['onAccessTokenChange']
|
||||
onKeyDown: (e: KeyboardEvent) => string
|
||||
onShortcutChange: SettingsBar['props']['onShortcutChange']
|
||||
setCopyFile: SettingsBar['props']['setCopyFile']
|
||||
setCopySnippet: SettingsBar['props']['setCopySnippet']
|
||||
|
|
@ -53,7 +55,10 @@ export type ConnectorState = {
|
|||
|
||||
const init: MethodCreator<Props, ConnectorState> = dispatch => async () => {
|
||||
try {
|
||||
if (!URLHelper.isInRepoPage()) return
|
||||
if (!URLHelper.isInRepoPage()) {
|
||||
dispatch.set({ disabled: true })
|
||||
return
|
||||
}
|
||||
dispatch.set({
|
||||
logoContainerElement: DOMHelper.insertLogoMountPoint(),
|
||||
})
|
||||
|
|
@ -146,6 +151,7 @@ const handleError: MethodCreator<Props, ConnectorState, [Error]> = dispatch => a
|
|||
dispatch.call(setShowSettings, true)
|
||||
dispatch.call(setShouldShow, true)
|
||||
} else {
|
||||
dispatch.call(useListeners, false)
|
||||
dispatch.call(setError, 'Gitako ate a bug, but it should recovery soon!')
|
||||
throw err
|
||||
}
|
||||
|
|
@ -240,6 +246,22 @@ const setCopySnippet: MethodCreator<
|
|||
[ConnectorState['copySnippetButton']]
|
||||
> = dispatch => copySnippetButton => dispatch.set({ copySnippetButton })
|
||||
|
||||
const useListeners: MethodCreator<Props, ConnectorState, [boolean]> = dispatch => {
|
||||
const $onPJAXEnd = dispatch.call.bind(dispatch, onPJAXEnd)
|
||||
const $onKeyDown = dispatch.call.bind(dispatch, onKeyDown)
|
||||
return on => {
|
||||
dispatch.get(({ disabled }, _) => {
|
||||
if (on && !disabled) {
|
||||
window.addEventListener('pjax:complete', $onPJAXEnd)
|
||||
window.addEventListener('keydown', $onKeyDown)
|
||||
} else {
|
||||
window.removeEventListener('pjax:complete', $onPJAXEnd)
|
||||
window.removeEventListener('keydown', $onKeyDown)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
init,
|
||||
onPJAXEnd,
|
||||
|
|
@ -256,4 +278,5 @@ export default {
|
|||
setCopySnippet,
|
||||
setError,
|
||||
handleError,
|
||||
useListeners,
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue