fix(zigbee): default IEEE/Vendor/Model/LQI props to hidden, preserve user visibility
- New zigbee props (approve + first-time re-import) ship with visible=false so the canvas card stays clean. User opts in from the right panel. - On re-import of an already-approved node, merge instead of overwrite: keys already present keep their visible flag (and any user-edited value is replaced with the freshly imported one), brand-new keys are appended hidden. Non-zigbee custom properties are preserved untouched.
This commit is contained in:
@@ -68,19 +68,44 @@ def build_zigbee_properties(
|
||||
|
||||
Only includes a row when the value is non-empty. Shape matches the
|
||||
frontend ``NodeProperty`` type: ``{key, value, icon, visible}``.
|
||||
|
||||
New props default to ``visible=False`` — users opt in to showing them on
|
||||
the canvas card from the right panel.
|
||||
"""
|
||||
props: list[dict[str, Any]] = []
|
||||
if ieee:
|
||||
props.append({"key": "IEEE", "value": ieee, "icon": None, "visible": True})
|
||||
props.append({"key": "IEEE", "value": ieee, "icon": None, "visible": False})
|
||||
if vendor:
|
||||
props.append({"key": "Vendor", "value": vendor, "icon": None, "visible": True})
|
||||
props.append({"key": "Vendor", "value": vendor, "icon": None, "visible": False})
|
||||
if model:
|
||||
props.append({"key": "Model", "value": model, "icon": None, "visible": True})
|
||||
props.append({"key": "Model", "value": model, "icon": None, "visible": False})
|
||||
if lqi is not None:
|
||||
props.append({"key": "LQI", "value": str(lqi), "icon": None, "visible": True})
|
||||
props.append({"key": "LQI", "value": str(lqi), "icon": None, "visible": False})
|
||||
return props
|
||||
|
||||
|
||||
def merge_zigbee_properties(
|
||||
existing: list[dict[str, Any]] | None,
|
||||
new_props: list[dict[str, Any]],
|
||||
) -> list[dict[str, Any]]:
|
||||
"""Merge fresh zigbee props into an existing property list.
|
||||
|
||||
For keys already present: update ``value`` but preserve the user's
|
||||
``visible`` choice. New keys are appended with whatever visibility the
|
||||
caller gave them (hidden by default per ``build_zigbee_properties``).
|
||||
Non-zigbee custom properties are preserved untouched.
|
||||
"""
|
||||
out = [dict(p) for p in (existing or [])]
|
||||
by_key = {p.get("key"): p for p in out}
|
||||
for np in new_props:
|
||||
key = np.get("key")
|
||||
if key in by_key:
|
||||
by_key[key]["value"] = np.get("value")
|
||||
else:
|
||||
out.append(dict(np))
|
||||
return out
|
||||
|
||||
|
||||
def _z2m_type_to_homelable(device_type: str) -> str:
|
||||
"""Map a Z2M device type string to a homelable node type."""
|
||||
mapping = {
|
||||
|
||||
Reference in New Issue
Block a user