diff --git a/src/components/data-table/ha-data-table.ts b/src/components/data-table/ha-data-table.ts index 5426e1179e..e888690639 100644 --- a/src/components/data-table/ha-data-table.ts +++ b/src/components/data-table/ha-data-table.ts @@ -458,7 +458,8 @@ export class HaDataTable extends LitElement { filteredData, this._sortColumns[this._sortColumn], this._sortDirection, - this._sortColumn + this._sortColumn, + this.hass.locale.language ) : filteredData; diff --git a/src/components/data-table/sort-filter-worker.ts b/src/components/data-table/sort-filter-worker.ts index e2e3b859f4..babb0120b6 100644 --- a/src/components/data-table/sort-filter-worker.ts +++ b/src/components/data-table/sort-filter-worker.ts @@ -1,6 +1,7 @@ // To use comlink under ES5 -import "proxy-polyfill"; import { expose } from "comlink"; +import "proxy-polyfill"; +import { stringCompare } from "../../common/string/compare"; import type { ClonedDataTableColumnData, DataTableRowData, @@ -39,7 +40,8 @@ const sortData = ( data: DataTableRowData[], column: ClonedDataTableColumnData, direction: SortingDirection, - sortColumn: string + sortColumn: string, + language?: string ) => data.sort((a, b) => { let sort = 1; @@ -58,13 +60,8 @@ const sortData = ( if (column.type === "numeric") { valA = isNaN(valA) ? undefined : Number(valA); valB = isNaN(valB) ? undefined : Number(valB); - } else { - if (typeof valA === "string") { - valA = valA.toUpperCase(); - } - if (typeof valB === "string") { - valB = valB.toUpperCase(); - } + } else if (typeof valA === "string" && typeof valB === "string") { + return sort * stringCompare(valA, valB, language); } // Ensure "undefined" and "null" are always sorted to the bottom diff --git a/src/components/data-table/sort-filter.ts b/src/components/data-table/sort-filter.ts index e0eacf3305..b6d5310665 100644 --- a/src/components/data-table/sort-filter.ts +++ b/src/components/data-table/sort-filter.ts @@ -27,10 +27,12 @@ export const filterData = ( filter: FilterDataParamTypes[2] ): Promise> => getWorker().filterData(data, columns, filter); + export const sortData = ( data: SortDataParamTypes[0], columns: SortDataParamTypes[1], direction: SortDataParamTypes[2], - sortColumn: SortDataParamTypes[3] + sortColumn: SortDataParamTypes[3], + language?: SortDataParamTypes[4] ): Promise> => - getWorker().sortData(data, columns, direction, sortColumn); + getWorker().sortData(data, columns, direction, sortColumn, language);