diff --git a/package.json b/package.json index 6a12d1a..00d7b14 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "@types/jest": "24.0.11", "@types/lokijs": "^1.5.2", "@types/node": "11.13.8", + "@types/query-string": "^6.3.0", "@types/rc-tree": "^1.11.3", "@types/react": "16.8.14", "@types/react-dom": "16.8.4", diff --git a/src/common/Item.tsx b/src/common/Item.tsx index 7dbcfc7..7762345 100644 --- a/src/common/Item.tsx +++ b/src/common/Item.tsx @@ -122,11 +122,47 @@ class Item { 'index.index_id': indexId } const offset = sort.limit * (sort.page - 1); - const order_dir = sort.order_dir === 0; const result = items.chain().find(filter); + const sortFunc = (a: IItemBasic, b: IItemBasic) => { + let av: string = ''; + let bv: string = ''; + switch (sort.orderby) { + case 'title': + av = a.title.toLocaleUpperCase(); + bv = b.title.toLocaleUpperCase(); + break; + case 'doi': + av = a.doi.toLocaleUpperCase(); + bv = b.doi.toLocaleUpperCase(); + break; + case 'last_update_date': + av = a.last_update_date.toString(); + bv = b.last_update_date.toString(); + break; + case 'creation_date': + av = a.creation_date.toString(); + bv = b.creation_date.toString(); + break; + case 'publication_date': + av = String(a.publication_year * 1000 + a.publication_month * 100 + a.publication_mday); + bv = String(b.publication_year * 1000 + b.publication_month * 100 + b.publication_mday); + break; + default: + break; + } + if (sort.order_dir === 0) { + if (av > bv) return -1; + else if (av < bv) return 1; + } else { + if (av > bv) return 1; + else if (av < bv) return -1; + } + return 0; + + } return { total: result.count(), - data: result.simplesort(sort.orderby, order_dir).offset(offset).limit(sort.limit).data() + data: result.sort(sortFunc).offset(offset).limit(sort.limit).data() }; } diff --git a/yarn.lock b/yarn.lock index 984fa7a..993cd73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1295,6 +1295,13 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== +"@types/query-string@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@types/query-string/-/query-string-6.3.0.tgz#b6fa172a01405abcaedac681118e78429d62ea39" + integrity sha512-yuIv/WRffRzL7cBW+sla4HwBZrEXRNf1MKQ5SklPEadth+BKbDxiVG8A3iISN5B3yC4EeSCzMZP8llHTcUhOzQ== + dependencies: + query-string "*" + "@types/rc-tree@^1.11.3": version "1.11.3" resolved "https://registry.yarnpkg.com/@types/rc-tree/-/rc-tree-1.11.3.tgz#b40c096c54bab2a56b88de813af47b96e7e82b00" @@ -7984,7 +7991,7 @@ qs@6.5.2, qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^6.4.2: +query-string@*, query-string@^6.4.2: version "6.5.0" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.5.0.tgz#2e1a70125af01f6f04573692d02c09302a1d8bfc" integrity sha512-TYC4hDjZSvVxLMEucDMySkuAS9UIzSbAiYGyA9GWCjLKB8fQpviFbjd20fD7uejCDxZS+ftSdBKE6DS+xucJFg==