Improve styling of MQTT debug info (#5626)

This commit is contained in:
Erik Montnemery 2020-04-28 23:09:20 +02:00 committed by GitHub
parent b0168fbb85
commit b04fe141ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 165 additions and 45 deletions

View File

@ -5,6 +5,7 @@ export interface MQTTMessage {
payload: string; payload: string;
qos: number; qos: number;
retain: number; retain: number;
time: string;
} }
export interface MQTTTopicDebugInfo { export interface MQTTTopicDebugInfo {

View File

@ -80,7 +80,7 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
<h4> <h4>
${this.hass!.localize("ui.dialogs.mqtt_device_debug_info.entities")} ${this.hass!.localize("ui.dialogs.mqtt_device_debug_info.entities")}
</h4> </h4>
<ul> <ul class="entitylist">
${this._debugInfo.entities.length ${this._debugInfo.entities.length
? this._renderEntities() ? this._renderEntities()
: html` : html`
@ -92,7 +92,7 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
<h4> <h4>
${this.hass!.localize("ui.dialogs.mqtt_device_debug_info.triggers")} ${this.hass!.localize("ui.dialogs.mqtt_device_debug_info.triggers")}
</h4> </h4>
<ul> <ul class="triggerlist">
${this._debugInfo.triggers.length ${this._debugInfo.triggers.length
? this._renderTriggers() ? this._renderTriggers()
: html` : html`
@ -125,11 +125,11 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
return html` return html`
${this._debugInfo!.entities.map( ${this._debugInfo!.entities.map(
(entity) => html` (entity) => html`
<li> <li class="entitylistitem">
'${computeStateName(this.hass.states[entity.entity_id])}' '${computeStateName(this.hass.states[entity.entity_id])}'
(<code>${entity.entity_id}</code>) (<code>${entity.entity_id}</code>)
<br />MQTT discovery data: <br />MQTT discovery data:
<ul> <ul class="discoverydata">
<li> <li>
Topic: Topic:
<code>${entity.discovery_data.topic}</code> <code>${entity.discovery_data.topic}</code>
@ -177,16 +177,23 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
return html` return html`
${this._debugInfo!.triggers.map( ${this._debugInfo!.triggers.map(
(trigger) => html` (trigger) => html`
<li> <li class="triggerlistitem">
Discovery topic: MQTT discovery data:
<code>${trigger.discovery_data.topic}</code> <ul class="discoverydata">
<mqtt-discovery-payload <li>
.hass=${this.hass} Topic:
.payload=${trigger.discovery_data.payload} <code>${trigger.discovery_data.topic}</code>
.showAsYaml=${this._showAsYaml} </li>
.summary="Discovery payload" <li>
> <mqtt-discovery-payload
.hass=${this.hass}
.payload=${trigger.discovery_data.payload}
.showAsYaml=${this._showAsYaml}
.summary=${"Payload"}
>
</li>
</mqtt-discovery-payload> </mqtt-discovery-payload>
</ul>
</li> </li>
` `
)} )}
@ -204,6 +211,17 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
ha-switch { ha-switch {
margin: 16px; margin: 16px;
} }
.discoverydata {
list-style-type: none;
margin: 4px;
padding-left: 16px;
}
.entitylistitem {
margin-bottom: 12px;
}
.triggerlistitem {
margin-bottom: 12px;
}
`, `,
]; ];
} }

View File

@ -1,11 +1,14 @@
import { safeDump } from "js-yaml"; import { safeDump } from "js-yaml";
import { import {
css,
CSSResult,
customElement, customElement,
html, html,
LitElement, LitElement,
property, property,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { classMap } from "lit-html/directives/class-map";
@customElement("mqtt-discovery-payload") @customElement("mqtt-discovery-payload")
class MQTTDiscoveryPayload extends LitElement { class MQTTDiscoveryPayload extends LitElement {
@ -19,12 +22,17 @@ class MQTTDiscoveryPayload extends LitElement {
protected render(): TemplateResult { protected render(): TemplateResult {
return html` return html`
<details @toggle=${this._handleToggle}> <div
<summary> class="expander ${classMap({ open: this._open })}"
${this.summary} @click=${this._handleToggle}
</summary> >
${this._open ? this._renderPayload() : ""} ${this.summary}
</details> </div>
${this._open
? html` <div class="payload">
${this._renderPayload()}
</div>`
: ""}
`; `;
} }
@ -37,8 +45,45 @@ class MQTTDiscoveryPayload extends LitElement {
`; `;
} }
private _handleToggle(ev) { private _handleToggle() {
this._open = ev.target.open; this._open = !this._open;
}
static get styles(): CSSResult {
return css`
.expander {
cursor: pointer;
position: relative;
padding: 8px;
padding-left: 29px;
border: 1px solid var(--divider-color);
}
.expander:before {
content: "";
position: absolute;
border-right: 2px solid var(--primary-text-color);
border-bottom: 2px solid var(--primary-text-color);
width: 5px;
height: 5px;
top: 50%;
left: 12px;
transform: translateY(-50%) rotate(-45deg);
}
.expander.open:before {
transform: translateY(-50%) rotate(45deg);
}
.payload {
border: 1px solid var(--divider-color);
border-top: 0;
padding-left: 16px;
}
pre {
display: inline-block;
font-size: 0.9em;
padding-left: 4px;
padding-right: 4px;
}
`;
} }
} }

View File

@ -1,15 +1,22 @@
import { safeDump } from "js-yaml"; import { safeDump } from "js-yaml";
import { import {
css,
CSSResult,
customElement, customElement,
html, html,
LitElement, LitElement,
property, property,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { classMap } from "lit-html/directives/class-map";
import { formatTimeWithSeconds } from "../../common/datetime/format_time";
import { HomeAssistant } from "../../types";
import { MQTTMessage } from "../../data/mqtt"; import { MQTTMessage } from "../../data/mqtt";
@customElement("mqtt-messages") @customElement("mqtt-messages")
class MQTTMessages extends LitElement { class MQTTMessages extends LitElement {
public hass!: HomeAssistant;
@property() public messages!: MQTTMessage[]; @property() public messages!: MQTTMessage[];
@property() public showAsYaml = false; @property() public showAsYaml = false;
@ -37,24 +44,32 @@ class MQTTMessages extends LitElement {
protected render(): TemplateResult { protected render(): TemplateResult {
return html` return html`
<details @toggle=${this._handleToggle}> <div
<summary> class="expander ${classMap({ open: this._open })}"
${this.summary} @click=${this._handleToggle}
</summary> >
${this._open ${this.summary}
? html` </div>
<ul> ${this._open
${this.messages.map( ? html`
(message) => html` <ul class="message-list">
<li> ${this.messages.map(
${this._renderSingleMessage(message)} (message) => html`
</li> <li class="message">
` <div class="time">
)} Received
</ul> ${formatTimeWithSeconds(
` new Date(message.time),
: ""} this.hass.language
</details> )}
</div>
${this._renderSingleMessage(message)}
</li>
`
)}
</ul>
`
: ""}
`; `;
} }
@ -62,10 +77,8 @@ class MQTTMessages extends LitElement {
const topic = message.topic; const topic = message.topic;
return this._showTopic return this._showTopic
? html` ? html`
<ul> <ul class="message-with-topic">
<li> <li>Topic: <code>${topic}</code></li>
Topic: ${topic}
</li>
<li> <li>
Payload: ${this._renderSinglePayload(message)} Payload: ${this._renderSinglePayload(message)}
</li> </li>
@ -118,8 +131,51 @@ class MQTTMessages extends LitElement {
return jsonPayload; return jsonPayload;
} }
private _handleToggle(ev) { private _handleToggle() {
this._open = ev.target.open; this._open = !this._open;
}
static get styles(): CSSResult {
return css`
.expander {
cursor: pointer;
position: relative;
padding: 8px;
padding-left: 29px;
border: 1px solid var(--divider-color);
}
.expander:before {
content: "";
position: absolute;
border-right: 2px solid var(--primary-text-color);
border-bottom: 2px solid var(--primary-text-color);
width: 5px;
height: 5px;
top: 50%;
left: 12px;
transform: translateY(-50%) rotate(-45deg);
}
.expander.open:before {
transform: translateY(-50%) rotate(45deg);
}
.message {
font-size: 0.9em;
margin-bottom: 12px;
}
.message-list {
border: 1px solid var(--divider-color);
border-top: 0;
padding-left: 28px;
margin: 0;
}
pre {
display: inline-block;
font-size: 0.9em;
margin: 0;
padding-left: 4px;
padding-right: 4px;
}
`;
} }
} }