Revert "Revert "refactor: remove pjax listener""

This reverts commit 53906be1b1.
This commit is contained in:
EnixCoda 2019-11-19 10:51:31 +08:00
parent 3b8990e340
commit 23cb285d4a
No known key found for this signature in database
GPG key ID: FE06F5DFC1C9B8E4

View file

@ -11,6 +11,7 @@ import { SideBarCore } from 'driver/core'
import { ConnectorState, Props } from 'driver/core/SideBar'
import { oauth } from 'env'
import * as React from 'react'
import { useLocation } from 'react-use'
import { cx } from 'utils/cx'
import * as DOMHelper from 'utils/DOMHelper'
import { JSONRequest, parseURLSearch } from 'utils/general'
@ -56,19 +57,19 @@ const RawGitako: React.FC<Props & ConnectorState> = function RawGitako(props) {
DOMHelper.unmountTopProgressBar()
props.setMetaData({ ...props.metaData, ...URLHelper.parse() })
}, [props.disabled, props.metaData, configContext.val])
useOnPJAXComplete(updateMeta)
useOnLocationChange(updateMeta)
const attachCopyFileButton = React.useCallback(() => {
if (props.disabled) return
if (configContext.val.copyFileButton) return DOMHelper.attachCopyFileBtn()
}, [props.disabled, configContext.val.copyFileButton])
useOnPJAXComplete(attachCopyFileButton)
useOnLocationChange(attachCopyFileButton)
const attachCopySnippetButton = React.useCallback(() => {
if (props.disabled) return
if (configContext.val.copySnippetButton) return DOMHelper.attachCopySnippet()
}, [props.disabled, configContext.val.copySnippetButton])
useOnPJAXComplete(attachCopySnippetButton)
useOnLocationChange(attachCopySnippetButton)
React.useEffect(() => {
if (configContext.val.intelligentToggle === null) {
@ -143,20 +144,6 @@ RawGitako.defaultProps = {
export const SideBar = connect(SideBarCore)(RawGitako)
function useEvent<
T extends {
addEventListener: Function
removeEventListener: Function
}
>(target: T, event: string, callback: () => void, deps: React.DependencyList = []) {
React.useEffect(() => {
target.addEventListener(event, callback)
return () => target.removeEventListener(event, callback)
}, [callback, ...deps])
}
const useOnPJAXComplete = useEvent.bind(null, window, 'pjax:complete')
function renderAccessDeniedError() {
return (
<div className={'description'}>
@ -208,3 +195,10 @@ async function trySetUpAccessTokenWithCode() {
raiseError(err)
}
}
function useOnLocationChange(callback: () => void) {
const { href, pathname, search } = useLocation()
useDidUpdate(() => {
callback()
}, [href, pathname, search])
}