From 1a8c6c846b73b0cb7a201dad2af48be65d9a507f Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Mon, 26 Jun 2023 09:44:21 +0200 Subject: [PATCH] Allow to sort reverse cf #698 --- umap/static/umap/js/umap.core.js | 9 ++++-- umap/static/umap/test/Util.js | 51 ++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/umap/static/umap/js/umap.core.js b/umap/static/umap/js/umap.core.js index bb740c02..f3e98e0b 100644 --- a/umap/static/umap/js/umap.core.js +++ b/umap/static/umap/js/umap.core.js @@ -202,7 +202,12 @@ L.Util.sortFeatures = (features, sortKey) => { const sortKeys = (sortKey || 'name').split(',') const sort = (a, b, i) => { - const sortKey = sortKeys[i] + let sortKey = sortKeys[i], + reverse = 1 + if (sortKey[0] === '-') { + reverse = -1 + sortKey = sortKey.substring(1) + } let score const valA = a.properties[sortKey] || '' const valB = b.properties[sortKey] || '' @@ -221,7 +226,7 @@ L.Util.sortFeatures = (features, sortKey) => { }) } if (score === 0 && sortKeys[i + 1]) return sort(a, b, i + 1) - return score + return score * reverse } features.sort((a, b) => { diff --git a/umap/static/umap/test/Util.js b/umap/static/umap/test/Util.js index 8ed8e6d9..77418be0 100644 --- a/umap/static/umap/test/Util.js +++ b/umap/static/umap/test/Util.js @@ -446,4 +446,55 @@ describe('L.Util', function () { assert.ok(L.Util.usableOption({ key: null }, 'key')) }) }) + + describe("#sortFeatures()", function () { + let feat1, feat2, feat3 + before(function () { + feat1 = {properties: {}} + feat2 = {properties: {}} + feat3 = {properties: {}} + }) + it('should sort feature from custom key', function () { + feat1.properties.mykey = "13. foo" + feat2.properties.mykey = "7. foo" + feat3.properties.mykey = "111. foo" + let features = L.Util.sortFeatures([feat1, feat2, feat3], "mykey") + assert.equal(features[0], feat2) + assert.equal(features[1], feat1) + assert.equal(features[2], feat3) + }) + it('should sort feature from multiple keys', function () { + feat1.properties.mykey = "13. foo" + feat2.properties.mykey = "111. foo" + feat3.properties.mykey = "111. foo" + feat1.properties.otherkey = "C" + feat2.properties.otherkey = "B" + feat3.properties.otherkey = "A" + let features = L.Util.sortFeatures([feat1, feat2, feat3], "mykey,otherkey") + assert.equal(features[0], feat1) + assert.equal(features[1], feat3) + assert.equal(features[2], feat2) + }) + it('should sort feature from custom key reverse', function () { + feat1.properties.mykey = "13. foo" + feat2.properties.mykey = "7. foo" + feat3.properties.mykey = "111. foo" + let features = L.Util.sortFeatures([feat1, feat2, feat3], "-mykey") + assert.equal(features[0], feat3) + assert.equal(features[1], feat1) + assert.equal(features[2], feat2) + }) + it('should sort feature from multiple keys with reverse', function () { + feat1.properties.mykey = "13. foo" + feat2.properties.mykey = "111. foo" + feat3.properties.mykey = "111. foo" + feat1.properties.otherkey = "C" + feat2.properties.otherkey = "B" + feat3.properties.otherkey = "A" + let features = L.Util.sortFeatures([feat1, feat2, feat3], "mykey,-otherkey") + assert.equal(features[0], feat1) + assert.equal(features[1], feat2) + assert.equal(features[2], feat3) + }) + }) })