diff --git a/ui/src/app/api/alias-controller.js b/ui/src/app/api/alias-controller.js index 779436336f..49eb8fe40e 100644 --- a/ui/src/app/api/alias-controller.js +++ b/ui/src/app/api/alias-controller.js @@ -96,6 +96,7 @@ export default class AliasController { function success(aliasInfo) { aliasCtrl.resolvedAliases[aliasId] = aliasInfo; if (entityAlias.filter.stateEntity) { + aliasInfo.stateEntity = true; aliasCtrl.resolvedAliasesToStateEntities[aliasId] = aliasCtrl.stateController.getStateParams().entityId; } @@ -120,12 +121,13 @@ export default class AliasController { function success(aliasInfo) { datasource.aliasName = aliasInfo.alias; if (aliasInfo.resolveMultiple) { + var newDatasource; var resolvedEntities = aliasInfo.resolvedEntities; if (resolvedEntities && resolvedEntities.length) { var datasources = []; for (var i=0;i 0) { - deferred.resolve(true); - } else { - deferred.resolve(false); - } - }, - function fail() { - deferred.resolve(false); - } - ); - return deferred.promise; - } - function createDatasourcesFromSubscriptionsInfo(subscriptionsInfo) { var deferred = $q.defer(); var datasources = []; diff --git a/ui/src/app/api/subscription.js b/ui/src/app/api/subscription.js index 471203c3b2..dd518c7ea5 100644 --- a/ui/src/app/api/subscription.js +++ b/ui/src/app/api/subscription.js @@ -125,17 +125,22 @@ export default class Subscription { initDataSubscription() { var deferred = this.ctx.$q.defer(); - var subscription = this; - this.ctx.aliasController.resolveDatasources(this.datasources).then( - function success(datasources) { - subscription.datasources = datasources; - subscription.configureData(); - deferred.resolve(); - }, - function fail() { - deferred.reject(); - } - ); + if (!this.ctx.aliasController) { + this.configureData(); + deferred.resolve(); + } else { + var subscription = this; + this.ctx.aliasController.resolveDatasources(this.datasources).then( + function success(datasources) { + subscription.datasources = datasources; + subscription.configureData(); + deferred.resolve(); + }, + function fail() { + deferred.reject(); + } + ); + } return deferred.promise; } diff --git a/ui/src/app/common/dashboard-utils.service.js b/ui/src/app/common/dashboard-utils.service.js index 51a0215dd2..58d1dbde7f 100644 --- a/ui/src/app/common/dashboard-utils.service.js +++ b/ui/src/app/common/dashboard-utils.service.js @@ -57,6 +57,9 @@ function DashboardUtils(types, utils, timeService) { for (aliasId in entityAliases) { entityAlias = entityAliases[aliasId]; entityAliases[aliasId] = validateAndUpdateEntityAlias(entityAlias); + if (!entityAliases[aliasId].id) { + entityAliases[aliasId].id = aliasId; + } } } return configuration; @@ -202,6 +205,12 @@ function DashboardUtils(types, utils, timeService) { states[firstStateId].root = true; } } + + /* var datasources = {}; + for (var widgetId in dashboard.configuration.widgets) { + + }*/ + dashboard.configuration = validateAndUpdateEntityAliases(dashboard.configuration); if (angular.isUndefined(dashboard.configuration.timewindow)) { diff --git a/ui/src/app/components/widget.controller.js b/ui/src/app/components/widget.controller.js index 103ad138e4..4407381491 100644 --- a/ui/src/app/components/widget.controller.js +++ b/ui/src/app/components/widget.controller.js @@ -38,6 +38,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q var gridsterItemInited = false; var subscriptionInited = false; + var widgetSizeDetected = false; var cafs = {}; @@ -206,9 +207,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q initialize().then( function(){ - if (checkSize()) { - onInit(); - } + onInit(); } ); @@ -488,10 +487,15 @@ export default function WidgetController($scope, $timeout, $window, $element, $q $scope.widgetErrorData = utils.processWidgetException(e); } - function onInit() { - if (!widgetContext.inited && - subscriptionInited && - gridsterItemInited) { + function isReady() { + return subscriptionInited && gridsterItemInited && widgetSizeDetected; + } + + function onInit(skipSizeCheck) { + if (!skipSizeCheck) { + checkSize(); + } + if (!widgetContext.inited && isReady()) { widgetContext.inited = true; try { widgetTypeInstance.onInit(); @@ -516,6 +520,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q widgetContext.width = width; widgetContext.height = height; sizeChanged = true; + widgetSizeDetected = true; } } return sizeChanged; @@ -536,7 +541,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q } }); } else { - onInit(); + onInit(true); } } } @@ -545,9 +550,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q if (item && item.gridster) { widgetContext.isMobile = item.gridster.isMobile; gridsterItemInited = true; - if (checkSize()) { - onInit(); - } + onInit(); // gridsterItemElement = $(item.$element); //updateVisibility(); } diff --git a/ui/src/app/dashboard/dashboard.controller.js b/ui/src/app/dashboard/dashboard.controller.js index 416886475e..7c97a9462a 100644 --- a/ui/src/app/dashboard/dashboard.controller.js +++ b/ui/src/app/dashboard/dashboard.controller.js @@ -344,6 +344,8 @@ export default function DashboardController(types, utils, dashboardUtils, widget vm.dashboardConfiguration = vm.dashboard.configuration; vm.dashboardCtx.dashboard = vm.dashboard; vm.dashboardCtx.dashboardTimewindow = vm.dashboardConfiguration.timewindow; + vm.dashboardCtx.aliasController = new AliasController($scope, $q, $filter, utils, + types, entityService, vm.dashboardCtx.stateController, vm.dashboardConfiguration.entityAliases); var parentScope = $window.parent.angular.element($window.frameElement).scope(); parentScope.$root.$broadcast('widgetEditModeInited'); parentScope.$root.$apply(); diff --git a/ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js b/ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js index e5822a44a5..b28a46bc48 100644 --- a/ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js +++ b/ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js @@ -22,7 +22,8 @@ import selectTargetLayoutTemplate from '../../dashboard/layouts/select-target-la /* eslint-enable import/no-unresolved, import/default */ /*@ngInject*/ -export default function AddWidgetToDashboardDialogController($scope, $mdDialog, $state, $q, $document, itembuffer, dashboardService, entityId, entityType, entityName, widget) { +export default function AddWidgetToDashboardDialogController($scope, $mdDialog, $state, $q, $document, + types, itembuffer, dashboardService, entityId, entityType, entityName, widget) { var vm = this; @@ -125,12 +126,14 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog, targetDeviceAliases: {} }; aliasesInfo.datasourceAliases[0] = { - aliasName: entityName, - entityType: entityType, - entityFilter: { - useFilter: false, - entityNameFilter: '', - entityList: [entityId] + id: 1, + alias: entityName, + filter: { + type: types.aliasFilterType.entityList.value, + stateEntity: false, + entityList: [entityId], + entityType: entityType, + resolveMultiple: false } }; itembuffer.addWidgetToDashboard(theDashboard, targetState, targetLayout, vm.widget, aliasesInfo, null, 48, null, -1, -1).then( diff --git a/ui/src/app/entity/entity-filter-dialog.controller.js b/ui/src/app/entity/entity-filter-dialog.controller.js index 2b1a30d8f4..17a19d61d2 100644 --- a/ui/src/app/entity/entity-filter-dialog.controller.js +++ b/ui/src/app/entity/entity-filter-dialog.controller.js @@ -64,7 +64,7 @@ export default function EntityFilterDialogController($scope, $mdDialog, $q, enti entity: null, stateEntity: false } - entityService.resolveAliasFilter(vm.filter).then( + entityService.resolveAliasFilter(vm.filter, null, 1).then( function success(result) { validationResult.stateEntity = result.stateEntity; var entities = result.entities; diff --git a/ui/src/app/import-export/import-export.service.js b/ui/src/app/import-export/import-export.service.js index af04687d5b..7f7f774dff 100644 --- a/ui/src/app/import-export/import-export.service.js +++ b/ui/src/app/import-export/import-export.service.js @@ -359,30 +359,50 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document, } function prepareEntityAlias(aliasInfo) { - var entityFilter; - var entityType; + var alias; + var filter; if (aliasInfo.deviceId) { - entityFilter = { - useFilter: false, - entityNameFilter: '', - entityList: [aliasInfo.deviceId] - } - entityType = types.entityType.device; + alias = aliasInfo.aliasName; + filter = { + type: types.aliasFilterType.entityList.value, + stateEntity: false, + entityType: types.entityType.device, + entityList: [aliasInfo.deviceId], + resolveMultiple: false + }; } else if (aliasInfo.deviceFilter) { - entityFilter = { - useFilter: aliasInfo.deviceFilter.useFilter, - entityNameFilter: aliasInfo.deviceFilter.deviceNameFilter, - entityList: aliasInfo.deviceFilter.deviceList + alias = aliasInfo.aliasName; + filter = { + type: aliasInfo.deviceFilter.useFilter ? types.aliasFilterType.entityName.value : types.aliasFilterType.entityList.value, + entityType: types.entityType.device, + resolveMultiple: false + } + if (filter.type == types.aliasFilterType.entityList.value) { + filter.stateEntity = false; + filter.entityList = aliasInfo.deviceFilter.deviceList + } else { + filter.entityNameFilter = aliasInfo.deviceFilter.deviceNameFilter; + } + } else if (aliasInfo.entityFilter) { + alias = aliasInfo.aliasName; + filter = { + type: aliasInfo.entityFilter.useFilter ? types.aliasFilterType.entityName.value : types.aliasFilterType.entityList.value, + entityType: aliasInfo.entityType, + resolveMultiple: false + } + if (filter.type == types.aliasFilterType.entityList.value) { + filter.stateEntity = false; + filter.entityList = aliasInfo.entityFilter.entityList; + } else { + filter.entityNameFilter = aliasInfo.entityFilter.entityNameFilter; } - entityType = types.entityType.device; } else { - entityFilter = aliasInfo.entityFilter; - entityType = aliasInfo.entityType; + alias = aliasInfo.alias; + filter = aliasInfo.filter; } return { - aliasName: aliasInfo.aliasName, - entityType: entityType, - entityFilter: entityFilter + alias: alias, + filter: filter }; } @@ -411,6 +431,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document, for (datasourceIndex in datasourceAliases) { datasourceAliasesMap[aliasId] = datasourceIndex; entityAliases[aliasId] = datasourceAliases[datasourceIndex]; + entityAliases[aliasId].id = aliasId; aliasId++; } } @@ -418,6 +439,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document, for (datasourceIndex in targetDeviceAliases) { targetDeviceAliasesMap[aliasId] = datasourceIndex; entityAliases[aliasId] = targetDeviceAliases[datasourceIndex]; + entityAliases[aliasId].id = aliasId; aliasId++; } } @@ -435,12 +457,10 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document, var datasourceIndex; if (datasourceAliasesMap[aliasId]) { datasourceIndex = datasourceAliasesMap[aliasId]; - datasourceAliases[datasourceIndex].entityType = entityAlias.entityType; - datasourceAliases[datasourceIndex].entityFilter = entityAlias.entityFilter; + datasourceAliases[datasourceIndex] = entityAlias; } else if (targetDeviceAliasesMap[aliasId]) { datasourceIndex = targetDeviceAliasesMap[aliasId]; - targetDeviceAliases[datasourceIndex].entityType = entityAlias.entityType; - targetDeviceAliases[datasourceIndex].entityFilter = entityAlias.entityFilter; + targetDeviceAliases[datasourceIndex] = entityAlias; } } addImportedWidget(dashboard, targetState, targetLayoutFunction, $event, widget, @@ -622,7 +642,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document, checkNextEntityAliasOrComplete(index, aliasIds, entityAliases, missingEntityAliases, deferred); } else { var missingEntityAlias = angular.copy(entityAlias); - missingEntityAlias.entityFilter = null; + missingEntityAlias.filter = null; missingEntityAliases[aliasId] = missingEntityAlias; checkNextEntityAliasOrComplete(index, aliasIds, entityAliases, missingEntityAliases, deferred); } diff --git a/ui/src/app/services/item-buffer.service.js b/ui/src/app/services/item-buffer.service.js index 3aa48097fe..309e53e59c 100644 --- a/ui/src/app/services/item-buffer.service.js +++ b/ui/src/app/services/item-buffer.service.js @@ -46,16 +46,14 @@ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils) { aliasesInfo { datasourceAliases: { datasourceIndex: { - aliasName: "...", - entityType: "...", - entityFilter: "..." + alias: "...", + filter: "..." } } targetDeviceAliases: { targetDeviceAliasIndex: { - aliasName: "...", - entityType: "...", - entityFilter: "..." + alias: "...", + filter: "..." } } .... @@ -64,9 +62,8 @@ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils) { function prepareAliasInfo(entityAlias) { return { - aliasName: entityAlias.alias, - entityType: entityAlias.entityType, - entityFilter: entityAlias.entityFilter + alias: entityAlias.alias, + filter: entityAlias.filter }; } @@ -288,8 +285,7 @@ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils) { } function isEntityAliasEqual(alias1, alias2) { - return alias1.entityType === alias2.entityType && - angular.equals(alias1.entityFilter, alias2.entityFilter); + return angular.equals(alias1.filter, alias2.filter); } function getEntityAliasId(entityAliases, aliasInfo) { @@ -301,13 +297,13 @@ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils) { } } if (!newAliasId) { - var newAliasName = createEntityAliasName(entityAliases, aliasInfo.aliasName); + var newAliasName = createEntityAliasName(entityAliases, aliasInfo.alias); newAliasId = 0; for (aliasId in entityAliases) { newAliasId = Math.max(newAliasId, aliasId); } newAliasId++; - entityAliases[newAliasId] = {alias: newAliasName, entityType: aliasInfo.entityType, entityFilter: aliasInfo.entityFilter}; + entityAliases[newAliasId] = {id: newAliasId, alias: newAliasName, filter: aliasInfo.filter}; } return newAliasId; }