diff --git a/src/components/SideBar.tsx b/src/components/SideBar.tsx index c1c4ea5..cf022e9 100644 --- a/src/components/SideBar.tsx +++ b/src/components/SideBar.tsx @@ -15,6 +15,7 @@ import { cx } from 'utils/cx' import { parseURLSearch, run } from 'utils/general' import { loadWithPJAX, useOnPJAXDone, usePJAX } from 'utils/hooks/usePJAX' import { useProgressBar } from 'utils/hooks/useProgressBar' +import { useStateIO } from 'utils/hooks/useStateIO' import * as keyHelper from 'utils/keyHelper' import { Icon } from './Icon' import { LoadingIndicator } from './LoadingIndicator' @@ -47,9 +48,14 @@ const RawGitako: React.FC = function RawGitako(props) { }) }, []) + /** + * Catch unexpected PJAX, force trigger init on scope change. + */ + const pageScope = useStateIO(platform.resolvePageScope?.()) + useOnPJAXDone(() => pageScope.onChange(platform.resolvePageScope?.())) React.useEffect(() => { props.init() - }, [accessToken]) + }, [accessToken, pageScope.value]) React.useEffect( function attachKeyDown() { diff --git a/src/platforms/GitHub/index.ts b/src/platforms/GitHub/index.ts index 0cb8037..674a41f 100644 --- a/src/platforms/GitHub/index.ts +++ b/src/platforms/GitHub/index.ts @@ -118,6 +118,11 @@ export const GitHub: Platform = { } return metaData }, + resolvePageScope() { + if (URLHelper.parse().type === 'releases') return 'releases' + if (URLHelper.isInPullPage()) return 'pull' + return 'general' + }, async getDefaultBranchName({ userName, repoName }, accessToken) { const data = await API.getRepoMeta(userName, repoName, accessToken) return data.default_branch diff --git a/src/platforms/platform.d.ts b/src/platforms/platform.d.ts index 480e555..12cd2a6 100644 --- a/src/platforms/platform.d.ts +++ b/src/platforms/platform.d.ts @@ -2,6 +2,7 @@ type Platform = { isEnterprise(): boolean // branch name might not be available when resolving from DOM and URL resolveMeta(): MakeOptional | null + resolvePageScope?(): string getDefaultBranchName( metaData: Pick, accessToken?: string,