magic: added a way for running async functions in the top level jsx code

This commit is contained in:
2023-01-11 21:38:37 +01:00
parent 71280fba5c
commit fab8398a7a
8 changed files with 91 additions and 44 deletions
+11 -5
View File
@@ -1,20 +1,26 @@
import renderToString from 'preact-render-to-string'
// import { App } from './App'
import { MetadataContext, ServerContext } from './hooks'
import { ServerAsyncCallbacksContext, DatabaseContext, MetadataContext, ServerContext } from './hooks'
import { RenderedPage } from '../shared/ssr'
import { RenderedPage, ServerAsyncCallback } from '../shared/ssr'
import { App } from './App'
import { DatabaseConnection } from '../shared/database'
export default (url: string): RenderedPage => {
export default (url: string, db: DatabaseConnection): RenderedPage => {
const metadata = {}
const asyncCallbacks: ServerAsyncCallback[] = []
const html = renderToString(
<MetadataContext.Provider value={metadata}>
<ServerContext.Provider value={true}>
<App url={url} />
<DatabaseContext.Provider value={db}>
<ServerAsyncCallbacksContext.Provider value={asyncCallbacks}>
<App url={url} />
</ServerAsyncCallbacksContext.Provider>
</DatabaseContext.Provider>
</ServerContext.Provider>
</MetadataContext.Provider>
)
return { html, metadata }
return { html, metadata, asyncCallbacks }
}