Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 56 additions & 3 deletions e2e/solid-start/selective-ssr/src/routeTree.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import { Route as rootRouteImport } from './routes/__root'
import { Route as PostsRouteImport } from './routes/posts'
import { Route as IndexRouteImport } from './routes/index'
import { Route as PostsPendingInheritRouteImport } from './routes/posts.pending-inherit'
import { Route as PostsPendingDataOnlyComponentRouteImport } from './routes/posts.pending-data-only-component'
import { Route as PostsPostIdRouteImport } from './routes/posts.$postId'

const PostsRoute = PostsRouteImport.update({
Expand All @@ -23,6 +25,17 @@ const IndexRoute = IndexRouteImport.update({
path: '/',
getParentRoute: () => rootRouteImport,
} as any)
const PostsPendingInheritRoute = PostsPendingInheritRouteImport.update({
id: '/pending-inherit',
path: '/pending-inherit',
getParentRoute: () => PostsRoute,
} as any)
const PostsPendingDataOnlyComponentRoute =
PostsPendingDataOnlyComponentRouteImport.update({
id: '/pending-data-only-component',
path: '/pending-data-only-component',
getParentRoute: () => PostsRoute,
} as any)
const PostsPostIdRoute = PostsPostIdRouteImport.update({
id: '/$postId',
path: '/$postId',
Expand All @@ -33,24 +46,46 @@ export interface FileRoutesByFullPath {
'/': typeof IndexRoute
'/posts': typeof PostsRouteWithChildren
'/posts/$postId': typeof PostsPostIdRoute
'/posts/pending-data-only-component': typeof PostsPendingDataOnlyComponentRoute
'/posts/pending-inherit': typeof PostsPendingInheritRoute
}
export interface FileRoutesByTo {
'/': typeof IndexRoute
'/posts': typeof PostsRouteWithChildren
'/posts/$postId': typeof PostsPostIdRoute
'/posts/pending-data-only-component': typeof PostsPendingDataOnlyComponentRoute
'/posts/pending-inherit': typeof PostsPendingInheritRoute
}
export interface FileRoutesById {
__root__: typeof rootRouteImport
'/': typeof IndexRoute
'/posts': typeof PostsRouteWithChildren
'/posts/$postId': typeof PostsPostIdRoute
'/posts/pending-data-only-component': typeof PostsPendingDataOnlyComponentRoute
'/posts/pending-inherit': typeof PostsPendingInheritRoute
}
export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
fullPaths: '/' | '/posts' | '/posts/$postId'
fullPaths:
| '/'
| '/posts'
| '/posts/$postId'
| '/posts/pending-data-only-component'
| '/posts/pending-inherit'
fileRoutesByTo: FileRoutesByTo
to: '/' | '/posts' | '/posts/$postId'
id: '__root__' | '/' | '/posts' | '/posts/$postId'
to:
| '/'
| '/posts'
| '/posts/$postId'
| '/posts/pending-data-only-component'
| '/posts/pending-inherit'
id:
| '__root__'
| '/'
| '/posts'
| '/posts/$postId'
| '/posts/pending-data-only-component'
| '/posts/pending-inherit'
fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
Expand All @@ -74,6 +109,20 @@ declare module '@tanstack/solid-router' {
preLoaderRoute: typeof IndexRouteImport
parentRoute: typeof rootRouteImport
}
'/posts/pending-inherit': {
id: '/posts/pending-inherit'
path: '/pending-inherit'
fullPath: '/posts/pending-inherit'
preLoaderRoute: typeof PostsPendingInheritRouteImport
parentRoute: typeof PostsRoute
}
'/posts/pending-data-only-component': {
id: '/posts/pending-data-only-component'
path: '/pending-data-only-component'
fullPath: '/posts/pending-data-only-component'
preLoaderRoute: typeof PostsPendingDataOnlyComponentRouteImport
parentRoute: typeof PostsRoute
}
'/posts/$postId': {
id: '/posts/$postId'
path: '/$postId'
Expand All @@ -86,10 +135,14 @@ declare module '@tanstack/solid-router' {

interface PostsRouteChildren {
PostsPostIdRoute: typeof PostsPostIdRoute
PostsPendingDataOnlyComponentRoute: typeof PostsPendingDataOnlyComponentRoute
PostsPendingInheritRoute: typeof PostsPendingInheritRoute
}

const PostsRouteChildren: PostsRouteChildren = {
PostsPostIdRoute: PostsPostIdRoute,
PostsPendingDataOnlyComponentRoute: PostsPendingDataOnlyComponentRoute,
PostsPendingInheritRoute: PostsPendingInheritRoute,
}

const PostsRouteWithChildren = PostsRoute._addFileChildren(PostsRouteChildren)
Expand Down
36 changes: 36 additions & 0 deletions e2e/solid-start/selective-ssr/src/routes/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,42 @@ function Home() {
<div>
test count: <b data-testid="test-count">{links.length}</b>
</div>
<div>
<Link
data-testid="nested-inherit-ssr-false-link"
to="/posts/pending-inherit"
search={{
root: {
ssr: true,
expected: { data: 'server', render: 'server-and-client' },
},
posts: {
ssr: false,
expected: { data: 'client', render: 'client-only' },
},
}}
>
nested inherit ssr false
</Link>
</div>
<div>
<Link
data-testid="nested-inherit-data-only-link"
to="/posts/pending-data-only-component"
search={{
root: {
ssr: true,
expected: { data: 'server', render: 'server-and-client' },
},
posts: {
ssr: 'data-only',
expected: { data: 'server', render: 'client-only' },
},
}}
>
nested inherit data only
</Link>
</div>
<div>{links}</div>
</>
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { createFileRoute } from '@tanstack/solid-router'
import { createResource } from 'solid-js'

function PendingDataOnlyComponent() {
const [value] = createResource(() => new Promise<string>(() => {}))

return <div data-testid="pending-data-only-route">{value()}</div>
}

export const Route = createFileRoute('/posts/pending-data-only-component')({
pendingMs: 0,
pendingComponent: () => (
<div data-testid="pending-data-only-fallback">
Pending data-only fallback
</div>
),
component: PendingDataOnlyComponent,
})
12 changes: 12 additions & 0 deletions e2e/solid-start/selective-ssr/src/routes/posts.pending-inherit.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { createFileRoute } from '@tanstack/solid-router'

export const Route = createFileRoute('/posts/pending-inherit')({
pendingMs: 0,
pendingComponent: () => (
<div data-testid="pending-inherit-fallback">Pending inherit fallback</div>
),
loader: () => new Promise<never>(() => {}),
component: () => (
<div data-testid="pending-inherit-route">Pending inherit route</div>
),
})
29 changes: 29 additions & 0 deletions e2e/solid-start/selective-ssr/tests/app.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,35 @@ test.describe('selective ssr', () => {
await expect(page.getByTestId('test-count')).toHaveText(`${testCount}`)
})

test('nested inherited ssr false shows pending fallback during client nav', async ({
page,
}) => {
await page.goto('/')

await expect(page.getByTestId('test-count')).toHaveText(`${testCount}`)

await page.getByTestId('nested-inherit-ssr-false-link').click()

await expect(page.getByTestId('posts-heading')).toContainText('posts')
await expect(page.getByTestId('router-status')).toContainText('pending')
await page.waitForTimeout(100)
await expect(page.getByTestId('pending-inherit-fallback')).toBeVisible()
})

test('nested inherited data-only shows pending fallback during client nav', async ({
page,
}) => {
await page.goto('/')

await expect(page.getByTestId('test-count')).toHaveText(`${testCount}`)

await page.getByTestId('nested-inherit-data-only-link').click()

await expect(page.getByTestId('posts-heading')).toContainText('posts')
await page.waitForTimeout(100)
await expect(page.getByTestId('pending-data-only-fallback')).toBeVisible()
})

for (let i = 0; i < testCount; i++) {
test(`run test ${i}`, async ({ page }) => {
await page.goto('/')
Expand Down
Loading