@@ -307,14 +307,51 @@ class DeltaUpdates extends Base {
307307 this . checkRendererAvailability ( ) ;
308308
309309 let { render} = Neo . main ,
310- parentNode = DomAccess . getElementOrBody ( parentId ) ;
310+ parentNode = DomAccess . getElement ( parentId ) ,
311+ siblingRef ;
312+
313+ // 1. Resolve Target Parent & Sibling
314+ if ( ! parentNode ) {
315+ const startNode = this . getFragmentStart ( parentId ) ;
316+ if ( startNode ) {
317+ parentNode = startNode . parentNode ;
318+ siblingRef = this . getFragmentSibling ( startNode , index )
319+ }
320+ } else {
321+ siblingRef = parentNode . childNodes [ index ]
322+ }
311323
312324 if ( parentNode ) {
325+ let newNode ;
326+
313327 if ( NeoConfig . useDomApiRenderer ) {
314- render . DomApiRenderer . createDomTree ( { index, isRoot : true , parentNode, vnode} )
328+ newNode = render . DomApiRenderer . createDomTree ( {
329+ index : - 1 ,
330+ isRoot : true ,
331+ parentNode : null , // detached
332+ vnode
333+ } )
334+ } else {
335+ newNode = render . StringBasedRenderer . htmlStringToElement ( outerHTML )
336+ }
337+
338+ if ( newNode ) {
339+ parentNode . insertBefore ( newNode , siblingRef || null ) ;
340+
341+ if ( postMountUpdates ?. length > 0 ) {
342+ postMountUpdates . forEach ( update => {
343+ let node = DomAccess . getElement ( update . id ) ;
344+ if ( node ) {
345+ if ( update . scrollLeft ) { node . scrollLeft = update . scrollLeft }
346+ if ( update . scrollTop ) { node . scrollTop = update . scrollTop }
347+ }
348+ } )
349+ }
315350 } else {
316- render . StringBasedRenderer . insertNodeAsString ( { hasLeadingTextChildren , index , outerHTML, parentNode , postMountUpdates } )
351+ console . error ( 'insertNode: Failed to create newNode' , { outerHTML, vnode } ) ;
317352 }
353+ } else {
354+ console . error ( 'insertNode: Parent not found' , { parentId, index} ) ;
318355 }
319356 }
320357
0 commit comments