From df90a980346581845861581a2e0d9202c7bfae5e Mon Sep 17 00:00:00 2001 From: Jonas Date: Wed, 4 Sep 2024 12:24:58 +0200 Subject: [PATCH] fix(PageList): Sort numbers numeric (2 > 10) Fixes: #1447 Signed-off-by: Jonas --- src/tests/util/sortOrders.spec.js | 40 ++++++++++++++++++++++++++++++- src/util/sortOrders.js | 4 ++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/tests/util/sortOrders.spec.js b/src/tests/util/sortOrders.spec.js index f8f73c072..ec0b4d41d 100644 --- a/src/tests/util/sortOrders.spec.js +++ b/src/tests/util/sortOrders.spec.js @@ -3,7 +3,45 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { byOrder } from '../../util/sortOrders.js' +import { byName, byTitle, byOrder } from '../../util/sortOrders.js' + +global.OC = { + getLanguage: () => 'en', +} + +test('by name', () => { + const unsorted = [ + { name: '2' }, + { name: 'a' }, + { name: '10' }, + { name: '1' }, + ] + const sorted = [ + { name: '1' }, + { name: '2' }, + { name: '10' }, + { name: 'a' }, + ] + expect(unsorted.sort(byName)) + .toStrictEqual(sorted) +}) + +test('by title', () => { + const unsorted = [ + { title: '2' }, + { title: 'a' }, + { title: '10' }, + { title: '1' }, + ] + const sorted = [ + { title: '1' }, + { title: '2' }, + { title: '10' }, + { title: 'a' }, + ] + expect(unsorted.sort(byTitle)) + .toStrictEqual(sorted) +}) test('by indices', () => { const one = { index: 0 } diff --git a/src/util/sortOrders.js b/src/util/sortOrders.js index 8f86623a1..b7ac8c3c5 100644 --- a/src/util/sortOrders.js +++ b/src/util/sortOrders.js @@ -3,8 +3,8 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -const byName = (a, b) => a.name.localeCompare(b.name, OC.getLanguage()) -const byTitle = (a, b) => a.title.localeCompare(b.title, OC.getLanguage()) +const byName = (a, b) => a.name.localeCompare(b.name, OC.getLanguage(), { numeric: true }) +const byTitle = (a, b) => a.title.localeCompare(b.title, OC.getLanguage(), { numeric: true }) const byTimestamp = (a, b) => b.timestamp - a.timestamp const byOrder = (a, b) => {