diff --git a/ui/src/app/api/entity.service.js b/ui/src/app/api/entity.service.js index f6e664a5cf..e2c8dd627b 100644 --- a/ui/src/app/api/entity.service.js +++ b/ui/src/app/api/entity.service.js @@ -594,6 +594,21 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device } ); break; + case types.aliasFilterType.edgeType.value: + getEntitiesByNameFilter(types.entityType.edge, filter.edgeNameFilter, maxItems, {ignoreLoading: true}, filter.edgeType).then( + function success(entities) { + if (entities && entities.length || !failOnEmpty) { + result.entities = entitiesToEntitiesInfo(entities); + deferred.resolve(result); + } else { + deferred.reject(); + } + }, + function fail() { + deferred.reject(); + } + ); + break; case types.aliasFilterType.relationsQuery.value: result.stateEntity = filter.rootStateEntity; var rootEntityType; @@ -648,6 +663,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device case types.aliasFilterType.assetSearchQuery.value: case types.aliasFilterType.deviceSearchQuery.value: case types.aliasFilterType.entityViewSearchQuery.value: + case types.aliasFilterType.edgeSearchQuery.value: result.stateEntity = filter.rootStateEntity; if (result.stateEntity && stateEntityId) { rootEntityType = stateEntityId.entityType; @@ -777,6 +793,8 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device return entityType === types.entityType.device; case types.aliasFilterType.entityViewType.value: return entityType === types.entityType.entityView; + case types.aliasFilterType.edgeType.value: + return entityType === types.entityType.edge; case types.aliasFilterType.relationsQuery.value: return true; case types.aliasFilterType.assetSearchQuery.value: @@ -906,6 +924,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device entityFieldKeys.push(types.entityField.phone.keyName); break; case types.entityType.entityView: + case types.entityType.edge: entityFieldKeys.push(types.entityField.name.keyName); entityFieldKeys.push(types.entityField.type.keyName); break; @@ -1121,6 +1140,8 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device findByQueryPromise = deviceService.findByQuery(entitySearchQuery, true, {ignoreLoading: true}); } else if (entityType == types.entityType.entityView) { findByQueryPromise = entityViewService.findByQuery(entitySearchQuery, true, {ignoreLoading: true}); + } else if (entityType == types.entityType.edge) { + findByQueryPromise = edgeService.findByQuery(entitySearchQuery, true, {ignoreLoading: true}); } findByQueryPromise.then( function success(entities) { diff --git a/ui/src/app/entity/entity-filter-view.directive.js b/ui/src/app/entity/entity-filter-view.directive.js index 837313df28..c910f6f197 100644 --- a/ui/src/app/entity/entity-filter-view.directive.js +++ b/ui/src/app/entity/entity-filter-view.directive.js @@ -86,6 +86,15 @@ export default function EntityFilterViewDirective($compile, $templateCache, $q, scope.filterDisplayValue = $translate.instant('alias.filter-type-entity-view-type-description', {entityViewType: entityViewType}); } break; + case types.aliasFilterType.edgeType.value: + var edgeType = scope.filter.edgeType; + prefix = scope.filter.edgeNameFilter; + if (prefix && prefix.length) { + scope.filterDisplayValue = $translate.instant('alias.filter-type-edge-type-and-name-description', {edgeType: edgeType, prefix: prefix}); + } else { + scope.filterDisplayValue = $translate.instant('alias.filter-type-edge-type-description', {edgeType: edgeType}); + } + break; case types.aliasFilterType.relationsQuery.value: var rootEntityText; var directionText; diff --git a/ui/src/app/entity/entity-filter.directive.js b/ui/src/app/entity/entity-filter.directive.js index 39e3892ff9..629433545d 100644 --- a/ui/src/app/entity/entity-filter.directive.js +++ b/ui/src/app/entity/entity-filter.directive.js @@ -73,10 +73,15 @@ export default function EntityFilterDirective($compile, $templateCache, $q, $doc filter.entityViewType = null; filter.entityViewNameFilter = ''; break; + case types.aliasFilterType.edgeType.value: + filter.edgeType = null; + filter.edgeNameFilter = ''; + break; case types.aliasFilterType.relationsQuery.value: case types.aliasFilterType.assetSearchQuery.value: case types.aliasFilterType.deviceSearchQuery.value: case types.aliasFilterType.entityViewSearchQuery.value: + case types.aliasFilterType.edgeSearchQuery.value: filter.rootStateEntity = false; filter.stateEntityParamName = null; filter.defaultStateEntity = null; @@ -95,6 +100,9 @@ export default function EntityFilterDirective($compile, $templateCache, $q, $doc } else if (filter.type === types.aliasFilterType.entityViewSearchQuery.value) { filter.relationType = null; filter.entityViewTypes = []; + } else if (filter.type === types.aliasFilterType.edgeSearchQuery.value) { + filter.relationType = null; + filter.edgeTypes = []; } break; } diff --git a/ui/src/app/entity/entity-filter.tpl.html b/ui/src/app/entity/entity-filter.tpl.html index bfc63a7d24..65370f7ba9 100644 --- a/ui/src/app/entity/entity-filter.tpl.html +++ b/ui/src/app/entity/entity-filter.tpl.html @@ -126,6 +126,20 @@ aria-label="{{ 'entity-view.name-starts-with' | translate }}"> +
+ + + + + + +
@@ -426,4 +440,81 @@ ng-model="filter.entityViewTypes">
+
+ +
+ + + +
+
+ + +
+
+ + + + +
+ + + +
+
+
+
+ + + +
+
+
+ + + + + {{ ('relation.search-direction.' + direction) | translate}} + + + + + + + +
+
relation.relation-type
+ + +
edge.edge-types
+ + +
diff --git a/ui/src/app/widget/lib/entities-hierarchy-widget.js b/ui/src/app/widget/lib/entities-hierarchy-widget.js index 977bd7cea6..3bd5c30d59 100644 --- a/ui/src/app/widget/lib/entities-hierarchy-widget.js +++ b/ui/src/app/widget/lib/entities-hierarchy-widget.js @@ -508,6 +508,9 @@ function EntitiesHierarchyWidgetController($element, $scope, $q, $timeout, toast case types.entityType.entityView: materialIcon = 'view_quilt'; break; + case types.entityType.edge: + materialIcon = 'router'; + break; } } return {