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(); 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: