Add grouping by area and domain in voice assistant expose data table (#20797)

This commit is contained in:
Paul Bottein 2024-05-15 11:41:09 +02:00 committed by GitHub
parent c864b34a9a
commit be26f8bc24
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 0 deletions

View File

@ -54,6 +54,8 @@ import { voiceAssistantTabs } from "./ha-config-voice-assistants";
import { showExposeEntityDialog } from "./show-dialog-expose-entity"; import { showExposeEntityDialog } from "./show-dialog-expose-entity";
import { showVoiceSettingsDialog } from "./show-dialog-voice-settings"; import { showVoiceSettingsDialog } from "./show-dialog-voice-settings";
import { storage } from "../../../common/decorators/storage"; import { storage } from "../../../common/decorators/storage";
import { domainToName } from "../../../data/integration";
import { computeDomain } from "../../../common/entity/compute_domain";
@customElement("ha-config-voice-assistants-expose") @customElement("ha-config-voice-assistants-expose")
export class VoiceAssistantsExpose extends LitElement { export class VoiceAssistantsExpose extends LitElement {
@ -96,6 +98,12 @@ export class VoiceAssistantsExpose extends LitElement {
}) })
private _activeSorting?: SortingChangedEvent; private _activeSorting?: SortingChangedEvent;
@storage({ key: "devices-table-grouping", state: false, subscribe: false })
private _activeGrouping?: string;
@storage({ key: "devices-table-collapsed", state: false, subscribe: false })
private _activeCollapsed?: string;
@query("hass-tabs-subpage-data-table", true) @query("hass-tabs-subpage-data-table", true)
private _dataTable!: HaTabsSubpageDataTable; private _dataTable!: HaTabsSubpageDataTable;
@ -136,9 +144,19 @@ export class VoiceAssistantsExpose extends LitElement {
<div class="secondary">${entry.entity_id}</div> <div class="secondary">${entry.entity_id}</div>
`, `,
}, },
domain: {
title: localize(
"ui.panel.config.voice_assistants.expose.headers.domain"
),
sortable: false,
hidden: true,
filterable: true,
groupable: true,
},
area: { area: {
title: localize("ui.panel.config.voice_assistants.expose.headers.area"), title: localize("ui.panel.config.voice_assistants.expose.headers.area"),
sortable: true, sortable: true,
groupable: true,
hidden: narrow, hidden: narrow,
filterable: true, filterable: true,
width: "15%", width: "15%",
@ -252,6 +270,7 @@ export class VoiceAssistantsExpose extends LitElement {
private _filteredEntities = memoize( private _filteredEntities = memoize(
( (
localize: LocalizeFunc,
entities: Record<string, ExtEntityRegistryEntry>, entities: Record<string, ExtEntityRegistryEntry>,
exposedEntities: Record<string, ExposeEntitySettings>, exposedEntities: Record<string, ExposeEntitySettings>,
devices: HomeAssistant["devices"], devices: HomeAssistant["devices"],
@ -332,6 +351,7 @@ export class VoiceAssistantsExpose extends LitElement {
this.hass.localize( this.hass.localize(
"ui.panel.config.entities.picker.unnamed_entity" "ui.panel.config.entities.picker.unnamed_entity"
), ),
domain: domainToName(localize, computeDomain(entityState.entity_id)),
area: area ? area.name : "—", area: area ? area.name : "—",
assistants: Object.keys( assistants: Object.keys(
exposedEntities?.[entityState.entity_id] exposedEntities?.[entityState.entity_id]
@ -479,6 +499,7 @@ export class VoiceAssistantsExpose extends LitElement {
} }
const filteredEntities = this._filteredEntities( const filteredEntities = this._filteredEntities(
this.hass.localize,
this._extEntities, this._extEntities,
this.exposedEntities, this.exposedEntities,
this.hass.devices, this.hass.devices,
@ -515,8 +536,12 @@ export class VoiceAssistantsExpose extends LitElement {
.selected=${this._selectedEntities.length} .selected=${this._selectedEntities.length}
clickable clickable
.initialSorting=${this._activeSorting} .initialSorting=${this._activeSorting}
.initialGroupColumn=${this._activeGrouping}
.initialCollapsedGroups=${this._activeCollapsed}
@sorting-changed=${this._handleSortingChanged} @sorting-changed=${this._handleSortingChanged}
@selection-changed=${this._handleSelectionChanged} @selection-changed=${this._handleSelectionChanged}
@grouping-changed=${this._handleGroupingChanged}
@collapsed-changed=${this._handleCollapseChanged}
@clear-filter=${this._clearFilter} @clear-filter=${this._clearFilter}
@search-changed=${this._handleSearchChange} @search-changed=${this._handleSearchChange}
@row-click=${this._openEditEntry} @row-click=${this._openEditEntry}
@ -711,6 +736,14 @@ export class VoiceAssistantsExpose extends LitElement {
this._activeSorting = ev.detail; this._activeSorting = ev.detail;
} }
private _handleGroupingChanged(ev: CustomEvent) {
this._activeGrouping = ev.detail.value;
}
private _handleCollapseChanged(ev: CustomEvent) {
this._activeCollapsed = ev.detail.value;
}
static get styles(): CSSResultGroup { static get styles(): CSSResultGroup {
return [ return [
haStyle, haStyle,

View File

@ -2650,6 +2650,7 @@
"headers": { "headers": {
"name": "Name", "name": "Name",
"area": "Area", "area": "Area",
"domain": "Domain",
"assistants": "Assistants", "assistants": "Assistants",
"aliases": "Aliases" "aliases": "Aliases"
}, },