fix: hide model_family by mirroring hide signals onto widget._state (#216)
Devtools dump on the user's frontend confirmed setWidgetHidden() was correctly setting widget.type='hidden', widget.hidden=true, computeSize=[0,-4], and draw=noop — but the widget still rendered. The widget object has a _state Proxy that mirrors render-relevant properties; the modern frontend's canvas-drawn ComboWidget renders from _state, not from the top-level widget object. Extend setWidgetHidden() to also mutate widget._state (type, disabled, label) when present, with try/catch in case the Proxy traps make any of those read-only. The original _state values are saved so unhide restores them. Refs #216 (pending runtime verification)
This commit is contained in:
@@ -47,6 +47,7 @@ export function setWidgetHidden(widget, hide) {
|
||||
let saved = _widgetHideState.get(widget);
|
||||
if (hide) {
|
||||
if (saved) return; // already hidden
|
||||
const state = widget._state || null; // modern ComfyUI proxy mirror
|
||||
saved = {
|
||||
type: widget.type,
|
||||
computeSize: widget.computeSize,
|
||||
@@ -54,6 +55,9 @@ export function setWidgetHidden(widget, hide) {
|
||||
options: widget.options,
|
||||
elementDisplay: widget.element ? widget.element.style.display : null,
|
||||
inputElDisplay: widget.inputEl ? widget.inputEl.style.display : null,
|
||||
stateType: state ? state.type : null,
|
||||
stateDisabled: state ? state.disabled : null,
|
||||
stateLabel: state ? state.label : null,
|
||||
};
|
||||
_widgetHideState.set(widget, saved);
|
||||
widget.computeSize = () => [0, -4];
|
||||
@@ -63,6 +67,14 @@ export function setWidgetHidden(widget, hide) {
|
||||
widget.options = { ...(widget.options || {}), serialize: true };
|
||||
if (widget.element) widget.element.style.display = "none";
|
||||
if (widget.inputEl) widget.inputEl.style.display = "none";
|
||||
// Mirror onto _state (#216 v3): on modern frontends the canvas-drawn
|
||||
// ComboWidget renders from this Proxy rather than the top-level widget
|
||||
// object. Setting type='hidden' here is what actually suppresses draw.
|
||||
if (state) {
|
||||
try { state.type = "hidden"; } catch { /* proxy may be read-only */ }
|
||||
try { state.disabled = true; } catch { /* */ }
|
||||
try { state.label = ""; } catch { /* */ }
|
||||
}
|
||||
} else {
|
||||
if (!saved) return; // already visible
|
||||
widget.type = saved.type;
|
||||
@@ -73,6 +85,12 @@ export function setWidgetHidden(widget, hide) {
|
||||
widget.hidden = false;
|
||||
if (widget.element && saved.elementDisplay !== null) widget.element.style.display = saved.elementDisplay;
|
||||
if (widget.inputEl && saved.inputElDisplay !== null) widget.inputEl.style.display = saved.inputElDisplay;
|
||||
const state = widget._state || null;
|
||||
if (state) {
|
||||
if (saved.stateType !== null) try { state.type = saved.stateType; } catch { /* */ }
|
||||
if (saved.stateDisabled !== null) try { state.disabled = saved.stateDisabled; } catch { /* */ }
|
||||
if (saved.stateLabel !== null) try { state.label = saved.stateLabel; } catch { /* */ }
|
||||
}
|
||||
_widgetHideState.delete(widget);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user