@@ -47,7 +47,9 @@ export class NgtRendererFactory2 implements RendererFactory2 {
47
47
/**
48
48
* NOTE: We use `useFactory` to instantiate `NgtRendererFactory2`
49
49
*/
50
- constructor ( private delegateRendererFactory : RendererFactory2 ) { }
50
+ constructor ( private delegateRendererFactory : RendererFactory2 ) {
51
+ console . log ( 'this' , this ) ;
52
+ }
51
53
52
54
createRenderer ( hostElement : any , type : RendererType2 | null ) : Renderer2 {
53
55
const delegateRenderer = this . delegateRendererFactory . createRenderer ( hostElement , type ) ;
@@ -68,7 +70,7 @@ export class NgtRendererFactory2 implements RendererFactory2 {
68
70
store = type . type [ NGT_MANUAL_INJECTED_STORE ] as SignalState < NgtState > | null ;
69
71
}
70
72
71
- const cacheKey = store ? `${ type . id } -${ store . snapshot . id } ` : type . id ;
73
+ let cacheKey = store ? `${ type . id } -${ store . snapshot . id } ` : type . id ;
72
74
let renderer = ! isPortal ? this . rendererMap . get ( cacheKey ) : null ;
73
75
74
76
if ( ! isRendererNode ( hostElement ) ) {
@@ -94,10 +96,31 @@ export class NgtRendererFactory2 implements RendererFactory2 {
94
96
}
95
97
96
98
const rS = ( hostElement as NgtRendererNode ) . __ngt_renderer__ ;
97
- // reassign store if it's different
98
- if ( rS [ NgtRendererClassId . store ] !== store ) {
99
+
100
+ if ( ! rS [ NgtRendererClassId . store ] ) {
99
101
rS [ NgtRendererClassId . store ] = store ;
102
+ } else if ( rS [ NgtRendererClassId . store ] !== store ) {
103
+ // reassign store if it's different
104
+ let resolvedStore = store ;
105
+ let shouldReassign = false ;
106
+
107
+ // check if resolved store has renderer state store as an ancestor
108
+ while ( resolvedStore . snapshot . previousRoot ) {
109
+ // if it is, then we reassign
110
+ if ( resolvedStore . snapshot . previousRoot . snapshot . id === rS [ NgtRendererClassId . store ] . snapshot . id ) {
111
+ shouldReassign = true ;
112
+ break ;
113
+ }
114
+ resolvedStore = resolvedStore . snapshot . previousRoot ;
115
+ }
116
+
117
+ if ( shouldReassign ) {
118
+ rS [ NgtRendererClassId . store ] = store ;
119
+ }
100
120
}
121
+
122
+ // reassign cache key
123
+ cacheKey = `${ type . id } -${ rS [ NgtRendererClassId . store ] . snapshot . id } ` ;
101
124
}
102
125
103
126
const removeRenderer = ( renderer : Renderer2 ) => {
@@ -117,7 +140,7 @@ export class NgtRendererFactory2 implements RendererFactory2 {
117
140
if ( isPortal ) {
118
141
this . portals . add ( renderer ) ;
119
142
} else {
120
- this . rendererMap . set ( type . id , renderer ) ;
143
+ this . rendererMap . set ( cacheKey , renderer ) ;
121
144
}
122
145
}
123
146
@@ -139,7 +162,7 @@ export class NgtRenderer2 implements Renderer2 {
139
162
private document : Document ,
140
163
private store : SignalState < NgtState > | null ,
141
164
private removeRenderer : ( renderer : Renderer2 ) => void ,
142
- private count = 1 ,
165
+ private count = 0 ,
143
166
) { }
144
167
145
168
get data ( ) : { [ key : string ] : any } {
0 commit comments