88 type Solid ,
99 NodeType ,
1010 TreeWalkerMode ,
11+ UNKNOWN ,
1112} from '../main/types.ts'
1213import {
1314 getComponentRefreshNode ,
@@ -35,7 +36,7 @@ type ComponentRegistry<TEl extends object> = {
3536 /** Map of component nodes */
3637 components : Map < NodeID , ComponentData < TEl > > ,
3738 /** Map of element nodes to component nodes */
38- element_nodes : Map < NodeID , { el : HTMLElement ; component : ComponentData < TEl > } > ,
39+ element_nodes : Map < NodeID , { el : TEl ; component : ComponentData < TEl > } > ,
3940}
4041
4142export
@@ -120,7 +121,7 @@ const registerElement = <TEl extends object>(
120121 if ( ! component ) return
121122
122123 component . element_nodes . add ( elementId )
123- r . element_nodes . set ( elementId , { el : element as unknown as TEl , component} )
124+ r . element_nodes . set ( elementId , { el : element as any as TEl , component} )
124125}
125126
126127export
@@ -134,7 +135,7 @@ const getComponent = <TEl extends object>(
134135 let component = r . components . get ( id )
135136 if ( component ) return {
136137 name : component . name ,
137- elements : [ ...component . elements ] . map ( el => el as unknown as TEl ) ,
138+ elements : [ ...component . elements ] . map ( el => el as any as TEl ) ,
138139 id
139140 }
140141
@@ -166,39 +167,36 @@ export
166167const findComponent = < TEl extends object > (
167168 r : ComponentRegistry < TEl > ,
168169 el : TEl ,
169- ) : { name : string ; id : NodeID } | null => {
170+ ) : ComponentData < TEl > | null => {
170171
171172 let including = new Map < Solid . Owner , ComponentData < TEl > > ( )
172-
173- let currEl : TEl | null = el
174- while ( currEl ) {
175- for ( let component of r . components . values ( ) ) {
176- if ( [ ...component . elements ] . some ( e => e === currEl || e === currEl as unknown as TEl ) ) {
177- including . set ( component . owner , component )
173+
174+ for ( let curr : TEl | null = el ;
175+ curr != null && including . size === 0 ;
176+ ) {
177+ for ( let comp of r . components . values ( ) ) {
178+ for ( let comp_el of comp . elements ) {
179+ if ( comp_el === curr ) {
180+ including . set ( comp . owner , comp )
181+ }
178182 }
179183 }
180- currEl = including . size === 0 ? currEl . parentElement : null
184+ curr = r . eli . getParent ( curr ) // go up
181185 }
182186
183187 if ( including . size > 1 ) {
184188 // find the closest component
185189 for ( let owner of including . keys ( ) ) {
186- if ( ! including . has ( owner ) ) continue
187- let currOwner = owner . owner
188- while ( currOwner ) {
189- let deleted = including . delete ( currOwner )
190- if ( deleted ) break
191- currOwner = currOwner . owner
190+ if ( including . has ( owner ) ) {
191+ for ( let curr = owner . owner ; curr != null ; ) {
192+ if ( including . delete ( curr ) ) break
193+ curr = curr . owner // go up
194+ }
192195 }
193196 }
194197 }
195198
196- if ( including . size === 0 ) return null
197- let value = including . values ( ) . next ( ) . value
198- if ( value && value . name ) {
199- return { name : value . name , id : value . id }
200- }
201- return null
199+ return including . values ( ) . next ( ) . value ?? null
202200}
203201
204202
@@ -327,7 +325,7 @@ function mapElements<TEl extends object>(
327325 let el_json : Mapped . Owner = {
328326 id : getSdtId ( el , ObjectType . Element ) ,
329327 type : NodeType . Element ,
330- name : eli . getName ( el ) ,
328+ name : eli . getName ( el ) ?? UNKNOWN ,
331329 children : [ ] ,
332330 }
333331 out . push ( el_json )
0 commit comments