From 151031028fbf9dde9976f7bc2de1b7205eff0942 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Sat, 21 Feb 2026 03:51:40 +0000 Subject: [PATCH 1/2] prefer order column over creation date when sorting active achievements --- resources/js/common/utils/sortAchievements.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/resources/js/common/utils/sortAchievements.ts b/resources/js/common/utils/sortAchievements.ts index 8a028ee369..1f3378673a 100644 --- a/resources/js/common/utils/sortAchievements.ts +++ b/resources/js/common/utils/sortAchievements.ts @@ -203,15 +203,16 @@ export function sortAchievements( return aStatus - bStatus; } - // If status is the same, sort by date. + // If the order column is set, use it. + if (a.orderColumn !== b.orderColumn) { + return (a.orderColumn as number) - (b.orderColumn as number); + } + + // Fallback to sorting by creation date. const aDate = new Date(a.createdAt as string).valueOf(); const bDate = new Date(b.createdAt as string).valueOf(); - if (aDate !== bDate) { - return aDate - bDate; - } - // If date is the same, sort by orderColumn. - return (a.orderColumn as number) - (b.orderColumn as number); + return aDate - bDate; }); default: From 4dd7eaa907e8cdabeddd1d2c47a6a45d30cb8d98 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Mon, 23 Feb 2026 16:59:29 +0000 Subject: [PATCH 2/2] add test --- .../js/common/utils/sortAchievements.test.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/resources/js/common/utils/sortAchievements.test.ts b/resources/js/common/utils/sortAchievements.test.ts index 7603db1a03..e505bc2074 100644 --- a/resources/js/common/utils/sortAchievements.test.ts +++ b/resources/js/common/utils/sortAchievements.test.ts @@ -350,6 +350,38 @@ describe('Util: sortAchievements', () => { expect(result.map((a) => a.id)).toEqual([2, 3, 4, 5, 1]); }); + it('given active sort and same status, prioritizes orderColumn over createdAt', () => { + // ARRANGE + const baseAchievement = createAchievement(); + const achievements = [ + { ...baseAchievement, id: 1, orderColumn: 5, createdAt: '2023-01-01' }, + { ...baseAchievement, id: 2, orderColumn: 3, createdAt: '2023-06-01' }, + ]; + + const eventAchievements: App.Platform.Data.EventAchievement[] = [ + { + achievement: achievements[0], + activeFrom: dayjs().subtract(1, 'day').toISOString(), + activeThrough: dayjs().add(1, 'day').toISOString(), + activeUntil: dayjs().add(2, 'day').toISOString(), + isObfuscated: false, + }, + { + achievement: achievements[1], + activeFrom: dayjs().subtract(1, 'day').toISOString(), + activeThrough: dayjs().add(1, 'day').toISOString(), + activeUntil: dayjs().add(2, 'day').toISOString(), + isObfuscated: false, + }, + ]; + + // ACT + const result = sortAchievements(achievements, 'active', eventAchievements); + + // ASSERT + expect(result.map((a) => a.id)).toEqual([2, 1]); + }); + it('given an invalid sort order, returns achievements unmodified', () => { // ARRANGE const baseAchievement = createAchievement();