1 | import { start } from './App'
|
2 | import State from './State'
|
3 |
|
4 | const componentWithState = (component, state) => {
|
5 | return Object.assign({}, component, {
|
6 | init: () => state.toObject()
|
7 | })
|
8 | }
|
9 |
|
10 | const componentToString = component => {
|
11 | const node = start(component)
|
12 |
|
13 | if (node.outerHTML) {
|
14 | return node.outerHTML
|
15 | } else {
|
16 | return node.toString()
|
17 | }
|
18 | }
|
19 |
|
20 | export function render (component, update) {
|
21 | if (typeof update === 'function') {
|
22 | return new Promise(resolve => {
|
23 | const initialState = new State(component.init())
|
24 |
|
25 | update(initialState, newState => {
|
26 | const newComponent = componentWithState(component, newState)
|
27 |
|
28 | resolve(componentToString(newComponent))
|
29 | })
|
30 | })
|
31 | } else {
|
32 | return componentToString(component)
|
33 | }
|
34 | }
|