Skip to content

Commit bb51a1f

Browse files
committed
chore: rename pjax
1 parent ae3b7cc commit bb51a1f

26 files changed

+97
-79
lines changed

__tests__/cases/non-parallel/pjax.commits-page.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { expectToFind, expectToNotFind, sleep, waitForLegacyPJAXRedirect } from '../../utils'
1+
import { expectToFind, expectToNotFind, sleep, waitForRedirect } from '../../utils'
22

33
describe(`in Gitako project page`, () => {
44
beforeAll(() => page.goto('https://github.com/EnixCoda/Gitako/commits/develop'))
@@ -10,7 +10,7 @@ describe(`in Gitako project page`, () => {
1010
)
1111
if (commitLinks.length < 2) throw new Error(`No enough commits`)
1212
commitLinks[i].click()
13-
await waitForLegacyPJAXRedirect()
13+
await waitForRedirect()
1414
await expectToFind('div.commit')
1515
await sleep(1000)
1616

__tests__/cases/non-parallel/pjax.files-page.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { expectToFind, expectToNotFind, sleep, waitForLegacyPJAXRedirect } from '../../utils'
1+
import {
2+
expectToFind,
3+
expectToNotFind,
4+
sleep, waitForRedirect
5+
} from '../../utils'
26

37
describe(`in Gitako project page`, () => {
48
beforeAll(() => page.goto('https://github.com/EnixCoda/Gitako/tree/develop/src'))
@@ -9,7 +13,7 @@ describe(`in Gitako project page`, () => {
913
`.js-details-container div[role="row"] div[role="rowheader"] a[title*="."]`,
1014
)
1115
if (commitLinks.length < 2) throw new Error(`No enough files`)
12-
await waitForLegacyPJAXRedirect(async () => {
16+
await waitForRedirect(async () => {
1317
await commitLinks[i].click()
1418
})
1519
await expectToFind('table.js-file-line-container')

__tests__/cases/non-parallel/pjax.general.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ import {
33
expandFloatModeSidebar,
44
patientClick,
55
selectFileTreeItem,
6-
sleep,
7-
waitForLegacyPJAXRedirect,
6+
sleep, waitForRedirect
87
} from '../../utils'
98

109
describe(`in Gitako project page`, () => {
@@ -15,14 +14,14 @@ describe(`in Gitako project page`, () => {
1514

1615
await expandFloatModeSidebar()
1716
await patientClick(selectFileTreeItem('src/analytics.ts'))
18-
await waitForLegacyPJAXRedirect()
17+
await waitForRedirect()
1918
await collapseFloatModeSidebar()
2019

2120
await page.click('a[data-selected-links^="repo_issues "]')
22-
await waitForLegacyPJAXRedirect()
21+
await waitForRedirect()
2322

2423
await page.click('a[data-selected-links^="repo_pulls "]')
25-
await waitForLegacyPJAXRedirect()
24+
await waitForRedirect()
2625

2726
page.goBack()
2827
await sleep(1000)

__tests__/cases/non-parallel/pjax.internal.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import {
44
expectToNotFind,
55
patientClick,
66
selectFileTreeItem,
7-
sleep,
8-
waitForLegacyPJAXRedirect,
7+
sleep, waitForRedirect
98
} from '../../utils'
109

1110
describe(`in Gitako project page`, () => {
@@ -16,12 +15,12 @@ describe(`in Gitako project page`, () => {
1615

1716
await expandFloatModeSidebar()
1817
await patientClick(selectFileTreeItem('.babelrc'))
19-
await waitForLegacyPJAXRedirect()
18+
await waitForRedirect()
2019

2120
// The selector for file content
2221
await expectToFind('table.js-file-line-container')
2322

24-
await waitForLegacyPJAXRedirect(async () => {
23+
await waitForRedirect(async () => {
2524
await sleep(1000) // This prevents failing in some cases due to some mystery scheduling issue of puppeteer or jest
2625
page.goBack()
2726
})

__tests__/cases/non-parallel/project-page.gitako.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
expectToFind,
44
expectToNotFind,
55
scroll,
6-
selectFileTreeItem,
6+
selectFileTreeItem
77
} from '../../utils'
88

99
describe(`in Gitako project page`, () => {
@@ -28,7 +28,7 @@ describe(`in Gitako project page`, () => {
2828
const box = await filesEle?.boundingBox()
2929
if (box) {
3030
await page.mouse.move(box.x + 40, box.y + 40)
31-
await scroll({ totalDistance: 7000, stepDistance: 100 })
31+
await scroll({ totalDistance: 10000, stepDistance: 100 })
3232

3333
// node of tsconfig.json should be rendered now
3434
await expectToFind(selectFileTreeItem('tsconfig.json'))

__tests__/cases/parallel/expand-to-target.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { expectToFind, selectFileTreeItem, sleep, waitForLegacyPJAXRedirect } from '../../utils'
1+
import { expectToFind, selectFileTreeItem, sleep, waitForRedirect } from '../../utils'
22

33
describe(`in Gitako project page`, () => {
44
beforeAll(() => page.goto('https://github.com/EnixCoda/Gitako/tree/develop/src'))
55

6-
it('expand to target on load and after PJAX', async () => {
6+
it('expand to target on load and after redirect', async () => {
77
await sleep(3000)
88

99
// Expect Gitako sidebar to have expanded src to see contents
@@ -12,7 +12,7 @@ describe(`in Gitako project page`, () => {
1212
await page.click(
1313
`.js-details-container div[role="row"] div[role="rowheader"] [title="components"]`,
1414
)
15-
await waitForLegacyPJAXRedirect()
15+
await waitForRedirect()
1616

1717
// Expect Gitako sidebar to have expanded components and see contents
1818
await expectToFind(selectFileTreeItem('src/components/Gitako.tsx'))

__tests__/utils.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,24 @@ export async function waitForLegacyPJAXRedirect(action?: () => void | Promise<vo
7171
return promise
7272
}
7373

74+
export async function waitForTurboRedirect(action?: () => void | Promise<void>) {
75+
const promise = once('turbo:load', 'document')
76+
await action?.()
77+
return promise
78+
}
79+
80+
export async function waitForRedirect(action?: () => void | Promise<void>) {
81+
let fired = false
82+
const $action =
83+
action &&
84+
(() => {
85+
if (fired) return
86+
fired = true
87+
return action()
88+
})
89+
return Promise.race([waitForLegacyPJAXRedirect($action), waitForTurboRedirect($action)])
90+
}
91+
7492
export function selectFileTreeItem(path: string): string {
7593
return `.gitako-side-bar .files a[title="${path}"]`
7694
}

src/components/FileExplorer/Node.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export const Node = React.memo(function Node({
5252
title={node.path}
5353
target={node.type === 'commit' ? '_blank' : undefined}
5454
rel="noopener noreferrer"
55-
{...platform.delegatePJAXProps?.({ node })}
55+
{...platform.delegateFastRedirectAnchorProps?.({ node })}
5656
>
5757
<div className={'node-item-label'}>
5858
<NodeItemIcon node={node} open={expanded} loading={loading} />

src/components/FileExplorer/hooks/useHandleKeyDown.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from 'react'
22
import * as DOMHelper from 'utils/DOMHelper'
33
import { OperatingSystems, os } from 'utils/general'
4-
import { loadWithPJAX } from 'utils/hooks/usePJAX'
4+
import { loadWithFastRedirect } from 'utils/hooks/useFastRedirect'
55
import { VisibleNodes } from 'utils/VisibleNodesGenerator'
66
import { AlignMode } from '../useVirtualScroll'
77
import { VisibleNodesGeneratorMethods } from './useVisibleNodesGeneratorMethods'
@@ -100,7 +100,7 @@ export function useHandleKeyDown(
100100
} else if (focusedNode.type === 'blob') {
101101
const focusedNodeElement = DOMHelper.findNodeElement(focusedNode, event.currentTarget)
102102
if (focusedNodeElement && focusedNode.url)
103-
loadWithPJAX(focusedNode.url, focusedNodeElement)
103+
loadWithFastRedirect(focusedNode.url, focusedNodeElement)
104104
} else if (focusedNode.type === 'commit') {
105105
window.open(focusedNode.url)
106106
}
@@ -119,7 +119,7 @@ export function useHandleKeyDown(
119119
event.currentTarget,
120120
)
121121
if (focusedNodeElement && focusedNode.url)
122-
loadWithPJAX(focusedNode.url, focusedNodeElement)
122+
loadWithFastRedirect(focusedNode.url, focusedNodeElement)
123123
} else if (focusedNode.type === 'commit') {
124124
window.open(focusedNode.url)
125125
}

src/components/FileExplorer/hooks/useOnNodeClick.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useConfigs } from 'containers/ConfigsContext'
22
import * as React from 'react'
33
import { isOpenInNewWindowClick } from 'utils/general'
4-
import { loadWithPJAX } from 'utils/hooks/usePJAX'
4+
import { loadWithFastRedirect } from 'utils/hooks/useFastRedirect'
55
import { AlignMode } from '../useVirtualScroll'
66
import { VisibleNodesGeneratorMethods } from './useVisibleNodesGeneratorMethods'
77

@@ -35,7 +35,7 @@ export function useHandleNodeClick(
3535
const isHashLink = node.url.includes('#')
3636
if (!isHashLink) {
3737
event.preventDefault()
38-
loadWithPJAX(node.url, event.currentTarget)
38+
loadWithFastRedirect(node.url, event.currentTarget)
3939
}
4040
}
4141
break

src/components/FileExplorer/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import { usePrevious } from 'react-use'
99
import { cx } from 'utils/cx'
1010
import { run } from 'utils/general'
1111
import { useElementSize } from 'utils/hooks/useElementSize'
12+
import { useAfterRedirect } from 'utils/hooks/useFastRedirect'
1213
import { useLoadedContext } from 'utils/hooks/useLoadedContext'
1314
import { useOnLocationChange } from 'utils/hooks/useOnLocationChange'
14-
import { useOnPJAXDone } from 'utils/hooks/usePJAX'
1515
import { VisibleNodes, VisibleNodesGenerator } from 'utils/VisibleNodesGenerator'
1616
import { SideBarStateContext } from '../../containers/SideBarState'
1717
import { useFocusFileExplorerOnFirstRender } from './hooks/useFocusFileExplorerOnFirstRender'
@@ -161,7 +161,7 @@ function LoadedFileExplorer({
161161
}, [metaData.branchName, expandTo])
162162

163163
useOnLocationChange(goToCurrentItem)
164-
useOnPJAXDone(goToCurrentItem)
164+
useAfterRedirect(goToCurrentItem)
165165

166166
return (
167167
<div className={`file-explorer`} tabIndex={-1} onKeyDown={handleKeyDown}>

src/components/Gitako.tsx

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { ConfigsContextWrapper } from 'containers/ConfigsContext'
33
import { ReloadContextWrapper } from 'containers/ReloadContext'
44
import { InspectorContextWrapper } from 'containers/StateInspector'
55
import * as React from 'react'
6+
import { StyleSheetManager } from 'styled-components'
7+
import { insertMountPoint } from 'utils/DOMHelper'
68
import { ErrorBoundary } from '../containers/ErrorBoundary'
79
import { StateBarErrorContextWrapper } from '../containers/ErrorContext'
810
import { OAuthWrapper } from '../containers/OAuthWrapper'
@@ -12,21 +14,23 @@ import { StateBarStateContextWrapper } from '../containers/SideBarState'
1214
export function Gitako() {
1315
return (
1416
<InspectorContextWrapper>
15-
<ReloadContextWrapper>
16-
<ErrorBoundary>
17-
<ConfigsContextWrapper>
18-
<StateBarStateContextWrapper>
19-
<StateBarErrorContextWrapper>
20-
<OAuthWrapper>
21-
<RepoContextWrapper>
22-
<SideBar />
23-
</RepoContextWrapper>
24-
</OAuthWrapper>
25-
</StateBarErrorContextWrapper>
26-
</StateBarStateContextWrapper>
27-
</ConfigsContextWrapper>
28-
</ErrorBoundary>
29-
</ReloadContextWrapper>
17+
<StyleSheetManager target={insertMountPoint()}>
18+
<ReloadContextWrapper>
19+
<ErrorBoundary>
20+
<ConfigsContextWrapper>
21+
<StateBarStateContextWrapper>
22+
<StateBarErrorContextWrapper>
23+
<OAuthWrapper>
24+
<RepoContextWrapper>
25+
<SideBar />
26+
</RepoContextWrapper>
27+
</OAuthWrapper>
28+
</StateBarErrorContextWrapper>
29+
</StateBarStateContextWrapper>
30+
</ConfigsContextWrapper>
31+
</ErrorBoundary>
32+
</ReloadContextWrapper>
33+
</StyleSheetManager>
3034
</InspectorContextWrapper>
3135
)
3236
}

src/components/MetaBar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function MetaBar() {
2121
className={'repo-name'}
2222
href={repoUrl}
2323
onClick={createAnchorClickHandler(repoUrl)}
24-
{...platform.delegatePJAXProps?.()}
24+
{...platform.delegateFastRedirectAnchorProps?.()}
2525
>
2626
<Text fontWeight="bolder">{repoName}</Text>
2727
</Breadcrumbs.Item>
@@ -37,7 +37,7 @@ export function MetaBar() {
3737
sx={{
3838
color: 'fg.muted',
3939
}}
40-
{...platform.delegatePJAXProps?.()}
40+
{...platform.delegateFastRedirectAnchorProps?.()}
4141
>
4242
{branchName || '...'}
4343
</BranchName>

src/components/SideBar.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import * as DOMHelper from 'utils/DOMHelper'
1616
import * as features from 'utils/features'
1717
import { detectBrowser } from 'utils/general'
1818
import { useConditionalHook } from 'utils/hooks/useConditionalHook'
19+
import { useAfterRedirect, usePJAXAPI } from 'utils/hooks/useFastRedirect'
1920
import { useLoadedContext } from 'utils/hooks/useLoadedContext'
20-
import { useOnPJAXDone, usePJAX } from 'utils/hooks/usePJAX'
2121
import { ResizeState } from 'utils/hooks/useResizeHandler'
2222
import * as keyHelper from 'utils/keyHelper'
2323
import { SideBarErrorContext } from '../containers/ErrorContext'
@@ -29,7 +29,7 @@ import { SettingsBarContent } from './settings/SettingsBar'
2929
import { SideBarResizeHandler } from './SideBarResizeHandler'
3030

3131
export function SideBar() {
32-
usePJAX()
32+
usePJAXAPI()
3333
platform.usePlatformHooks?.()
3434
useMarkGitakoReadyState()
3535

@@ -198,9 +198,9 @@ function useGetDerivedExpansion() {
198198
)
199199
}
200200

201-
function useUpdateBodyIndentOnPJAXDone(update: (shouldExpand: boolean) => void) {
201+
function useUpdateBodyIndentAfterRedirect(update: (shouldExpand: boolean) => void) {
202202
const { intelligentToggle, sidebarToggleMode } = useConfigs().value
203-
useOnPJAXDone(
203+
useAfterRedirect(
204204
React.useCallback(() => {
205205
// check and update expand state if pinned and auto-expand checked
206206
if (sidebarToggleMode === 'persistent') {
@@ -266,7 +266,7 @@ function useShouldExpand() {
266266

267267
useSaveExpandStateOnToggle(shouldExpand)
268268
useUpdateBodyIndentOnStateUpdate(shouldExpand)
269-
useUpdateBodyIndentOnPJAXDone(setShouldExpand)
269+
useUpdateBodyIndentAfterRedirect(setShouldExpand)
270270
useToggleSideBarWithKeyboard(toggleShowSideBar)
271271
useCollapseOnNoPermissionWhenTokenHasBeenSet(setShouldExpand)
272272

src/components/SideBarResizeHandler.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as React from 'react'
33
import { useDebounce, useWindowSize } from 'react-use'
44
import { getDefaultConfigs } from 'utils/config/helper'
55
import * as DOMHelper from 'utils/DOMHelper'
6-
import { useOnPJAXDone } from 'utils/hooks/usePJAX'
6+
import { useAfterRedirect } from 'utils/hooks/useFastRedirect'
77
import { ResizeHandler } from './ResizeHandler'
88
import { Size, Size2D } from './Size'
99

@@ -37,7 +37,7 @@ function useSidebarWidth() {
3737
React.useLayoutEffect(() => DOMHelper.setGitakoWidthCSSVariable(width), [width])
3838

3939
// Keep variable when directing from PR to repo home via meta bar
40-
useOnPJAXDone(React.useCallback(() => DOMHelper.setGitakoWidthCSSVariable(width), [width]))
40+
useAfterRedirect(React.useCallback(() => DOMHelper.setGitakoWidthCSSVariable(width), [width]))
4141

4242
return [width, setWidth] as const
4343
}

src/containers/RepoContext.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { useConfigs } from 'containers/ConfigsContext'
22
import { platform } from 'platforms'
33
import * as React from 'react'
44
import { useEffectOnSerializableUpdates } from 'utils/hooks/useEffectOnSerializableUpdates'
5+
import { useAfterRedirect } from 'utils/hooks/useFastRedirect'
56
import { useLoadedContext } from 'utils/hooks/useLoadedContext'
6-
import { useOnPJAXDone } from 'utils/hooks/usePJAX'
77
import { useStateIO } from 'utils/hooks/useStateIO'
88
import { useCatchNetworkError } from '../utils/hooks/useCatchNetworkError'
99
import { SideBarStateContext } from './SideBarState'
@@ -47,7 +47,7 @@ function usePartialMetaData(): PartialMetaData | null {
4747
React.useEffect(() => {
4848
if (!isGettingAccessToken) setPartialMetaData()
4949
}, [isGettingAccessToken, setPartialMetaData])
50-
useOnPJAXDone(setPartialMetaData)
50+
useAfterRedirect(setPartialMetaData)
5151
useEffectOnSerializableUpdates(
5252
$partialMetaData.value,
5353
JSON.stringify,
@@ -64,7 +64,7 @@ function usePartialMetaData(): PartialMetaData | null {
6464
function useBranchName(): MetaData['branchName'] | null {
6565
// sync along URL and DOM
6666
const $branchName = useStateIO(() => platform.resolvePartialMetaData()?.branchName || null)
67-
useOnPJAXDone(() => $branchName.onChange(platform.resolvePartialMetaData()?.branchName || null))
67+
useAfterRedirect(() => $branchName.onChange(platform.resolvePartialMetaData()?.branchName || null))
6868
return $branchName.value
6969
}
7070

src/platforms/GitHub/API.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,7 @@ export async function getPullPageDocuments(
149149
// Response of this API contains view of few files but is not complete.
150150
return continuousLoadPages(
151151
document ||
152-
(await getDOM(
153-
`${window.location.origin}/${userName}/${repoName}/pull/${pullId}/files?_pjax=%23js-repo-pjax-container`,
154-
)),
152+
(await getDOM(`${window.location.origin}/${userName}/${repoName}/pull/${pullId}/files`)),
155153
)
156154
}
157155

0 commit comments

Comments
 (0)