From 567cbcee7cb65751efa74064455937b63b32e93d Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Tue, 30 Apr 2024 12:08:33 +0200 Subject: [PATCH] Add available state option for filters --- src/panels/config/entities/ha-config-entities.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/panels/config/entities/ha-config-entities.ts b/src/panels/config/entities/ha-config-entities.ts index 2260effc44..0dabfd98fa 100644 --- a/src/panels/config/entities/ha-config-entities.ts +++ b/src/panels/config/entities/ha-config-entities.ts @@ -197,6 +197,10 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) { }; private _states = memoize((localize: LocalizeFunc) => [ + { + value: "available", + label: localize("ui.panel.config.entities.picker.status.available"), + }, { value: "disabled", label: localize("ui.panel.config.entities.picker.status.disabled"), @@ -397,6 +401,8 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) { !stateFilters?.length || stateFilters.includes("hidden"); const showUnavailable = !stateFilters?.length || stateFilters.includes("unavailable"); + const showAvailable = + !stateFilters?.length || stateFilters.includes("available"); let filteredEntities = showReadOnly ? entities.concat(stateEntities) @@ -474,14 +480,21 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) { for (const entry of filteredEntities) { const entity = this.hass.states[entry.entity_id]; const unavailable = entity?.state === UNAVAILABLE; + const available = entity?.state && !unavailable; const restored = entity?.attributes.restored === true; const areaId = entry.area_id ?? devices[entry.device_id!]?.area_id; const area = areaId ? areas[areaId] : undefined; + const readonly = entry.readonly; + const hidden = !!entry.hidden_by; if (!showUnavailable && unavailable) { continue; } + if (!showAvailable && available && !readonly && !hidden) { + continue; + } + const labels = labelReg && entry?.labels; const labelsEntries = (labels || []).map( (lbl) => labelReg!.find((label) => label.label_id === lbl)! @@ -861,7 +874,7 @@ ${ protected firstUpdated() { this._filters = { "ha-filter-states": { - value: ["unavailable", "readonly"], + value: ["available", "unavailable", "readonly"], items: undefined, }, };