@@ -30,6 +30,11 @@ export default class SceneGraph extends React.Component {
30
30
selectedIndex : - 1
31
31
} ;
32
32
33
+ this . rebuildEntityOptions = debounce (
34
+ this . rebuildEntityOptions . bind ( this ) ,
35
+ 0
36
+ ) ;
37
+
33
38
this . updateFilteredEntities = debounce (
34
39
this . updateFilteredEntities . bind ( this ) ,
35
40
100
@@ -42,19 +47,31 @@ export default class SceneGraph extends React.Component {
42
47
}
43
48
} ;
44
49
50
+ onChildAttachedDetached = ( event ) => {
51
+ if ( this . includeInSceneGraph ( event . detail . el ) ) {
52
+ this . rebuildEntityOptions ( ) ;
53
+ }
54
+ } ;
55
+
45
56
componentDidMount ( ) {
46
57
this . rebuildEntityOptions ( ) ;
47
58
Events . on ( 'entityidchange' , this . rebuildEntityOptions ) ;
48
- Events . on ( 'entitycreated' , this . rebuildEntityOptions ) ;
49
- Events . on ( 'entityclone' , this . rebuildEntityOptions ) ;
50
59
Events . on ( 'entityupdate' , this . onEntityUpdate ) ;
60
+ document . addEventListener ( 'child-attached' , this . onChildAttachedDetached ) ;
61
+ document . addEventListener ( 'child-detached' , this . onChildAttachedDetached ) ;
51
62
}
52
63
53
64
componentWillUnmount ( ) {
54
65
Events . off ( 'entityidchange' , this . rebuildEntityOptions ) ;
55
- Events . off ( 'entitycreated' , this . rebuildEntityOptions ) ;
56
- Events . off ( 'entityclone' , this . rebuildEntityOptions ) ;
57
66
Events . off ( 'entityupdate' , this . onEntityUpdate ) ;
67
+ document . removeEventListener (
68
+ 'child-attached' ,
69
+ this . onChildAttachedDetached
70
+ ) ;
71
+ document . removeEventListener (
72
+ 'child-detached' ,
73
+ this . onChildAttachedDetached
74
+ ) ;
58
75
}
59
76
60
77
/**
@@ -100,10 +117,19 @@ export default class SceneGraph extends React.Component {
100
117
}
101
118
} ;
102
119
120
+ includeInSceneGraph = ( element ) => {
121
+ return ! (
122
+ element . dataset . isInspector ||
123
+ ! element . isEntity ||
124
+ element . isInspector ||
125
+ 'aframeInspector' in element . dataset
126
+ ) ;
127
+ } ;
128
+
103
129
rebuildEntityOptions = ( ) => {
104
130
const entities = [ { depth : 0 , entity : this . props . scene } ] ;
105
131
106
- function treeIterate ( element , depth ) {
132
+ const treeIterate = ( element , depth ) => {
107
133
if ( ! element ) {
108
134
return ;
109
135
}
@@ -112,12 +138,7 @@ export default class SceneGraph extends React.Component {
112
138
for ( let i = 0 ; i < element . children . length ; i ++ ) {
113
139
let entity = element . children [ i ] ;
114
140
115
- if (
116
- entity . dataset . isInspector ||
117
- ! entity . isEntity ||
118
- entity . isInspector ||
119
- 'aframeInspector' in entity . dataset
120
- ) {
141
+ if ( ! this . includeInSceneGraph ( entity ) ) {
121
142
continue ;
122
143
}
123
144
@@ -129,7 +150,7 @@ export default class SceneGraph extends React.Component {
129
150
130
151
treeIterate ( entity , depth ) ;
131
152
}
132
- }
153
+ } ;
133
154
treeIterate ( this . props . scene , 0 ) ;
134
155
135
156
this . setState ( {
0 commit comments