File tree Expand file tree Collapse file tree 5 files changed +38
-9
lines changed Expand file tree Collapse file tree 5 files changed +38
-9
lines changed Original file line number Diff line number Diff line change @@ -41,7 +41,7 @@ export class WCOElementPage extends LitElement {
4141 }
4242 ` ;
4343
44- @property ( )
44+ @property ( { attribute : false } )
4545 elementData ?: ElementData ;
4646
4747 render ( ) {
Original file line number Diff line number Diff line change 1+ /**
2+ * @license
3+ * Copyright 2022 Google LLC
4+ * SPDX-License-Identifier: Apache-2.0
5+ */
6+
7+ import { renderElementPage } from './element.js' ;
8+ import { hydrate } from 'lit/experimental-hydrate.js' ;
9+
10+ const data = (
11+ window as unknown as { __ssrData : Parameters < typeof renderElementPage > }
12+ ) . __ssrData ;
13+ hydrate ( renderElementPage ( ...data ) , document . body ) ;
Original file line number Diff line number Diff line change 55 */
66
77import '../components/wco-element-page.js' ;
8+ import type { ElementData } from '../components/wco-element-page.js' ;
9+ import { html } from 'lit' ;
10+
11+ export const renderElementPage = ( elementData : ElementData ) =>
12+ html `< wco-element-page .elementData =${ elementData } > </ wco-element-page > ` ;
Original file line number Diff line number Diff line change 88import { render } from '@lit-labs/ssr/lib/render-with-global-dom-shim.js' ;
99
1010import { DefaultContext , DefaultState , ParameterizedContext } from 'koa' ;
11- import { html } from 'lit' ;
1211import { Readable } from 'stream' ;
1312import { gql } from '@apollo/client/core/index.js' ;
1413import Router from '@koa/router' ;
1514
16- import '@webcomponents/internal-site-client/lib/entrypoints/element.js' ;
15+ import { renderElementPage } from '@webcomponents/internal-site-client/lib/entrypoints/element.js' ;
1716import { renderPage } from '../../../templates/base.js' ;
1817import { client } from '../../graphql.js' ;
1918
@@ -96,12 +95,11 @@ export const handleElementRoute = async (
9695 renderPage ( {
9796 title : `${ packageName } /${ elementName } ` ,
9897 scripts : [ '/js/hydrate.js' , '/js/element.js' ] ,
99- // TODO (justinfagnani): If we want to hydrate, we need to serialize the
100- // initial data and embed in the response
101- content : render (
102- html `< wco-element-page .elementData =${ elementData } > </ wco-element-page > ` ,
103- { deferHydration : true }
104- ) ,
98+ initScript : '/js/element-hydrate.js' ,
99+ content : render ( renderElementPage ( elementData ) , { deferHydration : true } ) ,
100+ initialData : [
101+ elementData
102+ ] ,
105103 } )
106104 ) ;
107105} ;
Original file line number Diff line number Diff line change @@ -9,6 +9,8 @@ export function* renderPage(data: {
99 scripts ?: Array < string > ;
1010 title ?: string ;
1111 content : string | Iterable < string > ;
12+ initialData ?: object ;
13+ initScript ?: string ;
1214} ) {
1315 yield `<!doctype html>
1416<html lang="en">
@@ -58,6 +60,17 @@ export function* renderPage(data: {
5860 } else {
5961 yield * data . content ;
6062 }
63+
64+ if ( data . initialData !== undefined ) {
65+ yield `<script>window.__ssrData = ${ JSON . stringify (
66+ data . initialData
67+ ) . replace ( / < / g, '\\u003c' ) } </script>`;
68+ }
69+
70+ if ( data . initScript !== undefined ) {
71+ yield `<script type="module" src="${ data . initScript } "></script>` ;
72+ }
73+
6174 yield `
6275 </body>
6376</html>
You can’t perform that action at this time.
0 commit comments