Files
headlessui/packages/@headlessui-vue/src/test-utils/ssr.ts
T
Robin Malfait cc163ea458 Improve SSR of the Disclosure component (#2645)
* pre-calculate the buttonId/panelId on the server

* add simple-tabs example

* update changelog

* make Disclosure IDs stable between server/client
2023-08-03 16:31:45 +02:00

33 lines
848 B
TypeScript

import { createApp, createSSRApp, nextTick } from 'vue'
import { renderToString } from 'vue/server-renderer'
import { env } from '../utils/env'
export async function renderSSR(component: any, rootProps: any = {}) {
let container = document.createElement('div')
document.body.appendChild(container)
// Render on the server
env.set('server')
let app = createSSRApp(component, rootProps)
let contents = await renderToString(app)
container.innerHTML = contents
return {
contents,
async hydrate() {
let app = createApp(component, rootProps)
app.mount(container)
await nextTick()
return {
contents: container.innerHTML,
}
},
}
}
export async function renderHydrate(component: any, rootProps: any = {}) {
return renderSSR(component, rootProps).then(({ hydrate }) => hydrate())
}