Add no IP found message to ping a matter device (#22103)

This commit is contained in:
Wendelin 2024-09-26 18:22:28 +02:00 committed by GitHub
parent 59945cb2f8
commit 5551e98388
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 58 additions and 46 deletions

View File

@ -5,7 +5,7 @@ import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-circular-progress";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import { pingMatterNode, MatterPingResult } from "../../../../../data/matter"; import { pingMatterNode } from "../../../../../data/matter";
import { haStyle, haStyleDialog } from "../../../../../resources/styles"; import { haStyle, haStyleDialog } from "../../../../../resources/styles";
import { HomeAssistant } from "../../../../../types"; import { HomeAssistant } from "../../../../../types";
import { MatterPingNodeDialogParams } from "./show-dialog-matter-ping-node"; import { MatterPingNodeDialogParams } from "./show-dialog-matter-ping-node";
@ -16,9 +16,12 @@ class DialogMatterPingNode extends LitElement {
@state() private device_id?: string; @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<void> { public async showDialog(params: MatterPingNodeDialogParams): Promise<void> {
this.device_id = params.device_id; 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.hass.localize("ui.panel.config.matter.ping_node.title")
)} )}
> >
${this._pingResult ${this._status === "failed"
? html` ? html`
<h2> <div class="flex-container">
${this.hass.localize( <ha-svg-icon
"ui.panel.config.matter.ping_node.ping_complete" .path=${mdiCloseCircle}
)} class="failed"
</h2> ></ha-svg-icon>
<mwc-list> <div class="status">
${Object.entries(this._pingResult).map( <p>
([ip, success]) => ${this.hass.localize(
html`<ha-list-item hasMeta noninteractive this._pingResultEntries
>${ip} ? "ui.panel.config.matter.ping_node.no_ip_found"
<ha-svg-icon : "ui.panel.config.matter.ping_node.ping_failed"
slot="meta" )}
.path=${success ? mdiCheckCircle : mdiAlertCircle} </p>
class=${success ? "success" : "failed"} </div>
></ha-svg-icon> </div>
</ha-list-item>`
)}
</mwc-list>
<mwc-button slot="primaryAction" @click=${this.closeDialog}> <mwc-button slot="primaryAction" @click=${this.closeDialog}>
${this.hass.localize("ui.common.close")} ${this.hass.localize("ui.common.close")}
</mwc-button> </mwc-button>
` `
: this._status === "started" : this._pingResultEntries
? html` ? html`
<div class="flex-container"> <h2>
<ha-circular-progress indeterminate></ha-circular-progress> ${this.hass.localize(
<div class="status"> "ui.panel.config.matter.ping_node.ping_complete"
<p> )}
<b> </h2>
${this.hass.localize( <mwc-list>
"ui.panel.config.matter.ping_node.in_progress" ${this._pingResultEntries.map(
)} ([ip, success]) =>
</b> html`<ha-list-item hasMeta noninteractive
</p> >${ip}
</div> <ha-svg-icon
</div> slot="meta"
.path=${success ? mdiCheckCircle : mdiAlertCircle}
class=${success ? "success" : "failed"}
></ha-svg-icon>
</ha-list-item>`
)}
</mwc-list>
<mwc-button slot="primaryAction" @click=${this.closeDialog}> <mwc-button slot="primaryAction" @click=${this.closeDialog}>
${this.hass.localize("ui.common.close")} ${this.hass.localize("ui.common.close")}
</mwc-button> </mwc-button>
` `
: this._status === "failed" : this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-svg-icon <ha-circular-progress indeterminate></ha-circular-progress>
.path=${mdiCloseCircle}
class="failed"
></ha-svg-icon>
<div class="status"> <div class="status">
<p> <p>
${this.hass.localize( <b>
"ui.panel.config.matter.ping_node.ping_failed" ${this.hass.localize(
)} "ui.panel.config.matter.ping_node.in_progress"
)}
</b>
</p> </p>
</div> </div>
</div> </div>
@ -128,7 +133,13 @@ class DialogMatterPingNode extends LitElement {
} }
this._status = "started"; this._status = "started";
try { 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) { } catch (err) {
this._status = "failed"; this._status = "failed";
} }
@ -137,7 +148,7 @@ class DialogMatterPingNode extends LitElement {
public closeDialog(): void { public closeDialog(): void {
this.device_id = undefined; this.device_id = undefined;
this._status = undefined; this._status = undefined;
this._pingResult = undefined; this._pingResultEntries = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName }); fireEvent(this, "dialog-closed", { dialog: this.localName });
} }

View File

@ -5127,7 +5127,8 @@
"start_ping": "Start ping", "start_ping": "Start ping",
"in_progress": "The device is being pinged. This may take some time.", "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_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": { "open_commissioning_window": {
"title": "Share device", "title": "Share device",