From ddc04dd48adbb3e24855f9dd5f9c261309931037 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Wed, 9 Apr 2025 17:44:13 +0200 Subject: [PATCH] Allow to copy IP address of Matter devices to clipboard (#24983) Often when debugging it is actually helpful to copy the IP address for further investigation. This PR changes the list to allow interaction and copies the IP address when clicked on a list item. --- .../matter/dialog-matter-ping-node.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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 1825ea704a..6d7f1f986e 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,6 +5,7 @@ import type { CSSResultGroup } from "lit"; import { css, html, LitElement, nothing } from "lit"; import { customElement, property, state } from "lit/decorators"; import { fireEvent } from "../../../../../common/dom/fire_event"; +import { copyToClipboard } from "../../../../../common/util/copy-clipboard"; import "../../../../../components/ha-spinner"; import "../../../../../components/ha-list-item"; import { createCloseHeading } from "../../../../../components/ha-dialog"; @@ -12,6 +13,7 @@ import { pingMatterNode } from "../../../../../data/matter"; import { haStyle, haStyleDialog } from "../../../../../resources/styles"; import type { HomeAssistant } from "../../../../../types"; import type { MatterPingNodeDialogParams } from "./show-dialog-matter-ping-node"; +import { showToast } from "../../../../../util/toast"; @customElement("dialog-matter-ping-node") class DialogMatterPingNode extends LitElement { @@ -30,6 +32,14 @@ class DialogMatterPingNode extends LitElement { this.device_id = params.device_id; } + private async _copyIpToClipboard(ev) { + const ip = ev.currentTarget.ip; + await copyToClipboard(ip); + showToast(this, { + message: this.hass.localize("ui.common.copied_clipboard"), + }); + } + protected render() { if (!this.device_id) { return nothing; @@ -75,7 +85,10 @@ class DialogMatterPingNode extends LitElement { ${this._pingResultEntries.map( ([ip, success]) => - html`${ip}