From 53906be1b150374e04b19b6b7800f6ee832ebccd Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Tue, 19 Nov 2019 10:13:27 +0800 Subject: [PATCH] Revert "refactor: remove pjax listener" This reverts commit aca84b3b2b2d0aa4f527ab2f114a6f3e15ae40fb. --- src/components/SideBar.tsx | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/components/SideBar.tsx b/src/components/SideBar.tsx index 4b41aac..48b8865 100644 --- a/src/components/SideBar.tsx +++ b/src/components/SideBar.tsx @@ -11,7 +11,6 @@ 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' @@ -57,19 +56,19 @@ const RawGitako: React.FC = function RawGitako(props) { DOMHelper.unmountTopProgressBar() props.setMetaData({ ...props.metaData, ...URLHelper.parse() }) }, [props.disabled, props.metaData, configContext.val]) - useOnLocationChange(updateMeta) + useOnPJAXComplete(updateMeta) const attachCopyFileButton = React.useCallback(() => { if (props.disabled) return if (configContext.val.copyFileButton) return DOMHelper.attachCopyFileBtn() }, [props.disabled, configContext.val.copyFileButton]) - useOnLocationChange(attachCopyFileButton) + useOnPJAXComplete(attachCopyFileButton) const attachCopySnippetButton = React.useCallback(() => { if (props.disabled) return if (configContext.val.copySnippetButton) return DOMHelper.attachCopySnippet() }, [props.disabled, configContext.val.copySnippetButton]) - useOnLocationChange(attachCopySnippetButton) + useOnPJAXComplete(attachCopySnippetButton) React.useEffect(() => { if (configContext.val.intelligentToggle === null) { @@ -144,6 +143,20 @@ 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 (
@@ -195,10 +208,3 @@ async function trySetUpAccessTokenWithCode() { raiseError(err) } } - -function useOnLocationChange(callback: () => void) { - const { href, pathname, search } = useLocation() - useDidUpdate(() => { - callback() - }, [href, pathname, search]) -}