Adds pagination to Users admin section.

Project: http://git-wip-us.apache.org/repos/asf/rave/repo
Commit: http://git-wip-us.apache.org/repos/asf/rave/commit/b2278703
Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/b2278703
Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/b2278703

Branch: refs/heads/angular
Commit: b2278703ca8cca616ebc7c24793e42bf389be487
Parents: 9d95b06
Author: Jmeas <[email protected]>
Authored: Fri Aug 15 16:30:37 2014 -0400
Committer: Jmeas <[email protected]>
Committed: Fri Aug 15 16:34:00 2014 -0400

----------------------------------------------------------------------
 rave-portal-ng/mock-api/core.js                 |  31 ++++-
 .../mock-api/database/import-data/users.js      | 128 +++++++++++++++++++
 rave-portal-ng/mock-api/modules/users/get.js    |  52 +++++++-
 .../subapps/admin/users/controllers/users.js    |  28 ++--
 .../src/subapps/admin/users/routes.js           |   8 +-
 .../subapps/admin/users/templates/users.html    |  26 ++--
 6 files changed, 245 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/mock-api/core.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/core.js b/rave-portal-ng/mock-api/core.js
index 59672fa..780c32d 100644
--- a/rave-portal-ng/mock-api/core.js
+++ b/rave-portal-ng/mock-api/core.js
@@ -54,6 +54,34 @@ define(function(require) {
                $httpBackend.whenJSONP(matchAllRegex).passThrough();
        }
 
+       function parseQueryString(str) {
+               str = str.split('?')[1];
+    if(typeof str !== 'string' || str.length === 0) {
+       return {};
+    }
+    var s = str.split('&');
+    var sLength = s.length;
+    var bit, query = {}, first, second;
+    for (var i = 0; i < sLength; i++) {
+      bit = s[i].split('=');
+      first = decodeURIComponent(bit[0]);
+      if(first.length === 0) {
+       continue;
+      }
+      second = decodeURIComponent(bit[1]);
+      if(typeof query[first] === 'undefined') {
+       query[first] = second;
+      }
+      else if(query[first] instanceof Array) {
+       query[first].push(second);
+      }
+      else {
+       query[first] = [query[first], second];
+      }
+    }
+    return query;
+  }
+
        function buildApiScope(method, url, data, headers) {
 
                function requestHasToken() {
@@ -88,7 +116,8 @@ define(function(require) {
                return {
                        requestHasToken: requestHasToken(),
                        userIsAuthenticated: ((getCurrentUserFromToken() !== 
false) ? true : false),
-                       currentUser: getCurrentUserFromToken()
+                       currentUser: getCurrentUserFromToken(),
+                       parseQueryString: parseQueryString
                };
        }
 

http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/mock-api/database/import-data/users.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/database/import-data/users.js 
b/rave-portal-ng/mock-api/database/import-data/users.js
index 8a5bbbb..86b6620 100644
--- a/rave-portal-ng/mock-api/database/import-data/users.js
+++ b/rave-portal-ng/mock-api/database/import-data/users.js
@@ -98,5 +98,133 @@ define(function(require) {
                        'expired': false,
                        'authorities': ['ROLE_USER']
                },
+               {
+                       'username': 'john.doe',
+                       'password': 'john.doe',
+                       'email': '[email protected]',
+                       'openIdUrl': '',
+                       'firstName': 'John',
+                       'lastName': 'Doe',
+                       'nameSeenByOthers': 'John',
+                       'relationshipStatus': 'Single',
+                       'description': 'Rave test user.',
+                       'sessionToken': '',
+                       'locked': false,
+                       'enabled': true,
+                       'expired': false,
+                       'authorities': ['ROLE_USER']
+               },
+               {
+                       'username': 'four.col',
+                       'password': 'four.col',
+                       'email': '[email protected]',
+                       'openIdUrl': '',
+                       'firstName': 'Four',
+                       'lastName': 'Col',
+                       'nameSeenByOthers': 'Four',
+                       'relationshipStatus': 'Single',
+                       'description': 'Rave test user.',
+                       'sessionToken': '',
+                       'locked': false,
+                       'enabled': true,
+                       'expired': false,
+                       'authorities': ['ROLE_USER']
+               },
+               {
+                       'username': 'fourwn.col',
+                       'password': 'fourwn.col',
+                       'email': '[email protected]',
+                       'openIdUrl': '',
+                       'firstName': 'Fourwn',
+                       'lastName': 'Col',
+                       'nameSeenByOthers': 'Fourwn',
+                       'relationshipStatus': 'Single',
+                       'description': 'Rave test user.',
+                       'sessionToken': '',
+                       'locked': false,
+                       'enabled': true,
+                       'expired': false,
+                       'authorities': ['ROLE_USER']
+               },
+               {
+                       'username': 'threewn.col',
+                       'password': 'threewn.col',
+                       'email': '[email protected]',
+                       'openIdUrl': '',
+                       'firstName': 'Threewn',
+                       'lastName': 'Col',
+                       'nameSeenByOthers': 'Threewn',
+                       'relationshipStatus': 'Single',
+                       'description': 'Rave test user.',
+                       'sessionToken': '',
+                       'locked': false,
+                       'enabled': true,
+                       'expired': false,
+                       'authorities': ['ROLE_USER']
+               },
+               {
+                       'username': 'three.col',
+                       'password': 'three.col',
+                       'email': '[email protected]',
+                       'openIdUrl': '',
+                       'firstName': 'Three',
+                       'lastName': 'Col',
+                       'nameSeenByOthers': 'Three',
+                       'relationshipStatus': 'Single',
+                       'description': 'Rave test user.',
+                       'sessionToken': '',
+                       'locked': false,
+                       'enabled': true,
+                       'expired': false,
+                       'authorities': ['ROLE_USER']
+               },
+               {
+                       'username': 'twown.col',
+                       'password': 'twown.col',
+                       'email': '[email protected]',
+                       'openIdUrl': '',
+                       'firstName': 'Twown',
+                       'lastName': 'Col',
+                       'nameSeenByOthers': 'Twown',
+                       'relationshipStatus': 'Single',
+                       'description': 'Rave test user.',
+                       'sessionToken': '',
+                       'locked': false,
+                       'enabled': true,
+                       'expired': false,
+                       'authorities': ['ROLE_USER']
+               },
+               {
+                       'username': 'george.doe',
+                       'password': 'george.doe',
+                       'email': '[email protected]',
+                       'openIdUrl': '',
+                       'firstName': 'George',
+                       'lastName': 'Doe',
+                       'nameSeenByOthers': 'George',
+                       'relationshipStatus': 'Single',
+                       'description': 'Rave test user.',
+                       'sessionToken': '',
+                       'locked': false,
+                       'enabled': true,
+                       'expired': false,
+                       'authorities': ['ROLE_USER']
+               },
+               {
+                       'username': 'rave2011.myopenid.com',
+                       'password': '',
+                       'email': '[email protected]',
+                       'openIdUrl': 'http://rave2011.myopenid.com/',
+                       'firstName': 'Rave',
+                       'lastName': '2011',
+                       'nameSeenByOthers': 'George',
+                       'relationshipStatus': 'Single',
+                       'description': 'Rave test user.',
+                       'sessionToken': '',
+                       'locked': false,
+                       'enabled': true,
+                       'expired': false,
+                       'authorities': ['ROLE_USER']
+               },
        ];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/mock-api/modules/users/get.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/modules/users/get.js 
b/rave-portal-ng/mock-api/modules/users/get.js
index 4e52226..4bc65bb 100644
--- a/rave-portal-ng/mock-api/modules/users/get.js
+++ b/rave-portal-ng/mock-api/modules/users/get.js
@@ -19,7 +19,15 @@ define(function(require) {
     'email'
   ];
 
-  function getUsers() {
+  function getPageSize() {
+    var prefs = api.db.query('preferences');
+    // return prefs;
+    var pageSize = _.findWhere(prefs, {key: 'pageSize'});
+    return pageSize.value;
+  }
+
+  function getUsers(params) {
+
     var rawUsers = api.db.query('users');
     var filteredUsers = [];
 
@@ -27,7 +35,36 @@ define(function(require) {
       filteredUsers.push(_.pick(rawUser, userKeys));
     });
 
-    return filteredUsers;
+    var page = params.page || 1;
+    var pageSize = getPageSize();
+
+    // The first index to start from
+    var startIndex = (page - 1) * pageSize;
+
+    // The naive end index. We may have overshot this.
+    var endIndex = page * pageSize;
+
+    // Truncate our end index if it's too long. Slice only goes UP TO
+    // this index, which is why we don't use (length - 1)
+    if (endIndex > filteredUsers.length) {
+      endIndex = filteredUsers.length;
+    }
+
+    var results = filteredUsers.slice(startIndex, endIndex);
+
+    var returnObj = {};
+
+    returnObj.data = results;
+    returnObj.metadata = {
+      pageSize: pageSize,
+      page: page,
+      start: startIndex+1,
+      end: endIndex,
+      pageCount: Math.ceil(filteredUsers.length / pageSize),
+      totalUsers: filteredUsers.length
+    };
+
+    return returnObj;
   }
 
   function processRequest(method, url, data, headers) {
@@ -39,7 +76,16 @@ define(function(require) {
       return [401, 'Invalid token'];
     }
 
-    return [200, getUsers()];
+    var params = this.parseQueryString(url);
+
+    var usersData = getUsers(params);
+
+    var object = {
+      data: usersData.data,
+      metadata: usersData.metadata
+    };
+
+    return [200, object];
   }
 
   api.register('/users', 'get', processRequest);

http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/src/subapps/admin/users/controllers/users.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/controllers/users.js 
b/rave-portal-ng/src/subapps/admin/users/controllers/users.js
index 7e7b0aa..2125847 100644
--- a/rave-portal-ng/src/subapps/admin/users/controllers/users.js
+++ b/rave-portal-ng/src/subapps/admin/users/controllers/users.js
@@ -5,31 +5,39 @@
  */
 
 define(function(require) {
-  return ['$scope', '$stateParams', 'pagination', 'usersList',
-  function($scope, $stateParams, pagination, usersList) {
+  return ['$scope', '$stateParams', 'pagination', 'usersList', '$rootScope',
+  function($scope, $stateParams, pagination, usersList, $rootScope) {
 
     $scope.currentPage = +$stateParams.page || 0;
 
-    // How many items to show per page
-    $scope.itemsPerPage = 10;
+    usersList.$promise.then(function() {
+      $scope.users = usersList.data;
 
-    $scope.users = usersList;
+      var usersMeta = usersList.metadata;
 
-    // Our total number of users.
-    $scope.totalUsers = 1000;
+      // Coerce each piece of metadata to a number.
+      _.each(usersMeta, function(val, key) {
+        usersMeta[key] = +val;
+      });
 
-    // The generated pageCount.
-    $scope.pageCount = Math.ceil($scope.totalUsers / $scope.itemsPerPage);
+      $scope.usersMeta = usersMeta;
+    });
 
     // Our paginationPages
     $scope.paginationPages = pagination.paginationPages;
 
     $scope.prevPageDisabled = function() {
+      if (!$scope.currentPage) {
+        return 'disabled';
+      }
       return $scope.currentPage === 1 ? 'disabled' : '';
     };
 
     $scope.nextPageDisabled = function() {
-      return $scope.currentPage === $scope.pageCount ? 'disabled' : '';
+      if (!$scope.usersMeta) {
+        return 'disabled';
+      }
+      return $scope.currentPage === $scope.usersMeta.pageCount ? 'disabled' : 
'';
     };
   }];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/src/subapps/admin/users/routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/routes.js 
b/rave-portal-ng/src/subapps/admin/users/routes.js
index 592144d..ba04fac 100644
--- a/rave-portal-ng/src/subapps/admin/users/routes.js
+++ b/rave-portal-ng/src/subapps/admin/users/routes.js
@@ -21,9 +21,11 @@ define(function(require) {
           authenticate: true,
           controller: usersCtrl,
           resolve: {
-            usersList: ['usersResource',
-              function(usersResource) {
-                return usersResource.query();
+            usersList: ['usersResource', '$stateParams',
+              function(usersResource, $stateParams) {
+                return usersResource.get({
+                  page: $stateParams.page
+                });
               }]
           }
         })

http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/src/subapps/admin/users/templates/users.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/templates/users.html 
b/rave-portal-ng/src/subapps/admin/users/templates/users.html
index 9628338..cc88cc3 100644
--- a/rave-portal-ng/src/subapps/admin/users/templates/users.html
+++ b/rave-portal-ng/src/subapps/admin/users/templates/users.html
@@ -1,18 +1,20 @@
 <article ui-view>
   <h2>
-    Showing {{ firstItem() }} - {{ lastItem() }} of {{ users.length }} results
+    Showing {{ usersMeta.start }} - {{ usersMeta.end }} of {{ 
usersMeta.totalUsers }} results
   </h2>
   <div class="searchHeading paginationHeading">
     <div class="pagination">
     <ul>
-      <li ng-class="prevPageDisabled()">
-        <a ui-sref="portal.admin.users({page:currentPage-1})">&lt;</a>
+      <li ng-switch on="prevPageDisabled()" ng-class="prevPageDisabled()">
+        <a ng-switch-when="disabled">&lt;</a>
+        <a ng-switch-default 
ui-sref="portal.admin.users({page:usersMeta.page-1})">&lt;</a>
       </li>
-      <li ng-repeat="n in paginationPages(currentPage, pageCount)" ng-class="{ 
active: n == currentPage }">
+      <li ng-repeat="n in paginationPages(usersMeta.page, 
usersMeta.pageCount)" ng-class="{ active: n == usersMeta.page }">
         <a ui-sref="portal.admin.users({page:n})">{{ n }}</a>
       </li>
-      <li ng-class="nextPageDisabled()">
-        <a ui-sref="portal.admin.users({page:currentPage+1})">&gt;</a>
+      <li ng-switch on="nextPageDisabled()" ng-class="nextPageDisabled()">
+        <a ng-switch-when="disabled">&gt;</a>
+        <a ng-switch-default 
ui-sref="portal.admin.users({page:usersMeta.page+1})">&gt;</a>
       </li>
     </ul>
   </div>
@@ -47,14 +49,16 @@
   </table>
   <div class="pagination">
   <ul>
-    <li ng-class="prevPageDisabled()">
-      <a ui-sref="portal.admin.users({page:currentPage-1})">&lt;</a>
+    <li ng-switch on="prevPageDisabled()" ng-class="prevPageDisabled()">
+      <a ng-switch-when="disabled">&lt;</a>
+      <a ng-switch-default 
ui-sref="portal.admin.users({page:usersMeta.page-1})">&lt;</a>
     </li>
-    <li ng-repeat="n in paginationPages(currentPage, pageCount)" ng-class="{ 
active: n == currentPage }">
+    <li ng-repeat="n in paginationPages(usersMeta.page, usersMeta.pageCount)" 
ng-class="{ active: n == usersMeta.page }">
       <a ui-sref="portal.admin.users({page:n})">{{ n }}</a>
     </li>
-    <li ng-class="nextPageDisabled()">
-      <a ui-sref="portal.admin.users({page:currentPage+1})">&gt;</a>
+    <li ng-switch on="nextPageDisabled()" ng-class="nextPageDisabled()">
+      <a ng-switch-when="disabled">&gt;</a>
+      <a ng-switch-default 
ui-sref="portal.admin.users({page:usersMeta.page+1})">&gt;</a>
     </li>
   </ul>
 </article>

Reply via email to