Skip to content

Commit 2897bd1

Browse files
committed
Add getParent to element interface
1 parent 474629e commit 2897bd1

File tree

2 files changed

+24
-24
lines changed

2 files changed

+24
-24
lines changed

packages/debugger/src/main/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ export type ElementInterface<T extends object> = {
151151
isElement: (obj: object | T) => obj is T,
152152
getName: (el: T) => string | null,
153153
getChildren: (el: T) => Iterable<T>,
154+
getParent: (el: T) => T | null,
154155
getElementAt: (e: MouseEvent) => T | null,
155156
getLocation: (el: T) => SourceLocation | null,
156157
getRect: (el: T) => Rect | null,
@@ -163,6 +164,7 @@ export const dom_element_interface: ElementInterface<Element> = {
163164
isElement: obj => obj instanceof Element,
164165
getName: el => el.localName,
165166
getChildren: el => el.children,
167+
getParent: el => el.parentElement,
166168
getElementAt: e => e.target as Element | null,
167169
getLocation: el => {
168170
let attr = locator.getLocationAttr(el)

packages/debugger/src/structure/walker.ts

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
type Solid,
99
NodeType,
1010
TreeWalkerMode,
11+
UNKNOWN,
1112
} from '../main/types.ts'
1213
import {
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

4142
export
@@ -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

126127
export
@@ -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
166167
const 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

Comments
 (0)