thingsboard-aplcache
Changes
ui/src/app/components/dashboard.directive.js 80(+55 -25)
Details
ui/src/app/components/dashboard.directive.js 80(+55 -25)
diff --git a/ui/src/app/components/dashboard.directive.js b/ui/src/app/components/dashboard.directive.js
index 068713d..1a675ce 100644
--- a/ui/src/app/components/dashboard.directive.js
+++ b/ui/src/app/components/dashboard.directive.js
@@ -89,7 +89,7 @@ function Dashboard() {
}
/*@ngInject*/
-function DashboardController($scope, $rootScope, $element, $timeout, $mdMedia, $mdUtil, timeService, types, utils) {
+function DashboardController($scope, $rootScope, $element, $timeout, $mdMedia, $mdUtil, $q, timeService, types, utils) {
var highlightedMode = false;
var highlightedWidget = null;
@@ -311,11 +311,13 @@ function DashboardController($scope, $rootScope, $element, $timeout, $mdMedia, $
if (vm.gridsterOpts.mobileBreakPoint != mobileBreakPoint) {
vm.gridsterOpts.mobileBreakPoint = mobileBreakPoint;
}
- var rowHeight = detectRowSize(isMobile);
- if (vm.gridsterOpts.rowHeight != rowHeight) {
- vm.gridsterOpts.rowHeight = rowHeight;
- }
-
+ detectRowSize(isMobile).then(
+ function(rowHeight) {
+ if (vm.gridsterOpts.rowHeight != rowHeight) {
+ vm.gridsterOpts.rowHeight = rowHeight;
+ }
+ }
+ );
vm.isMobileSize = checkIsMobileSize();
}
@@ -403,11 +405,14 @@ function DashboardController($scope, $rootScope, $element, $timeout, $mdMedia, $
$scope.$on('gridster-mobile-changed', function (event, theGridster) {
if (checkIsLocalGridsterElement(theGridster)) {
vm.gridster = theGridster;
- var rowHeight = detectRowSize(vm.gridster.isMobile);
- if (vm.gridsterOpts.rowHeight != rowHeight) {
- vm.gridsterOpts.rowHeight = rowHeight;
- updateGridsterParams();
- }
+ detectRowSize(vm.gridster.isMobile).then(
+ function(rowHeight) {
+ if (vm.gridsterOpts.rowHeight != rowHeight) {
+ vm.gridsterOpts.rowHeight = rowHeight;
+ updateGridsterParams();
+ }
+ }
+ );
vm.isMobileSize = checkIsMobileSize();
//TODO: widgets visibility
@@ -425,29 +430,54 @@ function DashboardController($scope, $rootScope, $element, $timeout, $mdMedia, $
}
}
+ function detectViewportHeight() {
+ var deferred = $q.defer();
+ var viewportHeight = gridsterParent.height();
+ if (viewportHeight) {
+ deferred.resolve(viewportHeight);
+ } else {
+ $scope.viewportHeightWatch = $scope.$watch(function() { return gridsterParent.height(); },
+ function(viewportHeight) {
+ if (viewportHeight) {
+ $scope.viewportHeightWatch();
+ deferred.resolve(viewportHeight);
+ }
+ }
+ );
+ }
+ return deferred.promise;
+ }
+
function detectRowSize(isMobile) {
+ var deferred = $q.defer();
var rowHeight;
if (autofillHeight()) {
- var viewportHeight = gridsterParent.height();
- var totalRows = 0;
- for (var i = 0; i < vm.widgets.length; i++) {
- var w = vm.widgets[i];
- var sizeY = widgetSizeY(w);
- if (isMobile) {
- totalRows += sizeY;
- } else {
- var row = widgetRow(w);
- var bottom = row + sizeY;
- totalRows = Math.max(totalRows, bottom);
+ detectViewportHeight().then(
+ function(viewportHeight) {
+ var totalRows = 0;
+ for (var i = 0; i < vm.widgets.length; i++) {
+ var w = vm.widgets[i];
+ var sizeY = widgetSizeY(w);
+ if (isMobile) {
+ totalRows += sizeY;
+ } else {
+ var row = widgetRow(w);
+ var bottom = row + sizeY;
+ totalRows = Math.max(totalRows, bottom);
+ }
+ }
+ rowHeight = (viewportHeight - vm.gridsterOpts.margins[1]*(vm.widgets.length+1) + vm.gridsterOpts.margins[0]*vm.widgets.length) / totalRows;
+ deferred.resolve(rowHeight);
}
- }
- rowHeight = (viewportHeight - vm.gridsterOpts.margins[1]*(vm.widgets.length+1) + vm.gridsterOpts.margins[0]*vm.widgets.length) / totalRows;
+ );
} else if (isMobile) {
rowHeight = angular.isDefined(vm.mobileRowHeight) ? vm.mobileRowHeight : 70;
+ deferred.resolve(rowHeight);
} else {
rowHeight = 'match';
+ deferred.resolve(rowHeight);
}
- return rowHeight;
+ return deferred.promise;
}
function widgetOrder(widget) {
diff --git a/ui/src/app/dashboard/states/default-state-controller.js b/ui/src/app/dashboard/states/default-state-controller.js
index 7d810ca..c413884 100644
--- a/ui/src/app/dashboard/states/default-state-controller.js
+++ b/ui/src/app/dashboard/states/default-state-controller.js
@@ -135,7 +135,12 @@ export default function DefaultStateController($scope, $location, $state, $state
}
if (!result.length) {
result[0] = { id: null, params: {} }
+ } else if (result.length > 1) {
+ var newResult = [];
+ newResult.push(result[result.length-1]);
+ result = newResult;
}
+
if (!result[0].id) {
result[0].id = dashboardUtils.getRootStateId(vm.states);
}
diff --git a/ui/src/app/dashboard/states/entity-state-controller.js b/ui/src/app/dashboard/states/entity-state-controller.js
index a554adf..f0512d7 100644
--- a/ui/src/app/dashboard/states/entity-state-controller.js
+++ b/ui/src/app/dashboard/states/entity-state-controller.js
@@ -183,8 +183,12 @@ export default function EntityStateController($scope, $location, $state, $stateP
if (!result.length) {
result[0] = { id: null, params: {} }
}
+ var rootStateId = dashboardUtils.getRootStateId(vm.states);
if (!result[0].id) {
- result[0].id = dashboardUtils.getRootStateId(vm.states);
+ result[0].id = rootStateId;
+ }
+ if (result[0].id !== rootStateId) {
+ result = [ { id: rootStateId, params: {} } ];
}
return result;
}