Skip to content

Commit efdb808

Browse files
authored
Change widget demoted event name (#1144)
1 parent b745b58 commit efdb808

File tree

4 files changed

+17
-27
lines changed

4 files changed

+17
-27
lines changed

src/infrastructure/SubgraphEventMap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export interface SubgraphEventMap extends LGraphEventMap {
4747
widget: IBaseWidget
4848
subgraphNode: SubgraphNode
4949
}
50-
"widget-unpromoted": {
50+
"widget-demoted": {
5151
widget: IBaseWidget
5252
subgraphNode: SubgraphNode
5353
}

src/subgraph/SubgraphNode.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,8 @@ export class SubgraphNode extends LGraphNode implements BaseLGraph {
187187
}
188188

189189
#setWidget(subgraphInput: Readonly<SubgraphInput>, input: INodeInputSlot, widget: Readonly<IBaseWidget>) {
190-
const concreteWidget = toConcreteWidget(widget, this)
191-
192-
const promotedWidget = concreteWidget.createCopyForNode(this)
190+
// Use the first matching widget
191+
const promotedWidget = toConcreteWidget(widget, this).createCopyForNode(this)
193192

194193
// Set parentSubgraphNode for all promoted widgets to track their origin
195194
promotedWidget.parentSubgraphNode = this
@@ -318,14 +317,14 @@ export class SubgraphNode extends LGraphNode implements BaseLGraph {
318317
override removeWidgetByName(name: string): void {
319318
const widget = this.widgets.find(w => w.name === name)
320319
if (widget) {
321-
this.subgraph.events.dispatch("widget-unpromoted", { widget, subgraphNode: this })
320+
this.subgraph.events.dispatch("widget-demoted", { widget, subgraphNode: this })
322321
}
323322
super.removeWidgetByName(name)
324323
}
325324

326325
override ensureWidgetRemoved(widget: IBaseWidget): void {
327326
if (this.widgets.includes(widget)) {
328-
this.subgraph.events.dispatch("widget-unpromoted", { widget, subgraphNode: this })
327+
this.subgraph.events.dispatch("widget-demoted", { widget, subgraphNode: this })
329328
}
330329
super.ensureWidgetRemoved(widget)
331330
}
@@ -334,7 +333,7 @@ export class SubgraphNode extends LGraphNode implements BaseLGraph {
334333
// Clean up all promoted widgets
335334
for (const widget of this.widgets) {
336335
widget.parentSubgraphNode = undefined
337-
this.subgraph.events.dispatch("widget-unpromoted", { widget, subgraphNode: this })
336+
this.subgraph.events.dispatch("widget-demoted", { widget, subgraphNode: this })
338337
}
339338

340339
for (const input of this.inputs) {

src/widgets/BaseWidget.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -304,12 +304,4 @@ export abstract class BaseWidget<TWidget extends IBaseWidget = IBaseWidget> impl
304304
cloned.value = this.value
305305
return cloned
306306
}
307-
308-
/**
309-
* Type guard to check if this widget has a DOM element.
310-
* @returns True if the widget has a DOM element attached
311-
*/
312-
isDOMWidget(): this is this & { element: HTMLElement } {
313-
return this.element instanceof HTMLElement
314-
}
315307
}

test/subgraph/SubgraphWidgetPromotion.test.ts

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ describe("SubgraphWidgetPromotion", () => {
103103

104104
const eventCapture = createEventCapture(subgraph.events, [
105105
"widget-promoted",
106-
"widget-unpromoted",
106+
"widget-demoted",
107107
])
108108

109109
const { node } = createNodeWithWidget("Test Node")
@@ -119,7 +119,7 @@ describe("SubgraphWidgetPromotion", () => {
119119
eventCapture.cleanup()
120120
})
121121

122-
it("should fire widget-unpromoted event when removing promoted widget", () => {
122+
it("should fire widget-demoted event when removing promoted widget", () => {
123123
const subgraph = createTestSubgraph({
124124
inputs: [{ name: "input", type: "number" }],
125125
})
@@ -128,16 +128,16 @@ describe("SubgraphWidgetPromotion", () => {
128128
const subgraphNode = setupPromotedWidget(subgraph, node)
129129
expect(subgraphNode.widgets).toHaveLength(1)
130130

131-
const eventCapture = createEventCapture(subgraph.events, ["widget-unpromoted"])
131+
const eventCapture = createEventCapture(subgraph.events, ["widget-demoted"])
132132

133133
// Remove the widget
134134
subgraphNode.removeWidgetByName("input")
135135

136136
// Check event was fired
137-
const unpromotedEvents = eventCapture.getEventsByType("widget-unpromoted")
138-
expect(unpromotedEvents).toHaveLength(1)
139-
expect(unpromotedEvents[0].detail.widget).toBeDefined()
140-
expect(unpromotedEvents[0].detail.subgraphNode).toBe(subgraphNode)
137+
const demotedEvents = eventCapture.getEventsByType("widget-demoted")
138+
expect(demotedEvents).toHaveLength(1)
139+
expect(demotedEvents[0].detail.widget).toBeDefined()
140+
expect(demotedEvents[0].detail.subgraphNode).toBe(subgraphNode)
141141

142142
// Widget should be removed
143143
expect(subgraphNode.widgets).toHaveLength(0)
@@ -210,17 +210,17 @@ describe("SubgraphWidgetPromotion", () => {
210210

211211
expect(promotedWidget.parentSubgraphNode).toBe(subgraphNode)
212212

213-
const eventCapture = createEventCapture(subgraph.events, ["widget-unpromoted"])
213+
const eventCapture = createEventCapture(subgraph.events, ["widget-demoted"])
214214

215215
// Remove the subgraph node
216216
subgraphNode.onRemoved()
217217

218218
// parentSubgraphNode should be cleared
219219
expect(promotedWidget.parentSubgraphNode).toBeUndefined()
220220

221-
// Should fire unpromoted events for all widgets
222-
const unpromotedEvents = eventCapture.getEventsByType("widget-unpromoted")
223-
expect(unpromotedEvents).toHaveLength(1)
221+
// Should fire demoted events for all widgets
222+
const demotedEvents = eventCapture.getEventsByType("widget-demoted")
223+
expect(demotedEvents).toHaveLength(1)
224224

225225
eventCapture.cleanup()
226226
})
@@ -240,7 +240,6 @@ describe("SubgraphWidgetPromotion", () => {
240240
// DOM widget should be promoted with parentSubgraphNode
241241
expect(subgraphNode.widgets).toHaveLength(1)
242242
const promotedWidget = subgraphNode.widgets[0]
243-
expect(promotedWidget.isDOMWidget()).toBe(true)
244243
expect(promotedWidget.parentSubgraphNode).toBe(subgraphNode)
245244
expect(promotedWidget.name).toBe("domInput")
246245
})

0 commit comments

Comments
 (0)