Commit 0e6053795515c53443b4e6f7f2638547593df38c

Authored by Igor Kulikov
1 parent 88877cb0

UI: Preserve dashboard state when switching to edit mode.

... ... @@ -993,6 +993,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
993 993 function setEditMode(isEdit, revert) {
994 994 vm.isEdit = isEdit;
995 995 if (vm.isEdit) {
  996 + vm.dashboardCtx.stateController.preserveState();
996 997 vm.prevDashboard = angular.copy(vm.dashboard);
997 998 } else {
998 999 if (vm.widgetEditMode) {
... ... @@ -1009,7 +1010,6 @@ export default function DashboardController(types, utils, dashboardUtils, widget
1009 1010 } else {
1010 1011 vm.dashboard.configuration.timewindow = vm.dashboardCtx.dashboardTimewindow;
1011 1012 }
1012   - vm.dashboardCtx.stateController.resetState();
1013 1013 }
1014 1014 }
1015 1015 }
... ...
... ... @@ -15,7 +15,8 @@
15 15 */
16 16
17 17 /*@ngInject*/
18   -export default function DefaultStateController($scope, $location, $state, $stateParams, utils, types, dashboardUtils) {
  18 +export default function DefaultStateController($scope, $timeout, $location, $state,
  19 + $stateParams, utils, types, dashboardUtils, preservedState) {
19 20
20 21 var vm = this;
21 22
... ... @@ -24,6 +25,7 @@ export default function DefaultStateController($scope, $location, $state, $state
24 25 vm.openState = openState;
25 26 vm.updateState = updateState;
26 27 vm.resetState = resetState;
  28 + vm.getStateObject = getStateObject;
27 29 vm.navigatePrevState = navigatePrevState;
28 30 vm.getStateId = getStateId;
29 31 vm.getStateParams = getStateParams;
... ... @@ -77,6 +79,10 @@ export default function DefaultStateController($scope, $location, $state, $state
77 79 gotoState(rootStateId, true);
78 80 }
79 81
  82 + function getStateObject() {
  83 + return vm.stateObject;
  84 + }
  85 +
80 86 function navigatePrevState(index) {
81 87 if (index < vm.stateObject.length-1) {
82 88 stopWatchStateObject();
... ... @@ -168,27 +174,33 @@ export default function DefaultStateController($scope, $location, $state, $state
168 174 }
169 175
170 176 function init() {
171   - var initialState = $stateParams.state;
172   - vm.stateObject = parseState(initialState);
173   -
174   - gotoState(vm.stateObject[0].id, false);
175   -
176   - $scope.$watchCollection(function(){
177   - return $state.params;
178   - }, function(){
179   - var currentState = $state.params.state;
180   - vm.stateObject = parseState(currentState);
181   - });
182   -
183   - $scope.$watch('vm.dashboardCtrl.dashboardCtx.state', function() {
184   - if (vm.stateObject[0].id !== vm.dashboardCtrl.dashboardCtx.state) {
185   - stopWatchStateObject();
186   - vm.stateObject[0].id = vm.dashboardCtrl.dashboardCtx.state;
187   - updateLocation();
188   - watchStateObject();
189   - }
  177 + if (preservedState) {
  178 + vm.stateObject = preservedState;
  179 + gotoState(vm.stateObject[0].id, true);
  180 + } else {
  181 + var initialState = $stateParams.state;
  182 + vm.stateObject = parseState(initialState);
  183 + gotoState(vm.stateObject[0].id, false);
  184 + }
  185 +
  186 + $timeout(() => {
  187 + $scope.$watchCollection(function () {
  188 + return $state.params;
  189 + }, function () {
  190 + var currentState = $state.params.state;
  191 + vm.stateObject = parseState(currentState);
  192 + });
  193 +
  194 + $scope.$watch('vm.dashboardCtrl.dashboardCtx.state', function () {
  195 + if (vm.stateObject[0].id !== vm.dashboardCtrl.dashboardCtx.state) {
  196 + stopWatchStateObject();
  197 + vm.stateObject[0].id = vm.dashboardCtrl.dashboardCtx.state;
  198 + updateLocation();
  199 + watchStateObject();
  200 + }
  201 + });
  202 + watchStateObject();
190 203 });
191   - watchStateObject();
192 204 }
193 205
194 206 function stopWatchStateObject() {
... ...
... ... @@ -17,7 +17,8 @@
17 17 import './entity-state-controller.scss';
18 18
19 19 /*@ngInject*/
20   -export default function EntityStateController($scope, $location, $state, $stateParams, $q, $translate, utils, types, dashboardUtils, entityService) {
  20 +export default function EntityStateController($scope, $timeout, $location, $state, $stateParams,
  21 + $q, $translate, utils, types, dashboardUtils, entityService, preservedState) {
21 22
22 23 var vm = this;
23 24
... ... @@ -26,6 +27,7 @@ export default function EntityStateController($scope, $location, $state, $stateP
26 27 vm.openState = openState;
27 28 vm.updateState = updateState;
28 29 vm.resetState = resetState;
  30 + vm.getStateObject = getStateObject;
29 31 vm.navigatePrevState = navigatePrevState;
30 32 vm.getStateId = getStateId;
31 33 vm.getStateParams = getStateParams;
... ... @@ -84,6 +86,10 @@ export default function EntityStateController($scope, $location, $state, $stateP
84 86 gotoState(rootStateId, true);
85 87 }
86 88
  89 + function getStateObject() {
  90 + return vm.stateObject;
  91 + }
  92 +
87 93 function navigatePrevState(index) {
88 94 if (index < vm.stateObject.length-1) {
89 95 stopWatchStateObject();
... ... @@ -212,41 +218,49 @@ export default function EntityStateController($scope, $location, $state, $stateP
212 218 });
213 219
214 220 function init() {
215   - var initialState = $stateParams.state;
216   - vm.stateObject = parseState(initialState);
217   - vm.selectedStateIndex = vm.stateObject.length-1;
218   - gotoState(vm.stateObject[vm.stateObject.length-1].id, false);
219   -
220   - $scope.$watchCollection(function() {
221   - return $state.params;
222   - }, function(){
223   - var currentState = $state.params.state;
224   - vm.stateObject = parseState(currentState);
225   - });
  221 + if (preservedState) {
  222 + vm.stateObject = preservedState;
  223 + vm.selectedStateIndex = vm.stateObject.length-1;
  224 + gotoState(vm.stateObject[vm.stateObject.length-1].id, true);
  225 + } else {
  226 + var initialState = $stateParams.state;
  227 + vm.stateObject = parseState(initialState);
  228 + vm.selectedStateIndex = vm.stateObject.length-1;
  229 + gotoState(vm.stateObject[vm.stateObject.length-1].id, false);
  230 + }
226 231
227   - $scope.$watch('vm.dashboardCtrl.dashboardCtx.state', function() {
228   - if (vm.stateObject[vm.stateObject.length-1].id !== vm.dashboardCtrl.dashboardCtx.state) {
229   - stopWatchStateObject();
230   - vm.stateObject[vm.stateObject.length-1].id = vm.dashboardCtrl.dashboardCtx.state;
231   - updateLocation();
232   - watchStateObject();
233   - }
234   - });
  232 + $timeout(() => {
  233 + $scope.$watchCollection(function () {
  234 + return $state.params;
  235 + }, function () {
  236 + var currentState = $state.params.state;
  237 + vm.stateObject = parseState(currentState);
  238 + });
235 239
236   - watchStateObject();
  240 + $scope.$watch('vm.dashboardCtrl.dashboardCtx.state', function () {
  241 + if (vm.stateObject[vm.stateObject.length - 1].id !== vm.dashboardCtrl.dashboardCtx.state) {
  242 + stopWatchStateObject();
  243 + vm.stateObject[vm.stateObject.length - 1].id = vm.dashboardCtrl.dashboardCtx.state;
  244 + updateLocation();
  245 + watchStateObject();
  246 + }
  247 + });
237 248
238   - if (vm.dashboardCtrl.isMobile) {
239   - watchSelectedStateIndex();
240   - }
  249 + watchStateObject();
241 250
242   - $scope.$watch('vm.dashboardCtrl.isMobile', function(newVal, prevVal) {
243   - if (!angular.equals(newVal, prevVal)) {
244   - if (vm.dashboardCtrl.isMobile) {
245   - watchSelectedStateIndex();
246   - } else {
247   - stopWatchSelectedStateIndex();
248   - }
  251 + if (vm.dashboardCtrl.isMobile) {
  252 + watchSelectedStateIndex();
249 253 }
  254 +
  255 + $scope.$watch('vm.dashboardCtrl.isMobile', function (newVal, prevVal) {
  256 + if (!angular.equals(newVal, prevVal)) {
  257 + if (vm.dashboardCtrl.isMobile) {
  258 + watchSelectedStateIndex();
  259 + } else {
  260 + stopWatchSelectedStateIndex();
  261 + }
  262 + }
  263 + });
250 264 });
251 265
252 266 }
... ...
... ... @@ -47,6 +47,13 @@ export default function StatesComponent($compile, $templateCache, $controller, s
47 47 }
48 48 }
49 49
  50 + stateController.preserveState = function() {
  51 + if (scope.statesController) {
  52 + var state = scope.statesController.getStateObject();
  53 + statesControllerService.preserveStateControllerState(scope.statesControllerId, state);
  54 + }
  55 + }
  56 +
50 57 stateController.navigatePrevState = function(index) {
51 58 if (scope.statesController) {
52 59 scope.statesController.navigatePrevState(index);
... ... @@ -109,7 +116,12 @@ export default function StatesComponent($compile, $templateCache, $controller, s
109 116 }
110 117 var template = $templateCache.get(statesControllerInfo.templateUrl);
111 118 element.html(template);
112   - var locals = {};
  119 +
  120 + var preservedState = statesControllerService.withdrawStateControllerState(scope.statesControllerId);
  121 +
  122 + var locals = {
  123 + preservedState: preservedState
  124 + };
113 125 angular.extend(locals, {$scope: scope, $element: element});
114 126 var controller = $controller(statesControllerInfo.controller, locals, true, 'vm');
115 127 controller.instance = controller();
... ...
... ... @@ -40,7 +40,9 @@ export default function StatesControllerService() {
40 40 var service = {
41 41 registerStatesController: registerStatesController,
42 42 getStateControllers: getStateControllers,
43   - getStateController: getStateController
  43 + getStateController: getStateController,
  44 + preserveStateControllerState: preserveStateControllerState,
  45 + withdrawStateControllerState: withdrawStateControllerState
44 46 };
45 47
46 48 return service;
... ... @@ -57,4 +59,14 @@ export default function StatesControllerService() {
57 59 return statesControllers[id];
58 60 }
59 61
  62 + function preserveStateControllerState(id, state) {
  63 + statesControllers[id].state = angular.copy(state);
  64 + }
  65 +
  66 + function withdrawStateControllerState(id) {
  67 + var state = statesControllers[id].state;
  68 + statesControllers[id].state = null;
  69 + return state;
  70 + }
  71 +
60 72 }
... ...