summaryrefslogtreecommitdiffstats
path: root/devtools/server/actors
diff options
context:
space:
mode:
authorjanekptacijarabaci <janekptacijarabaci@seznam.cz>2018-03-02 18:22:50 +0100
committerjanekptacijarabaci <janekptacijarabaci@seznam.cz>2018-03-02 18:22:50 +0100
commitf22bc3fd885b28be74266c2c48bcc84a3a7ede26 (patch)
treeeb51f4323c11f8b3e5bb1a755cb7b4f2bc973616 /devtools/server/actors
parent166fb9f2893dcfb3375aa3227d116fb0ce2c6d42 (diff)
downloadUXP-f22bc3fd885b28be74266c2c48bcc84a3a7ede26.tar
UXP-f22bc3fd885b28be74266c2c48bcc84a3a7ede26.tar.gz
UXP-f22bc3fd885b28be74266c2c48bcc84a3a7ede26.tar.lz
UXP-f22bc3fd885b28be74266c2c48bcc84a3a7ede26.tar.xz
UXP-f22bc3fd885b28be74266c2c48bcc84a3a7ede26.zip
moebius#342: Columns are not sorted correctly (Natural Sort algorithm)
Issue #31 https://github.com/MoonchildProductions/moebius/pull/342
Diffstat (limited to 'devtools/server/actors')
-rw-r--r--devtools/server/actors/storage.js25
1 files changed, 18 insertions, 7 deletions
diff --git a/devtools/server/actors/storage.js b/devtools/server/actors/storage.js
index 620a9acb9..015d849ee 100644
--- a/devtools/server/actors/storage.js
+++ b/devtools/server/actors/storage.js
@@ -17,6 +17,9 @@ const { Task } = require("devtools/shared/task");
const DEFAULT_VALUE = "value";
+loader.lazyRequireGetter(this, "naturalSortCaseInsensitive",
+ "devtools/client/shared/natural-sort", true);
+
// GUID to be used as a separator in compound keys. This must match the same
// constant in devtools/client/storage/ui.js,
// devtools/client/storage/test/head.js and
@@ -326,15 +329,20 @@ StorageActors.defaults = function (typeName, observationTopic) {
toReturn.data.push(...values);
}
}
+
toReturn.total = this.getObjectsSize(host, names, options);
+
if (offset > toReturn.total) {
// In this case, toReturn.data is an empty array.
toReturn.offset = toReturn.total;
toReturn.data = [];
} else {
- toReturn.data = toReturn.data.sort((a, b) => {
- return a[sortOn] - b[sortOn];
- }).slice(offset, offset + size).map(a => this.toStoreObject(a));
+ // We need to use natural sort before slicing.
+ let sorted = toReturn.data.sort((a, b) => {
+ return naturalSortCaseInsensitive(a[sortOn], b[sortOn]);
+ });
+ let sliced = sorted.slice(offset, offset + size);
+ toReturn.data = sliced.map(a => this.toStoreObject(a));
}
} else {
let obj = yield this.getValuesForHost(host, undefined, undefined,
@@ -344,15 +352,18 @@ StorageActors.defaults = function (typeName, observationTopic) {
}
toReturn.total = obj.length;
+
if (offset > toReturn.total) {
// In this case, toReturn.data is an empty array.
toReturn.offset = offset = toReturn.total;
toReturn.data = [];
} else {
- toReturn.data = obj.sort((a, b) => {
- return a[sortOn] - b[sortOn];
- }).slice(offset, offset + size)
- .map(object => this.toStoreObject(object));
+ // We need to use natural sort before slicing.
+ let sorted = obj.sort((a, b) => {
+ return naturalSortCaseInsensitive(a[sortOn], b[sortOn]);
+ });
+ let sliced = sorted.slice(offset, offset + size);
+ toReturn.data = sliced.map(object => this.toStoreObject(object));
}
}