1
1
import { DOCUMENT } from '@angular/common' ;
2
2
import {
3
3
DebugNode ,
4
- ElementRef ,
5
4
Injectable ,
6
5
Renderer2 ,
7
6
RendererFactory2 ,
@@ -11,7 +10,6 @@ import {
11
10
makeEnvironmentProviders ,
12
11
untracked ,
13
12
} from '@angular/core' ;
14
- import { Object3D } from 'three' ;
15
13
import { NgtArgs } from '../directives/args' ;
16
14
import { NgtParent } from '../directives/parent' ;
17
15
import { getLocalState , prepare } from '../instance' ;
@@ -154,10 +152,7 @@ export class NgtRenderer implements Renderer2 {
154
152
const primitiveNode = createNode ( 'three' , object , this . document ) ;
155
153
156
154
if ( injectedParent ) {
157
- const resolvedParent = this . getParentFromNgtParent ( injectedParent , this . rootStore ) ;
158
- if ( resolvedParent ) {
159
- primitiveNode . __ngt_renderer__ [ NgtRendererClassId . parent ] = resolvedParent as unknown as NgtRendererNode ;
160
- }
155
+ primitiveNode . __ngt_renderer__ [ NgtRendererClassId . parent ] = injectedParent as unknown as NgtRendererNode ;
161
156
}
162
157
163
158
return primitiveNode ;
@@ -180,10 +175,7 @@ export class NgtRenderer implements Renderer2 {
180
175
}
181
176
182
177
if ( injectedParent ) {
183
- const resolvedParent = this . getParentFromNgtParent ( injectedParent , this . rootStore ) ;
184
- if ( resolvedParent ) {
185
- node . __ngt_renderer__ [ NgtRendererClassId . parent ] = resolvedParent as unknown as NgtRendererNode ;
186
- }
178
+ node . __ngt_renderer__ [ NgtRendererClassId . parent ] = injectedParent as unknown as NgtRendererNode ;
187
179
}
188
180
189
181
return node ;
@@ -204,11 +196,8 @@ export class NgtRenderer implements Renderer2 {
204
196
this . argsCommentNodes . push ( comment ) ;
205
197
} else if ( node === 'parent' ) {
206
198
this . parentCommentNodes . push ( comment ) ;
207
- comment [ SPECIAL_INTERNAL_SET_PARENT_COMMENT ] = ( ngtParent : Object3D | ElementRef < Object3D > | string ) => {
208
- commentNode . __ngt_renderer__ [ NgtRendererClassId . parent ] = this . getParentFromNgtParent (
209
- ngtParent ,
210
- this . rootStore ,
211
- ) as unknown as NgtRendererNode ;
199
+ comment [ SPECIAL_INTERNAL_SET_PARENT_COMMENT ] = ( ngtParent : NgtRendererNode ) => {
200
+ commentNode . __ngt_renderer__ [ NgtRendererClassId . parent ] = ngtParent ;
212
201
} ;
213
202
} else if ( typeof node === 'object' ) {
214
203
this . portalCommentsNodes . push ( node ) ;
@@ -700,94 +689,6 @@ export class NgtRenderer implements Renderer2 {
700
689
return directiveInstance ;
701
690
}
702
691
703
- private getParentFromNgtParent ( ngtParent : Object3D | ElementRef < Object3D > | string , store : NgtSignalStore < NgtState > ) {
704
- let topMostStore = store ;
705
-
706
- while ( topMostStore . snapshot . previousRoot ) {
707
- topMostStore = topMostStore . snapshot . previousRoot ;
708
- }
709
-
710
- const scene = topMostStore . snapshot . scene ;
711
-
712
- if ( typeof ngtParent === 'string' ) {
713
- return scene . getObjectByName ( ngtParent ) ;
714
- }
715
-
716
- if ( 'nativeElement' in ngtParent ) {
717
- return ngtParent . nativeElement ;
718
- }
719
-
720
- return ngtParent ;
721
- }
722
-
723
- private getNgtParent ( ) {
724
- let directive : NgtParent | undefined ;
725
-
726
- const destroyed = [ ] ;
727
-
728
- let i = this . parentCommentNodes . length - 1 ;
729
- while ( i >= 0 ) {
730
- const comment = this . parentCommentNodes [ i ] ;
731
- if ( comment . __ngt_renderer__ [ NgtRendererClassId . destroyed ] ) {
732
- destroyed . push ( i ) ;
733
- i -- ;
734
- continue ;
735
- }
736
- const injector = comment . __ngt_renderer__ [ NgtRendererClassId . debugNodeFactory ] ?.( ) ?. injector ;
737
- if ( ! injector ) {
738
- i -- ;
739
- continue ;
740
- }
741
- const instance = injector . get ( NgtParent , null ) ;
742
- if ( instance && instance . validate ( ) ) {
743
- directive = instance ;
744
- break ;
745
- }
746
-
747
- i -- ;
748
- }
749
-
750
- destroyed . forEach ( ( index ) => {
751
- this . parentCommentNodes . splice ( index , 1 ) ;
752
- } ) ;
753
-
754
- return directive ;
755
- }
756
-
757
- private getNgtArgs ( ) {
758
- let directive : NgtArgs | undefined ;
759
-
760
- const destroyed = [ ] ;
761
-
762
- let i = this . argsCommentNodes . length - 1 ;
763
- while ( i >= 0 ) {
764
- const comment = this . argsCommentNodes [ i ] ;
765
- if ( comment . __ngt_renderer__ [ NgtRendererClassId . destroyed ] ) {
766
- destroyed . push ( i ) ;
767
- i -- ;
768
- continue ;
769
- }
770
- const injector = comment . __ngt_renderer__ [ NgtRendererClassId . debugNodeFactory ] ?.( ) ?. injector ;
771
- if ( ! injector ) {
772
- i -- ;
773
- continue ;
774
- }
775
- const instance = injector . get ( NgtArgs , null ) ;
776
- if ( instance && instance . validate ( ) ) {
777
- directive = instance ;
778
- break ;
779
- }
780
-
781
- i -- ;
782
- }
783
-
784
- destroyed . forEach ( ( index ) => {
785
- this . argsCommentNodes . splice ( index , 1 ) ;
786
- } ) ;
787
-
788
- return directive ;
789
- }
790
-
791
692
createText = this . delegate . createText . bind ( this . delegate ) ;
792
693
destroy = this . delegate . destroy . bind ( this . delegate ) ;
793
694
destroyNode : ( ( node : any ) => void ) | null = null ;
0 commit comments