added type aware comparator for eg grid. String columns are sorted while user/lew/NC22753-eg-grid-string-sort
authorLlewellyn Marshall <llewellyn.marshall@ncdcr.gov>
Fri, 15 Jan 2021 19:58:07 +0000 (14:58 -0500)
committerLlewellyn Marshall <llewellyn.marshall@ncdcr.gov>
Fri, 7 May 2021 18:32:10 +0000 (14:32 -0400)
lower case.

Open-ILS/web/js/ui/default/staff/services/grid.js

index ce84caa..240930a 100644 (file)
@@ -141,7 +141,6 @@ angular.module('egGridMod',
                      egProgressDialog,  $uibModal , egConfirmDialog , egStrings) {
 
             var grid = this;
-
             grid.init = function() {
                 grid.offset = 0;
                 $scope.items = [];
@@ -1908,7 +1907,21 @@ angular.module('egGridMod',
             gridData.query = args.query;
             gridData.idlClass = args.idlClass;
             gridData.columnsProvider = args.columnsProvider;
-
+            gridData.comparators = {
+                "string":function(x,y){ 
+                        var l_x = x.toLowerCase();
+                        var l_y = y.toLowerCase();  
+                        if (l_x < l_y) return -1; 
+                        if (l_x > l_y) return 1; 
+                        console.log("TEST");
+                        return 0;
+                    },
+                "default":function(x,y){ 
+                        if (x < y) return -1; 
+                        if (x > y) return 1; 
+                        return 0;
+                    }
+                };
             // Delivers a stream of array data via promise.notify()
             // Useful for passing an array of data to egGrid.get()
             // If a count is provided, the array will be trimmed to
@@ -1933,8 +1946,7 @@ angular.module('egGridMod',
                                 }
 
                                 var path = gridData.columnsProvider.findColumn(field).path || field;
-                                var comparator = gridData.columnsProvider.findColumn(field).comparator ||
-                                    function (x,y) { if (x < y) return -1; if (x > y) return 1; return 0 };
+                                var comparator = gridData.columnsProvider.findColumn(field).comparator;
 
                                 sorter_cache[si] = {
                                     field       : path,
@@ -1973,9 +1985,13 @@ angular.module('egGridMod',
 
                             if (af === null && bf !== null) return 1;
                             if (bf === null && af !== null) return -1;
+                            
+                            var comparator =  sc.comparator || (
+                            gridData.comparators[typeof af] ? gridData.comparators[typeof af]:gridData.comparators["default"]
+                            );
 
                             if (!(bf === null && af === null)) {
-                                var partial = sc.comparator(af,bf);
+                                var partial = comparator(af,bf);
                                 if (partial) {
                                     if (sc.dir == 'desc') {
                                         if (partial > 0) return -1;