diff --git a/src/panels/config/integrations/integration-panels/matter/dialog-matter-ping-node.ts b/src/panels/config/integrations/integration-panels/matter/dialog-matter-ping-node.ts index cbe8dc544f..7eac7b39d1 100644 --- a/src/panels/config/integrations/integration-panels/matter/dialog-matter-ping-node.ts +++ b/src/panels/config/integrations/integration-panels/matter/dialog-matter-ping-node.ts @@ -5,7 +5,7 @@ import { customElement, property, state } from "lit/decorators"; import { fireEvent } from "../../../../../common/dom/fire_event"; import "../../../../../components/ha-circular-progress"; import { createCloseHeading } from "../../../../../components/ha-dialog"; -import { pingMatterNode, MatterPingResult } from "../../../../../data/matter"; +import { pingMatterNode } from "../../../../../data/matter"; import { haStyle, haStyleDialog } from "../../../../../resources/styles"; import { HomeAssistant } from "../../../../../types"; import { MatterPingNodeDialogParams } from "./show-dialog-matter-ping-node"; @@ -16,9 +16,12 @@ class DialogMatterPingNode extends LitElement { @state() private device_id?: string; - @state() private _status?: string; + @state() private _status?: "started" | "failed"; - @state() private _pingResult?: MatterPingResult; + @state() private _pingResultEntries?: [ + ip_address: string, + success: boolean, + ][]; public async showDialog(params: MatterPingNodeDialogParams): Promise { this.device_id = params.device_id; @@ -38,60 +41,62 @@ class DialogMatterPingNode extends LitElement { this.hass.localize("ui.panel.config.matter.ping_node.title") )} > - ${this._pingResult + ${this._status === "failed" ? html` -

- ${this.hass.localize( - "ui.panel.config.matter.ping_node.ping_complete" - )} -

- - ${Object.entries(this._pingResult).map( - ([ip, success]) => - html`${ip} - - ` - )} - +
+ +
+

+ ${this.hass.localize( + this._pingResultEntries + ? "ui.panel.config.matter.ping_node.no_ip_found" + : "ui.panel.config.matter.ping_node.ping_failed" + )} +

+
+
${this.hass.localize("ui.common.close")} ` - : this._status === "started" + : this._pingResultEntries ? html` -
- -
-

- - ${this.hass.localize( - "ui.panel.config.matter.ping_node.in_progress" - )} - -

-
-
+

+ ${this.hass.localize( + "ui.panel.config.matter.ping_node.ping_complete" + )} +

+ + ${this._pingResultEntries.map( + ([ip, success]) => + html`${ip} + + ` + )} + ${this.hass.localize("ui.common.close")} ` - : this._status === "failed" + : this._status === "started" ? html`
- +

- ${this.hass.localize( - "ui.panel.config.matter.ping_node.ping_failed" - )} + + ${this.hass.localize( + "ui.panel.config.matter.ping_node.in_progress" + )} +

@@ -128,7 +133,13 @@ class DialogMatterPingNode extends LitElement { } this._status = "started"; try { - this._pingResult = await pingMatterNode(this.hass, this.device_id!); + const pingResult = await pingMatterNode(this.hass, this.device_id!); + const pingResultEntries = Object.entries(pingResult); + if (pingResultEntries.length === 0) { + this._status = "failed"; + } + + this._pingResultEntries = pingResultEntries; } catch (err) { this._status = "failed"; } @@ -137,7 +148,7 @@ class DialogMatterPingNode extends LitElement { public closeDialog(): void { this.device_id = undefined; this._status = undefined; - this._pingResult = undefined; + this._pingResultEntries = undefined; fireEvent(this, "dialog-closed", { dialog: this.localName }); } diff --git a/src/translations/en.json b/src/translations/en.json index a98734fc3e..20677c99f7 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -5127,7 +5127,8 @@ "start_ping": "Start ping", "in_progress": "The device is being pinged. This may take some time.", "ping_failed": "The device ping failed. Additional information may be available in the logs.", - "ping_complete": "Ping device complete." + "ping_complete": "Ping device complete.", + "no_ip_found": "The device ping failed. No IP addresses found for this device." }, "open_commissioning_window": { "title": "Share device",