Skip to content

Commit 55cfe54

Browse files
committed
Fix the most specific matching route when using pathless routes.
1 parent e89d57c commit 55cfe54

3 files changed

Lines changed: 256 additions & 106 deletions

File tree

packages/ra-router-tanstack/src/tanStackRouterProvider.spec.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
QueryParameters,
2626
PathlessLayoutRoutes,
2727
NestedResourcesPrecedence,
28+
PathlessLayoutRoutesPriority,
2829
} from './tanStackRouterProvider.stories';
2930
import { tanStackRouterProvider } from './tanStackRouterProvider';
3031

@@ -1479,6 +1480,30 @@ describe('tanStackRouterProvider', () => {
14791480
expect(screen.getByTestId('comments-page')).toBeInTheDocument();
14801481
});
14811482
});
1483+
1484+
it('should match the most specific layout route within pathless layout routes', async () => {
1485+
window.location.hash = '#/posts';
1486+
1487+
render(<PathlessLayoutRoutesPriority />);
1488+
1489+
await waitFor(() => {
1490+
expect(screen.getByTestId('posts-page')).toBeInTheDocument();
1491+
});
1492+
1493+
fireEvent.click(screen.getByText('User'));
1494+
1495+
await waitFor(() => {
1496+
expect(screen.getByTestId('users-page')).toBeInTheDocument();
1497+
});
1498+
1499+
fireEvent.click(screen.getByText('Block a user'));
1500+
1501+
await waitFor(() => {
1502+
expect(
1503+
screen.getByTestId('block-user-page')
1504+
).toBeInTheDocument();
1505+
});
1506+
});
14821507
});
14831508

14841509
describe('Resource Children (Route as children of Resource)', () => {

packages/ra-router-tanstack/src/tanStackRouterProvider.stories.tsx

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,3 +1481,107 @@ export const PathlessLayoutRoutes = () => {
14811481
</RouterProviderContext.Provider>
14821482
);
14831483
};
1484+
1485+
export const PathlessLayoutRoutesPriority = () => {
1486+
const { RouterWrapper } = tanStackRouterProvider;
1487+
1488+
return (
1489+
<RouterProviderContext.Provider value={tanStackRouterProvider}>
1490+
<RouterWrapper>
1491+
<div data-testid="layout-wrapper">
1492+
<nav>
1493+
<LinkBase to="/posts" style={{ marginRight: 10 }}>
1494+
Posts
1495+
</LinkBase>
1496+
<LinkBase to="/comments" style={{ marginRight: 10 }}>
1497+
Comments
1498+
</LinkBase>
1499+
<LinkBase
1500+
to="/users/john_doe"
1501+
style={{ marginRight: 10 }}
1502+
>
1503+
User
1504+
</LinkBase>
1505+
<LinkBase
1506+
to="/users/jane_doe/block"
1507+
style={{ marginRight: 10 }}
1508+
>
1509+
Block a user
1510+
</LinkBase>
1511+
</nav>
1512+
<div
1513+
style={{
1514+
border: '2px solid blue',
1515+
padding: 20,
1516+
marginTop: 10,
1517+
}}
1518+
>
1519+
<Routes>
1520+
<Route
1521+
path="/posts"
1522+
element={
1523+
<div data-testid="posts-page">
1524+
Posts Page
1525+
</div>
1526+
}
1527+
/>
1528+
<Route
1529+
path="/comments"
1530+
element={
1531+
<div data-testid="comments-page">
1532+
Comments Page
1533+
</div>
1534+
}
1535+
/>
1536+
<Route
1537+
element={
1538+
<div
1539+
style={{
1540+
border: '2px solid green',
1541+
padding: 20,
1542+
marginTop: 10,
1543+
}}
1544+
>
1545+
<RouterOutlet />
1546+
</div>
1547+
}
1548+
>
1549+
<Route
1550+
path="/users/*"
1551+
element={
1552+
<div data-testid="users-page">
1553+
Users View
1554+
</div>
1555+
}
1556+
/>
1557+
</Route>
1558+
<Route
1559+
element={
1560+
<div
1561+
style={{
1562+
border: '2px solid red',
1563+
padding: 20,
1564+
marginTop: 10,
1565+
}}
1566+
>
1567+
<RouterOutlet />
1568+
</div>
1569+
}
1570+
>
1571+
<Route
1572+
path="/users/:username/block"
1573+
element={
1574+
<div data-testid="block-user-page">
1575+
Block a user
1576+
</div>
1577+
}
1578+
/>
1579+
</Route>
1580+
</Routes>
1581+
</div>
1582+
</div>
1583+
<LocationDisplay />
1584+
</RouterWrapper>
1585+
</RouterProviderContext.Provider>
1586+
);
1587+
};

0 commit comments

Comments
 (0)