Update entity status filter and grouping (#20679)

This commit is contained in:
Bram Kragten 2024-04-30 23:04:48 +02:00 committed by GitHub
parent d0df029ff1
commit 17dcc90638
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 92 additions and 65 deletions

View File

@ -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: {

View File

@ -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>

View File

@ -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": {