Skip to content

Commit 010c8bf

Browse files
fix(client): fix RouteLink path resolve (#1512)
Co-authored-by: Xinyu Liu <[email protected]>
1 parent 6123376 commit 010c8bf

File tree

4 files changed

+66
-1
lines changed

4 files changed

+66
-1
lines changed

e2e/docs/components/route-link.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,18 @@
4747

4848
- <RouteLink to="/README.md"><span>text</span></RouteLink>
4949
- <RouteLink to="/README.md"><span>text</span><span>text</span></RouteLink>
50+
51+
### Hash and query
52+
53+
- <RouteLink to="/README.md#hash">text</RouteLink>
54+
- <RouteLink to="/README.md?query">text</RouteLink>
55+
- <RouteLink to="/README.md?query#hash">text</RouteLink>
56+
- <RouteLink to="/README.md?query=1#hash">text</RouteLink>
57+
- <RouteLink to="/README.md?query=1&query=2#hash">text</RouteLink>
58+
- <RouteLink to="/README.md#hash?query=1&query=2">text</RouteLink>
59+
- <RouteLink to="#hash">text</RouteLink>
60+
- <RouteLink to="?query">text</RouteLink>
61+
- <RouteLink to="?query#hash">text</RouteLink>
62+
- <RouteLink to="?query=1#hash">text</RouteLink>
63+
- <RouteLink to="?query=1&query=2#hash">text</RouteLink>
64+
- <RouteLink to="#hash?query=1&query=2">text</RouteLink>

e2e/tests/components/route-link.cy.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,25 @@ it('RouteLink', () => {
8484
})
8585
})
8686
})
87+
88+
const HASH_AND_QUERY_RESULTS = [
89+
`${E2E_BASE}#hash`,
90+
`${E2E_BASE}?query`,
91+
`${E2E_BASE}?query#hash`,
92+
`${E2E_BASE}?query=1#hash`,
93+
`${E2E_BASE}?query=1&query=2#hash`,
94+
`${E2E_BASE}#hash?query=1&query=2`,
95+
`#hash`,
96+
`?query`,
97+
`?query#hash`,
98+
`?query=1#hash`,
99+
`?query=1&query=2#hash`,
100+
`#hash?query=1&query=2`,
101+
]
102+
103+
cy.get(`.e2e-theme-content #hash-and-query + ul > li`).each((el, index) => {
104+
cy.wrap(el).within(() => {
105+
cy.get('a').should('have.attr', 'href', HASH_AND_QUERY_RESULTS[index])
106+
})
107+
})
87108
})

packages/client/src/components/RouteLink.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ export const RouteLink: FunctionalComponent<
6464
{ slots },
6565
) => {
6666
const router = useRouter()
67-
const path = withBase(resolveRoutePath(to))
67+
const resolvedPath = resolveRoutePath(to)
68+
69+
const path =
70+
// only anchor or query
71+
resolvedPath.startsWith('#') || resolvedPath.startsWith('?')
72+
? resolvedPath
73+
: withBase(resolvedPath)
6874

6975
return h(
7076
'a',

packages/shared/tests/normalizeRoutePath.spec.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,29 @@ const testCases = [
4242
['foo/bar.md', 'foo/bar.html'],
4343
['foo/bar.html', 'foo/bar.html'],
4444

45+
// hash and query
46+
['/foo#bar', '/foo.html#bar'],
47+
['/foo.md#bar', '/foo.html#bar'],
48+
['/foo.html#bar', '/foo.html#bar'],
49+
['/foo?bar=baz', '/foo.html?bar=baz'],
50+
['/foo.md?bar=baz', '/foo.html?bar=baz'],
51+
['/foo.html?bar=baz', '/foo.html?bar=baz'],
52+
['/foo?bar=baz#qux', '/foo.html?bar=baz#qux'],
53+
['/foo.md?bar=baz#qux', '/foo.html?bar=baz#qux'],
54+
['/foo.html?bar=baz#qux', '/foo.html?bar=baz#qux'],
55+
['foo#bar', 'foo.html#bar'],
56+
['foo.md#bar', 'foo.html#bar'],
57+
['foo.html#bar', 'foo.html#bar'],
58+
['foo?bar=baz', 'foo.html?bar=baz'],
59+
['foo.md?bar=baz', 'foo.html?bar=baz'],
60+
['foo.html?bar=baz', 'foo.html?bar=baz'],
61+
['foo?bar=baz#qux', 'foo.html?bar=baz#qux'],
62+
['foo.md?bar=baz#qux', 'foo.html?bar=baz#qux'],
63+
['foo.html?bar=baz#qux', 'foo.html?bar=baz#qux'],
64+
['#bar', '#bar'],
65+
['?bar=baz', '?bar=baz'],
66+
['?bar=baz#qux', '?bar=baz#qux'],
67+
4568
// unexpected corner cases
4669
['.md', '.html'],
4770
['foo/.md', 'foo/.html'],

0 commit comments

Comments
 (0)