1
1
import {
2
2
destroy ,
3
3
registerDestructor ,
4
- Destructors ,
5
4
destroySync ,
6
5
} from '@/utils/glimmer/destroyable' ;
7
6
import type {
@@ -36,7 +35,8 @@ import {
36
35
RENDERING_CONTEXT ,
37
36
cleanupFastContext ,
38
37
} from './context' ;
39
- import { cellToText , createRoot , MergedCell } from '.' ;
38
+ import { createRoot , MergedCell } from '.' ;
39
+ import { opcodeFor } from './vm' ;
40
40
41
41
export type ComponentRenderTarget =
42
42
| Element
@@ -91,13 +91,14 @@ export function renderElement(
91
91
// el.ctx![RENDERED_NODES_PROPERTY].reverse();
92
92
} else if ( isFn ( el ) ) {
93
93
// @ts -expect-error
94
- renderElement ( api , ctx , target , resolveRenderable ( el ) , placeholder ) ;
94
+ renderElement ( api , ctx , target , resolveRenderable ( el ) , placeholder , skipRegistration ) ;
95
95
} else if ( isTagLike ( el ) ) {
96
- const destructors : Destructors = [ ] ;
97
- const node = cellToText ( api , el , destructors ) ;
96
+ const node = api . text ( '' ) ;
98
97
ctx [ RENDERED_NODES_PROPERTY ] . push ( node ) ;
99
98
api . insert ( target , node , placeholder ) ;
100
- registerDestructor ( ctx , ...destructors ) ;
99
+ registerDestructor ( ctx , opcodeFor ( el , ( value ) => {
100
+ api . textContent ( node , String ( value ?? '' ) ) ;
101
+ } ) ) ;
101
102
} else {
102
103
throw new Error ( `Unknown element type ${ el } ` ) ;
103
104
}
@@ -110,11 +111,16 @@ export function renderElement(
110
111
111
112
export function renderComponent (
112
113
component : typeof Component < any > ,
113
- componentArgs : Record < string , unknown > ,
114
- target : ComponentRenderTarget ,
115
- appRoot : Root | Component < any > = createRoot ( ) ,
116
- skipRoot ?: boolean ,
114
+ params : {
115
+ owner ?: Root ;
116
+ args ?: Record < string , unknown > ;
117
+ element ?: ComponentRenderTarget ;
118
+ } = { } ,
117
119
) : ComponentReturnType {
120
+ const appRoot = params . owner ?? createRoot ( ) ;
121
+ const target = params . element ?? document . body ;
122
+ const componentArgs = params . args ?? { } ;
123
+
118
124
if ( import . meta. env . DEV ) {
119
125
if ( target === undefined ) {
120
126
throw new Error ( `Trying to render undefined` ) ;
@@ -123,15 +129,13 @@ export function renderComponent(
123
129
cleanupFastContext ( ) ;
124
130
const targetElement = targetFor ( target ) ;
125
131
126
- if ( ! skipRoot ) {
127
- if ( ! initDOM ( appRoot ) ) {
128
- // setting default dom api
129
- provideContext (
130
- appRoot ,
131
- RENDERING_CONTEXT ,
132
- new HTMLBrowserDOMApi ( ( appRoot as Root ) . document ) ,
133
- ) ;
134
- }
132
+ if ( ! initDOM ( appRoot ) ) {
133
+ // setting default dom api
134
+ provideContext (
135
+ appRoot ,
136
+ RENDERING_CONTEXT ,
137
+ new HTMLBrowserDOMApi ( ( appRoot as Root ) . document ) ,
138
+ ) ;
135
139
}
136
140
137
141
const args = {
0 commit comments