@@ -1631,6 +1631,27 @@ export function renderer(renderer: () => RenderResult): Renderer {
1631
1631
return { } ;
1632
1632
}
1633
1633
1634
+ function createWidgetOptions ( id : string , widgetId : string , middleware ?: any ) {
1635
+ return {
1636
+ id,
1637
+ properties : ( ) => {
1638
+ const widgetMeta = widgetMetaMap . get ( widgetId ) ;
1639
+ if ( widgetMeta ) {
1640
+ return { ...widgetMeta . properties } ;
1641
+ }
1642
+ return { } ;
1643
+ } ,
1644
+ children : ( ) => {
1645
+ const widgetMeta = widgetMetaMap . get ( widgetId ) ;
1646
+ if ( widgetMeta ) {
1647
+ return widgetMeta . children ;
1648
+ }
1649
+ return [ ] ;
1650
+ } ,
1651
+ middleware
1652
+ } ;
1653
+ }
1654
+
1634
1655
function resolveMiddleware (
1635
1656
middlewares : any ,
1636
1657
id : string ,
@@ -1641,23 +1662,7 @@ export function renderer(renderer: () => RenderResult): Renderer {
1641
1662
const uniqueId = `${ id } -${ metaId ++ } ` ;
1642
1663
for ( let i = 0 ; i < keys . length ; i ++ ) {
1643
1664
const middleware = middlewares [ keys [ i ] ] ( ) ;
1644
- const payload : any = {
1645
- id : uniqueId ,
1646
- properties : ( ) => {
1647
- const widgetMeta = widgetMetaMap . get ( id ) ;
1648
- if ( widgetMeta ) {
1649
- return { ...widgetMeta . properties } ;
1650
- }
1651
- return { } ;
1652
- } ,
1653
- children : ( ) => {
1654
- const widgetMeta = widgetMetaMap . get ( id ) ;
1655
- if ( widgetMeta ) {
1656
- return widgetMeta . children ;
1657
- }
1658
- return [ ] ;
1659
- }
1660
- } ;
1665
+ const payload = createWidgetOptions ( uniqueId , id ) ;
1661
1666
if ( middleware . middlewares ) {
1662
1667
const { middlewares : resolvedMiddleware } = resolveMiddleware (
1663
1668
middleware . middlewares ,
@@ -1731,12 +1736,7 @@ export function renderer(renderer: () => RenderResult): Renderer {
1731
1736
invalidate = widgetMeta . invalidator ;
1732
1737
}
1733
1738
1734
- rendered = Constructor ( {
1735
- id,
1736
- properties : ( ) => next . node . properties ,
1737
- children : ( ) => next . node . children ,
1738
- middleware : widgetMeta . middleware
1739
- } ) ;
1739
+ rendered = Constructor ( createWidgetOptions ( id , id , widgetMeta . middleware ) ) ;
1740
1740
widgetMeta . rendering = false ;
1741
1741
if ( widgetMeta . deferRefs > 0 ) {
1742
1742
return false ;
@@ -1786,7 +1786,7 @@ export function renderer(renderer: () => RenderResult): Renderer {
1786
1786
1787
1787
function _updateWidget ( { current, next } : UpdateWidgetInstruction ) : ProcessResult {
1788
1788
current = getWNodeWrapper ( current . id ) || current ;
1789
- const { instance, domNode, hasAnimations } = current ;
1789
+ const { instance, domNode, hasAnimations, id } = current ;
1790
1790
let {
1791
1791
node : { widgetConstructor }
1792
1792
} = next ;
@@ -1800,7 +1800,7 @@ export function renderer(renderer: () => RenderResult): Renderer {
1800
1800
let didRender = false ;
1801
1801
let currentChildren = _idToChildrenWrappers . get ( current . id ) ;
1802
1802
next . hasAnimations = hasAnimations ;
1803
- next . id = current . id ;
1803
+ next . id = id ;
1804
1804
next . childDomWrapperId = current . childDomWrapperId ;
1805
1805
next . properties = next . node . properties ;
1806
1806
_wrapperSiblingMap . delete ( current ) ;
@@ -1809,9 +1809,10 @@ export function renderer(renderer: () => RenderResult): Renderer {
1809
1809
}
1810
1810
1811
1811
if ( ! isWidgetBaseConstructor ( Constructor ) ) {
1812
- const widgetMeta = widgetMetaMap . get ( next . id ) ;
1812
+ const widgetMeta = widgetMetaMap . get ( id ) ;
1813
1813
if ( widgetMeta ) {
1814
1814
widgetMeta . properties = next . properties ;
1815
+ widgetMeta . children = next . node . children ;
1815
1816
widgetMeta . rendering = true ;
1816
1817
runDiffs ( widgetMeta , current . properties , next . properties ) ;
1817
1818
if ( current . node . children . length > 0 || next . node . children . length > 0 ) {
@@ -1828,15 +1829,10 @@ export function renderer(renderer: () => RenderResult): Renderer {
1828
1829
) ;
1829
1830
}
1830
1831
if ( widgetMeta . dirty ) {
1831
- _idToChildrenWrappers . delete ( next . id ) ;
1832
+ _idToChildrenWrappers . delete ( id ) ;
1832
1833
didRender = true ;
1833
1834
widgetMeta . dirty = false ;
1834
- rendered = Constructor ( {
1835
- id : next . id ,
1836
- properties : ( ) => next . node . properties ,
1837
- children : ( ) => next . node . children ,
1838
- middleware : widgetMeta . middleware
1839
- } ) ;
1835
+ rendered = Constructor ( createWidgetOptions ( id , id , widgetMeta . middleware ) ) ;
1840
1836
if ( widgetMeta . deferRefs > 0 ) {
1841
1837
rendered = null ;
1842
1838
}
@@ -1851,19 +1847,19 @@ export function renderer(renderer: () => RenderResult): Renderer {
1851
1847
instance ! . __setChildren__ ( next . node . children ) ;
1852
1848
if ( instanceData . dirty ) {
1853
1849
didRender = true ;
1854
- _idToChildrenWrappers . delete ( next . id ) ;
1850
+ _idToChildrenWrappers . delete ( id ) ;
1855
1851
rendered = instance ! . __render__ ( ) ;
1856
1852
}
1857
1853
instanceData . rendering = false ;
1858
1854
}
1859
1855
_idToWrapperMap . set ( next . id , next ) ;
1860
- processResult . widget = { type : 'attach' , instance, id : next . id , attached : false } ;
1856
+ processResult . widget = { type : 'attach' , instance, id, attached : false } ;
1861
1857
1862
1858
let children : DNodeWrapper [ ] | undefined ;
1863
1859
if ( rendered ) {
1864
1860
rendered = Array . isArray ( rendered ) ? rendered : [ rendered ] ;
1865
1861
children = renderedToWrapper ( rendered , next , current ) ;
1866
- _idToChildrenWrappers . set ( next . id , children ) ;
1862
+ _idToChildrenWrappers . set ( id , children ) ;
1867
1863
}
1868
1864
1869
1865
if ( didRender ) {
0 commit comments