mirror of
https://github.com/home-assistant/frontend.git
synced 2026-02-14 23:18:21 +00:00
Entities card: add “area” for “secondary_info” (#29268)
* add "area/floor" labels for secondary-info for Entities card * use STRINGS_SEPARATOR_DOT * add "area/floor" for secondary-info * add "area/floor" for secondary-info * add "area/floor" for secondary-info * use STRINGS_SEPARATOR_DOT * use STRINGS_SEPARATOR_DOT * use STRINGS_SEPARATOR_DOT * add STRINGS_SEPARATOR_DOT * changed an order & renamed an option * fixed name for "area with floor" * chaged an order & renamed an entry * renamed "area with floor" entry * add STRINGS_SEPARATOR_DOT * Delete src/common/strings-separator.ts * change import * change import * change import * change import * change import * fix import * fix import * fix import * remove "area-with-floor" * remove "area-with-floor" * remove "area-with-floor" * remove unneeded comma * remove "area-with-floor" * clean up * typo * Apply suggestion from @MindFreeze Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com> * move area definition into a separate method --------- Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
This commit is contained in:
@@ -116,3 +116,6 @@ export const UNIT_F = "°F";
|
|||||||
|
|
||||||
/** Entity ID of the default view. */
|
/** Entity ID of the default view. */
|
||||||
export const DEFAULT_VIEW_ENTITY_ID = "group.default_view";
|
export const DEFAULT_VIEW_ENTITY_ID = "group.default_view";
|
||||||
|
|
||||||
|
/** String to visually separate labels on UI */
|
||||||
|
export const STRINGS_SEPARATOR_DOT = " · ";
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import type { LocalizeFunc } from "../../common/translations/localize";
|
|||||||
import { debounce } from "../../common/util/debounce";
|
import { debounce } from "../../common/util/debounce";
|
||||||
import { groupBy } from "../../common/util/group-by";
|
import { groupBy } from "../../common/util/group-by";
|
||||||
import { nextRender } from "../../common/util/render-status";
|
import { nextRender } from "../../common/util/render-status";
|
||||||
|
import { STRINGS_SEPARATOR_DOT } from "../../common/const";
|
||||||
import { haStyleScrollbar } from "../../resources/styles";
|
import { haStyleScrollbar } from "../../resources/styles";
|
||||||
import { loadVirtualizer } from "../../resources/virtualizer";
|
import { loadVirtualizer } from "../../resources/virtualizer";
|
||||||
import type { HomeAssistant } from "../../types";
|
import type { HomeAssistant } from "../../types";
|
||||||
@@ -636,7 +637,7 @@ export class HaDataTable extends LitElement {
|
|||||||
.map(
|
.map(
|
||||||
([key2, column2], i) =>
|
([key2, column2], i) =>
|
||||||
html`${i !== 0
|
html`${i !== 0
|
||||||
? " · "
|
? STRINGS_SEPARATOR_DOT
|
||||||
: nothing}${column2.template
|
: nothing}${column2.template
|
||||||
? column2.template(row)
|
? column2.template(row)
|
||||||
: row[key2]}`
|
: row[key2]}`
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { css, html, LitElement, nothing } from "lit";
|
|||||||
import { customElement, property } from "lit/decorators";
|
import { customElement, property } from "lit/decorators";
|
||||||
import { relativeTime } from "../../../common/datetime/relative_time";
|
import { relativeTime } from "../../../common/datetime/relative_time";
|
||||||
import { capitalizeFirstLetter } from "../../../common/string/capitalize-first-letter";
|
import { capitalizeFirstLetter } from "../../../common/string/capitalize-first-letter";
|
||||||
|
import { STRINGS_SEPARATOR_DOT } from "../../../common/const";
|
||||||
import "../../../components/ha-md-list";
|
import "../../../components/ha-md-list";
|
||||||
import "../../../components/ha-md-list-item";
|
import "../../../components/ha-md-list-item";
|
||||||
import { domainToName } from "../../../data/integration";
|
import { domainToName } from "../../../data/integration";
|
||||||
@@ -99,7 +100,7 @@ class HaConfigRepairs extends LitElement {
|
|||||||
${(issue.severity === "critical" ||
|
${(issue.severity === "critical" ||
|
||||||
issue.severity === "error") &&
|
issue.severity === "error") &&
|
||||||
issue.created
|
issue.created
|
||||||
? " · "
|
? STRINGS_SEPARATOR_DOT
|
||||||
: ""}
|
: ""}
|
||||||
${createdBy
|
${createdBy
|
||||||
? html`<span .title=${createdBy}>${createdBy}</span>`
|
? html`<span .title=${createdBy}>${createdBy}</span>`
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { ifDefined } from "lit/directives/if-defined";
|
|||||||
import { styleMap } from "lit/directives/style-map";
|
import { styleMap } from "lit/directives/style-map";
|
||||||
import memoizeOne from "memoize-one";
|
import memoizeOne from "memoize-one";
|
||||||
import { computeCssColor } from "../../../common/color/compute-color";
|
import { computeCssColor } from "../../../common/color/compute-color";
|
||||||
import { BINARY_STATE_ON } from "../../../common/const";
|
import { BINARY_STATE_ON, STRINGS_SEPARATOR_DOT } from "../../../common/const";
|
||||||
import { computeAreaName } from "../../../common/entity/compute_area_name";
|
import { computeAreaName } from "../../../common/entity/compute_area_name";
|
||||||
import { generateEntityFilter } from "../../../common/entity/entity_filter";
|
import { generateEntityFilter } from "../../../common/entity/entity_filter";
|
||||||
import type { ActionHandlerEvent } from "../../../data/lovelace/action_handler";
|
import type { ActionHandlerEvent } from "../../../data/lovelace/action_handler";
|
||||||
@@ -522,7 +522,7 @@ export class HuiAreaCard extends LitElement implements LovelaceCard {
|
|||||||
return `${formattedValue}${formattedUnit}`;
|
return `${formattedValue}${formattedUnit}`;
|
||||||
})
|
})
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.join(" · ");
|
.join(STRINGS_SEPARATOR_DOT);
|
||||||
|
|
||||||
return sensorStates;
|
return sensorStates;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ export interface EntitiesCardEntityConfig extends EntityConfig {
|
|||||||
| "last-changed"
|
| "last-changed"
|
||||||
| "last-triggered"
|
| "last-triggered"
|
||||||
| "last-updated"
|
| "last-updated"
|
||||||
|
| "area"
|
||||||
| "position"
|
| "position"
|
||||||
| "state"
|
| "state"
|
||||||
| "tilt-position"
|
| "tilt-position"
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import { uid } from "../../../common/util/uid";
|
|||||||
import { stopPropagation } from "../../../common/dom/stop_propagation";
|
import { stopPropagation } from "../../../common/dom/stop_propagation";
|
||||||
import { toggleAttribute } from "../../../common/dom/toggle_attribute";
|
import { toggleAttribute } from "../../../common/dom/toggle_attribute";
|
||||||
import { computeDomain } from "../../../common/entity/compute_domain";
|
import { computeDomain } from "../../../common/entity/compute_domain";
|
||||||
|
import { computeAreaName } from "../../../common/entity/compute_area_name";
|
||||||
|
import { getEntityContext } from "../../../common/entity/context/get_entity_context";
|
||||||
import { formatDateTimeWithSeconds } from "../../../common/datetime/format_date_time";
|
import { formatDateTimeWithSeconds } from "../../../common/datetime/format_date_time";
|
||||||
import "../../../components/entity/state-badge";
|
import "../../../components/entity/state-badge";
|
||||||
import "../../../components/ha-relative-time";
|
import "../../../components/ha-relative-time";
|
||||||
@@ -199,7 +201,9 @@ export class HuiGenericEntityRow extends LitElement {
|
|||||||
? html`${this.hass.formatEntityState(
|
? html`${this.hass.formatEntityState(
|
||||||
stateObj
|
stateObj
|
||||||
)}`
|
)}`
|
||||||
: nothing)}
|
: this.config.secondary_info === "area"
|
||||||
|
? (this._getArea(stateObj) ?? nothing)
|
||||||
|
: nothing)}
|
||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
: nothing}
|
: nothing}
|
||||||
@@ -235,6 +239,17 @@ export class HuiGenericEntityRow extends LitElement {
|
|||||||
handleAction(this, this.hass!, this.config!, ev.detail.action!);
|
handleAction(this, this.hass!, this.config!, ev.detail.action!);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _getArea(stateObj) {
|
||||||
|
const context = getEntityContext(
|
||||||
|
stateObj,
|
||||||
|
this.hass!.entities,
|
||||||
|
this.hass!.devices,
|
||||||
|
this.hass!.areas,
|
||||||
|
this.hass!.floors
|
||||||
|
);
|
||||||
|
return context.area ? computeAreaName(context.area) : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
static styles = css`
|
static styles = css`
|
||||||
:host {
|
:host {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ const SECONDARY_INFO_VALUES = {
|
|||||||
"last-changed": {},
|
"last-changed": {},
|
||||||
"last-updated": {},
|
"last-updated": {},
|
||||||
"last-triggered": { domains: ["automation", "script"] },
|
"last-triggered": { domains: ["automation", "script"] },
|
||||||
|
area: {},
|
||||||
position: { domains: ["cover"] },
|
position: { domains: ["cover"] },
|
||||||
state: {},
|
state: {},
|
||||||
"tilt-position": { domains: ["cover"] },
|
"tilt-position": { domains: ["cover"] },
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { customElement, property } from "lit/decorators";
|
|||||||
import { join } from "lit/directives/join";
|
import { join } from "lit/directives/join";
|
||||||
import { ensureArray } from "../common/array/ensure-array";
|
import { ensureArray } from "../common/array/ensure-array";
|
||||||
import { computeStateDomain } from "../common/entity/compute_state_domain";
|
import { computeStateDomain } from "../common/entity/compute_state_domain";
|
||||||
|
import { STRINGS_SEPARATOR_DOT } from "../common/const";
|
||||||
import "../components/ha-relative-time";
|
import "../components/ha-relative-time";
|
||||||
import { isUnavailableState } from "../data/entity/entity";
|
import { isUnavailableState } from "../data/entity/entity";
|
||||||
import { SENSOR_DEVICE_CLASS_TIMESTAMP } from "../data/sensor";
|
import { SENSOR_DEVICE_CLASS_TIMESTAMP } from "../data/sensor";
|
||||||
@@ -194,7 +195,7 @@ class StateDisplay extends LitElement {
|
|||||||
return html`${this.hass!.formatEntityState(stateObj)}`;
|
return html`${this.hass!.formatEntityState(stateObj)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return join(values, " · ");
|
return join(values, STRINGS_SEPARATOR_DOT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8634,7 +8634,8 @@
|
|||||||
"tilt-position": "Tilt position",
|
"tilt-position": "Tilt position",
|
||||||
"brightness": "Brightness",
|
"brightness": "Brightness",
|
||||||
"last-updated": "Last updated",
|
"last-updated": "Last updated",
|
||||||
"state": "State"
|
"state": "State",
|
||||||
|
"area": "Area"
|
||||||
},
|
},
|
||||||
"entity_row": {
|
"entity_row": {
|
||||||
"divider": "Divider",
|
"divider": "Divider",
|
||||||
|
|||||||
Reference in New Issue
Block a user