@matter-server/dashboard 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -0
- package/dist/esm/pages/cluster-commands/base-cluster-commands.d.ts +2 -2
- package/dist/esm/pages/cluster-commands/base-cluster-commands.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/base-cluster-commands.js.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.d.ts +36 -0
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.d.ts.map +1 -0
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js +159 -0
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js.map +6 -0
- package/dist/esm/pages/cluster-commands/index.d.ts +1 -0
- package/dist/esm/pages/cluster-commands/index.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/index.js +1 -0
- package/dist/esm/pages/cluster-commands/index.js.map +1 -1
- package/dist/esm/pages/components/footer.d.ts.map +1 -1
- package/dist/esm/pages/components/footer.js +4 -7
- package/dist/esm/pages/components/footer.js.map +1 -1
- package/dist/esm/pages/components/header.d.ts +5 -0
- package/dist/esm/pages/components/header.d.ts.map +1 -1
- package/dist/esm/pages/components/header.js +75 -0
- package/dist/esm/pages/components/header.js.map +1 -1
- package/dist/esm/pages/components/node-details.js +2 -2
- package/dist/esm/pages/components/node-details.js.map +1 -1
- package/dist/esm/pages/components/server-details.d.ts.map +1 -1
- package/dist/esm/pages/components/server-details.js +0 -1
- package/dist/esm/pages/components/server-details.js.map +1 -1
- package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-cluster-view.js +9 -4
- package/dist/esm/pages/matter-cluster-view.js.map +1 -1
- package/dist/esm/pages/matter-dashboard-app.d.ts +12 -0
- package/dist/esm/pages/matter-dashboard-app.d.ts.map +1 -1
- package/dist/esm/pages/matter-dashboard-app.js +84 -4
- package/dist/esm/pages/matter-dashboard-app.js.map +1 -1
- package/dist/esm/pages/matter-endpoint-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-endpoint-view.js +8 -2
- package/dist/esm/pages/matter-endpoint-view.js.map +1 -1
- package/dist/esm/pages/matter-network-view.d.ts +52 -0
- package/dist/esm/pages/matter-network-view.d.ts.map +1 -0
- package/dist/esm/pages/matter-network-view.js +309 -0
- package/dist/esm/pages/matter-network-view.js.map +6 -0
- package/dist/esm/pages/matter-node-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-node-view.js +86 -3
- package/dist/esm/pages/matter-node-view.js.map +1 -1
- package/dist/esm/pages/matter-server-view.d.ts +4 -0
- package/dist/esm/pages/matter-server-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-server-view.js +16 -1
- package/dist/esm/pages/matter-server-view.js.map +1 -1
- package/dist/esm/pages/network/base-network-graph.d.ts +74 -0
- package/dist/esm/pages/network/base-network-graph.d.ts.map +1 -0
- package/dist/esm/pages/network/base-network-graph.js +411 -0
- package/dist/esm/pages/network/base-network-graph.js.map +6 -0
- package/dist/esm/pages/network/device-icons.d.ts +52 -0
- package/dist/esm/pages/network/device-icons.d.ts.map +1 -0
- package/dist/esm/pages/network/device-icons.js +197 -0
- package/dist/esm/pages/network/device-icons.js.map +6 -0
- package/dist/esm/pages/network/device-panel.d.ts +31 -0
- package/dist/esm/pages/network/device-panel.d.ts.map +1 -0
- package/dist/esm/pages/network/device-panel.js +183 -0
- package/dist/esm/pages/network/device-panel.js.map +6 -0
- package/dist/esm/pages/network/network-details.d.ts +77 -0
- package/dist/esm/pages/network/network-details.d.ts.map +1 -0
- package/dist/esm/pages/network/network-details.js +904 -0
- package/dist/esm/pages/network/network-details.js.map +6 -0
- package/dist/esm/pages/network/network-types.d.ts +159 -0
- package/dist/esm/pages/network/network-types.d.ts.map +1 -0
- package/dist/esm/pages/network/network-types.js +19 -0
- package/dist/esm/pages/network/network-types.js.map +6 -0
- package/dist/esm/pages/network/network-utils.d.ts +196 -0
- package/dist/esm/pages/network/network-utils.d.ts.map +1 -0
- package/dist/esm/pages/network/network-utils.js +540 -0
- package/dist/esm/pages/network/network-utils.js.map +6 -0
- package/dist/esm/pages/network/thread-graph.d.ts +27 -0
- package/dist/esm/pages/network/thread-graph.d.ts.map +1 -0
- package/dist/esm/pages/network/thread-graph.js +137 -0
- package/dist/esm/pages/network/thread-graph.js.map +6 -0
- package/dist/esm/pages/network/update-connections-dialog.d.ts +55 -0
- package/dist/esm/pages/network/update-connections-dialog.d.ts.map +1 -0
- package/dist/esm/pages/network/update-connections-dialog.js +284 -0
- package/dist/esm/pages/network/update-connections-dialog.js.map +6 -0
- package/dist/esm/pages/network/wifi-graph.d.ts +27 -0
- package/dist/esm/pages/network/wifi-graph.d.ts.map +1 -0
- package/dist/esm/pages/network/wifi-graph.js +169 -0
- package/dist/esm/pages/network/wifi-graph.js.map +6 -0
- package/dist/esm/util/format_hex.d.ts +18 -0
- package/dist/esm/util/format_hex.d.ts.map +1 -1
- package/dist/esm/util/format_hex.js +21 -1
- package/dist/esm/util/format_hex.js.map +1 -1
- package/dist/web/js/{commission-node-dialog-CBSDiqRW.js → commission-node-dialog-CcMuttYO.js} +5 -5
- package/dist/web/js/{commission-node-existing-TP6s8Tez.js → commission-node-existing-CqTRDMAr.js} +2 -5
- package/dist/web/js/{commission-node-thread-DOB8pu6x.js → commission-node-thread-DgwtTVwK.js} +2 -5
- package/dist/web/js/{commission-node-wifi-tzavmk1j.js → commission-node-wifi-XaN2SEnE.js} +2 -5
- package/dist/web/js/{dialog-box-Dknil_Be.js → dialog-box-COpDD8i7.js} +2 -2
- package/dist/web/js/{fire_event-DRpOSjJR.js → fire_event-mDYWi2sw.js} +1 -1
- package/dist/web/js/{log-level-dialog-TXkma-7Z.js → log-level-dialog-Bc32kZVw.js} +2 -3
- package/dist/web/js/main.js +1 -1
- package/dist/web/js/matter-dashboard-app-CrBHT4fT.js +31606 -0
- package/dist/web/js/{node-binding-dialog-D52FCBFP.js → node-binding-dialog-C8fqOJiB.js} +2 -4
- package/dist/web/js/prevent_default-D-ohDGsN.js +8 -0
- package/package.json +6 -5
- package/src/pages/cluster-commands/base-cluster-commands.ts +2 -2
- package/src/pages/cluster-commands/clusters/basic-information-commands.ts +171 -0
- package/src/pages/cluster-commands/index.ts +1 -0
- package/src/pages/components/footer.ts +4 -7
- package/src/pages/components/header.ts +81 -0
- package/src/pages/components/node-details.ts +3 -3
- package/src/pages/components/server-details.ts +0 -1
- package/src/pages/matter-cluster-view.ts +11 -4
- package/src/pages/matter-dashboard-app.ts +105 -5
- package/src/pages/matter-endpoint-view.ts +10 -3
- package/src/pages/matter-network-view.ts +325 -0
- package/src/pages/matter-node-view.ts +93 -4
- package/src/pages/matter-server-view.ts +17 -1
- package/src/pages/network/base-network-graph.ts +477 -0
- package/src/pages/network/device-icons.ts +283 -0
- package/src/pages/network/device-panel.ts +180 -0
- package/src/pages/network/network-details.ts +1015 -0
- package/src/pages/network/network-types.ts +167 -0
- package/src/pages/network/network-utils.ts +861 -0
- package/src/pages/network/thread-graph.ts +170 -0
- package/src/pages/network/update-connections-dialog.ts +327 -0
- package/src/pages/network/wifi-graph.ts +193 -0
- package/src/util/format_hex.ts +39 -0
- package/dist/web/js/matter-dashboard-app-B7GUghkC.js +0 -17254
- package/dist/web/js/outlined-text-field-D1DyKQY-.js +0 -968
- package/dist/web/js/prevent_default-BPgSQsuY.js +0 -814
- package/dist/web/js/validator-C735j770.js +0 -1122
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
4
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
5
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
6
|
+
if (decorator = decorators[i])
|
|
7
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
8
|
+
if (kind && result) __defProp(target, key, result);
|
|
9
|
+
return result;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* @license
|
|
13
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
14
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
*/
|
|
16
|
+
import { html } from "lit";
|
|
17
|
+
import { customElement } from "lit/decorators.js";
|
|
18
|
+
import { BaseNetworkGraph } from "./base-network-graph.js";
|
|
19
|
+
import { createNodeIconDataUrl, createUnknownDeviceIconDataUrl } from "./device-icons.js";
|
|
20
|
+
import {
|
|
21
|
+
buildExtAddrMap,
|
|
22
|
+
buildThreadConnections,
|
|
23
|
+
findUnknownDevices,
|
|
24
|
+
getDeviceName,
|
|
25
|
+
getNetworkType,
|
|
26
|
+
getThreadRole
|
|
27
|
+
} from "./network-utils.js";
|
|
28
|
+
let ThreadGraph = class extends BaseNetworkGraph {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(...arguments);
|
|
31
|
+
/** Cache of unknown devices for the current render */
|
|
32
|
+
this._unknownDevices = [];
|
|
33
|
+
/** Cached map of unknown devices (rebuilt in _updateGraph) */
|
|
34
|
+
this._unknownDevicesMapCache = /* @__PURE__ */ new Map();
|
|
35
|
+
}
|
|
36
|
+
/** Get unknown devices as a map for use by details panel */
|
|
37
|
+
get unknownDevicesMap() {
|
|
38
|
+
return this._unknownDevicesMapCache;
|
|
39
|
+
}
|
|
40
|
+
_updateGraph() {
|
|
41
|
+
if (!this._nodesDataSet || !this._edgesDataSet) return;
|
|
42
|
+
this._clearOriginalEdgeColors();
|
|
43
|
+
const threadNodes = Object.values(this.nodes).filter((node) => getNetworkType(node) === "thread");
|
|
44
|
+
if (threadNodes.length === 0) {
|
|
45
|
+
this._nodesDataSet.clear();
|
|
46
|
+
this._edgesDataSet.clear();
|
|
47
|
+
this._unknownDevices = [];
|
|
48
|
+
this._unknownDevicesMapCache.clear();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const extAddrMap = buildExtAddrMap(this.nodes);
|
|
52
|
+
this._unknownDevices = findUnknownDevices(this.nodes, extAddrMap);
|
|
53
|
+
this._unknownDevicesMapCache.clear();
|
|
54
|
+
for (const device of this._unknownDevices) {
|
|
55
|
+
this._unknownDevicesMapCache.set(device.id, {
|
|
56
|
+
extAddressHex: device.extAddressHex,
|
|
57
|
+
isRouter: device.isRouter,
|
|
58
|
+
seenBy: device.seenBy,
|
|
59
|
+
bestRssi: device.bestRssi
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const connections = buildThreadConnections(this.nodes, extAddrMap, this._unknownDevices);
|
|
63
|
+
const graphNodes = threadNodes.map((node) => {
|
|
64
|
+
const nodeId = String(node.node_id);
|
|
65
|
+
const threadRole = getThreadRole(node);
|
|
66
|
+
const isSelected = nodeId === String(this._selectedNodeId);
|
|
67
|
+
const isOffline = node.available === false;
|
|
68
|
+
return {
|
|
69
|
+
id: nodeId,
|
|
70
|
+
label: getDeviceName(node),
|
|
71
|
+
image: createNodeIconDataUrl(node, threadRole, isSelected, isOffline),
|
|
72
|
+
shape: "image",
|
|
73
|
+
networkType: "thread",
|
|
74
|
+
threadRole,
|
|
75
|
+
offline: isOffline
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
for (const unknown of this._unknownDevices) {
|
|
79
|
+
const isSelected = unknown.id === this._selectedNodeId;
|
|
80
|
+
graphNodes.push({
|
|
81
|
+
id: unknown.id,
|
|
82
|
+
label: `Unknown (${unknown.extAddressHex.slice(-8)})`,
|
|
83
|
+
image: createUnknownDeviceIconDataUrl(unknown.isRouter, isSelected),
|
|
84
|
+
shape: "image",
|
|
85
|
+
networkType: "thread",
|
|
86
|
+
isUnknown: true
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const graphEdges = connections.map((conn, index) => {
|
|
90
|
+
const isToUnknown = typeof conn.toNodeId === "string" && conn.toNodeId.startsWith("unknown_");
|
|
91
|
+
const fromNode = this.nodes[String(conn.fromNodeId)];
|
|
92
|
+
const toNode = this.nodes[String(conn.toNodeId)];
|
|
93
|
+
const hasOfflineEndpoint = fromNode?.available === false || toNode?.available === false;
|
|
94
|
+
return {
|
|
95
|
+
id: `edge_${index}`,
|
|
96
|
+
from: conn.fromNodeId,
|
|
97
|
+
to: conn.toNodeId,
|
|
98
|
+
color: {
|
|
99
|
+
color: conn.signalColor,
|
|
100
|
+
highlight: conn.signalColor
|
|
101
|
+
},
|
|
102
|
+
width: 2,
|
|
103
|
+
title: conn.rssi !== null ? `RSSI: ${conn.rssi} dBm, LQI: ${conn.lqi}` : `LQI: ${conn.lqi}`,
|
|
104
|
+
dashes: isToUnknown || hasOfflineEndpoint
|
|
105
|
+
// Dashed lines to unknown or offline devices
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
const existingNodeIds = this._nodesDataSet.getIds();
|
|
109
|
+
const newNodeIds = new Set(graphNodes.map((n) => n.id));
|
|
110
|
+
const nodesToRemove = existingNodeIds.filter((id) => !newNodeIds.has(id));
|
|
111
|
+
if (nodesToRemove.length > 0) {
|
|
112
|
+
this._nodesDataSet.remove(nodesToRemove);
|
|
113
|
+
}
|
|
114
|
+
this._nodesDataSet.update(graphNodes);
|
|
115
|
+
this._edgesDataSet.clear();
|
|
116
|
+
this._edgesDataSet.add(graphEdges);
|
|
117
|
+
}
|
|
118
|
+
render() {
|
|
119
|
+
const threadNodes = Object.values(this.nodes).filter((node) => getNetworkType(node) === "thread");
|
|
120
|
+
if (threadNodes.length === 0) {
|
|
121
|
+
return html`
|
|
122
|
+
<div class="empty-state">
|
|
123
|
+
<p>No Thread devices found</p>
|
|
124
|
+
<p class="hint">Thread devices will appear here once commissioned</p>
|
|
125
|
+
</div>
|
|
126
|
+
`;
|
|
127
|
+
}
|
|
128
|
+
return html`<div class="graph-container"></div>`;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
ThreadGraph = __decorateClass([
|
|
132
|
+
customElement("thread-graph")
|
|
133
|
+
], ThreadGraph);
|
|
134
|
+
export {
|
|
135
|
+
ThreadGraph
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=thread-graph.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/pages/network/thread-graph.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import "@material/web/button/filled-button";
|
|
7
|
+
import "@material/web/button/text-button";
|
|
8
|
+
import "@material/web/checkbox/checkbox";
|
|
9
|
+
import "@material/web/dialog/dialog";
|
|
10
|
+
import type { MatterClient, MatterNode } from "@matter-server/ws-client";
|
|
11
|
+
import { LitElement } from "lit";
|
|
12
|
+
declare global {
|
|
13
|
+
interface HTMLElementTagNameMap {
|
|
14
|
+
"update-connections-dialog": UpdateConnectionsDialog;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export declare class UpdateConnectionsDialog extends LitElement {
|
|
18
|
+
client: MatterClient;
|
|
19
|
+
nodes: Record<string, MatterNode>;
|
|
20
|
+
selectedNodeType: "online" | "offline" | "unknown";
|
|
21
|
+
selectedNodeName: string;
|
|
22
|
+
selectedNodeId: number | string | null;
|
|
23
|
+
onlineNeighborIds: string[];
|
|
24
|
+
private _includeNeighbors;
|
|
25
|
+
private _isUpdating;
|
|
26
|
+
/** Timeout ID for auto-close */
|
|
27
|
+
private _timeoutId;
|
|
28
|
+
/** Track if we've already dispatched close event to prevent double-firing */
|
|
29
|
+
private _hasClosedEvent;
|
|
30
|
+
firstUpdated(): void;
|
|
31
|
+
disconnectedCallback(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Get the number of nodes that will be updated.
|
|
34
|
+
*/
|
|
35
|
+
private get _updateCount();
|
|
36
|
+
/**
|
|
37
|
+
* Get the attribute paths to read for a node based on its network type.
|
|
38
|
+
*/
|
|
39
|
+
private _getAttributePathsForNode;
|
|
40
|
+
/**
|
|
41
|
+
* Get the list of node IDs to update based on current state.
|
|
42
|
+
*/
|
|
43
|
+
private _getNodeIdsToUpdate;
|
|
44
|
+
private _executeUpdate;
|
|
45
|
+
private _closeDialog;
|
|
46
|
+
/** Handle native dialog closed event (ESC key, backdrop click, etc.) */
|
|
47
|
+
private _handleDialogClosed;
|
|
48
|
+
private _handleCheckboxChange;
|
|
49
|
+
private _renderOnlineContent;
|
|
50
|
+
private _renderOfflineContent;
|
|
51
|
+
private _renderUnknownContent;
|
|
52
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
53
|
+
static styles: import("lit").CSSResult;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=update-connections-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-connections-dialog.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/update-connections-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,oCAAoC,CAAC;AAC5C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AACzC,OAAO,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,UAAU,EAA2B,MAAM,KAAK,CAAC;AAI1D,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,2BAA2B,EAAE,uBAAuB,CAAC;KACxD;CACJ;AAQD,qBACa,uBAAwB,SAAQ,UAAU;IAE5C,MAAM,EAAG,YAAY,CAAC;IAGtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAGvC,gBAAgB,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAY;IAG9D,gBAAgB,EAAE,MAAM,CAAM;IAG9B,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAQ;IAG9C,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAGxC,OAAO,CAAC,iBAAiB,CAAkB;IAG3C,OAAO,CAAC,WAAW,CAAkB;IAErC,gCAAgC;IAChC,OAAO,CAAC,UAAU,CAA8C;IAEhE,6EAA6E;IAC7E,OAAO,CAAC,eAAe,CAAkB;IAEhC,YAAY,IAAI,IAAI;IAMpB,oBAAoB,IAAI,IAAI;IASrC;;OAEG;IACH,OAAO,KAAK,YAAY,GAMvB;IAED;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;YAYb,cAAc;IA6C5B,OAAO,CAAC,YAAY;IAWpB,wEAAwE;IACxE,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,qBAAqB;IAepB,MAAM;IAiCf,OAAgB,MAAM,0BAwDpB;CACL"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
4
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
5
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
6
|
+
if (decorator = decorators[i])
|
|
7
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
8
|
+
if (kind && result) __defProp(target, key, result);
|
|
9
|
+
return result;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* @license
|
|
13
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
14
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
*/
|
|
16
|
+
import "@material/web/button/filled-button";
|
|
17
|
+
import "@material/web/button/text-button";
|
|
18
|
+
import "@material/web/checkbox/checkbox";
|
|
19
|
+
import "@material/web/dialog/dialog";
|
|
20
|
+
import { mdiLoading } from "@mdi/js";
|
|
21
|
+
import { LitElement, css, html, nothing, svg } from "lit";
|
|
22
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
23
|
+
import { getNetworkType } from "./network-utils.js";
|
|
24
|
+
const THREAD_ATTRIBUTE_PATHS = ["0/53/7", "0/53/8", "0/51/0"];
|
|
25
|
+
const WIFI_ATTRIBUTE_PATHS = ["0/54/0", "0/54/3", "0/54/4"];
|
|
26
|
+
let UpdateConnectionsDialog = class extends LitElement {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(...arguments);
|
|
29
|
+
this.nodes = {};
|
|
30
|
+
this.selectedNodeType = "online";
|
|
31
|
+
this.selectedNodeName = "";
|
|
32
|
+
this.selectedNodeId = null;
|
|
33
|
+
this.onlineNeighborIds = [];
|
|
34
|
+
this._includeNeighbors = false;
|
|
35
|
+
this._isUpdating = false;
|
|
36
|
+
/** Timeout ID for auto-close */
|
|
37
|
+
this._timeoutId = null;
|
|
38
|
+
/** Track if we've already dispatched close event to prevent double-firing */
|
|
39
|
+
this._hasClosedEvent = false;
|
|
40
|
+
}
|
|
41
|
+
firstUpdated() {
|
|
42
|
+
const dialog = this.shadowRoot?.querySelector("md-dialog");
|
|
43
|
+
dialog?.show();
|
|
44
|
+
}
|
|
45
|
+
disconnectedCallback() {
|
|
46
|
+
super.disconnectedCallback();
|
|
47
|
+
if (this._timeoutId) {
|
|
48
|
+
clearTimeout(this._timeoutId);
|
|
49
|
+
this._timeoutId = null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the number of nodes that will be updated.
|
|
54
|
+
*/
|
|
55
|
+
get _updateCount() {
|
|
56
|
+
if (this.selectedNodeType === "online") {
|
|
57
|
+
return this._includeNeighbors ? 1 + this.onlineNeighborIds.length : 1;
|
|
58
|
+
}
|
|
59
|
+
return this.onlineNeighborIds.length;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get the attribute paths to read for a node based on its network type.
|
|
63
|
+
*/
|
|
64
|
+
_getAttributePathsForNode(nodeId) {
|
|
65
|
+
const node = this.nodes[nodeId];
|
|
66
|
+
if (!node) return [];
|
|
67
|
+
const networkType = getNetworkType(node);
|
|
68
|
+
if (networkType === "thread") {
|
|
69
|
+
return THREAD_ATTRIBUTE_PATHS;
|
|
70
|
+
}
|
|
71
|
+
if (networkType === "wifi") {
|
|
72
|
+
return WIFI_ATTRIBUTE_PATHS;
|
|
73
|
+
}
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the list of node IDs to update based on current state.
|
|
78
|
+
*/
|
|
79
|
+
_getNodeIdsToUpdate() {
|
|
80
|
+
if (this.selectedNodeType === "online") {
|
|
81
|
+
const nodeIds = [String(this.selectedNodeId)];
|
|
82
|
+
if (this._includeNeighbors) {
|
|
83
|
+
nodeIds.push(...this.onlineNeighborIds);
|
|
84
|
+
}
|
|
85
|
+
return nodeIds;
|
|
86
|
+
}
|
|
87
|
+
return this.onlineNeighborIds;
|
|
88
|
+
}
|
|
89
|
+
async _executeUpdate() {
|
|
90
|
+
if (this._isUpdating || this._updateCount === 0) return;
|
|
91
|
+
this._isUpdating = true;
|
|
92
|
+
this._timeoutId = setTimeout(() => {
|
|
93
|
+
console.warn("Update connections timed out after 30s");
|
|
94
|
+
this._closeDialog();
|
|
95
|
+
}, 3e4);
|
|
96
|
+
try {
|
|
97
|
+
const nodeIds = this._getNodeIdsToUpdate();
|
|
98
|
+
const updatePromises = nodeIds.map(async (nodeIdStr) => {
|
|
99
|
+
const node = this.nodes[nodeIdStr];
|
|
100
|
+
if (!node) return;
|
|
101
|
+
const paths = this._getAttributePathsForNode(nodeIdStr);
|
|
102
|
+
if (paths.length === 0) return;
|
|
103
|
+
await this.client.readAttribute(node.node_id, paths);
|
|
104
|
+
});
|
|
105
|
+
await Promise.all(updatePromises);
|
|
106
|
+
this._closeDialog();
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error("Failed to update connections:", error);
|
|
109
|
+
this._closeDialog();
|
|
110
|
+
} finally {
|
|
111
|
+
if (this._timeoutId) {
|
|
112
|
+
clearTimeout(this._timeoutId);
|
|
113
|
+
this._timeoutId = null;
|
|
114
|
+
}
|
|
115
|
+
this._isUpdating = false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
_closeDialog() {
|
|
119
|
+
if (this._hasClosedEvent) return;
|
|
120
|
+
this._hasClosedEvent = true;
|
|
121
|
+
const dialog = this.shadowRoot?.querySelector("md-dialog");
|
|
122
|
+
dialog?.close();
|
|
123
|
+
this.dispatchEvent(new CustomEvent("dialog-closed", { bubbles: true, composed: true }));
|
|
124
|
+
}
|
|
125
|
+
/** Handle native dialog closed event (ESC key, backdrop click, etc.) */
|
|
126
|
+
_handleDialogClosed() {
|
|
127
|
+
this._closeDialog();
|
|
128
|
+
}
|
|
129
|
+
_handleCheckboxChange(e) {
|
|
130
|
+
const checkbox = e.target;
|
|
131
|
+
this._includeNeighbors = checkbox.checked;
|
|
132
|
+
}
|
|
133
|
+
_renderOnlineContent() {
|
|
134
|
+
return html`
|
|
135
|
+
<p>Refresh network information for "<strong>${this.selectedNodeName}</strong>".</p>
|
|
136
|
+
${this.onlineNeighborIds.length > 0 ? html`
|
|
137
|
+
<label class="checkbox-row">
|
|
138
|
+
<md-checkbox
|
|
139
|
+
?checked=${this._includeNeighbors}
|
|
140
|
+
@change=${this._handleCheckboxChange}
|
|
141
|
+
?disabled=${this._isUpdating}
|
|
142
|
+
></md-checkbox>
|
|
143
|
+
<span
|
|
144
|
+
>Include ${this.onlineNeighborIds.length} connected online
|
|
145
|
+
neighbor${this.onlineNeighborIds.length !== 1 ? "s" : ""}</span
|
|
146
|
+
>
|
|
147
|
+
</label>
|
|
148
|
+
` : nothing}
|
|
149
|
+
`;
|
|
150
|
+
}
|
|
151
|
+
_renderOfflineContent() {
|
|
152
|
+
return html`
|
|
153
|
+
<p>"<strong>${this.selectedNodeName}</strong>" appears to be offline.</p>
|
|
154
|
+
${this.onlineNeighborIds.length > 0 ? html`
|
|
155
|
+
<p>
|
|
156
|
+
Update network data from its ${this.onlineNeighborIds.length} online
|
|
157
|
+
neighbor${this.onlineNeighborIds.length !== 1 ? "s" : ""} to refresh connection info.
|
|
158
|
+
</p>
|
|
159
|
+
` : html` <p>No online neighbors available to update.</p> `}
|
|
160
|
+
`;
|
|
161
|
+
}
|
|
162
|
+
_renderUnknownContent() {
|
|
163
|
+
return html`
|
|
164
|
+
<p>This device is not commissioned to this fabric and cannot be queried directly.</p>
|
|
165
|
+
${this.onlineNeighborIds.length > 0 ? html`
|
|
166
|
+
<p>
|
|
167
|
+
Update network data from ${this.onlineNeighborIds.length}
|
|
168
|
+
node${this.onlineNeighborIds.length !== 1 ? "s" : ""} that
|
|
169
|
+
see${this.onlineNeighborIds.length === 1 ? "s" : ""} this device to refresh info.
|
|
170
|
+
</p>
|
|
171
|
+
` : html` <p>No online nodes available that see this device.</p> `}
|
|
172
|
+
`;
|
|
173
|
+
}
|
|
174
|
+
render() {
|
|
175
|
+
const buttonText = this._updateCount === 0 ? "No nodes to update" : `Update ${this._updateCount} node${this._updateCount !== 1 ? "s" : ""}`;
|
|
176
|
+
return html`
|
|
177
|
+
<md-dialog @closed=${this._handleDialogClosed}>
|
|
178
|
+
<div slot="headline">Update Connection Data</div>
|
|
179
|
+
<div slot="content">
|
|
180
|
+
${this.selectedNodeType === "online" ? this._renderOnlineContent() : this.selectedNodeType === "offline" ? this._renderOfflineContent() : this._renderUnknownContent()}
|
|
181
|
+
</div>
|
|
182
|
+
<div slot="actions">
|
|
183
|
+
<md-text-button @click=${this._closeDialog} ?disabled=${this._isUpdating}>Cancel</md-text-button>
|
|
184
|
+
<md-filled-button
|
|
185
|
+
@click=${this._executeUpdate}
|
|
186
|
+
?disabled=${this._isUpdating || this._updateCount === 0}
|
|
187
|
+
>
|
|
188
|
+
${this._isUpdating ? html`<span class="updating-content"
|
|
189
|
+
>${svg`<svg class="spinner" viewBox="0 0 24 24" width="18" height="18"><path fill="currentColor" d="${mdiLoading}"/></svg>`}Updating...</span
|
|
190
|
+
>` : buttonText}
|
|
191
|
+
</md-filled-button>
|
|
192
|
+
</div>
|
|
193
|
+
</md-dialog>
|
|
194
|
+
`;
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
UpdateConnectionsDialog.styles = css`
|
|
198
|
+
md-dialog {
|
|
199
|
+
--md-dialog-container-color: var(--md-sys-color-surface, #fff);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
[slot="content"] {
|
|
203
|
+
padding: 0 24px;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
[slot="content"] p {
|
|
207
|
+
margin: 0 0 16px 0;
|
|
208
|
+
font-size: 0.875rem;
|
|
209
|
+
line-height: 1.5;
|
|
210
|
+
color: var(--md-sys-color-on-surface, #333);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
[slot="content"] p:last-child {
|
|
214
|
+
margin-bottom: 0;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.checkbox-row {
|
|
218
|
+
display: flex;
|
|
219
|
+
align-items: center;
|
|
220
|
+
gap: 8px;
|
|
221
|
+
cursor: pointer;
|
|
222
|
+
font-size: 0.875rem;
|
|
223
|
+
color: var(--md-sys-color-on-surface, #333);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.updating-content {
|
|
227
|
+
display: inline-flex;
|
|
228
|
+
align-items: center;
|
|
229
|
+
gap: 8px;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.spinner {
|
|
233
|
+
animation: spin 1s linear infinite;
|
|
234
|
+
flex-shrink: 0;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.updating-content svg {
|
|
238
|
+
color: inherit;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
@keyframes spin {
|
|
242
|
+
from {
|
|
243
|
+
transform: rotate(0deg);
|
|
244
|
+
}
|
|
245
|
+
to {
|
|
246
|
+
transform: rotate(360deg);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
md-filled-button {
|
|
251
|
+
min-width: 140px;
|
|
252
|
+
}
|
|
253
|
+
`;
|
|
254
|
+
__decorateClass([
|
|
255
|
+
property({ type: Object })
|
|
256
|
+
], UpdateConnectionsDialog.prototype, "client", 2);
|
|
257
|
+
__decorateClass([
|
|
258
|
+
property({ type: Object })
|
|
259
|
+
], UpdateConnectionsDialog.prototype, "nodes", 2);
|
|
260
|
+
__decorateClass([
|
|
261
|
+
property({ type: String })
|
|
262
|
+
], UpdateConnectionsDialog.prototype, "selectedNodeType", 2);
|
|
263
|
+
__decorateClass([
|
|
264
|
+
property({ type: String })
|
|
265
|
+
], UpdateConnectionsDialog.prototype, "selectedNodeName", 2);
|
|
266
|
+
__decorateClass([
|
|
267
|
+
property()
|
|
268
|
+
], UpdateConnectionsDialog.prototype, "selectedNodeId", 2);
|
|
269
|
+
__decorateClass([
|
|
270
|
+
property({ type: Array })
|
|
271
|
+
], UpdateConnectionsDialog.prototype, "onlineNeighborIds", 2);
|
|
272
|
+
__decorateClass([
|
|
273
|
+
state()
|
|
274
|
+
], UpdateConnectionsDialog.prototype, "_includeNeighbors", 2);
|
|
275
|
+
__decorateClass([
|
|
276
|
+
state()
|
|
277
|
+
], UpdateConnectionsDialog.prototype, "_isUpdating", 2);
|
|
278
|
+
UpdateConnectionsDialog = __decorateClass([
|
|
279
|
+
customElement("update-connections-dialog")
|
|
280
|
+
], UpdateConnectionsDialog);
|
|
281
|
+
export {
|
|
282
|
+
UpdateConnectionsDialog
|
|
283
|
+
};
|
|
284
|
+
//# sourceMappingURL=update-connections-dialog.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/pages/network/update-connections-dialog.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BaseNetworkGraph } from "./base-network-graph.js";
|
|
7
|
+
declare global {
|
|
8
|
+
interface HTMLElementTagNameMap {
|
|
9
|
+
"wifi-graph": WiFiGraph;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export declare class WiFiGraph extends BaseNetworkGraph {
|
|
13
|
+
/** Cache of access points for the current render */
|
|
14
|
+
private _accessPoints;
|
|
15
|
+
/** Get access points map for use by details panel */
|
|
16
|
+
get wifiAccessPointsMap(): Map<string, {
|
|
17
|
+
bssid: string;
|
|
18
|
+
connectedNodes: string[];
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Override physics for WiFi star topology - needs stronger cluster separation.
|
|
22
|
+
*/
|
|
23
|
+
protected _getPhysicsOptions(): any;
|
|
24
|
+
protected _updateGraph(): void;
|
|
25
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=wifi-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wifi-graph.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/wifi-graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAW3D,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,YAAY,EAAE,SAAS,CAAC;KAC3B;CACJ;AASD,qBACa,SAAU,SAAQ,gBAAgB;IAC3C,oDAAoD;IACpD,OAAO,CAAC,aAAa,CAA2C;IAEhE,qDAAqD;IACrD,IAAW,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAEzF;IAED;;OAEG;cACgB,kBAAkB,IAAI,GAAG;cAoBzB,YAAY,IAAI,IAAI;IAgH9B,MAAM;CAelB"}
|