diff --git a/ui/src/app/api/subscription.js b/ui/src/app/api/subscription.js index 2e041762a8..e89650c6a4 100644 --- a/ui/src/app/api/subscription.js +++ b/ui/src/app/api/subscription.js @@ -37,6 +37,7 @@ export default class Subscription { this.id = this.ctx.utils.guid(); this.cafs = {}; this.registrations = []; + this.hasResolvedData = false; var subscription = this; var deferred = this.ctx.$q.defer(); @@ -235,12 +236,16 @@ export default class Subscription { var subscription = this; this.loadStDiff().then(() => { if (!subscription.ctx.aliasController) { + subscription.hasResolvedData = true; subscription.configureAlarmsData(); deferred.resolve(); } else { subscription.ctx.aliasController.resolveAlarmSource(subscription.alarmSource).then( function success(alarmSource) { subscription.alarmSource = alarmSource; + if (alarmSource) { + subscription.hasResolvedData = true; + } subscription.configureAlarmsData(); deferred.resolve(); }, @@ -282,12 +287,16 @@ export default class Subscription { var subscription = this; this.loadStDiff().then(() => { if (!subscription.ctx.aliasController) { + subscription.hasResolvedData = true; subscription.configureData(); deferred.resolve(); } else { subscription.ctx.aliasController.resolveDatasources(subscription.datasources).then( function success(datasources) { subscription.datasources = datasources; + if (datasources && datasources.length) { + subscription.hasResolvedData = true; + } subscription.configureData(); deferred.resolve(); }, @@ -420,6 +429,7 @@ export default class Subscription { } else { subscription.rpcEnabled = subscription.ctx.$scope.widgetEditMode ? true : false; } + subscription.hasResolvedData = subscription.rpcEnabled; subscription.callbacks.rpcStateChanged(subscription); deferred.resolve(); } else { @@ -443,6 +453,7 @@ export default class Subscription { } else { this.rpcEnabled = this.ctx.$scope.widgetEditMode ? true : false; } + this.hasResolvedData = true; this.callbacks.rpcStateChanged(this); deferred.resolve(); } @@ -880,6 +891,10 @@ export default class Subscription { return subscriptionsChanged; } + isDataResolved() { + return this.hasResolvedData; + } + destroy() { this.unsubscribe(); for (var cafId in this.cafs) { diff --git a/ui/src/app/components/widget/action/custom-action-pretty-editor.directive.js b/ui/src/app/components/widget/action/custom-action-pretty-editor.directive.js index 5d93e58b2a..0d282af05e 100644 --- a/ui/src/app/components/widget/action/custom-action-pretty-editor.directive.js +++ b/ui/src/app/components/widget/action/custom-action-pretty-editor.directive.js @@ -466,7 +466,7 @@ function CustomActionPrettyEditor($compile, $templateCache, $window, $timeout) { "// tasks.push(widgetContext.aliasController.getAliasInfo(aliasId));\n" + "// });\n" + "// $q.all(tasks).then(function() {\n" + - "// $rootScope.$broadcast('entityAliasesChanged', aliasIds);\n" + + "// $rootScope.$broadcast('widgetForceReInit');\n" + "// });\n" + "// }\n" + "//}\n"; diff --git a/ui/src/app/components/widget/widget.controller.js b/ui/src/app/components/widget/widget.controller.js index 126c793425..593c3de36e 100644 --- a/ui/src/app/components/widget/widget.controller.js +++ b/ui/src/app/components/widget/widget.controller.js @@ -312,7 +312,9 @@ export default function WidgetController($scope, $state, $timeout, $window, $ocL options.callbacks = { onDataUpdated: function() { - widgetTypeInstance.onDataUpdated(); + if (displayWidgetInstance()) { + widgetTypeInstance.onDataUpdated(); + } }, onDataUpdateError: function(subscription, e) { handleWidgetException(e); @@ -849,7 +851,11 @@ export default function WidgetController($scope, $state, $timeout, $window, $ocL if (!widgetContext.inited && isReady()) { widgetContext.inited = true; try { - widgetTypeInstance.onInit(); + if (displayWidgetInstance()) { + widgetTypeInstance.onInit(); + } else { + $scope.loadingData = false; + } } catch (e) { handleWidgetException(e); } @@ -886,7 +892,9 @@ export default function WidgetController($scope, $state, $timeout, $window, $ocL } cafs['resize'] = tbRaf(function() { try { - widgetTypeInstance.onResize(); + if (displayWidgetInstance()) { + widgetTypeInstance.onResize(); + } } catch (e) { handleWidgetException(e); } @@ -916,7 +924,9 @@ export default function WidgetController($scope, $state, $timeout, $window, $ocL } cafs['editMode'] = tbRaf(function() { try { - widgetTypeInstance.onEditModeChanged(); + if (displayWidgetInstance()) { + widgetTypeInstance.onEditModeChanged(); + } } catch (e) { handleWidgetException(e); } @@ -935,7 +945,9 @@ export default function WidgetController($scope, $state, $timeout, $window, $ocL } cafs['mobileMode'] = tbRaf(function() { try { - widgetTypeInstance.onMobileModeChanged(); + if (displayWidgetInstance()) { + widgetTypeInstance.onMobileModeChanged(); + } } catch (e) { handleWidgetException(e); } @@ -968,7 +980,21 @@ export default function WidgetController($scope, $state, $timeout, $window, $ocL } } + function displayWidgetInstance() { + if (widget.type !== types.widgetType.static.value) { + for (var id in widgetContext.subscriptions) { + if (widgetContext.subscriptions[id].isDataResolved()) { + return true; + } + } + return false; + } else { + return true; + } + } + function onDestroy() { + var shouldDestroyWidgetInstance = displayWidgetInstance(); for (var id in widgetContext.subscriptions) { var subscription = widgetContext.subscriptions[id]; subscription.destroy(); @@ -984,7 +1010,9 @@ export default function WidgetController($scope, $state, $timeout, $window, $ocL } } try { - widgetTypeInstance.onDestroy(); + if (shouldDestroyWidgetInstance) { + widgetTypeInstance.onDestroy(); + } } catch (e) { handleWidgetException(e); }