Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,4 @@ gpt/db.json

vite.config.js.timestamp-*
vite.config.ts.timestamp-*
.idea
1 change: 1 addition & 0 deletions examples/react/vinxi-basic-ssr-streaming/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ dist-ssr
*.local
.vinxi
.output
.idea
21 changes: 16 additions & 5 deletions examples/react/vinxi-basic-ssr-streaming/app.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,38 @@ export default createApp({
routers: [
{
name: 'public',
mode: 'static',
type: 'static',
dir: './public',
base: '/',
},
{
name: 'ssr',
mode: 'handler',
type: 'http',
middleware: './app/middleware.tsx',
handler: './app/server.tsx',
target: 'server',
plugins: () => [reactRefresh(), TanStackRouterVite()],
plugins: () => [
TanStackRouterVite({
experimental: {
enableCodeSplitting: true,
},
}),
reactRefresh(),
],
},
{
name: 'client',
mode: 'build',
type: 'client',
handler: './app/client.tsx',
target: 'browser',
plugins: () => [
serverFunctions.client(),
TanStackRouterVite({
experimental: {
enableCodeSplitting: true,
},
}),
reactRefresh(),
TanStackRouterVite(),
],
base: '/_build',
},
Expand Down
34 changes: 6 additions & 28 deletions examples/react/vinxi-basic-ssr-streaming/app/client.tsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,13 @@
/// <reference types="vinxi/types/client" />
import React from 'react'
import { Root, hydrateRoot } from 'react-dom/client'
import { hydrateRoot } from 'react-dom/client'
import 'vinxi/client'

import { createRouter } from './router'
import { StartClient } from '@tanstack/react-router-server/client'
import { StartClient } from '@tanstack/react-router-server'

render()
const router = createRouter()

function render(mod?: any) {
const router = createRouter()
const app = <StartClient router={router} />

const app = <StartClient router={router} />

if (!mod) {
window.$root = hydrateRoot(document, app)
} else {
window.$root?.render(app)
}
}

if (import.meta.hot) {
import.meta.hot.accept((mod) => {
if (mod) {
render(mod)
}
})
}

declare global {
interface Window {
$root?: Root
}
}
router.hydrate()
hydrateRoot(document, app)
29 changes: 12 additions & 17 deletions examples/react/vinxi-basic-ssr-streaming/app/routeTree.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,30 @@

// This file is auto-generated by TanStack Router

import { createFileRoute } from '@tanstack/react-router'

// Import Routes

import { Route as rootRoute } from './routes/__root'
import { Route as TestImport } from './routes/test'
import { Route as NoTitleImport } from './routes/no-title'
import { Route as HelloImport } from './routes/hello'
import { Route as IndexImport } from './routes/index'

// Create Virtual Routes

const NoTitleLazyImport = createFileRoute('/no-title')()

// Create/Update Routes

const NoTitleLazyRoute = NoTitleLazyImport.update({
path: '/no-title',
getParentRoute: () => rootRoute,
} as any).lazy(() => import('./routes/no-title.lazy').then((d) => d.Route))

const TestRoute = TestImport.update({
path: '/test',
getParentRoute: () => rootRoute,
} as any)

const NoTitleRoute = NoTitleImport.update({
path: '/no-title',
getParentRoute: () => rootRoute,
} as any)

const HelloRoute = HelloImport.update({
path: '/hello',
getParentRoute: () => rootRoute,
} as any).lazy(() => import('./routes/hello.lazy').then((d) => d.Route))
} as any)

const IndexRoute = IndexImport.update({
path: '/',
Expand All @@ -55,12 +50,12 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof HelloImport
parentRoute: typeof rootRoute
}
'/test': {
preLoaderRoute: typeof TestImport
'/no-title': {
preLoaderRoute: typeof NoTitleImport
parentRoute: typeof rootRoute
}
'/no-title': {
preLoaderRoute: typeof NoTitleLazyImport
'/test': {
preLoaderRoute: typeof TestImport
parentRoute: typeof rootRoute
}
}
Expand All @@ -71,8 +66,8 @@ declare module '@tanstack/react-router' {
export const routeTree = rootRoute.addChildren([
IndexRoute,
HelloRoute,
NoTitleRoute,
TestRoute,
NoTitleLazyRoute,
])

/* prettier-ignore-end */
23 changes: 20 additions & 3 deletions examples/react/vinxi-basic-ssr-streaming/app/router.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,35 @@
import { createRouter as createReactRouter } from '@tanstack/react-router'
import { createRouter as createTanStackRouter } from '@tanstack/react-router'
import { routeTree } from './routeTree.gen'

export function createRouter() {
return createReactRouter({
const router = createTanStackRouter({
routeTree,
defaultPreload: 'intent',
defaultStaleTime: 1,
context: {
assets: null as any, // We'll fulfill this later
assets: [],
},
dehydrate: (() => {
return {
assets: router.options.context.assets,
}
}) as any,
hydrate: (data) => {
router.options.context.assets = data.assets
},
})
return router
}

declare module '@tanstack/react-router' {
interface Register {
router: ReturnType<typeof createRouter>
}
interface StaticDataRouteOption {
baseParent?: boolean
}

interface RouterState {
statusCode: number
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
import * as React from 'react'
import {
createRootRouteWithContext,
Link,
Outlet,
createRootRouteWithContext,
useRouter,
} from '@tanstack/react-router'
import { TanStackRouterDevtools } from '@tanstack/router-devtools'
import { Meta, Scripts } from '@tanstack/react-router-server/client'

import '../style.css'

export const Route = createRootRouteWithContext<{
assets: React.ReactNode
}>()({
Expand All @@ -34,8 +31,6 @@ export const Route = createRootRouteWithContext<{
})

function RootComponent() {
const router = useRouter()

return (
<html lang="en">
<head>
Expand Down
20 changes: 0 additions & 20 deletions examples/react/vinxi-basic-ssr-streaming/app/routes/hello.lazy.tsx

This file was deleted.

18 changes: 17 additions & 1 deletion examples/react/vinxi-basic-ssr-streaming/app/routes/hello.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { createFileRoute, defer } from '@tanstack/react-router'
import * as React from 'react'
import { createFileRoute, defer, Await } from '@tanstack/react-router'

async function getData() {
'use server'
Expand Down Expand Up @@ -36,4 +37,19 @@ export const Route = createFileRoute('/hello')({
content: `Hello ${ctx.loaderData.data}`,
},
],
component: Hello,
})

function Hello() {
const { data, slowData } = Route.useLoaderData()

return (
<div className="p-2">
<p>Hello from the client!</p>
<p>{data}</p>
<React.Suspense fallback={<p>Loading...</p>}>
<Await promise={slowData}>{(slowData) => <p>{slowData}</p>}</Await>
</React.Suspense>
</div>
)
}

This file was deleted.

30 changes: 30 additions & 0 deletions examples/react/vinxi-basic-ssr-streaming/app/routes/no-title.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import * as React from 'react'
import { createFileRoute } from '@tanstack/react-router'

async function action() {
'use server'
console.log('hola from the server')
return new Promise<string>((r) => {
setTimeout(() => r('Server says hello, too!'), 500)
})
}

export const Route = createFileRoute('/no-title')({
component: NoTitle,
})

function NoTitle() {
const [hola, setHola] = React.useState('')
React.useEffect(() => {
action().then((h) => {
setHola(h)
})
}, [])
return (
<div>
{hola}
<h1>Hello!</h1>
<p>This page has no title.</p>
</div>
)
}
Loading