From 32777b42591ff88e4b8782da0c1a13d34a7fccd3 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 25 Aug 2021 11:20:35 +0200 Subject: [PATCH] Add value column prop to ha data table (#9824) --- src/components/data-table/ha-data-table.ts | 5 +++-- .../data-table/sort_filter_worker.ts | 18 +++++++++++------- .../devices/ha-config-devices-dashboard.ts | 6 ++++++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/components/data-table/ha-data-table.ts b/src/components/data-table/ha-data-table.ts index 08929cd6f5..c1a69b8858 100644 --- a/src/components/data-table/ha-data-table.ts +++ b/src/components/data-table/ha-data-table.ts @@ -62,6 +62,7 @@ export interface DataTableSortColumnData { sortable?: boolean; filterable?: boolean; filterKey?: string; + valueColumn?: string; direction?: SortingDirection; } @@ -76,7 +77,7 @@ export interface DataTableColumnData extends DataTableSortColumnData { hidden?: boolean; } -type ClonedDataTableColumnData = Omit & { +export type ClonedDataTableColumnData = Omit & { title?: TemplateResult | string; }; @@ -455,7 +456,7 @@ export class HaDataTable extends LitElement { const prom = this._sortColumn ? sortData( filteredData, - this._sortColumns, + this._sortColumns[this._sortColumn], this._sortDirection, this._sortColumn ) diff --git a/src/components/data-table/sort_filter_worker.ts b/src/components/data-table/sort_filter_worker.ts index e0636aa4d3..286bae3014 100644 --- a/src/components/data-table/sort_filter_worker.ts +++ b/src/components/data-table/sort_filter_worker.ts @@ -2,8 +2,8 @@ import { expose } from "comlink"; import "proxy-polyfill"; import type { + ClonedDataTableColumnData, DataTableRowData, - DataTableSortColumnData, SortableColumnContainer, SortingDirection, } from "./ha-data-table"; @@ -19,7 +19,11 @@ const filterData = ( const [key, column] = columnEntry; if (column.filterable) { if ( - String(column.filterKey ? row[key][column.filterKey] : row[key]) + String( + column.filterKey + ? row[column.valueColumn || key][column.filterKey] + : row[column.valueColumn || key] + ) .toUpperCase() .includes(filter) ) { @@ -33,7 +37,7 @@ const filterData = ( const sortData = ( data: DataTableRowData[], - column: DataTableSortColumnData, + column: ClonedDataTableColumnData, direction: SortingDirection, sortColumn: string ) => @@ -44,12 +48,12 @@ const sortData = ( } let valA = column.filterKey - ? a[sortColumn][column.filterKey] - : a[sortColumn]; + ? a[column.valueColumn || sortColumn][column.filterKey] + : a[column.valueColumn || sortColumn]; let valB = column.filterKey - ? b[sortColumn][column.filterKey] - : b[sortColumn]; + ? b[column.valueColumn || sortColumn][column.filterKey] + : b[column.valueColumn || sortColumn]; if (typeof valA === "string") { valA = valA.toUpperCase(); diff --git a/src/panels/config/devices/ha-config-devices-dashboard.ts b/src/panels/config/devices/ha-config-devices-dashboard.ts index b30b7a24d4..5c31fb7b8c 100644 --- a/src/panels/config/devices/ha-config-devices-dashboard.ts +++ b/src/panels/config/devices/ha-config-devices-dashboard.ts @@ -212,6 +212,10 @@ export class HaConfigDeviceDashboard extends LitElement { this._batteryEntity(device.id, deviceEntityLookup), this._batteryChargingEntity(device.id, deviceEntityLookup), ], + battery_level: + this.hass.states[ + this._batteryEntity(device.id, deviceEntityLookup) || "" + ]?.state, })); this._numHiddenDevices = startLength - outputDevices.length; @@ -286,9 +290,11 @@ export class HaConfigDeviceDashboard extends LitElement { columns.battery_entity = { title: this.hass.localize("ui.panel.config.devices.data_table.battery"), sortable: true, + filterable: true, type: "numeric", width: narrow ? "95px" : "15%", maxWidth: "95px", + valueColumn: "battery_level", template: (batteryEntityPair: DeviceRowData["battery_entity"]) => { const battery = batteryEntityPair && batteryEntityPair[0]