Showing
5 changed files
with
132 additions
and
0 deletions
@@ -594,6 +594,21 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | @@ -594,6 +594,21 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | ||
594 | } | 594 | } |
595 | ); | 595 | ); |
596 | break; | 596 | break; |
597 | + case types.aliasFilterType.edgeType.value: | ||
598 | + getEntitiesByNameFilter(types.entityType.edge, filter.edgeNameFilter, maxItems, {ignoreLoading: true}, filter.edgeType).then( | ||
599 | + function success(entities) { | ||
600 | + if (entities && entities.length || !failOnEmpty) { | ||
601 | + result.entities = entitiesToEntitiesInfo(entities); | ||
602 | + deferred.resolve(result); | ||
603 | + } else { | ||
604 | + deferred.reject(); | ||
605 | + } | ||
606 | + }, | ||
607 | + function fail() { | ||
608 | + deferred.reject(); | ||
609 | + } | ||
610 | + ); | ||
611 | + break; | ||
597 | case types.aliasFilterType.relationsQuery.value: | 612 | case types.aliasFilterType.relationsQuery.value: |
598 | result.stateEntity = filter.rootStateEntity; | 613 | result.stateEntity = filter.rootStateEntity; |
599 | var rootEntityType; | 614 | var rootEntityType; |
@@ -648,6 +663,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | @@ -648,6 +663,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | ||
648 | case types.aliasFilterType.assetSearchQuery.value: | 663 | case types.aliasFilterType.assetSearchQuery.value: |
649 | case types.aliasFilterType.deviceSearchQuery.value: | 664 | case types.aliasFilterType.deviceSearchQuery.value: |
650 | case types.aliasFilterType.entityViewSearchQuery.value: | 665 | case types.aliasFilterType.entityViewSearchQuery.value: |
666 | + case types.aliasFilterType.edgeSearchQuery.value: | ||
651 | result.stateEntity = filter.rootStateEntity; | 667 | result.stateEntity = filter.rootStateEntity; |
652 | if (result.stateEntity && stateEntityId) { | 668 | if (result.stateEntity && stateEntityId) { |
653 | rootEntityType = stateEntityId.entityType; | 669 | rootEntityType = stateEntityId.entityType; |
@@ -777,6 +793,8 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | @@ -777,6 +793,8 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | ||
777 | return entityType === types.entityType.device; | 793 | return entityType === types.entityType.device; |
778 | case types.aliasFilterType.entityViewType.value: | 794 | case types.aliasFilterType.entityViewType.value: |
779 | return entityType === types.entityType.entityView; | 795 | return entityType === types.entityType.entityView; |
796 | + case types.aliasFilterType.edgeType.value: | ||
797 | + return entityType === types.entityType.edge; | ||
780 | case types.aliasFilterType.relationsQuery.value: | 798 | case types.aliasFilterType.relationsQuery.value: |
781 | return true; | 799 | return true; |
782 | case types.aliasFilterType.assetSearchQuery.value: | 800 | case types.aliasFilterType.assetSearchQuery.value: |
@@ -906,6 +924,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | @@ -906,6 +924,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | ||
906 | entityFieldKeys.push(types.entityField.phone.keyName); | 924 | entityFieldKeys.push(types.entityField.phone.keyName); |
907 | break; | 925 | break; |
908 | case types.entityType.entityView: | 926 | case types.entityType.entityView: |
927 | + case types.entityType.edge: | ||
909 | entityFieldKeys.push(types.entityField.name.keyName); | 928 | entityFieldKeys.push(types.entityField.name.keyName); |
910 | entityFieldKeys.push(types.entityField.type.keyName); | 929 | entityFieldKeys.push(types.entityField.type.keyName); |
911 | break; | 930 | break; |
@@ -1121,6 +1140,8 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | @@ -1121,6 +1140,8 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device | ||
1121 | findByQueryPromise = deviceService.findByQuery(entitySearchQuery, true, {ignoreLoading: true}); | 1140 | findByQueryPromise = deviceService.findByQuery(entitySearchQuery, true, {ignoreLoading: true}); |
1122 | } else if (entityType == types.entityType.entityView) { | 1141 | } else if (entityType == types.entityType.entityView) { |
1123 | findByQueryPromise = entityViewService.findByQuery(entitySearchQuery, true, {ignoreLoading: true}); | 1142 | findByQueryPromise = entityViewService.findByQuery(entitySearchQuery, true, {ignoreLoading: true}); |
1143 | + } else if (entityType == types.entityType.edge) { | ||
1144 | + findByQueryPromise = edgeService.findByQuery(entitySearchQuery, true, {ignoreLoading: true}); | ||
1124 | } | 1145 | } |
1125 | findByQueryPromise.then( | 1146 | findByQueryPromise.then( |
1126 | function success(entities) { | 1147 | function success(entities) { |
@@ -86,6 +86,15 @@ export default function EntityFilterViewDirective($compile, $templateCache, $q, | @@ -86,6 +86,15 @@ export default function EntityFilterViewDirective($compile, $templateCache, $q, | ||
86 | scope.filterDisplayValue = $translate.instant('alias.filter-type-entity-view-type-description', {entityViewType: entityViewType}); | 86 | scope.filterDisplayValue = $translate.instant('alias.filter-type-entity-view-type-description', {entityViewType: entityViewType}); |
87 | } | 87 | } |
88 | break; | 88 | break; |
89 | + case types.aliasFilterType.edgeType.value: | ||
90 | + var edgeType = scope.filter.edgeType; | ||
91 | + prefix = scope.filter.edgeNameFilter; | ||
92 | + if (prefix && prefix.length) { | ||
93 | + scope.filterDisplayValue = $translate.instant('alias.filter-type-edge-type-and-name-description', {edgeType: edgeType, prefix: prefix}); | ||
94 | + } else { | ||
95 | + scope.filterDisplayValue = $translate.instant('alias.filter-type-edge-type-description', {edgeType: edgeType}); | ||
96 | + } | ||
97 | + break; | ||
89 | case types.aliasFilterType.relationsQuery.value: | 98 | case types.aliasFilterType.relationsQuery.value: |
90 | var rootEntityText; | 99 | var rootEntityText; |
91 | var directionText; | 100 | var directionText; |
@@ -73,10 +73,15 @@ export default function EntityFilterDirective($compile, $templateCache, $q, $doc | @@ -73,10 +73,15 @@ export default function EntityFilterDirective($compile, $templateCache, $q, $doc | ||
73 | filter.entityViewType = null; | 73 | filter.entityViewType = null; |
74 | filter.entityViewNameFilter = ''; | 74 | filter.entityViewNameFilter = ''; |
75 | break; | 75 | break; |
76 | + case types.aliasFilterType.edgeType.value: | ||
77 | + filter.edgeType = null; | ||
78 | + filter.edgeNameFilter = ''; | ||
79 | + break; | ||
76 | case types.aliasFilterType.relationsQuery.value: | 80 | case types.aliasFilterType.relationsQuery.value: |
77 | case types.aliasFilterType.assetSearchQuery.value: | 81 | case types.aliasFilterType.assetSearchQuery.value: |
78 | case types.aliasFilterType.deviceSearchQuery.value: | 82 | case types.aliasFilterType.deviceSearchQuery.value: |
79 | case types.aliasFilterType.entityViewSearchQuery.value: | 83 | case types.aliasFilterType.entityViewSearchQuery.value: |
84 | + case types.aliasFilterType.edgeSearchQuery.value: | ||
80 | filter.rootStateEntity = false; | 85 | filter.rootStateEntity = false; |
81 | filter.stateEntityParamName = null; | 86 | filter.stateEntityParamName = null; |
82 | filter.defaultStateEntity = null; | 87 | filter.defaultStateEntity = null; |
@@ -95,6 +100,9 @@ export default function EntityFilterDirective($compile, $templateCache, $q, $doc | @@ -95,6 +100,9 @@ export default function EntityFilterDirective($compile, $templateCache, $q, $doc | ||
95 | } else if (filter.type === types.aliasFilterType.entityViewSearchQuery.value) { | 100 | } else if (filter.type === types.aliasFilterType.entityViewSearchQuery.value) { |
96 | filter.relationType = null; | 101 | filter.relationType = null; |
97 | filter.entityViewTypes = []; | 102 | filter.entityViewTypes = []; |
103 | + } else if (filter.type === types.aliasFilterType.edgeSearchQuery.value) { | ||
104 | + filter.relationType = null; | ||
105 | + filter.edgeTypes = []; | ||
98 | } | 106 | } |
99 | break; | 107 | break; |
100 | } | 108 | } |
@@ -126,6 +126,20 @@ | @@ -126,6 +126,20 @@ | ||
126 | aria-label="{{ 'entity-view.name-starts-with' | translate }}"> | 126 | aria-label="{{ 'entity-view.name-starts-with' | translate }}"> |
127 | </md-input-container> | 127 | </md-input-container> |
128 | </section> | 128 | </section> |
129 | + <section layout="column" ng-if="filter.type == types.aliasFilterType.edgeType.value" id="edgeTypeFilter"> | ||
130 | + <tb-entity-subtype-autocomplete | ||
131 | + tb-required="true" | ||
132 | + the-form="theForm" | ||
133 | + ng-model="filter.edgeType" | ||
134 | + entity-type="types.entityType.edge"> | ||
135 | + </tb-entity-subtype-autocomplete> | ||
136 | + <md-input-container class="md-block"> | ||
137 | + <label translate>edge.name-starts-with</label> | ||
138 | + <input name="edgeNameFilter" | ||
139 | + ng-model="filter.edgeNameFilter" | ||
140 | + aria-label="{{ 'edge.name-starts-with' | translate }}"> | ||
141 | + </md-input-container> | ||
142 | + </section> | ||
129 | <section layout="column" ng-if="filter.type == types.aliasFilterType.relationsQuery.value" id="relationsQueryFilter"> | 143 | <section layout="column" ng-if="filter.type == types.aliasFilterType.relationsQuery.value" id="relationsQueryFilter"> |
130 | <label class="tb-small">{{ 'alias.root-entity' | translate }}</label> | 144 | <label class="tb-small">{{ 'alias.root-entity' | translate }}</label> |
131 | <section class="tb-root-state-entity-switch" layout="row" layout-align="start center" style="padding-left: 0px;"> | 145 | <section class="tb-root-state-entity-switch" layout="row" layout-align="start center" style="padding-left: 0px;"> |
@@ -426,4 +440,81 @@ | @@ -426,4 +440,81 @@ | ||
426 | ng-model="filter.entityViewTypes"> | 440 | ng-model="filter.entityViewTypes"> |
427 | </tb-entity-subtype-list> | 441 | </tb-entity-subtype-list> |
428 | </section> | 442 | </section> |
443 | + <section layout="column" ng-if="filter.type == types.aliasFilterType.edgeSearchQuery.value" id="edgeSearchQueryFilter"> | ||
444 | + <label class="tb-small">{{ 'alias.root-entity' | translate }}</label> | ||
445 | + <section class="tb-root-state-entity-switch" layout="row" layout-align="start center" style="padding-left: 0px;"> | ||
446 | + <md-switch class="root-state-entity-switch" ng-model="filter.rootStateEntity" | ||
447 | + aria-label="{{ 'alias.root-state-entity' | translate }}"> | ||
448 | + </md-switch> | ||
449 | + <label class="tb-small root-state-entity-label" translate>alias.root-state-entity</label> | ||
450 | + </section> | ||
451 | + <div flex layout="row" ng-if="!filter.rootStateEntity"> | ||
452 | + <tb-entity-select flex | ||
453 | + the-form="theForm" | ||
454 | + tb-required="!filter.rootStateEntity" | ||
455 | + ng-disabled="filter.rootStateEntity" | ||
456 | + use-alias-entity-types="true" | ||
457 | + ng-model="filter.rootEntity"> | ||
458 | + </tb-entity-select> | ||
459 | + </div> | ||
460 | + <div flex layout="row" ng-if="filter.rootStateEntity"> | ||
461 | + <md-input-container class="md-block" style="margin-top: 32px;"> | ||
462 | + <label translate>alias.state-entity-parameter-name</label> | ||
463 | + <input name="stateEntityParamName" | ||
464 | + placeholder="{{ 'alias.default-entity-parameter-name' | translate }}" | ||
465 | + ng-model="filter.stateEntityParamName" | ||
466 | + aria-label="{{ 'alias.state-entity-parameter-name' | translate }}"> | ||
467 | + </md-input-container> | ||
468 | + <div flex layout="column"> | ||
469 | + <label class="tb-small">{{ 'alias.default-state-entity' | translate }}</label> | ||
470 | + <tb-entity-select flex | ||
471 | + the-form="theForm" | ||
472 | + tb-required="false" | ||
473 | + use-alias-entity-types="true" | ||
474 | + ng-model="filter.defaultStateEntity"> | ||
475 | + </tb-entity-select> | ||
476 | + </div> | ||
477 | + </div> | ||
478 | + <div flex layout="row"> | ||
479 | + <section class="tb-root-state-entity-switch" layout="row" layout-align="start center" style="padding-left: 0px;"> | ||
480 | + <md-switch class="root-state-entity-switch" ng-model="filter.fetchLastLevelOnly" | ||
481 | + aria-label="{{ 'alias.last-level-relation' | translate }}"> | ||
482 | + </md-switch> | ||
483 | + <label class="tb-small root-state-entity-label" translate>alias.last-level-relation</label> | ||
484 | + </section> | ||
485 | + </div> | ||
486 | + <div flex layout="row"> | ||
487 | + <md-input-container class="md-block" style="min-width: 100px;"> | ||
488 | + <label translate>relation.direction</label> | ||
489 | + <md-select required ng-model="filter.direction"> | ||
490 | + <md-option ng-repeat="direction in types.entitySearchDirection" ng-value="direction"> | ||
491 | + {{ ('relation.search-direction.' + direction) | translate}} | ||
492 | + </md-option> | ||
493 | + </md-select> | ||
494 | + </md-input-container> | ||
495 | + <md-input-container flex class="md-block"> | ||
496 | + <label translate>alias.max-relation-level</label> | ||
497 | + <input name="maxRelationLevel" | ||
498 | + type="number" | ||
499 | + min="1" | ||
500 | + step="1" | ||
501 | + placeholder="{{ 'alias.unlimited-level' | translate }}" | ||
502 | + ng-model="filter.maxLevel" | ||
503 | + aria-label="{{ 'alias.max-relation-level' | translate }}"> | ||
504 | + </md-input-container> | ||
505 | + </div> | ||
506 | + <div class="md-caption" style="color: rgba(0,0,0,0.57);" translate>relation.relation-type</div> | ||
507 | + <tb-relation-type-autocomplete flex | ||
508 | + hide-label | ||
509 | + the-form="theForm" | ||
510 | + ng-model="filter.relationType" | ||
511 | + tb-required="false"> | ||
512 | + </tb-relation-type-autocomplete> | ||
513 | + <div class="md-caption tb-required" style="color: rgba(0,0,0,0.57);" translate>edge.edge-types</div> | ||
514 | + <tb-entity-subtype-list | ||
515 | + tb-required="true" | ||
516 | + entity-type="types.entityType.edge" | ||
517 | + ng-model="filter.edgeTypes"> | ||
518 | + </tb-entity-subtype-list> | ||
519 | + </section> | ||
429 | </div> | 520 | </div> |
@@ -508,6 +508,9 @@ function EntitiesHierarchyWidgetController($element, $scope, $q, $timeout, toast | @@ -508,6 +508,9 @@ function EntitiesHierarchyWidgetController($element, $scope, $q, $timeout, toast | ||
508 | case types.entityType.entityView: | 508 | case types.entityType.entityView: |
509 | materialIcon = 'view_quilt'; | 509 | materialIcon = 'view_quilt'; |
510 | break; | 510 | break; |
511 | + case types.entityType.edge: | ||
512 | + materialIcon = 'router'; | ||
513 | + break; | ||
511 | } | 514 | } |
512 | } | 515 | } |
513 | return { | 516 | return { |