mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-23 17:26:42 +00:00
Update entity status filter and grouping (#20679)
This commit is contained in:
parent
d0df029ff1
commit
17dcc90638
@ -28,7 +28,6 @@ import { customElement, property, query, state } from "lit/decorators";
|
|||||||
import { ifDefined } from "lit/directives/if-defined";
|
import { ifDefined } from "lit/directives/if-defined";
|
||||||
import { styleMap } from "lit/directives/style-map";
|
import { styleMap } from "lit/directives/style-map";
|
||||||
import memoize from "memoize-one";
|
import memoize from "memoize-one";
|
||||||
import { stringCompare } from "../../../common/string/compare";
|
|
||||||
import { computeCssColor } from "../../../common/color/compute-color";
|
import { computeCssColor } from "../../../common/color/compute-color";
|
||||||
import { storage } from "../../../common/decorators/storage";
|
import { storage } from "../../../common/decorators/storage";
|
||||||
import type { HASSDomEvent } from "../../../common/dom/fire_event";
|
import type { HASSDomEvent } from "../../../common/dom/fire_event";
|
||||||
@ -117,6 +116,9 @@ export interface EntityRow extends StateEntity {
|
|||||||
localized_platform: string;
|
localized_platform: string;
|
||||||
domain: string;
|
domain: string;
|
||||||
label_entries: LabelRegistryEntry[];
|
label_entries: LabelRegistryEntry[];
|
||||||
|
enabled: string;
|
||||||
|
visible: string;
|
||||||
|
available: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@customElement("ha-config-entities")
|
@customElement("ha-config-entities")
|
||||||
@ -197,40 +199,40 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private _states = memoize((localize: LocalizeFunc) =>
|
private _states = memoize((localize: LocalizeFunc) => [
|
||||||
[
|
{
|
||||||
{
|
value: "available",
|
||||||
value: "available",
|
label: localize("ui.panel.config.entities.picker.status.available"),
|
||||||
label: localize("ui.panel.config.entities.picker.status.available"),
|
},
|
||||||
},
|
{
|
||||||
{
|
value: "unavailable",
|
||||||
value: "disabled",
|
label: localize("ui.panel.config.entities.picker.status.unavailable"),
|
||||||
label: localize("ui.panel.config.entities.picker.status.disabled"),
|
},
|
||||||
},
|
{
|
||||||
{
|
value: "enabled",
|
||||||
value: "hidden",
|
label: localize("ui.panel.config.entities.picker.status.enabled"),
|
||||||
label: localize("ui.panel.config.entities.picker.status.hidden"),
|
},
|
||||||
},
|
{
|
||||||
{
|
value: "disabled",
|
||||||
value: "unavailable",
|
label: localize("ui.panel.config.entities.picker.status.disabled"),
|
||||||
label: localize("ui.panel.config.entities.picker.status.unavailable"),
|
},
|
||||||
},
|
{
|
||||||
{
|
value: "visible",
|
||||||
value: "readonly",
|
label: localize("ui.panel.config.entities.picker.status.visible"),
|
||||||
label: localize("ui.panel.config.entities.picker.status.readonly"),
|
},
|
||||||
},
|
{
|
||||||
{
|
value: "hidden",
|
||||||
value: "restored",
|
label: localize("ui.panel.config.entities.picker.status.hidden"),
|
||||||
label: localize("ui.panel.config.entities.picker.status.restored"),
|
},
|
||||||
},
|
{
|
||||||
].sort((a, b) =>
|
value: "readonly",
|
||||||
stringCompare(
|
label: localize("ui.panel.config.entities.picker.status.unmanageable"),
|
||||||
a.label || a.value,
|
},
|
||||||
b.label || b.value,
|
{
|
||||||
this.hass.locale.language
|
value: "restored",
|
||||||
)
|
label: localize("ui.panel.config.entities.picker.status.not_provided"),
|
||||||
)
|
},
|
||||||
);
|
]);
|
||||||
|
|
||||||
private _columns = memoize(
|
private _columns = memoize(
|
||||||
(
|
(
|
||||||
@ -327,7 +329,6 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
|||||||
type: "icon",
|
type: "icon",
|
||||||
sortable: true,
|
sortable: true,
|
||||||
filterable: true,
|
filterable: true,
|
||||||
groupable: true,
|
|
||||||
width: "68px",
|
width: "68px",
|
||||||
template: (entry) =>
|
template: (entry) =>
|
||||||
entry.unavailable ||
|
entry.unavailable ||
|
||||||
@ -356,7 +357,7 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
|||||||
<simple-tooltip animation-delay="0" position="left">
|
<simple-tooltip animation-delay="0" position="left">
|
||||||
${entry.restored
|
${entry.restored
|
||||||
? this.hass.localize(
|
? this.hass.localize(
|
||||||
"ui.panel.config.entities.picker.status.restored"
|
"ui.panel.config.entities.picker.status.not_provided"
|
||||||
)
|
)
|
||||||
: entry.unavailable
|
: entry.unavailable
|
||||||
? this.hass.localize(
|
? this.hass.localize(
|
||||||
@ -371,13 +372,31 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
|||||||
"ui.panel.config.entities.picker.status.hidden"
|
"ui.panel.config.entities.picker.status.hidden"
|
||||||
)
|
)
|
||||||
: this.hass.localize(
|
: this.hass.localize(
|
||||||
"ui.panel.config.entities.picker.status.readonly"
|
"ui.panel.config.entities.picker.status.unmanageable"
|
||||||
)}
|
)}
|
||||||
</simple-tooltip>
|
</simple-tooltip>
|
||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
: "—",
|
: "—",
|
||||||
},
|
},
|
||||||
|
available: {
|
||||||
|
title: localize("ui.panel.config.entities.picker.headers.availability"),
|
||||||
|
sortable: true,
|
||||||
|
groupable: true,
|
||||||
|
hidden: true,
|
||||||
|
},
|
||||||
|
visible: {
|
||||||
|
title: localize("ui.panel.config.entities.picker.headers.visibility"),
|
||||||
|
sortable: true,
|
||||||
|
groupable: true,
|
||||||
|
hidden: true,
|
||||||
|
},
|
||||||
|
enabled: {
|
||||||
|
title: localize("ui.panel.config.entities.picker.headers.enabled"),
|
||||||
|
sortable: true,
|
||||||
|
groupable: true,
|
||||||
|
hidden: true,
|
||||||
|
},
|
||||||
labels: {
|
labels: {
|
||||||
title: "",
|
title: "",
|
||||||
hidden: true,
|
hidden: true,
|
||||||
@ -406,18 +425,22 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
|||||||
|
|
||||||
const stateFilters = filters["ha-filter-states"]?.value;
|
const stateFilters = filters["ha-filter-states"]?.value;
|
||||||
|
|
||||||
const showReadOnly =
|
const showEnabled =
|
||||||
!stateFilters?.length || stateFilters.includes("readonly");
|
!stateFilters?.length || stateFilters.includes("enabled");
|
||||||
const showDisabled =
|
const showDisabled =
|
||||||
!stateFilters?.length || stateFilters.includes("disabled");
|
!stateFilters?.length || stateFilters.includes("disabled");
|
||||||
|
const showVisible =
|
||||||
|
!stateFilters?.length || stateFilters.includes("visible");
|
||||||
const showHidden =
|
const showHidden =
|
||||||
!stateFilters?.length || stateFilters.includes("hidden");
|
!stateFilters?.length || stateFilters.includes("hidden");
|
||||||
const showUnavailable =
|
|
||||||
!stateFilters?.length || stateFilters.includes("unavailable");
|
|
||||||
const showAvailable =
|
const showAvailable =
|
||||||
!stateFilters?.length || stateFilters.includes("available");
|
!stateFilters?.length || stateFilters.includes("available");
|
||||||
|
const showUnavailable =
|
||||||
|
!stateFilters?.length || stateFilters.includes("unavailable");
|
||||||
const showRestored =
|
const showRestored =
|
||||||
!stateFilters?.length || stateFilters.includes("restored");
|
!stateFilters?.length || stateFilters.includes("restored");
|
||||||
|
const showReadOnly =
|
||||||
|
!stateFilters?.length || stateFilters.includes("readonly");
|
||||||
|
|
||||||
let filteredEntities = entities.concat(stateEntities);
|
let filteredEntities = entities.concat(stateEntities);
|
||||||
|
|
||||||
@ -487,21 +510,17 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
|||||||
const hidden = !!entry.hidden_by;
|
const hidden = !!entry.hidden_by;
|
||||||
const disabled = !!entry.disabled_by;
|
const disabled = !!entry.disabled_by;
|
||||||
const readonly = entry.readonly;
|
const readonly = entry.readonly;
|
||||||
const available = !(
|
const available = entity?.state && entity.state !== UNAVAILABLE;
|
||||||
unavailable ||
|
|
||||||
readonly ||
|
|
||||||
restored ||
|
|
||||||
hidden ||
|
|
||||||
disabled
|
|
||||||
);
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!(
|
!(
|
||||||
(showAvailable && available) ||
|
(showAvailable && available) ||
|
||||||
(showUnavailable && unavailable) ||
|
(showUnavailable && unavailable) ||
|
||||||
(showRestored && restored) ||
|
(showRestored && restored) ||
|
||||||
|
(showVisible && !hidden) ||
|
||||||
(showHidden && hidden) ||
|
(showHidden && hidden) ||
|
||||||
(showDisabled && disabled) ||
|
(showDisabled && disabled) ||
|
||||||
|
(showEnabled && !disabled) ||
|
||||||
(showReadOnly && readonly)
|
(showReadOnly && readonly)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@ -526,7 +545,7 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
|||||||
area: area ? area.name : "—",
|
area: area ? area.name : "—",
|
||||||
domain: domainToName(localize, computeDomain(entry.entity_id)),
|
domain: domainToName(localize, computeDomain(entry.entity_id)),
|
||||||
status: restored
|
status: restored
|
||||||
? localize("ui.panel.config.entities.picker.status.restored")
|
? localize("ui.panel.config.entities.picker.status.not_provided")
|
||||||
: unavailable
|
: unavailable
|
||||||
? localize("ui.panel.config.entities.picker.status.unavailable")
|
? localize("ui.panel.config.entities.picker.status.unavailable")
|
||||||
: disabled
|
: disabled
|
||||||
@ -535,12 +554,21 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
|||||||
? localize("ui.panel.config.entities.picker.status.hidden")
|
? localize("ui.panel.config.entities.picker.status.hidden")
|
||||||
: readonly
|
: readonly
|
||||||
? localize(
|
? localize(
|
||||||
"ui.panel.config.entities.picker.status.readonly"
|
"ui.panel.config.entities.picker.status.unmanageable"
|
||||||
)
|
)
|
||||||
: localize(
|
: localize(
|
||||||
"ui.panel.config.entities.picker.status.available"
|
"ui.panel.config.entities.picker.status.available"
|
||||||
),
|
),
|
||||||
label_entries: labelsEntries,
|
label_entries: labelsEntries,
|
||||||
|
available: unavailable
|
||||||
|
? localize("ui.panel.config.entities.picker.status.unavailable")
|
||||||
|
: localize("ui.panel.config.entities.picker.status.available"),
|
||||||
|
enabled: disabled
|
||||||
|
? localize("ui.panel.config.entities.picker.status.disabled")
|
||||||
|
: localize("ui.panel.config.entities.picker.status.enabled"),
|
||||||
|
visible: hidden
|
||||||
|
? localize("ui.panel.config.entities.picker.status.hidden")
|
||||||
|
: localize("ui.panel.config.entities.picker.status.visible"),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -887,7 +915,7 @@ ${
|
|||||||
protected firstUpdated() {
|
protected firstUpdated() {
|
||||||
this._filters = {
|
this._filters = {
|
||||||
"ha-filter-states": {
|
"ha-filter-states": {
|
||||||
value: ["unavailable", "readonly", "restored", "available"],
|
value: ["enabled"],
|
||||||
items: undefined,
|
items: undefined,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -902,10 +930,7 @@ ${
|
|||||||
this._filters = {
|
this._filters = {
|
||||||
...this._filters,
|
...this._filters,
|
||||||
"ha-filter-states": {
|
"ha-filter-states": {
|
||||||
value: [
|
value: [],
|
||||||
...(this._filters["ha-filter-states"]?.value || []),
|
|
||||||
"disabled",
|
|
||||||
],
|
|
||||||
items: undefined,
|
items: undefined,
|
||||||
},
|
},
|
||||||
"ha-filter-integrations": {
|
"ha-filter-integrations": {
|
||||||
@ -918,10 +943,7 @@ ${
|
|||||||
this._filters = {
|
this._filters = {
|
||||||
...this._filters,
|
...this._filters,
|
||||||
"ha-filter-states": {
|
"ha-filter-states": {
|
||||||
value: [
|
value: [],
|
||||||
...(this._filters["ha-filter-states"]?.value || []),
|
|
||||||
"disabled",
|
|
||||||
],
|
|
||||||
items: undefined,
|
items: undefined,
|
||||||
},
|
},
|
||||||
config_entry: {
|
config_entry: {
|
||||||
|
@ -309,7 +309,7 @@ export class HaConfigHelpers extends SubscribeMixin(LitElement) {
|
|||||||
<ha-svg-icon .path=${mdiPencilOff}></ha-svg-icon>
|
<ha-svg-icon .path=${mdiPencilOff}></ha-svg-icon>
|
||||||
<simple-tooltip animation-delay="0" position="left">
|
<simple-tooltip animation-delay="0" position="left">
|
||||||
${this.hass.localize(
|
${this.hass.localize(
|
||||||
"ui.panel.config.entities.picker.status.readonly"
|
"ui.panel.config.entities.picker.status.unmanageable"
|
||||||
)}
|
)}
|
||||||
</simple-tooltip>
|
</simple-tooltip>
|
||||||
</div>
|
</div>
|
||||||
|
@ -4062,12 +4062,14 @@
|
|||||||
"search": "Search {number} entities",
|
"search": "Search {number} entities",
|
||||||
"unnamed_entity": "Unnamed entity",
|
"unnamed_entity": "Unnamed entity",
|
||||||
"status": {
|
"status": {
|
||||||
"restored": "Restored",
|
|
||||||
"available": "Available",
|
"available": "Available",
|
||||||
"unavailable": "Unavailable",
|
"unavailable": "Unavailable",
|
||||||
|
"enabled": "Enabled",
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"readonly": "Read-only",
|
"visible": "Visible",
|
||||||
"hidden": "Hidden"
|
"hidden": "Hidden",
|
||||||
|
"not_provided": "Not provided",
|
||||||
|
"unmanageable": "Unmanageable"
|
||||||
},
|
},
|
||||||
"headers": {
|
"headers": {
|
||||||
"state_icon": "State icon",
|
"state_icon": "State icon",
|
||||||
@ -4077,7 +4079,10 @@
|
|||||||
"area": "Area",
|
"area": "Area",
|
||||||
"disabled_by": "Disabled by",
|
"disabled_by": "Disabled by",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"domain": "Domain"
|
"domain": "Domain",
|
||||||
|
"availability": "Availability",
|
||||||
|
"visibility": "Visibility",
|
||||||
|
"enabled": "Enabled"
|
||||||
},
|
},
|
||||||
"selected": "{number} selected",
|
"selected": "{number} selected",
|
||||||
"enable_selected": {
|
"enable_selected": {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user