diff --git a/e2e/solid-start/selective-ssr/src/routeTree.gen.ts b/e2e/solid-start/selective-ssr/src/routeTree.gen.ts index 423535df711..8352fa00572 100644 --- a/e2e/solid-start/selective-ssr/src/routeTree.gen.ts +++ b/e2e/solid-start/selective-ssr/src/routeTree.gen.ts @@ -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({ @@ -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', @@ -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 { @@ -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' @@ -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) diff --git a/e2e/solid-start/selective-ssr/src/routes/index.tsx b/e2e/solid-start/selective-ssr/src/routes/index.tsx index c0da00c2aa6..19cae9ab7bd 100644 --- a/e2e/solid-start/selective-ssr/src/routes/index.tsx +++ b/e2e/solid-start/selective-ssr/src/routes/index.tsx @@ -174,6 +174,42 @@ function Home() {
test count: {links.length}
+
+ + nested inherit ssr false + +
+
+ + nested inherit data only + +
{links}
) diff --git a/e2e/solid-start/selective-ssr/src/routes/posts.pending-data-only-component.tsx b/e2e/solid-start/selective-ssr/src/routes/posts.pending-data-only-component.tsx new file mode 100644 index 00000000000..35ff4ff7d49 --- /dev/null +++ b/e2e/solid-start/selective-ssr/src/routes/posts.pending-data-only-component.tsx @@ -0,0 +1,18 @@ +import { createFileRoute } from '@tanstack/solid-router' +import { createResource } from 'solid-js' + +function PendingDataOnlyComponent() { + const [value] = createResource(() => new Promise(() => {})) + + return
{value()}
+} + +export const Route = createFileRoute('/posts/pending-data-only-component')({ + pendingMs: 0, + pendingComponent: () => ( +
+ Pending data-only fallback +
+ ), + component: PendingDataOnlyComponent, +}) diff --git a/e2e/solid-start/selective-ssr/src/routes/posts.pending-inherit.tsx b/e2e/solid-start/selective-ssr/src/routes/posts.pending-inherit.tsx new file mode 100644 index 00000000000..f5e0c6d3e90 --- /dev/null +++ b/e2e/solid-start/selective-ssr/src/routes/posts.pending-inherit.tsx @@ -0,0 +1,12 @@ +import { createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/posts/pending-inherit')({ + pendingMs: 0, + pendingComponent: () => ( +
Pending inherit fallback
+ ), + loader: () => new Promise(() => {}), + component: () => ( +
Pending inherit route
+ ), +}) diff --git a/e2e/solid-start/selective-ssr/tests/app.spec.ts b/e2e/solid-start/selective-ssr/tests/app.spec.ts index aea216d5065..79408d644c0 100644 --- a/e2e/solid-start/selective-ssr/tests/app.spec.ts +++ b/e2e/solid-start/selective-ssr/tests/app.spec.ts @@ -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('/')