thingsboard-aplcache

TB-49: Add back navigation ability in customer profile view

4/17/2017 2:22:16 PM

Details

diff --git a/ui/src/app/components/grid.directive.js b/ui/src/app/components/grid.directive.js
index f6b66ee..5664400 100644
--- a/ui/src/app/components/grid.directive.js
+++ b/ui/src/app/components/grid.directive.js
@@ -211,26 +211,31 @@ function GridController($scope, $state, $mdDialog, $document, $q, $timeout, $tra
                     vm.items.pending = true;
                     promise.then(
                         function success(items) {
-                            vm.items.data = vm.items.data.concat(items.data);
-                            var startIndex = vm.items.data.length - items.data.length;
-                            var endIndex = vm.items.data.length;
-                            for (var i = startIndex; i < endIndex; i++) {
-                                var item = vm.items.data[i];
-                                item.index = i;
-                                var row = Math.floor(i / vm.columns);
-                                var itemRow = vm.items.rowData[row];
-                                if (!itemRow) {
-                                    itemRow = [];
-                                    vm.items.rowData.push(itemRow);
+                            if (vm.items.reloadPending) {
+                                vm.items.pending = false;
+                                reload();
+                            } else {
+                                vm.items.data = vm.items.data.concat(items.data);
+                                var startIndex = vm.items.data.length - items.data.length;
+                                var endIndex = vm.items.data.length;
+                                for (var i = startIndex; i < endIndex; i++) {
+                                    var item = vm.items.data[i];
+                                    item.index = i;
+                                    var row = Math.floor(i / vm.columns);
+                                    var itemRow = vm.items.rowData[row];
+                                    if (!itemRow) {
+                                        itemRow = [];
+                                        vm.items.rowData.push(itemRow);
+                                    }
+                                    itemRow.push(item);
                                 }
-                                itemRow.push(item);
-                            }
-                            vm.items.nextPageLink = items.nextPageLink;
-                            vm.items.hasNext = items.hasNext;
-                            if (vm.items.hasNext) {
-                                vm.items.nextPageLink.limit = pageSize;
+                                vm.items.nextPageLink = items.nextPageLink;
+                                vm.items.hasNext = items.hasNext;
+                                if (vm.items.hasNext) {
+                                    vm.items.nextPageLink.limit = pageSize;
+                                }
+                                vm.items.pending = false;
                             }
-                            vm.items.pending = false;
                         },
                         function fail() {
                             vm.items.hasNext = false;
@@ -425,26 +430,35 @@ function GridController($scope, $state, $mdDialog, $document, $q, $timeout, $tra
     }
 
     $scope.$on('searchTextUpdated', function () {
-        vm.items = {
-            data: [],
-            rowData: [],
-            nextPageLink: {
-                limit: pageSize,
-                textSearch: $scope.searchConfig.searchText
-            },
-            selections: {},
-            selectedCount: 0,
-            hasNext: true,
-            pending: false
-        };
-        vm.detailsConfig.isDetailsOpen = false;
-        vm.itemRows.getItemAtIndex(pageSize);
+        reload();
     });
 
     vm.onGridInited(vm);
 
     vm.itemRows.getItemAtIndex(pageSize);
 
+    function reload() {
+        if (vm.items && vm.items.pending) {
+            vm.items.reloadPending = true;
+        } else {
+            vm.items = {
+                data: [],
+                rowData: [],
+                nextPageLink: {
+                    limit: pageSize,
+                    textSearch: $scope.searchConfig.searchText
+                },
+                selections: {},
+                selectedCount: 0,
+                hasNext: true,
+                pending: false
+            };
+            vm.detailsConfig.isDetailsOpen = false;
+            vm.items.reloadPending = false;
+            vm.itemRows.getItemAtIndex(pageSize);
+        }
+    }
+
     function refreshList() {
         $state.go($state.current, vm.refreshParamsFunc(), {reload: true});
     }
diff --git a/ui/src/app/layout/home.controller.js b/ui/src/app/layout/home.controller.js
index 290cacf..4979501 100644
--- a/ui/src/app/layout/home.controller.js
+++ b/ui/src/app/layout/home.controller.js
@@ -26,7 +26,7 @@ import logoSvg from '../../svg/logo_title_white.svg';
 
 /*@ngInject*/
 export default function HomeController(loginService, userService, deviceService, Fullscreen, $scope, $element, $rootScope, $document, $state,
-                                       $log, $mdMedia, $animate, $timeout) {
+                                       $window, $log, $mdMedia, $animate, $timeout) {
 
     var siteSideNav = $('.tb-site-sidenav', $element);
 
@@ -48,6 +48,7 @@ export default function HomeController(loginService, userService, deviceService,
 
     vm.displaySearchMode = displaySearchMode;
     vm.openSidenav = openSidenav;
+    vm.goBack = goBack;
     vm.searchTextUpdated = searchTextUpdated;
     vm.sidenavClicked = sidenavClicked;
     vm.toggleFullscreen = toggleFullscreen;
@@ -104,6 +105,10 @@ export default function HomeController(loginService, userService, deviceService,
         vm.isShowSidenav = true;
     }
 
+    function goBack() {
+        $window.history.back();
+    }
+
     function closeSidenav() {
         vm.isShowSidenav = false;
     }
diff --git a/ui/src/app/layout/home.tpl.html b/ui/src/app/layout/home.tpl.html
index 31c8e7f..bfb37eb 100644
--- a/ui/src/app/layout/home.tpl.html
+++ b/ui/src/app/layout/home.tpl.html
@@ -45,6 +45,10 @@
 		      		class="md-icon-button" ng-click="vm.openSidenav()" aria-label="{{ 'home.menu' | translate }}" ng-class="{'tb-invisible': vm.displaySearchMode()}">
 		      		<md-icon aria-label="{{ 'home.menu' | translate }}" class="material-icons">menu</md-icon>
 		      </md-button>
+			  <md-button ng-show="forceFullscreen"
+					   class="md-icon-button" aria-label="{{ 'action.back' | translate }}" ng-click="vm.goBack()" ng-class="{'tb-invisible': vm.displaySearchMode()}">
+				  <md-icon aria-label="{{ 'action.back' | translate }}" class="material-icons">arrow_back</md-icon>
+			  </md-button>
 	          <md-button class="md-icon-button" aria-label="{{ 'action.back' | translate }}" ng-click="searchConfig.showSearch = !searchConfig.showSearch" ng-class="{'tb-invisible': !vm.displaySearchMode()}" >
 		      	  <md-icon aria-label="{{ 'action.back' | translate }}" class="material-icons">arrow_back</md-icon>
 	          </md-button>