From 72284997371c5341bb1e100bdab5d9dab261f551 Mon Sep 17 00:00:00 2001 From: tippfehlr Date: Thu, 10 Jul 2025 00:30:11 +0200 Subject: [PATCH] fix(theseus-gui): fix sort/group by game version (#1250) * fix(theseus-gui): fix sort/group by game version In the Library, game version 1.8.9 is sorted/grouped after 1.20 because the default sorting sorts 2 < 8 therefore localeCompare(with numeric=true) is needed, it detects 8 < 20 and puts the versions in the correct order. * lint --------- Co-authored-by: Prospector --- apps/app-frontend/src/components/GridDisplay.vue | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/app-frontend/src/components/GridDisplay.vue b/apps/app-frontend/src/components/GridDisplay.vue index 6e5dac5d8..2ced29564 100644 --- a/apps/app-frontend/src/components/GridDisplay.vue +++ b/apps/app-frontend/src/components/GridDisplay.vue @@ -136,7 +136,7 @@ const filteredResults = computed(() => { if (sortBy.value === 'Game version') { instances.sort((a, b) => { - return a.game_version.localeCompare(b.game_version) + return a.game_version.localeCompare(b.game_version, undefined, { numeric: true }) }) } @@ -213,6 +213,17 @@ const filteredResults = computed(() => { instanceMap.set(entry[0], entry[1]) }) } + // default sorting would do 1.20.4 < 1.8.9 because 2 < 8 + // localeCompare with numeric=true puts 1.8.9 < 1.20.4 because 8 < 20 + if (group.value === 'Game version') { + const sortedEntries = [...instanceMap.entries()].sort((a, b) => { + return a[0].localeCompare(b[0], undefined, { numeric: true }) + }) + instanceMap.clear() + sortedEntries.forEach((entry) => { + instanceMap.set(entry[0], entry[1]) + }) + } return instanceMap })