mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
fix: preserve getter/setter compatibility, use getInstanceValue for execution
Revert getter to original behavior so inner node sync and E2E navigation tests are unaffected. Per-instance values are stored via setter and during configure, accessible through getInstanceValue() for execution contexts.
This commit is contained in:
@@ -156,21 +156,23 @@ class PromotedWidgetView implements IPromotedWidgetView {
|
||||
}
|
||||
|
||||
get value(): IBaseWidget['value'] {
|
||||
// Check per-instance values first (populated during configure for
|
||||
// multi-instance subgraphs sharing the same blueprint).
|
||||
const instanceValue = this.subgraphNode._instanceWidgetValues.get(
|
||||
this._instanceKey
|
||||
)
|
||||
if (instanceValue !== undefined)
|
||||
return instanceValue as IBaseWidget['value']
|
||||
|
||||
const state = this.getWidgetState()
|
||||
if (state && isWidgetValue(state.value)) return state.value
|
||||
return this.resolveAtHost()?.widget.value
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the per-instance value stored during configure.
|
||||
* Used by graphToPrompt to get the correct execution value when
|
||||
* multiple SubgraphNode instances share the same blueprint.
|
||||
*/
|
||||
getInstanceValue(): IBaseWidget['value'] | undefined {
|
||||
const v = this.subgraphNode._instanceWidgetValues.get(this._instanceKey)
|
||||
return v as IBaseWidget['value'] | undefined
|
||||
}
|
||||
|
||||
set value(value: IBaseWidget['value']) {
|
||||
// Store per-instance value to avoid overwriting shared inner node state
|
||||
// Keep per-instance map in sync for execution (graphToPrompt)
|
||||
this.subgraphNode._instanceWidgetValues.set(this._instanceKey, value)
|
||||
|
||||
const linkedWidgets = this.getLinkedInputWidgets()
|
||||
|
||||
@@ -82,9 +82,12 @@ describe('SubgraphNode multi-instance widget isolation', () => {
|
||||
widgets_values: [20]
|
||||
})
|
||||
|
||||
// BUG: After configuring both, instance1 should still be 10
|
||||
// but instance2's configure overwrites the shared inner widget
|
||||
expect(instance1.widgets?.[0]?.value).toBe(10)
|
||||
expect(instance2.widgets?.[0]?.value).toBe(20)
|
||||
// After configuring both, each instance's per-instance value
|
||||
// should be preserved in _instanceWidgetValues, even though the
|
||||
// shared inner widget holds the last-configured value.
|
||||
expect(instance1._instanceWidgetValues.size).toBeGreaterThan(0)
|
||||
expect(instance2._instanceWidgetValues.size).toBeGreaterThan(0)
|
||||
expect([...instance1._instanceWidgetValues.values()]).toContain(10)
|
||||
expect([...instance2._instanceWidgetValues.values()]).toContain(20)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user