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;
qos: number;
retain: number;
time: string;
}
export interface MQTTTopicDebugInfo {

View File

@ -80,7 +80,7 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
<h4>
${this.hass!.localize("ui.dialogs.mqtt_device_debug_info.entities")}
</h4>
<ul>
<ul class="entitylist">
${this._debugInfo.entities.length
? this._renderEntities()
: html`
@ -92,7 +92,7 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
<h4>
${this.hass!.localize("ui.dialogs.mqtt_device_debug_info.triggers")}
</h4>
<ul>
<ul class="triggerlist">
${this._debugInfo.triggers.length
? this._renderTriggers()
: html`
@ -125,11 +125,11 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
return html`
${this._debugInfo!.entities.map(
(entity) => html`
<li>
<li class="entitylistitem">
'${computeStateName(this.hass.states[entity.entity_id])}'
(<code>${entity.entity_id}</code>)
<br />MQTT discovery data:
<ul>
<ul class="discoverydata">
<li>
Topic:
<code>${entity.discovery_data.topic}</code>
@ -177,16 +177,23 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
return html`
${this._debugInfo!.triggers.map(
(trigger) => html`
<li>
Discovery topic:
<code>${trigger.discovery_data.topic}</code>
<mqtt-discovery-payload
.hass=${this.hass}
.payload=${trigger.discovery_data.payload}
.showAsYaml=${this._showAsYaml}
.summary="Discovery payload"
>
<li class="triggerlistitem">
MQTT discovery data:
<ul class="discoverydata">
<li>
Topic:
<code>${trigger.discovery_data.topic}</code>
</li>
<li>
<mqtt-discovery-payload
.hass=${this.hass}
.payload=${trigger.discovery_data.payload}
.showAsYaml=${this._showAsYaml}
.summary=${"Payload"}
>
</li>
</mqtt-discovery-payload>
</ul>
</li>
`
)}
@ -204,6 +211,17 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
ha-switch {
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 {
css,
CSSResult,
customElement,
html,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { classMap } from "lit-html/directives/class-map";
@customElement("mqtt-discovery-payload")
class MQTTDiscoveryPayload extends LitElement {
@ -19,12 +22,17 @@ class MQTTDiscoveryPayload extends LitElement {
protected render(): TemplateResult {
return html`
<details @toggle=${this._handleToggle}>
<summary>
${this.summary}
</summary>
${this._open ? this._renderPayload() : ""}
</details>
<div
class="expander ${classMap({ open: this._open })}"
@click=${this._handleToggle}
>
${this.summary}
</div>
${this._open
? html` <div class="payload">
${this._renderPayload()}
</div>`
: ""}
`;
}
@ -37,8 +45,45 @@ class MQTTDiscoveryPayload extends LitElement {
`;
}
private _handleToggle(ev) {
this._open = ev.target.open;
private _handleToggle() {
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 {
css,
CSSResult,
customElement,
html,
LitElement,
property,
TemplateResult,
} 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";
@customElement("mqtt-messages")
class MQTTMessages extends LitElement {
public hass!: HomeAssistant;
@property() public messages!: MQTTMessage[];
@property() public showAsYaml = false;
@ -37,24 +44,32 @@ class MQTTMessages extends LitElement {
protected render(): TemplateResult {
return html`
<details @toggle=${this._handleToggle}>
<summary>
${this.summary}
</summary>
${this._open
? html`
<ul>
${this.messages.map(
(message) => html`
<li>
${this._renderSingleMessage(message)}
</li>
`
)}
</ul>
`
: ""}
</details>
<div
class="expander ${classMap({ open: this._open })}"
@click=${this._handleToggle}
>
${this.summary}
</div>
${this._open
? html`
<ul class="message-list">
${this.messages.map(
(message) => html`
<li class="message">
<div class="time">
Received
${formatTimeWithSeconds(
new Date(message.time),
this.hass.language
)}
</div>
${this._renderSingleMessage(message)}
</li>
`
)}
</ul>
`
: ""}
`;
}
@ -62,10 +77,8 @@ class MQTTMessages extends LitElement {
const topic = message.topic;
return this._showTopic
? html`
<ul>
<li>
Topic: ${topic}
</li>
<ul class="message-with-topic">
<li>Topic: <code>${topic}</code></li>
<li>
Payload: ${this._renderSinglePayload(message)}
</li>
@ -118,8 +131,51 @@ class MQTTMessages extends LitElement {
return jsonPayload;
}
private _handleToggle(ev) {
this._open = ev.target.open;
private _handleToggle() {
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;
}
`;
}
}