Commit c0d9f1da7fbcdcc988f86c9d3c9727d587873ac4

Authored by Vladyslav
Committed by GitHub
1 parent 67d9b094

[3.0] New samples for custom action with html (#2549)

* Update example custom action to new Angular

* Save settings to change type custom action

* Revert change
1 -/*================================================================================*/  
2 -/*======================= New TB 3.0 / Angular 8 Example =======================*/  
3 -/*================================================================================*/  
4 -/*  
5 -.edit-entity-form mat-form-field {  
6 - padding-right: 10px;  
7 -}  
8 -*/  
9 /*=======================================================================*/ 1 /*=======================================================================*/
10 /*========== There are two examples: for edit and add entity ==========*/ 2 /*========== There are two examples: for edit and add entity ==========*/
11 /*=======================================================================*/ 3 /*=======================================================================*/
12 /*======================== Edit entity example ========================*/ 4 /*======================== Edit entity example ========================*/
13 /*=======================================================================*/ 5 /*=======================================================================*/
14 /* 6 /*
15 -.edit-entity-form md-input-container {  
16 - padding-right: 10px;  
17 -}  
18 -  
19 .edit-entity-form .boolean-value-input { 7 .edit-entity-form .boolean-value-input {
20 padding-left: 5px; 8 padding-left: 5px;
21 } 9 }
@@ -41,6 +29,10 @@ @@ -41,6 +29,10 @@
41 white-space: nowrap; 29 white-space: nowrap;
42 } 30 }
43 31
  32 +.relations-list .mat-form-field-infix {
  33 + width: auto !important;
  34 +}
  35 +
44 .relations-list .body { 36 .relations-list .body {
45 padding-right: 5px; 37 padding-right: 5px;
46 padding-bottom: 15px; 38 padding-bottom: 15px;
@@ -56,26 +48,14 @@ @@ -56,26 +48,14 @@
56 padding-left: 5px; 48 padding-left: 5px;
57 } 49 }
58 50
59 -.relations-list .body md-autocomplete-wrap md-input-container {  
60 - height: 30px;  
61 -}  
62 -  
63 .relations-list .body .md-button { 51 .relations-list .body .md-button {
64 margin: 0; 52 margin: 0;
65 } 53 }
66 -  
67 -.relations-list.old-relations tb-entity-select tb-entity-autocomplete button {  
68 - display: none;  
69 -}  
70 */ 54 */
71 /*========================================================================*/ 55 /*========================================================================*/
72 /*========================= Add entity example =========================*/ 56 /*========================= Add entity example =========================*/
73 /*========================================================================*/ 57 /*========================================================================*/
74 /* 58 /*
75 -.add-entity-form md-input-container {  
76 - padding-right: 10px;  
77 -}  
78 -  
79 .add-entity-form .boolean-value-input { 59 .add-entity-form .boolean-value-input {
80 padding-left: 5px; 60 padding-left: 5px;
81 } 61 }
@@ -101,6 +81,10 @@ @@ -101,6 +81,10 @@
101 white-space: nowrap; 81 white-space: nowrap;
102 } 82 }
103 83
  84 +.relations-list .mat-form-field-infix {
  85 + width: auto !important;
  86 +}
  87 +
104 .relations-list .body { 88 .relations-list .body {
105 padding-right: 5px; 89 padding-right: 5px;
106 padding-bottom: 15px; 90 padding-bottom: 15px;
@@ -116,10 +100,6 @@ @@ -116,10 +100,6 @@
116 padding-left: 5px; 100 padding-left: 5px;
117 } 101 }
118 102
119 -.relations-list .body md-autocomplete-wrap md-input-container {  
120 - height: 30px;  
121 -}  
122 -  
123 .relations-list .body .md-button { 103 .relations-list .body .md-button {
124 margin: 0; 104 margin: 0;
125 } 105 }
1 <!--=======================================================================--> 1 <!--=======================================================================-->
2 -<!--=================== New TB 3.0 / Angular 8 Example =================-->  
3 -<!--=======================================================================-->  
4 -<!--<form #editEntityForm="ngForm" [formGroup]="editEntityFormGroup"-->  
5 -<!-- class="edit-entity-form"-->  
6 -<!-- (ngSubmit)="save()" style="width: 600px;">-->  
7 -<!-- <mat-toolbar fxLayout="row" color="primary">-->  
8 -<!-- <h2>Edit {{entityType.toLowerCase()}} {{entityName}}</h2>-->  
9 -<!-- <span fxFlex></span>-->  
10 -<!-- <button mat-button mat-icon-button-->  
11 -<!-- (click)="cancel()"-->  
12 -<!-- type="button">-->  
13 -<!-- <mat-icon class="material-icons">close</mat-icon>-->  
14 -<!-- </button>-->  
15 -<!-- </mat-toolbar>-->  
16 -<!-- <mat-progress-bar color="warn" mode="indeterminate" *ngIf="isLoading$ | async">-->  
17 -<!-- </mat-progress-bar>-->  
18 -<!-- <div style="height: 4px;" *ngIf="!(isLoading$ | async)"></div>-->  
19 -<!-- <div mat-dialog-content>-->  
20 -<!-- <div class="mat-padding" fxLayout="column">-->  
21 -<!-- <mat-form-field class="mat-block">-->  
22 -<!-- <mat-label>Entity name</mat-label>-->  
23 -<!-- <input matInput formControlName="entityName" required>-->  
24 -<!-- <mat-error *ngIf="editEntityFormGroup.get('entityName').hasError('required')">-->  
25 -<!-- Entity name required-->  
26 -<!-- </mat-error>-->  
27 -<!-- </mat-form-field>-->  
28 -<!-- </div> -->  
29 -<!-- </div>-->  
30 -<!-- <div mat-dialog-actions fxLayout="row">-->  
31 -<!-- <span fxFlex></span>-->  
32 -<!-- <button mat-button mat-raised-button color="primary"-->  
33 -<!-- type="submit"-->  
34 -<!-- [disabled]="(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty">-->  
35 -<!-- {{ 'action.save' | translate }}-->  
36 -<!-- </button>-->  
37 -<!-- <button mat-button color="primary"-->  
38 -<!-- style="margin-right: 20px;"-->  
39 -<!-- type="button"-->  
40 -<!-- [disabled]="(isLoading$ | async)"-->  
41 -<!-- (click)="cancel()" cdkFocusInitial>-->  
42 -<!-- {{ 'action.cancel' | translate }}-->  
43 -<!-- </button>-->  
44 -<!-- </div>-->  
45 -<!--</form>-->  
46 -<!--=======================================================================-->  
47 <!--===== There are two example templates: for edit and add entity =====--> 2 <!--===== There are two example templates: for edit and add entity =====-->
48 <!--=======================================================================--> 3 <!--=======================================================================-->
49 <!--======================== Edit entity example ========================--> 4 <!--======================== Edit entity example ========================-->
50 <!--=======================================================================--> 5 <!--=======================================================================-->
51 <!-- --> 6 <!-- -->
52 -<!--<md-dialog aria-label="Edit entity">-->  
53 -<!-- <form name="editEntityForm" class="edit-entity-form" ng-submit="vm.save()">-->  
54 -<!-- <md-toolbar>-->  
55 -<!-- <div class="md-toolbar-tools">-->  
56 -<!-- <h2>Edit {{vm.entityType.toLowerCase()}} {{vm.entityName}}</h2>-->  
57 -<!-- <span flex></span>-->  
58 -<!-- <md-button class="md-icon-button" ng-click="vm.cancel()">-->  
59 -<!-- <ng-md-icon icon="close" aria-label="Close"></ng-md-icon>-->  
60 -<!-- </md-button>--> 7 +<!--<form #editEntityForm="ngForm" [formGroup]="editEntityFormGroup"-->
  8 +<!-- (ngSubmit)="save()" class="edit-entity-form">-->
  9 +<!-- <mat-toolbar fxLayout="row" color="primary">-->
  10 +<!-- <h2>Edit {{entityType.toLowerCase()}} {{entityName}}</h2>-->
  11 +<!-- <span fxFlex></span>-->
  12 +<!-- <button mat-icon-button (click)="cancel()" type="button">-->
  13 +<!-- <mat-icon class="material-icons">close</mat-icon>-->
  14 +<!-- </button>-->
  15 +<!-- </mat-toolbar>-->
  16 +<!-- <mat-progress-bar color="warn" mode="indeterminate" *ngIf="isLoading$ | async">-->
  17 +<!-- </mat-progress-bar>-->
  18 +<!-- <div style="height: 4px;" *ngIf="!(isLoading$ | async)"></div>-->
  19 +<!-- <div mat-dialog-content fxLayout="column">-->
  20 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  21 +<!-- <mat-form-field fxFlex class="mat-block">-->
  22 +<!-- <mat-label>Entity Name</mat-label>-->
  23 +<!-- <input matInput formControlName="entityName" required readonly="">-->
  24 +<!-- </mat-form-field>-->
  25 +<!-- <mat-form-field fxFlex class="mat-block">-->
  26 +<!-- <mat-label>Entity Label</mat-label>-->
  27 +<!-- <input matInput formControlName="entityLabel">-->
  28 +<!-- </mat-form-field>-->
  29 +<!-- </div>-->
  30 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  31 +<!-- <mat-form-field fxFlex class="mat-block">-->
  32 +<!-- <mat-label>Entity Type</mat-label>-->
  33 +<!-- <input matInput formControlName="entityType" readonly>-->
  34 +<!-- </mat-form-field>-->
  35 +<!-- <mat-form-field fxFlex class="mat-block">-->
  36 +<!-- <mat-label>Type</mat-label>-->
  37 +<!-- <input matInput formControlName="type" readonly>-->
  38 +<!-- </mat-form-field>-->
  39 +<!-- </div>-->
  40 +<!-- <div formGroupName="attributes" fxLayout="column">-->
  41 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  42 +<!-- <mat-form-field fxFlex class="mat-block">-->
  43 +<!-- <mat-label>Latitude</mat-label>-->
  44 +<!-- <input type="number" step="any" matInput formControlName="latitude">-->
  45 +<!-- </mat-form-field>-->
  46 +<!-- <mat-form-field fxFlex class="mat-block">-->
  47 +<!-- <mat-label>Longitude</mat-label>-->
  48 +<!-- <input type="number" step="any" matInput formControlName="longitude">-->
  49 +<!-- </mat-form-field>-->
61 <!-- </div>--> 50 <!-- </div>-->
62 -<!-- </md-toolbar>-->  
63 -<!-- <md-dialog-content>-->  
64 -<!-- <div class="md-dialog-content">-->  
65 -<!-- <div layout="row">-->  
66 -<!-- <md-input-container flex class="md-block">-->  
67 -<!-- <label>Entity Name</label>-->  
68 -<!-- <input ng-model="vm.entityName" readonly>-->  
69 -<!-- </md-input-container>-->  
70 -<!-- <md-input-container flex class="md-block">-->  
71 -<!-- <label>Entity Type</label>-->  
72 -<!-- <input ng-model="vm.entityType" readonly>-->  
73 -<!-- </md-input-container>-->  
74 -<!-- <md-input-container flex class="md-block">-->  
75 -<!-- <label>Type</label>-->  
76 -<!-- <input ng-model="vm.type" readonly>-->  
77 -<!-- </md-input-container>-->  
78 -<!-- </div>-->  
79 -<!-- <div layout="row">-->  
80 -<!-- <md-input-container flex class="md-block">-->  
81 -<!-- <label>Latitude</label>-->  
82 -<!-- <input name="latitude" type="number" step="any" ng-model="vm.attributes.latitude">-->  
83 -<!-- </md-input-container>-->  
84 -<!-- <md-input-container flex class="md-block">-->  
85 -<!-- <label>Longitude</label>-->  
86 -<!-- <input name="longitude" type="number" step="any" ng-model="vm.attributes.longitude">-->  
87 -<!-- </md-input-container>-->  
88 -<!-- </div>-->  
89 -<!-- <div layout="row">-->  
90 -<!-- <md-input-container flex class="md-block">-->  
91 -<!-- <label>Address</label>-->  
92 -<!-- <input ng-model="vm.attributes.address">-->  
93 -<!-- </md-input-container>-->  
94 -<!-- <md-input-container flex class="md-block">-->  
95 -<!-- <label>Owner</label>-->  
96 -<!-- <input ng-model="vm.attributes.owner">-->  
97 -<!-- </md-input-container>-->  
98 -<!-- </div>-->  
99 -<!-- <div layout="row">-->  
100 -<!-- <md-input-container flex class="md-block">-->  
101 -<!-- <label>Integer Value</label>-->  
102 -<!-- <input name="integerNumber" type="number" step="1" ng-pattern="/^-?[0-9]+$/" ng-model="vm.attributes.number">-->  
103 -<!-- <div ng-messages="editEntityForm.integerNumber.$error">-->  
104 -<!-- <div ng-message="pattern">Invalid integer value.</div>-->  
105 -<!-- </div>-->  
106 -<!-- </md-input-container>-->  
107 -<!-- <div class="boolean-value-input" layout="column" layout-align="center start" flex>-->  
108 -<!-- <label class="checkbox-label">Boolean Value</label>-->  
109 -<!-- <md-checkbox ng-model="vm.attributes.booleanValue" style="margin-bottom: 40px;">-->  
110 -<!-- {{ (vm.attributes.booleanValue ? "value.true" : "value.false") | translate }}-->  
111 -<!-- </md-checkbox>-->  
112 -<!-- </div>--> 51 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  52 +<!-- <mat-form-field fxFlex class="mat-block">-->
  53 +<!-- <mat-label>Address</mat-label>-->
  54 +<!-- <input matInput formControlName="address">-->
  55 +<!-- </mat-form-field>-->
  56 +<!-- <mat-form-field fxFlex class="mat-block">-->
  57 +<!-- <mat-label>Owner</mat-label>-->
  58 +<!-- <input matInput formControlName="owner">-->
  59 +<!-- </mat-form-field>-->
  60 +<!-- </div>-->
  61 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  62 +<!-- <mat-form-field fxFlex class="mat-block">-->
  63 +<!-- <mat-label>Integer Value</mat-label>-->
  64 +<!-- <input type="number" step="1" matInput formControlName="number">-->
  65 +<!-- <mat-error *ngIf="editEntityFormGroup.get('attributes').get('number').hasError('pattern')">-->
  66 +<!-- Invalid integer value.-->
  67 +<!-- </mat-error>-->
  68 +<!-- </mat-form-field>-->
  69 +<!-- <div class="boolean-value-input" fxLayout="column" fxLayoutAlign="center start" fxFlex>-->
  70 +<!-- <label class="checkbox-label">Boolean Value</label>-->
  71 +<!-- <mat-checkbox formControlName="booleanValue" style="margin-bottom: 40px;">-->
  72 +<!-- {{ (editEntityFormGroup.get('attributes').get('booleanValue').value ? "value.true" : "value.false") | translate }}-->
  73 +<!-- </mat-checkbox>-->
113 <!-- </div>--> 74 <!-- </div>-->
114 -<!-- <div class="relations-list old-relations">-->  
115 -<!-- <div class="md-body-1" style="padding-bottom: 10px; color: rgba(0,0,0,0.57);">Relations</div>-->  
116 -<!-- <div class="body" ng-show="vm.relations.length">-->  
117 -<!-- <div class="row" layout="row" layout-align="start center" ng-repeat="relation in vm.relations track by $index">-->  
118 -<!-- <div class="md-whiteframe-1dp" flex layout="row" style="padding-left: 5px; margin-bottom: 3px;">-->  
119 -<!-- <div flex layout="column">-->  
120 -<!-- <div layout="row">-->  
121 -<!-- <md-input-container class="md-block" style="min-width: 100px;">-->  
122 -<!-- <label>Direction</label>-->  
123 -<!-- <md-select ng-disabled="true" required ng-model="relation.direction">-->  
124 -<!-- <md-option ng-repeat="direction in vm.entitySearchDirection" ng-value="direction">-->  
125 -<!-- {{ ("relation.search-direction." + direction) | translate}}-->  
126 -<!-- </md-option>-->  
127 -<!-- </md-select>-->  
128 -<!-- </md-input-container>-->  
129 -<!-- <tb-relation-type-autocomplete ng-disabled="true" flex class="md-block"-->  
130 -<!-- the-form="editEntityForm"-->  
131 -<!-- ng-model="relation.relationType"-->  
132 -<!-- tb-required="true">-->  
133 -<!-- </tb-relation-type-autocomplete>-->  
134 -<!-- </div>-->  
135 -<!-- <div layout="row">-->  
136 -<!-- <tb-entity-select flex class="md-block"-->  
137 -<!-- the-form="editEntityForm"-->  
138 -<!-- ng-disabled="true"-->  
139 -<!-- tb-required="true"-->  
140 -<!-- ng-model="relation.relatedEntity">-->  
141 -<!-- </tb-entity-select>-->  
142 -<!-- </div>-->  
143 -<!-- </div>-->  
144 -<!-- <div layout="column" layout-align="center center">-->  
145 -<!-- <md-button class="md-icon-button md-primary" style="width: 40px; min-width: 40px;"-->  
146 -<!-- ng-click="vm.removeOldRelation($index,relation)" aria-label="Remove">-->  
147 -<!-- <md-tooltip md-direction="top">Remove relation</md-tooltip>-->  
148 -<!-- <md-icon aria-label="Remove" class="material-icons">-->  
149 -<!-- close-->  
150 -<!-- </md-icon>-->  
151 -<!-- </md-button>-->  
152 -<!-- </div>--> 75 +<!-- </div>-->
  76 +<!-- </div>-->
  77 +<!-- <div class="relations-list old-relations">-->
  78 +<!-- <div class="mat-body-1" style="padding-bottom: 10px; color: rgba(0,0,0,0.57);">Relations</div>-->
  79 +<!-- <div class="body" [fxShow]="oldRelations().length">-->
  80 +<!-- <div class="row" fxLayout="row" fxLayoutAlign="start center" formArrayName="oldRelations" -->
  81 +<!-- *ngFor="let relation of oldRelations().controls; let i = index;">-->
  82 +<!-- <div [formGroupName]="i" class="mat-elevation-z2" fxFlex fxLayout="row" style="padding: 5px 0 5px 5px;">-->
  83 +<!-- <div fxFlex fxLayout="column">-->
  84 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  85 +<!-- <mat-form-field class="mat-block" style="min-width: 100px;">-->
  86 +<!-- <mat-label>Direction</mat-label>-->
  87 +<!-- <mat-select formControlName="direction" name="direction">-->
  88 +<!-- <mat-option *ngFor="let direction of entitySearchDirection | keyvalue" [value]="direction.value">-->
  89 +<!-- {{ ("relation.search-direction." + direction.value) | translate}}-->
  90 +<!-- </mat-option>-->
  91 +<!-- </mat-select>-->
  92 +<!-- <mat-error *ngIf="relation.get('direction').hasError('required')">-->
  93 +<!-- Relation direction is required.-->
  94 +<!-- </mat-error>-->
  95 +<!-- </mat-form-field>-->
  96 +<!-- <tb-relation-type-autocomplete-->
  97 +<!-- fxFlex class="mat-block"-->
  98 +<!-- formControlName="relationType"-->
  99 +<!-- required="true">-->
  100 +<!-- </tb-relation-type-autocomplete>-->
153 <!-- </div>--> 101 <!-- </div>-->
  102 +<!-- <div fxLayout="row" fxLayout.xs="column">-->
  103 +<!-- <tb-entity-select-->
  104 +<!-- fxFlex class="mat-block"-->
  105 +<!-- required="true"-->
  106 +<!-- formControlName="relatedEntity">-->
  107 +<!-- </tb-entity-select>-->
  108 +<!-- </div>-->
  109 +<!-- </div>-->
  110 +<!-- <div fxLayout="column" fxLayoutAlign="center center">-->
  111 +<!-- <button mat-icon-button color="primary"-->
  112 +<!-- aria-label="Remove"-->
  113 +<!-- type="button"-->
  114 +<!-- (click)="removeOldRelation(i)"-->
  115 +<!-- matTooltip="Remove relation"-->
  116 +<!-- matTooltipPosition="above">-->
  117 +<!-- <mat-icon>close</mat-icon>-->
  118 +<!-- </button>-->
154 <!-- </div>--> 119 <!-- </div>-->
155 <!-- </div>--> 120 <!-- </div>-->
156 <!-- </div>--> 121 <!-- </div>-->
157 -<!-- <div class="relations-list">-->  
158 -<!-- <div class="md-body-1" style="padding-bottom: 10px; color: rgba(0,0,0,0.57);">New Relations</div>-->  
159 -<!-- <div class="body" ng-show="vm.newRelations.length">-->  
160 -<!-- <div class="row" layout="row" layout-align="start center" ng-repeat="relation in vm.newRelations track by $index">-->  
161 -<!-- <div class="md-whiteframe-1dp" flex layout="row" style="padding-left: 5px; margin-bottom: 3px;">-->  
162 -<!-- <div flex layout="column">-->  
163 -<!-- <div layout="row">-->  
164 -<!-- <md-input-container class="md-block" style="min-width: 100px;">-->  
165 -<!-- <label>Direction</label>-->  
166 -<!-- <md-select name="direction" required ng-model="relation.direction">-->  
167 -<!-- <md-option ng-repeat="direction in vm.entitySearchDirection" ng-value="direction">-->  
168 -<!-- {{ ("relation.search-direction." + direction) | translate}}-->  
169 -<!-- </md-option>-->  
170 -<!-- </md-select>-->  
171 -<!-- <div ng-messages="editEntityForm.direction.$error">-->  
172 -<!-- <div ng-message="required">Relation direction is required.</div>-->  
173 -<!-- </div>-->  
174 -<!-- </md-input-container>-->  
175 -<!-- <tb-relation-type-autocomplete flex class="md-block"-->  
176 -<!-- the-form="editEntityForm"-->  
177 -<!-- ng-model="relation.relationType"-->  
178 -<!-- tb-required="true">-->  
179 -<!-- </tb-relation-type-autocomplete>-->  
180 -<!-- </div>-->  
181 -<!-- <div layout="row">-->  
182 -<!-- <tb-entity-select flex class="md-block"-->  
183 -<!-- the-form="editEntityForm"-->  
184 -<!-- tb-required="true"-->  
185 -<!-- ng-model="relation.relatedEntity">-->  
186 -<!-- </tb-entity-select>-->  
187 -<!-- </div>-->  
188 -<!-- </div>-->  
189 -<!-- <div layout="column" layout-align="center center">-->  
190 -<!-- <md-button class="md-icon-button md-primary" style="width: 40px; min-width: 40px;"-->  
191 -<!-- ng-click="vm.removeRelation($index)" aria-label="Remove">-->  
192 -<!-- <md-tooltip md-direction="top">Remove relation</md-tooltip>-->  
193 -<!-- <md-icon aria-label="Remove" class="material-icons">-->  
194 -<!-- close-->  
195 -<!-- </md-icon>-->  
196 -<!-- </md-button>-->  
197 -<!-- </div>--> 122 +<!-- </div>-->
  123 +<!-- </div>-->
  124 +<!-- <div class="relations-list">-->
  125 +<!-- <div class="mat-body-1" style="padding-bottom: 10px; color: rgba(0,0,0,0.57);">New Relations</div>-->
  126 +<!-- <div class="body" [fxShow]="relations().length">-->
  127 +<!-- <div class="row" fxLayout="row" fxLayoutAlign="start center" formArrayName="relations" *ngFor="let relation of relations().controls; let i = index;">-->
  128 +<!-- <div [formGroupName]="i" class="mat-elevation-z2" fxFlex fxLayout="row" style="padding: 5px 0 5px 5px;">-->
  129 +<!-- <div fxFlex fxLayout="column">-->
  130 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  131 +<!-- <mat-form-field class="mat-block" style="min-width: 100px;">-->
  132 +<!-- <mat-label>Direction</mat-label>-->
  133 +<!-- <mat-select formControlName="direction" name="direction">-->
  134 +<!-- <mat-option *ngFor="let direction of entitySearchDirection | keyvalue" [value]="direction.value">-->
  135 +<!-- {{ ("relation.search-direction." + direction.value) | translate}}-->
  136 +<!-- </mat-option>-->
  137 +<!-- </mat-select>-->
  138 +<!-- <mat-error *ngIf="relation.get('direction').hasError('required')">-->
  139 +<!-- Relation direction is required.-->
  140 +<!-- </mat-error>-->
  141 +<!-- </mat-form-field>-->
  142 +<!-- <tb-relation-type-autocomplete-->
  143 +<!-- fxFlex class="mat-block"-->
  144 +<!-- formControlName="relationType"-->
  145 +<!-- [required]="true">-->
  146 +<!-- </tb-relation-type-autocomplete>-->
  147 +<!-- </div>-->
  148 +<!-- <div fxLayout="row" fxLayout.xs="column">-->
  149 +<!-- <tb-entity-select-->
  150 +<!-- fxFlex class="mat-block"-->
  151 +<!-- [required]="true"-->
  152 +<!-- formControlName="relatedEntity">-->
  153 +<!-- </tb-entity-select>-->
198 <!-- </div>--> 154 <!-- </div>-->
199 <!-- </div>--> 155 <!-- </div>-->
  156 +<!-- <div fxLayout="column" fxLayoutAlign="center center">-->
  157 +<!-- <button mat-icon-button color="primary"-->
  158 +<!-- aria-label="Remove"-->
  159 +<!-- type="button"-->
  160 +<!-- (click)="removeRelation(i)"-->
  161 +<!-- matTooltip="Remove relation"-->
  162 +<!-- matTooltipPosition="above">-->
  163 +<!-- <mat-icon>close</mat-icon>-->
  164 +<!-- </button>-->
  165 +<!-- </div>-->
200 <!-- </div>--> 166 <!-- </div>-->
201 -<!-- <div>-->  
202 -<!-- <md-button class="md-primary md-raised" ng-click="vm.addRelation()" aria-label="Add">-->  
203 -<!-- <md-tooltip md-direction="top">Add Relation</md-tooltip>-->  
204 -<!-- Add-->  
205 -<!-- </md-button>-->  
206 -<!-- </div> -->  
207 <!-- </div>--> 167 <!-- </div>-->
208 <!-- </div>--> 168 <!-- </div>-->
209 -<!-- </md-dialog-content>-->  
210 -<!-- <md-dialog-actions>-->  
211 -<!-- <md-button type="submit" ng-disabled="editEntityForm.$invalid || !editEntityForm.$dirty" class="md-raised md-primary">Save</md-button>-->  
212 -<!-- <md-button ng-click="vm.cancel()" class="md-primary">Cancel</md-button>-->  
213 -<!-- </md-dialog-actions>-->  
214 -<!-- </form>-->  
215 -<!--</md-dialog>--> 169 +<!-- <div>-->
  170 +<!-- <button mat-raised-button color="primary"-->
  171 +<!-- type="button"-->
  172 +<!-- (click)="addRelation()"-->
  173 +<!-- matTooltip="Add Relation"-->
  174 +<!-- matTooltipPosition="above">-->
  175 +<!-- Add-->
  176 +<!-- </button>-->
  177 +<!-- </div>-->
  178 +<!-- </div>-->
  179 +<!-- </div>-->
  180 +<!-- <div mat-dialog-actions fxLayout="row" fxLayoutAlign="end center">-->
  181 +<!-- <button mat-button mat-raised-button color="primary"-->
  182 +<!-- type="submit"-->
  183 +<!-- [disabled]="(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty">-->
  184 +<!-- Save-->
  185 +<!-- </button>-->
  186 +<!-- <button mat-button color="primary"-->
  187 +<!-- style="margin-right: 20px;"-->
  188 +<!-- type="button"-->
  189 +<!-- [disabled]="(isLoading$ | async)"-->
  190 +<!-- (click)="cancel()" cdkFocusInitial>-->
  191 +<!-- Cancel-->
  192 +<!-- </button>-->
  193 +<!-- </div>-->
  194 +<!--</form>-->
216 <!----> 195 <!---->
217 <!--========================================================================--> 196 <!--========================================================================-->
218 <!--========================= Add entity example =========================--> 197 <!--========================= Add entity example =========================-->
219 <!--========================================================================--> 198 <!--========================================================================-->
220 <!----> 199 <!---->
221 -<!--<md-dialog aria-label="Add entity">-->  
222 -<!-- <form name="addEntityForm" class="add-entity-form" ng-submit="vm.save()">-->  
223 -<!-- <md-toolbar>-->  
224 -<!-- <div class="md-toolbar-tools">-->  
225 -<!-- <h2>Add entity</h2>-->  
226 -<!-- <span flex></span>-->  
227 -<!-- <md-button class="md-icon-button" ng-click="vm.cancel()">-->  
228 -<!-- <ng-md-icon icon="close" aria-label="Close"></ng-md-icon>-->  
229 -<!-- </md-button>--> 200 +<!--<form #addEntityForm="ngForm" [formGroup]="addEntityFormGroup"-->
  201 +<!-- (ngSubmit)="save()" class="add-entity-form">-->
  202 +<!-- <mat-toolbar fxLayout="row" color="primary">-->
  203 +<!-- <h2>Add entity</h2>-->
  204 +<!-- <span fxFlex></span>-->
  205 +<!-- <button mat-icon-button (click)="cancel()" type="button">-->
  206 +<!-- <mat-icon class="material-icons">close</mat-icon>-->
  207 +<!-- </button>-->
  208 +<!-- </mat-toolbar>-->
  209 +<!-- <mat-progress-bar color="warn" mode="indeterminate" *ngIf="isLoading$ | async">-->
  210 +<!-- </mat-progress-bar>-->
  211 +<!-- <div style="height: 4px;" *ngIf="!(isLoading$ | async)"></div>-->
  212 +<!-- <div mat-dialog-content fxLayout="column">-->
  213 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  214 +<!-- <mat-form-field fxFlex class="mat-block">-->
  215 +<!-- <mat-label>Entity Name</mat-label>-->
  216 +<!-- <input matInput formControlName="entityName" required>-->
  217 +<!-- <mat-error *ngIf="addEntityFormGroup.get('entityName').hasError('required')">-->
  218 +<!-- Entity name is required.-->
  219 +<!-- </mat-error>-->
  220 +<!-- </mat-form-field>-->
  221 +<!-- <mat-form-field fxFlex class="mat-block">-->
  222 +<!-- <mat-label>Entity Label</mat-label>-->
  223 +<!-- <input matInput formControlName="entityLabel" >-->
  224 +<!-- </mat-form-field>-->
  225 +<!-- </div>-->
  226 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  227 +<!-- <tb-entity-type-select-->
  228 +<!-- class="mat-block"-->
  229 +<!-- formControlName="entityType"-->
  230 +<!-- [showLabel]="true"-->
  231 +<!-- [allowedEntityTypes]="allowedEntityTypes"-->
  232 +<!-- ></tb-entity-type-select>-->
  233 +<!-- <tb-entity-subtype-autocomplete-->
  234 +<!-- fxFlex *ngIf="addEntityFormGroup.get('entityType').value == 'ASSET'"-->
  235 +<!-- class="mat-block"-->
  236 +<!-- formControlName="type"-->
  237 +<!-- [required]="true"-->
  238 +<!-- [entityType]="'ASSET'"-->
  239 +<!-- ></tb-entity-subtype-autocomplete>-->
  240 +<!-- <tb-entity-subtype-autocomplete-->
  241 +<!-- fxFlex *ngIf="addEntityFormGroup.get('entityType').value != 'ASSET'"-->
  242 +<!-- class="mat-block"-->
  243 +<!-- formControlName="type"-->
  244 +<!-- [required]="true"-->
  245 +<!-- [entityType]="'DEVICE'"-->
  246 +<!-- ></tb-entity-subtype-autocomplete>-->
  247 +<!-- </div>-->
  248 +<!-- <div formGroupName="attributes" fxLayout="column">-->
  249 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  250 +<!-- <mat-form-field fxFlex class="mat-block">-->
  251 +<!-- <mat-label>Latitude</mat-label>-->
  252 +<!-- <input type="number" step="any" matInput formControlName="latitude">-->
  253 +<!-- </mat-form-field>-->
  254 +<!-- <mat-form-field fxFlex class="mat-block">-->
  255 +<!-- <mat-label>Longitude</mat-label>-->
  256 +<!-- <input type="number" step="any" matInput formControlName="longitude">-->
  257 +<!-- </mat-form-field>-->
230 <!-- </div>--> 258 <!-- </div>-->
231 -<!-- </md-toolbar>-->  
232 -<!-- <md-dialog-content>-->  
233 -<!-- <div class="md-dialog-content">-->  
234 -<!-- <div layout="row">-->  
235 -<!-- <md-input-container flex class="md-block">-->  
236 -<!-- <label>Entity Name</label>-->  
237 -<!-- <input ng-model="vm.entityName" name=entityName required>-->  
238 -<!-- <div ng-messages="addEntityForm.entityName.$error">-->  
239 -<!-- <div ng-message="required">Entity name is required.</div>-->  
240 -<!-- </div>-->  
241 -<!-- </md-input-container>-->  
242 -<!-- <tb-entity-type-select class="md-block" style="min-width: 100px; width: 100px;"-->  
243 -<!-- the-form="addEntityForm"-->  
244 -<!-- tb-required="true"-->  
245 -<!-- allowed-entity-types="vm.allowedEntityTypes"-->  
246 -<!-- ng-model="vm.entityType">-->  
247 -<!-- </tb-entity-type-select>-->  
248 -<!-- <md-input-container flex class="md-block">-->  
249 -<!-- <label>Entity Subtype</label>-->  
250 -<!-- <input ng-model="vm.type" name=type required>-->  
251 -<!-- <div ng-messages="addEntityForm.type.$error">-->  
252 -<!-- <div ng-message="required">Entity subtype is required.</div>-->  
253 -<!-- </div>-->  
254 -<!-- </md-input-container>-->  
255 -<!-- </div>-->  
256 -<!-- <div layout="row">-->  
257 -<!-- <md-input-container flex class="md-block">-->  
258 -<!-- <label>Latitude</label>-->  
259 -<!-- <input name="latitude" type="number" step="any" ng-model="vm.attributes.latitude">-->  
260 -<!-- </md-input-container>-->  
261 -<!-- <md-input-container flex class="md-block">-->  
262 -<!-- <label>Longitude</label>-->  
263 -<!-- <input name="longitude" type="number" step="any" ng-model="vm.attributes.longitude">-->  
264 -<!-- </md-input-container>-->  
265 -<!-- </div>-->  
266 -<!-- <div layout="row">-->  
267 -<!-- <md-input-container flex class="md-block">-->  
268 -<!-- <label>Address</label>-->  
269 -<!-- <input ng-model="vm.attributes.address">-->  
270 -<!-- </md-input-container>-->  
271 -<!-- <md-input-container flex class="md-block">-->  
272 -<!-- <label>Owner</label>-->  
273 -<!-- <input ng-model="vm.attributes.owner">-->  
274 -<!-- </md-input-container>-->  
275 -<!-- </div>-->  
276 -<!-- <div layout="row">-->  
277 -<!-- <md-input-container flex class="md-block">-->  
278 -<!-- <label>Integer Value</label>-->  
279 -<!-- <input name="integerNumber" type="number" step="1" ng-pattern="/^-?[0-9]+$/" ng-model="vm.attributes.number">-->  
280 -<!-- <div ng-messages="addEntityForm.integerNumber.$error">-->  
281 -<!-- <div ng-message="pattern">Invalid integer value.</div>-->  
282 -<!-- </div>-->  
283 -<!-- </md-input-container>-->  
284 -<!-- <div class="boolean-value-input" layout="column" layout-align="center start" flex>-->  
285 -<!-- <label class="checkbox-label">Boolean Value</label>-->  
286 -<!-- <md-checkbox ng-model="vm.attributes.booleanValue" style="margin-bottom: 40px;">-->  
287 -<!-- {{ (vm.attributes.booleanValue ? "value.true" : "value.false") | translate }}-->  
288 -<!-- </md-checkbox>-->  
289 -<!-- </div>--> 259 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  260 +<!-- <mat-form-field fxFlex class="mat-block">-->
  261 +<!-- <mat-label>Address</mat-label>-->
  262 +<!-- <input matInput formControlName="address">-->
  263 +<!-- </mat-form-field>-->
  264 +<!-- <mat-form-field fxFlex class="mat-block">-->
  265 +<!-- <mat-label>Owner</mat-label>-->
  266 +<!-- <input matInput formControlName="owner">-->
  267 +<!-- </mat-form-field>-->
  268 +<!-- </div>-->
  269 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  270 +<!-- <mat-form-field fxFlex class="mat-block">-->
  271 +<!-- <mat-label>Integer Value</mat-label>-->
  272 +<!-- <input type="number" step="1" matInput formControlName="number">-->
  273 +<!-- <mat-error *ngIf="addEntityFormGroup.get('attributes').get('number').hasError('pattern')">-->
  274 +<!-- Invalid integer value.-->
  275 +<!-- </mat-error>-->
  276 +<!-- </mat-form-field>-->
  277 +<!-- <div class="boolean-value-input" fxLayout="column" fxLayoutAlign="center start" fxFlex>-->
  278 +<!-- <label class="checkbox-label">Boolean Value</label>-->
  279 +<!-- <mat-checkbox formControlName="booleanValue" style="margin-bottom: 40px;">-->
  280 +<!-- {{ (addEntityFormGroup.get('attributes').get('booleanValue').value ? "value.true" : "value.false") | translate }}-->
  281 +<!-- </mat-checkbox>-->
290 <!-- </div>--> 282 <!-- </div>-->
291 -<!-- <div class="relations-list">-->  
292 -<!-- <div class="md-body-1" style="padding-bottom: 10px; color: rgba(0,0,0,0.57);">Relations</div>-->  
293 -<!-- <div class="body" ng-show="vm.relations.length">-->  
294 -<!-- <div class="row" layout="row" layout-align="start center" ng-repeat="relation in vm.relations track by $index">-->  
295 -<!-- <div class="md-whiteframe-1dp" flex layout="row" style="padding-left: 5px;">-->  
296 -<!-- <div flex layout="column">-->  
297 -<!-- <div layout="row">-->  
298 -<!-- <md-input-container class="md-block" style="min-width: 100px;">-->  
299 -<!-- <label>Direction</label>-->  
300 -<!-- <md-select name="direction" required ng-model="relation.direction">-->  
301 -<!-- <md-option ng-repeat="direction in vm.entitySearchDirection" ng-value="direction">-->  
302 -<!-- {{ ("relation.search-direction." + direction) | translate}}-->  
303 -<!-- </md-option>-->  
304 -<!-- </md-select>-->  
305 -<!-- <div ng-messages="addEntityForm.direction.$error">-->  
306 -<!-- <div ng-message="required">Relation direction is required.</div>-->  
307 -<!-- </div>-->  
308 -<!-- </md-input-container>-->  
309 -<!-- <tb-relation-type-autocomplete flex class="md-block"-->  
310 -<!-- the-form="addEntityForm"-->  
311 -<!-- ng-model="relation.relationType"-->  
312 -<!-- tb-required="true">-->  
313 -<!-- </tb-relation-type-autocomplete>-->  
314 -<!-- </div>-->  
315 -<!-- <div layout="row">-->  
316 -<!-- <tb-entity-select flex class="md-block"-->  
317 -<!-- the-form="addEntityForm"-->  
318 -<!-- tb-required="true"-->  
319 -<!-- ng-model="relation.relatedEntity">-->  
320 -<!-- </tb-entity-select>-->  
321 -<!-- </div>-->  
322 -<!-- </div>-->  
323 -<!-- <div layout="column" layout-align="center center">-->  
324 -<!-- <md-button class="md-icon-button md-primary" style="width: 40px; min-width: 40px;"-->  
325 -<!-- ng-click="vm.removeRelation($index)" aria-label="Remove">-->  
326 -<!-- <md-tooltip md-direction="top">Remove relation</md-tooltip>-->  
327 -<!-- <md-icon aria-label="Remove" class="material-icons">-->  
328 -<!-- close-->  
329 -<!-- </md-icon>-->  
330 -<!-- </md-button>-->  
331 -<!-- </div>--> 283 +<!-- </div>-->
  284 +<!-- </div>-->
  285 +<!-- <div class="relations-list">-->
  286 +<!-- <div class="mat-body-1" style="padding-bottom: 10px; color: rgba(0,0,0,0.57);">Relations</div>-->
  287 +<!-- <div class="body" [fxShow]="relations().length">-->
  288 +<!-- <div class="row" fxLayout="row" fxLayoutAlign="start center" formArrayName="relations" *ngFor="let relation of relations().controls; let i = index;">-->
  289 +<!-- <div [formGroupName]="i" class="mat-elevation-z2" fxFlex fxLayout="row" style="padding: 5px 0 5px 5px;">-->
  290 +<!-- <div fxFlex fxLayout="column">-->
  291 +<!-- <div fxLayout="row" fxLayoutGap="8px" fxLayout.xs="column" fxLayoutGap.xs="0">-->
  292 +<!-- <mat-form-field class="mat-block" style="min-width: 100px;">-->
  293 +<!-- <mat-label>Direction</mat-label>-->
  294 +<!-- <mat-select formControlName="direction" name="direction">-->
  295 +<!-- <mat-option *ngFor="let direction of entitySearchDirection | keyvalue" [value]="direction.value">-->
  296 +<!-- {{ ("relation.search-direction." + direction.value) | translate}}-->
  297 +<!-- </mat-option>-->
  298 +<!-- </mat-select>-->
  299 +<!-- <mat-error *ngIf="relation.get('direction').hasError('required')">-->
  300 +<!-- Relation direction is required.-->
  301 +<!-- </mat-error>-->
  302 +<!-- </mat-form-field>-->
  303 +<!-- <tb-relation-type-autocomplete-->
  304 +<!-- fxFlex class="mat-block"-->
  305 +<!-- formControlName="relationType"-->
  306 +<!-- [required]="true">-->
  307 +<!-- </tb-relation-type-autocomplete>-->
332 <!-- </div>--> 308 <!-- </div>-->
  309 +<!-- <div fxLayout="row" fxLayout.xs="column">-->
  310 +<!-- <tb-entity-select-->
  311 +<!-- fxFlex class="mat-block"-->
  312 +<!-- [required]="true"-->
  313 +<!-- formControlName="relatedEntity">-->
  314 +<!-- </tb-entity-select>-->
  315 +<!-- </div>-->
  316 +<!-- </div>-->
  317 +<!-- <div fxLayout="column" fxLayoutAlign="center center">-->
  318 +<!-- <button mat-icon-button color="primary"-->
  319 +<!-- aria-label="Remove"-->
  320 +<!-- type="button"-->
  321 +<!-- (click)="removeRelation(i)"-->
  322 +<!-- matTooltip="Remove relation"-->
  323 +<!-- matTooltipPosition="above">-->
  324 +<!-- <mat-icon>close</mat-icon>-->
  325 +<!-- </button>-->
333 <!-- </div>--> 326 <!-- </div>-->
334 <!-- </div>--> 327 <!-- </div>-->
335 -<!-- <div>-->  
336 -<!-- <md-button class="md-primary md-raised" ng-click="vm.addRelation()" aria-label="Add">-->  
337 -<!-- <md-tooltip md-direction="top">Add Relation</md-tooltip>-->  
338 -<!-- Add-->  
339 -<!-- </md-button>-->  
340 -<!-- </div> -->  
341 <!-- </div>--> 328 <!-- </div>-->
342 <!-- </div>--> 329 <!-- </div>-->
343 -<!-- </md-dialog-content>-->  
344 -<!-- <md-dialog-actions>-->  
345 -<!-- <md-button type="submit" ng-disabled="addEntityForm.$invalid || !addEntityForm.$dirty" class="md-raised md-primary">Create</md-button>-->  
346 -<!-- <md-button ng-click="vm.cancel()" class="md-primary">Cancel</md-button>-->  
347 -<!-- </md-dialog-actions>-->  
348 -<!-- </form>-->  
349 -<!--</md-dialog>--> 330 +<!-- <div>-->
  331 +<!-- <button mat-raised-button color="primary"-->
  332 +<!-- type="button"-->
  333 +<!-- (click)="addRelation()"-->
  334 +<!-- matTooltip="Add Relation"-->
  335 +<!-- matTooltipPosition="above">-->
  336 +<!-- Add-->
  337 +<!-- </button>-->
  338 +<!-- </div>-->
  339 +<!-- </div>-->
  340 +<!-- </div>-->
  341 +<!-- <div mat-dialog-actions fxLayout="row" fxLayoutAlign="end center">-->
  342 +<!-- <button mat-button mat-raised-button color="primary"-->
  343 +<!-- type="submit"-->
  344 +<!-- [disabled]="(isLoading$ | async) || addEntityForm.invalid || !addEntityForm.dirty">-->
  345 +<!-- Create-->
  346 +<!-- </button>-->
  347 +<!-- <button mat-button color="primary"-->
  348 +<!-- style="margin-right: 20px;"-->
  349 +<!-- type="button"-->
  350 +<!-- [disabled]="(isLoading$ | async)"-->
  351 +<!-- (click)="cancel()" cdkFocusInitial>-->
  352 +<!-- Cancel-->
  353 +<!-- </button>-->
  354 +<!-- </div>-->
  355 +<!--</form>-->
1 -/*================================================================================*/  
2 -/*======================= New TB 3.0 / Angular 8 Example =======================*/  
3 -/*================================================================================*/  
4 -//  
5 -//let $injector = widgetContext.$scope.$injector;  
6 -//let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));  
7 -//  
8 -//deviceService.getDevice(entityId.id).subscribe(function(device) {  
9 -// console.log(device);  
10 -//});  
11 -//  
12 -//  
13 -//let customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));  
14 -//  
15 -//customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe(  
16 -// function(res) {  
17 -// console.log(res);  
18 -// }  
19 -//);  
20 -//  
21 -//function EditEntityDialogController(instance) {  
22 -// let vm = instance;  
23 -// vm.entityId = entityId;  
24 -// vm.entityName = entityName;  
25 -// vm.entityType = entityId.entityType;  
26 -//  
27 -// vm.editEntityFormGroup = vm.fb.group({  
28 -// entityName: [vm.entityName, [vm.validators.required]]  
29 -// });  
30 -//  
31 -// vm.cancel = function() {  
32 -// vm.dialogRef.close(null);  
33 -// };  
34 -//  
35 -// vm.save = function() {  
36 -// const newVal = vm.editEntityFormGroup.value;  
37 -// vm.dialogRef.close(newVal);  
38 -// };  
39 -//}  
40 -//  
41 /*=======================================================================*/ 1 /*=======================================================================*/
42 /*===== There are three examples: for delete, edit and add entity =====*/ 2 /*===== There are three examples: for delete, edit and add entity =====*/
43 /*=======================================================================*/ 3 /*=======================================================================*/
44 /*======================= Delete entity example =======================*/ 4 /*======================= Delete entity example =======================*/
45 /*=======================================================================*/ 5 /*=======================================================================*/
46 // 6 //
47 -//var $injector = widgetContext.$scope.$injector;  
48 -//var $mdDialog = $injector.get('$mdDialog'),  
49 -// $document = $injector.get('$document'),  
50 -// types = $injector.get('types'),  
51 -// assetService = $injector.get('assetService'),  
52 -// deviceService = $injector.get('deviceService')  
53 -// $rootScope = $injector.get('$rootScope'),  
54 -// $q = $injector.get('$q'); 7 +//let $injector = widgetContext.$scope.$injector;
  8 +//let dialogs = $injector.get(widgetContext.servicesMap.get('dialogs'));
  9 +//let assetService = $injector.get(widgetContext.servicesMap.get('assetService'));
  10 +//let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));
55 // 11 //
56 //openDeleteEntityDialog(); 12 //openDeleteEntityDialog();
57 // 13 //
58 //function openDeleteEntityDialog() { 14 //function openDeleteEntityDialog() {
59 -// var title = 'Delete ' + entityId.entityType  
60 -// .toLowerCase() + ' ' +  
61 -// entityName;  
62 -// var content = 'Are you sure you want to delete the ' +  
63 -// entityId.entityType.toLowerCase() + ' ' +  
64 -// entityName + '?';  
65 -// var confirm = $mdDialog.confirm()  
66 -// .targetEvent($event)  
67 -// .title(title)  
68 -// .htmlContent(content)  
69 -// .ariaLabel(title)  
70 -// .cancel('Cancel')  
71 -// .ok('Delete');  
72 -// $mdDialog.show(confirm).then(function() {  
73 -// deleteEntity();  
74 -// }) 15 +// let title = 'Delete ' + entityId.entityType.toLowerCase() + ' ' +
  16 +// entityName;
  17 +// let content = 'Are you sure you want to delete the ' +
  18 +// entityId.entityType.toLowerCase() + ' ' + entityName + '?';
  19 +// dialogs.confirm(title, content, 'Cancel', 'Delete').subscribe(
  20 +// function(result) {
  21 +// if (result) {
  22 +// deleteEntity();
  23 +// }
  24 +// }
  25 +// );
75 //} 26 //}
76 // 27 //
77 //function deleteEntity() { 28 //function deleteEntity() {
78 -// deleteEntityPromise(entityId).then( 29 +// deleteEntityObservable(entityId).subscribe(
79 // function success() { 30 // function success() {
80 -// updateAliasData(); 31 +// widgetContext.updateAliases();
81 // }, 32 // },
82 // function fail() { 33 // function fail() {
83 // showErrorDialog(); 34 // showErrorDialog();
@@ -85,228 +36,243 @@ @@ -85,228 +36,243 @@
85 // ); 36 // );
86 //} 37 //}
87 // 38 //
88 -//function deleteEntityPromise(entityId) {  
89 -// if (entityId.entityType == types.entityType.asset) { 39 +//function deleteEntityObservable(entityId) {
  40 +// if (entityId.entityType == "ASSET") {
90 // return assetService.deleteAsset(entityId.id); 41 // return assetService.deleteAsset(entityId.id);
91 -// } else if (entityId.entityType == types.entityType.device) { 42 +// } else if (entityId.entityType == "DEVICE") {
92 // return deviceService.deleteDevice(entityId.id); 43 // return deviceService.deleteDevice(entityId.id);
93 // } 44 // }
94 //} 45 //}
95 // 46 //
96 -//function updateAliasData() {  
97 -// var aliasIds = [];  
98 -// for (var id in widgetContext.aliasController.resolvedAliases) {  
99 -// aliasIds.push(id);  
100 -// }  
101 -// var tasks = [];  
102 -// aliasIds.forEach(function(aliasId) {  
103 -// widgetContext.aliasController.setAliasUnresolved(aliasId);  
104 -// tasks.push(widgetContext.aliasController.getAliasInfo(aliasId));  
105 -// });  
106 -// $q.all(tasks).then(function() {  
107 -// $rootScope.$broadcast('entityAliasesChanged', aliasIds);  
108 -// });  
109 -//}  
110 -//  
111 //function showErrorDialog() { 47 //function showErrorDialog() {
112 -// var title = 'Error';  
113 -// var content = 'An error occurred while deleting the entity. Please try again.';  
114 -// var alert = $mdDialog.alert()  
115 -// .title(title)  
116 -// .htmlContent(content)  
117 -// .ariaLabel(title)  
118 -// .parent(angular.element($document[0].body))  
119 -// .targetEvent($event)  
120 -// .multiple(true)  
121 -// .clickOutsideToClose(true)  
122 -// .ok('CLOSE');  
123 -// $mdDialog.show(alert); 48 +// let title = 'Error';
  49 +// let content = 'An error occurred while deleting the entity. Please try again.';
  50 +// dialogs.alert(title, content, 'CLOSE').subscribe(
  51 +// function(result) {}
  52 +// );
124 //} 53 //}
125 // 54 //
126 /*=======================================================================*/ 55 /*=======================================================================*/
127 /*======================== Edit entity example ========================*/ 56 /*======================== Edit entity example ========================*/
128 /*=======================================================================*/ 57 /*=======================================================================*/
129 // 58 //
130 -//var $injector = widgetContext.$scope.$injector;  
131 -//var $mdDialog = $injector.get('$mdDialog'),  
132 -// $document = $injector.get('$document'),  
133 -// $q = $injector.get('$q'),  
134 -// types = $injector.get('types'),  
135 -// $rootScope = $injector.get('$rootScope'),  
136 -// entityService = $injector.get('entityService'),  
137 -// attributeService = $injector.get('attributeService'),  
138 -// entityRelationService = $injector.get('entityRelationService'); 59 +//let $injector = widgetContext.$scope.$injector;
  60 +//let customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));
  61 +//let entityService = $injector.get(widgetContext.servicesMap.get('entityService'));
  62 +//let assetService = $injector.get(widgetContext.servicesMap.get('assetService'));
  63 +//let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));
  64 +//let attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));
  65 +//let entityRelationService = $injector.get(widgetContext.servicesMap.get('entityRelationService'));
139 // 66 //
140 //openEditEntityDialog(); 67 //openEditEntityDialog();
141 // 68 //
142 //function openEditEntityDialog() { 69 //function openEditEntityDialog() {
143 -// $mdDialog.show({  
144 -// controller: ['$scope','$mdDialog', EditEntityDialogController],  
145 -// controllerAs: 'vm',  
146 -// template: htmlTemplate,  
147 -// locals: {  
148 -// entityId: entityId  
149 -// },  
150 -// parent: angular.element($document[0].body),  
151 -// targetEvent: $event,  
152 -// multiple: true,  
153 -// clickOutsideToClose: false  
154 -// }); 70 +// customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();
155 //} 71 //}
156 // 72 //
157 -//function EditEntityDialogController($scope,$mdDialog) {  
158 -// var vm = this;  
159 -// vm.entityId = entityId; 73 +//function EditEntityDialogController(instance) {
  74 +// let vm = instance;
  75 +//
160 // vm.entityName = entityName; 76 // vm.entityName = entityName;
161 // vm.entityType = entityId.entityType; 77 // vm.entityType = entityId.entityType;
162 -// vm.allowedEntityTypes = [types.entityType.asset, types.entityType.device];  
163 -// vm.allowedRelatedEntityTypes = [];  
164 -// vm.entitySearchDirection = types.entitySearchDirection; 78 +// vm.entitySearchDirection = {
  79 +// from: "FROM",
  80 +// to: "TO"
  81 +// };
165 // vm.attributes = {}; 82 // vm.attributes = {};
166 -// vm.serverAttributes = {};  
167 -// vm.relations = [];  
168 -// vm.newRelations = []; 83 +// vm.oldRelationsData = [];
169 // vm.relationsToDelete = []; 84 // vm.relationsToDelete = [];
  85 +// vm.entity = {};
  86 +//
  87 +// vm.editEntityFormGroup = vm.fb.group({
  88 +// entityName: ['', [vm.validators.required]],
  89 +// entityType: [null],
  90 +// entityLabel: [null],
  91 +// type: ['', [vm.validators.required]],
  92 +// attributes: vm.fb.group({
  93 +// latitude: [null],
  94 +// longitude: [null],
  95 +// address: [null],
  96 +// owner: [null],
  97 +// number: [null, [vm.validators.pattern(/^-?[0-9]+$/)]],
  98 +// booleanValue: [false]
  99 +// }),
  100 +// oldRelations: vm.fb.array([]),
  101 +// relations: vm.fb.array([])
  102 +// });
  103 +//
170 // getEntityInfo(); 104 // getEntityInfo();
171 // 105 //
  106 +// vm.cancel = function() {
  107 +// vm.dialogRef.close(null);
  108 +// };
  109 +//
  110 +// vm.relations = function() {
  111 +// return vm.editEntityFormGroup.get('relations');
  112 +// };
  113 +//
  114 +// vm.oldRelations = function() {
  115 +// return vm.editEntityFormGroup.get('oldRelations');
  116 +// };
  117 +//
172 // vm.addRelation = function() { 118 // vm.addRelation = function() {
173 -// var relation = {  
174 -// direction: null,  
175 -// relationType: null,  
176 -// relatedEntity: null  
177 -// };  
178 -// vm.newRelations.push(relation);  
179 -// $scope.editEntityForm.$setDirty(); 119 +// vm.relations().push(vm.fb.group({
  120 +// relatedEntity: [null, [vm.validators.required]],
  121 +// relationType: [null, [vm.validators.required]],
  122 +// direction: [null, [vm.validators.required]]
  123 +// }));
180 // }; 124 // };
  125 +//
  126 +// function addOldRelation() {
  127 +// vm.oldRelations().push(vm.fb.group({
  128 +// relatedEntity: [{value: null, disabled: true}, [vm.validators.required]],
  129 +// relationType: [{value: null, disabled: true}, [vm.validators.required]],
  130 +// direction: [{value: null, disabled: true}, [vm.validators.required]]
  131 +// }));
  132 +// }
  133 +//
181 // vm.removeRelation = function(index) { 134 // vm.removeRelation = function(index) {
182 -// if (index > -1) {  
183 -// vm.newRelations.splice(index, 1);  
184 -// $scope.editEntityForm.$setDirty();  
185 -// } 135 +// vm.relations().removeAt(index);
  136 +// vm.relations().markAsDirty();
186 // }; 137 // };
187 -// vm.removeOldRelation = function(index, relation) {  
188 -// if (index > -1) {  
189 -// vm.relations.splice(index, 1);  
190 -// vm.relationsToDelete.push(relation);  
191 -// $scope.editEntityForm.$setDirty();  
192 -// } 138 +//
  139 +// vm.removeOldRelation = function(index) {
  140 +// vm.oldRelations().removeAt(index);
  141 +// vm.relationsToDelete.push(vm.oldRelationsData[index]);
  142 +// vm.oldRelations().markAsDirty();
193 // }; 143 // };
  144 +//
194 // vm.save = function() { 145 // vm.save = function() {
195 -// saveAttributes();  
196 -// saveRelations();  
197 -// $scope.editEntityForm.$setPristine();  
198 -// };  
199 -// vm.cancel = function() {  
200 -// $mdDialog.hide(); 146 +// vm.editEntityFormGroup.markAsPristine();
  147 +// widgetContext.rxjs.forkJoin([
  148 +// saveAttributes(entityId),
  149 +// saveRelations(entityId),
  150 +// saveEntity()
  151 +// ]).subscribe(
  152 +// function () {
  153 +// widgetContext.updateAliases();
  154 +// vm.dialogRef.close(null);
  155 +// }
  156 +// );
201 // }; 157 // };
202 // 158 //
203 // function getEntityAttributes(attributes) { 159 // function getEntityAttributes(attributes) {
204 // for (var i = 0; i < attributes.length; i++) { 160 // for (var i = 0; i < attributes.length; i++) {
205 -// vm.attributes[attributes[i].key] = attributes[i].value; 161 +// vm.attributes[attributes[i].key] = attributes[i].value;
206 // } 162 // }
207 -// vm.serverAttributes = angular.copy(vm.attributes);  
208 // } 163 // }
209 // 164 //
210 // function getEntityRelations(relations) { 165 // function getEntityRelations(relations) {
211 -// var relationsFrom = relations[0];  
212 -// var relationsTo = relations[1];  
213 -// for (var i=0; i < relationsFrom.length; i++) {  
214 -// var relation = {  
215 -// direction: types.entitySearchDirection.from, 166 +// let relationsFrom = relations[0];
  167 +// let relationsTo = relations[1];
  168 +// for (let i=0; i < relationsFrom.length; i++) {
  169 +// let relation = {
  170 +// direction: 'FROM',
216 // relationType: relationsFrom[i].type, 171 // relationType: relationsFrom[i].type,
217 // relatedEntity: relationsFrom[i].to 172 // relatedEntity: relationsFrom[i].to
218 // }; 173 // };
219 -// vm.relations.push(relation); 174 +// vm.oldRelationsData.push(relation);
  175 +// addOldRelation();
220 // } 176 // }
221 -// for (var i=0; i < relationsTo.length; i++) {  
222 -// var relation = {  
223 -// direction: types.entitySearchDirection.to, 177 +// for (let i=0; i < relationsTo.length; i++) {
  178 +// let relation = {
  179 +// direction: 'TO',
224 // relationType: relationsTo[i].type, 180 // relationType: relationsTo[i].type,
225 // relatedEntity: relationsTo[i].from 181 // relatedEntity: relationsTo[i].from
226 // }; 182 // };
227 -// vm.relations.push(relation); 183 +// vm.oldRelationsData.push(relation);
  184 +// addOldRelation();
228 // } 185 // }
229 // } 186 // }
230 // 187 //
231 // function getEntityInfo() { 188 // function getEntityInfo() {
232 -// entityService.getEntity(entityId.entityType, entityId.id).then(  
233 -// function(entity) {  
234 -// vm.entity = entity;  
235 -// vm.type = vm.entity.type;  
236 -// });  
237 -// attributeService.getEntityAttributesValues(entityId.entityType, entityId.id, 'SERVER_SCOPE').then(  
238 -// function(data){  
239 -// if (data.length) {  
240 -// getEntityAttributes(data); 189 +// entityService.getEntity(entityId.entityType, entityId.id).subscribe(function (entity) {
  190 +// vm.entity = entity;
  191 +// widgetContext.rxjs.forkJoin([
  192 +// entityRelationService.findInfoByFrom(entityId),
  193 +// entityRelationService.findInfoByTo(entityId),
  194 +// attributeService.getEntityAttributes(entityId, 'SERVER_SCOPE')
  195 +// ]).subscribe(
  196 +// function (data) {
  197 +// getEntityRelations(data.slice(0,2));
  198 +// getEntityAttributes(data[2]);
  199 +// vm.editEntityFormGroup.patchValue({
  200 +// entityName: vm.entity.name,
  201 +// entityType: vm.entityType,
  202 +// entityLabel: vm.entity.label,
  203 +// type: vm.entity.type,
  204 +// attributes: vm.attributes,
  205 +// oldRelations: vm.oldRelationsData
  206 +// }, {emitEvent: false});
241 // } 207 // }
242 -// });  
243 -// $q.all([entityRelationService.findInfoByFrom(entityId.id, entityId.entityType), entityRelationService.findInfoByTo(entityId.id, entityId.entityType)]).then(  
244 -// function(relations){  
245 -// getEntityRelations(relations);  
246 -// }); 208 +// );
  209 +// });
247 // } 210 // }
248 // 211 //
249 -// function saveAttributes() {  
250 -// var attributesArray = [];  
251 -// for (var key in vm.attributes) {  
252 -// if (vm.attributes[key] !== vm.serverAttributes[key]) {  
253 -// attributesArray.push({key: key, value: vm.attributes[key]}); 212 +// function saveEntity() {
  213 +// const formValues = vm.editEntityFormGroup.value;
  214 +// if (vm.entity.label !== formValues.entityLabel){
  215 +// vm.entity.label = formValues.entityLabel;
  216 +// if (formValues.entityType == 'ASSET') {
  217 +// return assetService.saveAsset(vm.entity);
  218 +// } else if (formValues.entityType == 'DEVICE') {
  219 +// return deviceService.saveDevice(vm.entity);
  220 +// }
  221 +// } else {
  222 +// return widgetContext.rxjs.of([]);
  223 +// }
  224 +// }
  225 +//
  226 +// function saveAttributes(entityId) {
  227 +// let attributes = vm.editEntityFormGroup.get('attributes').value;
  228 +// let attributesArray = [];
  229 +// for (let key in attributes) {
  230 +// if (attributes[key] !== vm.attributes[key]) {
  231 +// attributesArray.push({key: key, value: attributes[key]});
254 // } 232 // }
255 // } 233 // }
256 // if (attributesArray.length > 0) { 234 // if (attributesArray.length > 0) {
257 -// attributeService.saveEntityAttributes(entityId.entityType, entityId.id, \"SERVER_SCOPE\", attributesArray); 235 +// return attributeService.saveEntityAttributes(entityId, "SERVER_SCOPE", attributesArray);
  236 +// } else {
  237 +// return widgetContext.rxjs.of([]);
258 // } 238 // }
259 // } 239 // }
260 // 240 //
261 -// function saveRelations() {  
262 -// var tasks = [];  
263 -// for (var i=0; i < vm.newRelations.length; i++) {  
264 -// var relation = {  
265 -// type: vm.newRelations[i].relationType 241 +// function saveRelations(entityId) {
  242 +// let relations = vm.editEntityFormGroup.get('relations').value;
  243 +// let tasks = [];
  244 +// for(let i=0; i < relations.length; i++) {
  245 +// let relation = {
  246 +// type: relations[i].relationType,
  247 +// typeGroup: 'COMMON'
266 // }; 248 // };
267 -// if (vm.newRelations[i].direction == types.entitySearchDirection.from) {  
268 -// relation.to = vm.newRelations[i].relatedEntity; 249 +// if (relations[i].direction == 'FROM') {
  250 +// relation.to = relations[i].relatedEntity;
269 // relation.from = entityId; 251 // relation.from = entityId;
270 // } else { 252 // } else {
271 // relation.to = entityId; 253 // relation.to = entityId;
272 -// relation.from = vm.newRelations[i].relatedEntity; 254 +// relation.from = relations[i].relatedEntity;
273 // } 255 // }
274 // tasks.push(entityRelationService.saveRelation(relation)); 256 // tasks.push(entityRelationService.saveRelation(relation));
275 // } 257 // }
276 -// for (var i=0; i < vm.relationsToDelete.length; i++) {  
277 -// var relation = { 258 +// for (let i=0; i < vm.relationsToDelete.length; i++) {
  259 +// let relation = {
278 // type: vm.relationsToDelete[i].relationType 260 // type: vm.relationsToDelete[i].relationType
279 // }; 261 // };
280 -// if (vm.relationsToDelete[i].direction == types.entitySearchDirection.from) { 262 +// if (vm.relationsToDelete[i].direction == 'FROM') {
281 // relation.to = vm.relationsToDelete[i].relatedEntity; 263 // relation.to = vm.relationsToDelete[i].relatedEntity;
282 // relation.from = entityId; 264 // relation.from = entityId;
283 // } else { 265 // } else {
284 // relation.to = entityId; 266 // relation.to = entityId;
285 // relation.from = vm.relationsToDelete[i].relatedEntity; 267 // relation.from = vm.relationsToDelete[i].relatedEntity;
286 // } 268 // }
287 -// tasks.push(entityRelationService.deleteRelation(relation.from.id, relation.from.entityType, relation.type, relation.to.id, relation.to.entityType)); 269 +// tasks.push(entityRelationService.deleteRelation(relation.from, relation.type, relation.to));
288 // } 270 // }
289 -// $q.all(tasks).then(function(){  
290 -// vm.relations = vm.relations.concat(vm.newRelations);  
291 -// vm.newRelations = [];  
292 -// vm.relationsToDelete = [];  
293 -// updateAliasData();  
294 -// });  
295 -// }  
296 -//  
297 -// function updateAliasData() {  
298 -// var aliasIds = [];  
299 -// for (var id in widgetContext.aliasController.resolvedAliases) {  
300 -// aliasIds.push(id); 271 +// if (tasks.length > 0) {
  272 +// return widgetContext.rxjs.forkJoin(tasks);
  273 +// } else {
  274 +// return widgetContext.rxjs.of([]);
301 // } 275 // }
302 -// var tasks = [];  
303 -// aliasIds.forEach(function(aliasId) {  
304 -// widgetContext.aliasController.setAliasUnresolved(aliasId);  
305 -// tasks.push(widgetContext.aliasController.getAliasInfo(aliasId));  
306 -// });  
307 -// $q.all(tasks).then(function() {  
308 -// $rootScope.$broadcast('entityAliasesChanged', aliasIds);  
309 -// });  
310 // } 276 // }
311 //} 277 //}
312 // 278 //
@@ -314,124 +280,132 @@ @@ -314,124 +280,132 @@
314 /*========================= Add entity example =========================*/ 280 /*========================= Add entity example =========================*/
315 /*========================================================================*/ 281 /*========================================================================*/
316 // 282 //
317 -//var $injector = widgetContext.$scope.$injector;  
318 -//var $mdDialog = $injector.get('$mdDialog'),  
319 -// $document = $injector.get('$document'),  
320 -// $q = $injector.get('$q'),  
321 -// $rootScope = $injector.get('$rootScope'),  
322 -// types = $injector.get('types'),  
323 -// assetService = $injector.get('assetService'),  
324 -// deviceService = $injector.get('deviceService'),  
325 -// attributeService = $injector.get('attributeService'),  
326 -// entityRelationService = $injector.get('entityRelationService'); 283 +//let $injector = widgetContext.$scope.$injector;
  284 +//let customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));
  285 +//let assetService = $injector.get(widgetContext.servicesMap.get('assetService'));
  286 +//let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));
  287 +//let attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));
  288 +//let entityRelationService = $injector.get(widgetContext.servicesMap.get('entityRelationService'));
327 // 289 //
328 //openAddEntityDialog(); 290 //openAddEntityDialog();
329 // 291 //
330 //function openAddEntityDialog() { 292 //function openAddEntityDialog() {
331 -// $mdDialog.show({  
332 -// controller: ['$scope','$mdDialog', AddEntityDialogController],  
333 -// controllerAs: 'vm',  
334 -// template: htmlTemplate,  
335 -// locals: {  
336 -// entityId: entityId  
337 -// },  
338 -// parent: angular.element($document[0].body),  
339 -// targetEvent: $event,  
340 -// multiple: true,  
341 -// clickOutsideToClose: false  
342 -// }); 293 +// customDialog.customDialog(htmlTemplate, AddEntityDialogController).subscribe();
343 //} 294 //}
344 // 295 //
345 -//function AddEntityDialogController($scope, $mdDialog) {  
346 -// var vm = this;  
347 -// vm.allowedEntityTypes = [types.entityType.asset, types.entityType.device];  
348 -// vm.allowedRelatedEntityTypes = [];  
349 -// vm.entitySearchDirection = types.entitySearchDirection;  
350 -// vm.attributes = {};  
351 -// vm.relations = []; 296 +//function AddEntityDialogController(instance) {
  297 +// let vm = instance;
  298 +//
  299 +// vm.allowedEntityTypes = ['ASSET', 'DEVICE'];
  300 +// vm.entitySearchDirection = {
  301 +// from: "FROM",
  302 +// to: "TO"
  303 +// }
  304 +//
  305 +// vm.addEntityFormGroup = vm.fb.group({
  306 +// entityName: ['', [vm.validators.required]],
  307 +// entityType: ['DEVICE'],
  308 +// entityLabel: [null],
  309 +// type: ['', [vm.validators.required]],
  310 +// attributes: vm.fb.group({
  311 +// latitude: [null],
  312 +// longitude: [null],
  313 +// address: [null],
  314 +// owner: [null],
  315 +// number: [null, [vm.validators.pattern(/^-?[0-9]+$/)]],
  316 +// booleanValue: [null]
  317 +// }),
  318 +// relations: vm.fb.array([])
  319 +// });
  320 +//
  321 +// vm.cancel = function() {
  322 +// vm.dialogRef.close(null);
  323 +// };
  324 +//
  325 +// vm.relations = function() {
  326 +// return vm.addEntityFormGroup.get('relations');
  327 +// };
352 // 328 //
353 // vm.addRelation = function() { 329 // vm.addRelation = function() {
354 -// var relation = {  
355 -// direction: null,  
356 -// relationType: null,  
357 -// relatedEntity: null  
358 -// };  
359 -// vm.relations.push(relation); 330 +// vm.relations().push(vm.fb.group({
  331 +// relatedEntity: [null, [vm.validators.required]],
  332 +// relationType: [null, [vm.validators.required]],
  333 +// direction: [null, [vm.validators.required]]
  334 +// }));
360 // }; 335 // };
  336 +//
361 // vm.removeRelation = function(index) { 337 // vm.removeRelation = function(index) {
362 -// if (index > -1) {  
363 -// vm.relations.splice(index, 1);  
364 -// } 338 +// vm.relations().removeAt(index);
  339 +// vm.relations().markAsDirty();
365 // }; 340 // };
  341 +//
366 // vm.save = function() { 342 // vm.save = function() {
367 -// $scope.addEntityForm.$setPristine();  
368 -// saveEntityPromise().then( 343 +// vm.addEntityFormGroup.markAsPristine();
  344 +// saveEntityObservable().subscribe(
369 // function (entity) { 345 // function (entity) {
370 -// saveAttributes(entity.id);  
371 -// saveRelations(entity.id);  
372 -// $mdDialog.hide(); 346 +// widgetContext.rxjs.forkJoin([
  347 +// saveAttributes(entity.id),
  348 +// saveRelations(entity.id)
  349 +// ]).subscribe(
  350 +// function () {
  351 +// widgetContext.updateAliases();
  352 +// vm.dialogRef.close(null);
  353 +// }
  354 +// );
373 // } 355 // }
374 // ); 356 // );
375 // }; 357 // };
376 -// vm.cancel = function() {  
377 -// $mdDialog.hide();  
378 -// };  
379 // 358 //
380 -//  
381 -// function saveEntityPromise() {  
382 -// var entity = {  
383 -// name: vm.entityName,  
384 -// type: vm.type 359 +// function saveEntityObservable() {
  360 +// const formValues = vm.addEntityFormGroup.value;
  361 +// let entity = {
  362 +// name: formValues.entityName,
  363 +// type: formValues.type,
  364 +// label: formValues.entityLabel
385 // }; 365 // };
386 -// if (vm.entityType == types.entityType.asset) { 366 +// if (formValues.entityType == 'ASSET') {
387 // return assetService.saveAsset(entity); 367 // return assetService.saveAsset(entity);
388 -// } else if (vm.entityType == types.entityType.device) { 368 +// } else if (formValues.entityType == 'DEVICE') {
389 // return deviceService.saveDevice(entity); 369 // return deviceService.saveDevice(entity);
390 // } 370 // }
391 // } 371 // }
392 // 372 //
393 // function saveAttributes(entityId) { 373 // function saveAttributes(entityId) {
394 -// var attributesArray = [];  
395 -// for (var key in vm.attributes) {  
396 -// attributesArray.push({key: key, value: vm.attributes[key]}); 374 +// let attributes = vm.addEntityFormGroup.get('attributes').value;
  375 +// let attributesArray = [];
  376 +// for (let key in attributes) {
  377 +// if(attributes[key] !== null) {
  378 +// attributesArray.push({key: key, value: attributes[key]});
  379 +// }
397 // } 380 // }
398 // if (attributesArray.length > 0) { 381 // if (attributesArray.length > 0) {
399 -// attributeService.saveEntityAttributes(entityId.entityType, entityId.id, \"SERVER_SCOPE\", attributesArray); 382 +// return attributeService.saveEntityAttributes(entityId, "SERVER_SCOPE", attributesArray);
  383 +// } else {
  384 +// return widgetContext.rxjs.of([]);
400 // } 385 // }
401 // } 386 // }
402 // 387 //
403 // function saveRelations(entityId) { 388 // function saveRelations(entityId) {
404 -// var tasks = [];  
405 -// for (var i=0; i < vm.relations.length; i++) {  
406 -// var relation = {  
407 -// type: vm.relations[i].relationType 389 +// let relations = vm.addEntityFormGroup.get('relations').value;
  390 +// let tasks = [];
  391 +// for(let i=0; i < relations.length; i++) {
  392 +// let relation = {
  393 +// type: relations[i].relationType,
  394 +// typeGroup: 'COMMON'
408 // }; 395 // };
409 -// if (vm.relations[i].direction == types.entitySearchDirection.from) {  
410 -// relation.to = vm.relations[i].relatedEntity; 396 +// if (relations[i].direction == 'FROM') {
  397 +// relation.to = relations[i].relatedEntity;
411 // relation.from = entityId; 398 // relation.from = entityId;
412 // } else { 399 // } else {
413 // relation.to = entityId; 400 // relation.to = entityId;
414 -// relation.from = vm.relations[i].relatedEntity; 401 +// relation.from = relations[i].relatedEntity;
415 // } 402 // }
416 // tasks.push(entityRelationService.saveRelation(relation)); 403 // tasks.push(entityRelationService.saveRelation(relation));
417 // } 404 // }
418 -// $q.all(tasks).then(function(){  
419 -// updateAliasData();  
420 -// });  
421 -// }  
422 -//  
423 -// function updateAliasData() {  
424 -// var aliasIds = [];  
425 -// for (var id in widgetContext.aliasController.resolvedAliases) {  
426 -// aliasIds.push(id); 405 +// if (tasks.length > 0) {
  406 +// return widgetContext.rxjs.forkJoin(tasks);
  407 +// } else {
  408 +// return widgetContext.rxjs.of([]);
427 // } 409 // }
428 -// var tasks = [];  
429 -// aliasIds.forEach(function(aliasId) {  
430 -// widgetContext.aliasController.setAliasUnresolved(aliasId);  
431 -// tasks.push(widgetContext.aliasController.getAliasInfo(aliasId));  
432 -// });  
433 -// $q.all(tasks).then(function() {  
434 -// $rootScope.$broadcast('entityAliasesChanged', aliasIds);  
435 -// });  
436 // } 410 // }
437 //} 411 //}
@@ -97,11 +97,14 @@ import { DatePipe } from '@angular/common'; @@ -97,11 +97,14 @@ import { DatePipe } from '@angular/common';
97 import { AttributeService } from '@core/http/attribute.service'; 97 import { AttributeService } from '@core/http/attribute.service';
98 import { TranslateService } from '@ngx-translate/core'; 98 import { TranslateService } from '@ngx-translate/core';
99 import { HttpClient } from '@angular/common/http'; 99 import { HttpClient } from '@angular/common/http';
  100 +import { EntityRelationService } from '@app/core/http/entity-relation.service';
100 101
101 const ServicesMap = new Map<string, Type<any>>(); 102 const ServicesMap = new Map<string, Type<any>>();
102 ServicesMap.set('deviceService', DeviceService); 103 ServicesMap.set('deviceService', DeviceService);
103 ServicesMap.set('assetService', AssetService); 104 ServicesMap.set('assetService', AssetService);
104 ServicesMap.set('attributeService', AttributeService); 105 ServicesMap.set('attributeService', AttributeService);
  106 +ServicesMap.set('entityRelationService', EntityRelationService);
  107 +ServicesMap.set('entityService', EntityService);
105 ServicesMap.set('dialogs', DialogService); 108 ServicesMap.set('dialogs', DialogService);
106 ServicesMap.set('customDialog', CustomDialogService); 109 ServicesMap.set('customDialog', CustomDialogService);
107 ServicesMap.set('date', DatePipe); 110 ServicesMap.set('date', DatePipe);
@@ -1011,7 +1014,7 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI @@ -1011,7 +1014,7 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI
1011 'entityName', 'additionalParams', 'entityLabel', customFunction); 1014 'entityName', 'additionalParams', 'entityLabel', customFunction);
1012 customActionFunction($event, this.widgetContext, entityId, entityName, additionalParams, entityLabel); 1015 customActionFunction($event, this.widgetContext, entityId, entityName, additionalParams, entityLabel);
1013 } catch (e) { 1016 } catch (e) {
1014 - // 1017 + console.error(e);
1015 } 1018 }
1016 } 1019 }
1017 break; 1020 break;
@@ -1036,7 +1039,7 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI @@ -1036,7 +1039,7 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI
1036 'entityName', 'htmlTemplate', 'additionalParams', 'entityLabel', customPrettyFunction); 1039 'entityName', 'htmlTemplate', 'additionalParams', 'entityLabel', customPrettyFunction);
1037 customActionPrettyFunction($event, this.widgetContext, entityId, entityName, htmlTemplate, additionalParams, entityLabel); 1040 customActionPrettyFunction($event, this.widgetContext, entityId, entityName, htmlTemplate, additionalParams, entityLabel);
1038 } catch (e) { 1041 } catch (e) {
1039 - // 1042 + console.error(e);
1040 } 1043 }
1041 } 1044 }
1042 }, 1045 },