[web] Fix sorting that is not kept in some situations

This commit is contained in:
Alain Nussbaumer 2024-03-12 13:45:53 +01:00
parent 006093c643
commit 9513097dd0

View File

@ -120,29 +120,26 @@ export class GroupedList {
} }
group(options, filterFns = []) { group(options, filterFns = []) {
const itemsFiltered = filterFns const itemsFiltered = this.items.filter((item) =>
? this.items.filter((item) => filterFns.every((fn) => fn(item))) filterFns.every((fn) => fn(item))
: this.items )
this.count = itemsFiltered.length this.count = itemsFiltered.length
// Sort item list // Sort item list
const itemsSorted = options.compareFn const itemsSorted = options.compareFn
? [...itemsFiltered].sort(options.compareFn) ? [...itemsFiltered].sort(options.compareFn)
: itemsFiltered : itemsFiltered
// Create index list
this.indices = [...new Set(itemsSorted.map(options.groupKeyFn))]
// Group item list // Group item list
this.itemsGrouped = itemsSorted.reduce((r, item) => { this.itemsGrouped = itemsSorted.reduce((map, item) => {
const groupKey = options.groupKeyFn(item) const groupKey = options.groupKeyFn(item)
r[groupKey] = [...(r[groupKey] || []), item] map.set(groupKey, [...(map.get(groupKey) || []), item])
return r return map
}, {}) }, new Map())
// Create index list
this.indices = Array.from(this.itemsGrouped.keys())
} }
*generate() { *generate() {
for (const key in this.itemsGrouped) { for (const [key, items] of this.itemsGrouped.entries()) {
if (key !== GROUP_KEY_NONE) { if (key !== GROUP_KEY_NONE) {
yield { yield {
groupKey: key, groupKey: key,
@ -151,7 +148,7 @@ export class GroupedList {
item: {} item: {}
} }
} }
for (const item of this.itemsGrouped[key]) { for (const item of items) {
yield { yield {
groupKey: key, groupKey: key,
itemId: item.id, itemId: item.id,