Details
diff --git a/ui/src/app/dashboard/dashboard.controller.js b/ui/src/app/dashboard/dashboard.controller.js
index 61cdf66..5772f35 100644
--- a/ui/src/app/dashboard/dashboard.controller.js
+++ b/ui/src/app/dashboard/dashboard.controller.js
@@ -993,6 +993,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
function setEditMode(isEdit, revert) {
vm.isEdit = isEdit;
if (vm.isEdit) {
+ vm.dashboardCtx.stateController.preserveState();
vm.prevDashboard = angular.copy(vm.dashboard);
} else {
if (vm.widgetEditMode) {
@@ -1009,7 +1010,6 @@ export default function DashboardController(types, utils, dashboardUtils, widget
} else {
vm.dashboard.configuration.timewindow = vm.dashboardCtx.dashboardTimewindow;
}
- vm.dashboardCtx.stateController.resetState();
}
}
}
diff --git a/ui/src/app/dashboard/states/default-state-controller.js b/ui/src/app/dashboard/states/default-state-controller.js
index 129be28..0dfe229 100644
--- a/ui/src/app/dashboard/states/default-state-controller.js
+++ b/ui/src/app/dashboard/states/default-state-controller.js
@@ -15,7 +15,8 @@
*/
/*@ngInject*/
-export default function DefaultStateController($scope, $location, $state, $stateParams, utils, types, dashboardUtils) {
+export default function DefaultStateController($scope, $timeout, $location, $state,
+ $stateParams, utils, types, dashboardUtils, preservedState) {
var vm = this;
@@ -24,6 +25,7 @@ export default function DefaultStateController($scope, $location, $state, $state
vm.openState = openState;
vm.updateState = updateState;
vm.resetState = resetState;
+ vm.getStateObject = getStateObject;
vm.navigatePrevState = navigatePrevState;
vm.getStateId = getStateId;
vm.getStateParams = getStateParams;
@@ -77,6 +79,10 @@ export default function DefaultStateController($scope, $location, $state, $state
gotoState(rootStateId, true);
}
+ function getStateObject() {
+ return vm.stateObject;
+ }
+
function navigatePrevState(index) {
if (index < vm.stateObject.length-1) {
stopWatchStateObject();
@@ -168,27 +174,33 @@ export default function DefaultStateController($scope, $location, $state, $state
}
function init() {
- var initialState = $stateParams.state;
- vm.stateObject = parseState(initialState);
-
- gotoState(vm.stateObject[0].id, false);
-
- $scope.$watchCollection(function(){
- return $state.params;
- }, function(){
- var currentState = $state.params.state;
- vm.stateObject = parseState(currentState);
- });
-
- $scope.$watch('vm.dashboardCtrl.dashboardCtx.state', function() {
- if (vm.stateObject[0].id !== vm.dashboardCtrl.dashboardCtx.state) {
- stopWatchStateObject();
- vm.stateObject[0].id = vm.dashboardCtrl.dashboardCtx.state;
- updateLocation();
- watchStateObject();
- }
+ if (preservedState) {
+ vm.stateObject = preservedState;
+ gotoState(vm.stateObject[0].id, true);
+ } else {
+ var initialState = $stateParams.state;
+ vm.stateObject = parseState(initialState);
+ gotoState(vm.stateObject[0].id, false);
+ }
+
+ $timeout(() => {
+ $scope.$watchCollection(function () {
+ return $state.params;
+ }, function () {
+ var currentState = $state.params.state;
+ vm.stateObject = parseState(currentState);
+ });
+
+ $scope.$watch('vm.dashboardCtrl.dashboardCtx.state', function () {
+ if (vm.stateObject[0].id !== vm.dashboardCtrl.dashboardCtx.state) {
+ stopWatchStateObject();
+ vm.stateObject[0].id = vm.dashboardCtrl.dashboardCtx.state;
+ updateLocation();
+ watchStateObject();
+ }
+ });
+ watchStateObject();
});
- watchStateObject();
}
function stopWatchStateObject() {
diff --git a/ui/src/app/dashboard/states/entity-state-controller.js b/ui/src/app/dashboard/states/entity-state-controller.js
index 6afeff9..11017a8 100644
--- a/ui/src/app/dashboard/states/entity-state-controller.js
+++ b/ui/src/app/dashboard/states/entity-state-controller.js
@@ -17,7 +17,8 @@
import './entity-state-controller.scss';
/*@ngInject*/
-export default function EntityStateController($scope, $location, $state, $stateParams, $q, $translate, utils, types, dashboardUtils, entityService) {
+export default function EntityStateController($scope, $timeout, $location, $state, $stateParams,
+ $q, $translate, utils, types, dashboardUtils, entityService, preservedState) {
var vm = this;
@@ -26,6 +27,7 @@ export default function EntityStateController($scope, $location, $state, $stateP
vm.openState = openState;
vm.updateState = updateState;
vm.resetState = resetState;
+ vm.getStateObject = getStateObject;
vm.navigatePrevState = navigatePrevState;
vm.getStateId = getStateId;
vm.getStateParams = getStateParams;
@@ -84,6 +86,10 @@ export default function EntityStateController($scope, $location, $state, $stateP
gotoState(rootStateId, true);
}
+ function getStateObject() {
+ return vm.stateObject;
+ }
+
function navigatePrevState(index) {
if (index < vm.stateObject.length-1) {
stopWatchStateObject();
@@ -212,41 +218,49 @@ export default function EntityStateController($scope, $location, $state, $stateP
});
function init() {
- var initialState = $stateParams.state;
- vm.stateObject = parseState(initialState);
- vm.selectedStateIndex = vm.stateObject.length-1;
- gotoState(vm.stateObject[vm.stateObject.length-1].id, false);
-
- $scope.$watchCollection(function() {
- return $state.params;
- }, function(){
- var currentState = $state.params.state;
- vm.stateObject = parseState(currentState);
- });
+ if (preservedState) {
+ vm.stateObject = preservedState;
+ vm.selectedStateIndex = vm.stateObject.length-1;
+ gotoState(vm.stateObject[vm.stateObject.length-1].id, true);
+ } else {
+ var initialState = $stateParams.state;
+ vm.stateObject = parseState(initialState);
+ vm.selectedStateIndex = vm.stateObject.length-1;
+ gotoState(vm.stateObject[vm.stateObject.length-1].id, false);
+ }
- $scope.$watch('vm.dashboardCtrl.dashboardCtx.state', function() {
- if (vm.stateObject[vm.stateObject.length-1].id !== vm.dashboardCtrl.dashboardCtx.state) {
- stopWatchStateObject();
- vm.stateObject[vm.stateObject.length-1].id = vm.dashboardCtrl.dashboardCtx.state;
- updateLocation();
- watchStateObject();
- }
- });
+ $timeout(() => {
+ $scope.$watchCollection(function () {
+ return $state.params;
+ }, function () {
+ var currentState = $state.params.state;
+ vm.stateObject = parseState(currentState);
+ });
- watchStateObject();
+ $scope.$watch('vm.dashboardCtrl.dashboardCtx.state', function () {
+ if (vm.stateObject[vm.stateObject.length - 1].id !== vm.dashboardCtrl.dashboardCtx.state) {
+ stopWatchStateObject();
+ vm.stateObject[vm.stateObject.length - 1].id = vm.dashboardCtrl.dashboardCtx.state;
+ updateLocation();
+ watchStateObject();
+ }
+ });
- if (vm.dashboardCtrl.isMobile) {
- watchSelectedStateIndex();
- }
+ watchStateObject();
- $scope.$watch('vm.dashboardCtrl.isMobile', function(newVal, prevVal) {
- if (!angular.equals(newVal, prevVal)) {
- if (vm.dashboardCtrl.isMobile) {
- watchSelectedStateIndex();
- } else {
- stopWatchSelectedStateIndex();
- }
+ if (vm.dashboardCtrl.isMobile) {
+ watchSelectedStateIndex();
}
+
+ $scope.$watch('vm.dashboardCtrl.isMobile', function (newVal, prevVal) {
+ if (!angular.equals(newVal, prevVal)) {
+ if (vm.dashboardCtrl.isMobile) {
+ watchSelectedStateIndex();
+ } else {
+ stopWatchSelectedStateIndex();
+ }
+ }
+ });
});
}
diff --git a/ui/src/app/dashboard/states/states-component.directive.js b/ui/src/app/dashboard/states/states-component.directive.js
index 143a694..02d6fee 100644
--- a/ui/src/app/dashboard/states/states-component.directive.js
+++ b/ui/src/app/dashboard/states/states-component.directive.js
@@ -47,6 +47,13 @@ export default function StatesComponent($compile, $templateCache, $controller, s
}
}
+ stateController.preserveState = function() {
+ if (scope.statesController) {
+ var state = scope.statesController.getStateObject();
+ statesControllerService.preserveStateControllerState(scope.statesControllerId, state);
+ }
+ }
+
stateController.navigatePrevState = function(index) {
if (scope.statesController) {
scope.statesController.navigatePrevState(index);
@@ -109,7 +116,12 @@ export default function StatesComponent($compile, $templateCache, $controller, s
}
var template = $templateCache.get(statesControllerInfo.templateUrl);
element.html(template);
- var locals = {};
+
+ var preservedState = statesControllerService.withdrawStateControllerState(scope.statesControllerId);
+
+ var locals = {
+ preservedState: preservedState
+ };
angular.extend(locals, {$scope: scope, $element: element});
var controller = $controller(statesControllerInfo.controller, locals, true, 'vm');
controller.instance = controller();
diff --git a/ui/src/app/dashboard/states/states-controller.service.js b/ui/src/app/dashboard/states/states-controller.service.js
index e4c1f29..be695c3 100644
--- a/ui/src/app/dashboard/states/states-controller.service.js
+++ b/ui/src/app/dashboard/states/states-controller.service.js
@@ -40,7 +40,9 @@ export default function StatesControllerService() {
var service = {
registerStatesController: registerStatesController,
getStateControllers: getStateControllers,
- getStateController: getStateController
+ getStateController: getStateController,
+ preserveStateControllerState: preserveStateControllerState,
+ withdrawStateControllerState: withdrawStateControllerState
};
return service;
@@ -57,4 +59,14 @@ export default function StatesControllerService() {
return statesControllers[id];
}
+ function preserveStateControllerState(id, state) {
+ statesControllers[id].state = angular.copy(state);
+ }
+
+ function withdrawStateControllerState(id) {
+ var state = statesControllers[id].state;
+ statesControllers[id].state = null;
+ return state;
+ }
+
}