Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/components/entity/ha-entity-attribute-picker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { PolymerChangedEvent } from "../../polymer-types";
import { HomeAssistant } from "../../types";
import "../ha-svg-icon";
import "./state-badge";
import { formatAttributeName } from "../../util/hass-attributes-util";
import "@material/mwc-icon-button/mwc-icon-button";

export type HaEntityPickerEntityFilterFunc = (entityId: HassEntity) => boolean;
Expand All @@ -35,7 +36,9 @@ const rowRenderer = (root: HTMLElement, _owner, model: { item: string }) => {
<paper-item></paper-item>
`;
}
root.querySelector("paper-item")!.textContent = model.item;
root.querySelector("paper-item")!.textContent = formatAttributeName(
model.item
);
};

@customElement("ha-entity-attribute-picker")
Expand Down Expand Up @@ -92,7 +95,7 @@ class HaEntityAttributePicker extends LitElement {
this.hass.localize(
"ui.components.entity.entity-attribute-picker.attribute"
)}
.value=${this._value}
.value=${this._value ? formatAttributeName(this._value) : ""}
.disabled=${this.disabled || !this.entityId}
class="input"
autocapitalize="none"
Expand Down Expand Up @@ -140,7 +143,7 @@ class HaEntityAttributePicker extends LitElement {
}

private get _value() {
return this.value || "";
return this.value;
}

private _openedChanged(ev: PolymerChangedEvent<boolean>) {
Expand Down
12 changes: 7 additions & 5 deletions src/components/ha-attributes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ import {
TemplateResult,
} from "lit-element";
import { until } from "lit-html/directives/until";
import hassAttributeUtil from "../util/hass-attributes-util";
import hassAttributeUtil, {
formatAttributeName,
} from "../util/hass-attributes-util";

let jsYamlPromise: Promise<typeof import("js-yaml")>;

Expand All @@ -34,7 +36,7 @@ class HaAttributes extends LitElement {
(attribute) => html`
<div class="data-entry">
<div class="key">
${attribute.replace(/_/g, " ").replace(/\bid\b/g, "ID")}
${formatAttributeName(attribute)}
</div>
<div class="value">
${this.formatAttribute(attribute)}
Expand All @@ -61,12 +63,12 @@ class HaAttributes extends LitElement {
justify-content: space-between;
}
.data-entry .value {
max-width: 200px;
max-width: 50%;
overflow-wrap: break-word;
text-align: right;
}
.key:first-letter {
text-transform: capitalize;
.key {
flex-grow: 1;
}
.attribution {
color: var(--secondary-text-color);
Expand Down
2 changes: 1 addition & 1 deletion src/components/ha-climate-state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class HaClimateState extends LitElement {

private _computeTarget(): string {
if (!this.hass || !this.stateObj) {
return "";
return "";
}

if (
Expand Down
6 changes: 6 additions & 0 deletions src/dialogs/more-info/controls/more-info-sun.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,12 @@ class MoreInfoSun extends LitElement {
flex-direction: row;
justify-content: space-between;
}
ha-relative-time {
display: inline-block;
}
ha-relative-time::first-letter {
text-transform: lowercase;
}
`;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/panels/config/customize/types/ha-customize-icon.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class HaCustomizeIcon extends PolymerElement {
<ha-icon class="icon-image" icon="[[item.value]]"></ha-icon>
<paper-input
disabled="[[item.secondary]]"
label="icon"
label="Icon"
value="{{item.value}}"
>
</paper-input>
Expand Down
6 changes: 5 additions & 1 deletion src/panels/config/customize/types/ha-customize-string.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import "@polymer/paper-input/paper-input";
import { html } from "@polymer/polymer/lib/utils/html-tag";
/* eslint-plugin-disable lit */
import { PolymerElement } from "@polymer/polymer/polymer-element";
import { formatAttributeName } from "../../../../util/hass-attributes-util";

class HaCustomizeString extends PolymerElement {
static get template() {
Expand All @@ -25,7 +26,10 @@ class HaCustomizeString extends PolymerElement {
}

getLabel(item) {
return item.description + (item.type === "json" ? " (JSON formatted)" : "");
return (
formatAttributeName(item.description) +
(item.type === "json" ? " (JSON formatted)" : "")
);
}
}
customElements.define("ha-customize-string", HaCustomizeString);
1 change: 0 additions & 1 deletion src/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,6 @@
"history": "History",
"last_changed": "Last changed",
"last_updated": "Last updated",
"last_changed": "Last changed",
"script": {
"last_action": "Last Action",
"last_triggered": "Last Triggered"
Expand Down
115 changes: 0 additions & 115 deletions src/util/hass-attributes-util.js

This file was deleted.

120 changes: 120 additions & 0 deletions src/util/hass-attributes-util.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
const hassAttributeUtil = {
DOMAIN_DEVICE_CLASS: {
binary_sensor: [
"battery",
"cold",
"connectivity",
"door",
"garage_door",
"gas",
"heat",
"light",
"lock",
"moisture",
"motion",
"moving",
"occupancy",
"opening",
"plug",
"power",
"presence",
"problem",
"safety",
"smoke",
"sound",
"vibration",
"window",
],
cover: [
"awning",
"blind",
"curtain",
"damper",
"door",
"garage",
"shade",
"shutter",
"window",
],
humidifier: ["dehumidifier", "humidifier"],
sensor: [
"battery",
"humidity",
"illuminance",
"temperature",
"pressure",
"power",
"signal_strength",
"timestamp",
],
switch: ["switch", "outlet"],
},
UNKNOWN_TYPE: "json",
ADD_TYPE: "key-value",
TYPE_TO_TAG: {
string: "ha-customize-string",
json: "ha-customize-string",
icon: "ha-customize-icon",
boolean: "ha-customize-boolean",
array: "ha-customize-array",
"key-value": "ha-customize-key-value",
},
LOGIC_STATE_ATTRIBUTES: {},
};

// Attributes here serve dual purpose:
// 1) Any key of this object won't be shown in more-info window.
// 2) Any key which has value other than undefined will appear in customization
// config according to its value.
hassAttributeUtil.LOGIC_STATE_ATTRIBUTES = {
entity_picture: undefined,
friendly_name: { type: "string", description: "Name" },
icon: { type: "icon" },
emulated_hue: {
type: "boolean",
domains: ["emulated_hue"],
},
emulated_hue_name: {
type: "string",
domains: ["emulated_hue"],
},
haaska_hidden: undefined,
haaska_name: undefined,
supported_features: undefined,
attribution: undefined,
restored: undefined,
custom_ui_more_info: { type: "string" },
custom_ui_state_card: { type: "string" },
device_class: {
type: "array",
options: hassAttributeUtil.DOMAIN_DEVICE_CLASS,
description: "Device class",
domains: ["binary_sensor", "cover", "humidifier", "sensor", "switch"],
},
assumed_state: {
type: "boolean",
domains: [
"switch",
"light",
"cover",
"climate",
"fan",
"humidifier",
"group",
"water_heater",
],
},
initial_state: {
type: "string",
domains: ["automation"],
},
unit_of_measurement: { type: "string" },
};

export default hassAttributeUtil;

// Convert from internal snake_case format to user-friendly format
export function formatAttributeName(value: string): string {
value = value.replace(/_/g, " ").replace(/\bid\b/g, "ID");
return value.charAt(0).toUpperCase() + value.slice(1);
}