Commit 15880e3ef9b3f601436d624b7fa4894180892c27

Authored by Vladyslav
Committed by GitHub
1 parent 842a1d1a

[3.0] Minor fix (#2571)

* Fix breadcrumb and breakroint api to header

* Fix layout profile

* Clear code and fix layout (admin and profile pages)

* Improvements import

* Fix entity table
Showing 57 changed files with 264 additions and 310 deletions
... ... @@ -25,17 +25,13 @@ import {
25 25 AuditLog,
26 26 AuditLogMode
27 27 } from '@shared/models/audit-log.models';
28   -import {
29   - EntityTypeResource,
30   - EntityTypeTranslation,
31   - entityTypeTranslations
32   -} from '@shared/models/entity-type.models';
  28 +import { EntityTypeResource, entityTypeTranslations } from '@shared/models/entity-type.models';
33 29 import { AuditLogService } from '@core/http/audit-log.service';
34 30 import { TranslateService } from '@ngx-translate/core';
35 31 import { DatePipe } from '@angular/common';
36 32 import { Direction } from '@shared/models/page/sort-order';
37 33 import { MatDialog } from '@angular/material/dialog';
38   -import { PageLink, TimePageLink } from '@shared/models/page/page-link';
  34 +import { TimePageLink } from '@shared/models/page/page-link';
39 35 import { Observable } from 'rxjs';
40 36 import { PageData } from '@shared/models/page/page-data';
41 37 import { EntityId } from '@shared/models/id/entity-id';
... ...
... ... @@ -135,7 +135,7 @@
135 135 </div>
136 136 </mat-toolbar>
137 137 <div fxFlex class="table-container">
138   - <mat-table [dataSource]="dataSource" [trackBy]="trackByEntityId"
  138 + <table mat-table [dataSource]="dataSource" [trackBy]="trackByEntityId"
139 139 matSort [matSortActive]="pageLink.sortOrder.property" [matSortDirection]="pageLink.sortDirection()" matSortDisableClear>
140 140 <ng-container matColumnDef="select" sticky>
141 141 <mat-header-cell *matHeaderCellDef style="width: 30px;">
... ... @@ -187,7 +187,7 @@
187 187 maxWidth: (cellActionDescriptors.length * 40) + 'px',
188 188 width: (cellActionDescriptors.length * 40) + 'px' }">
189 189 <div fxHide fxShow.gt-md fxFlex fxLayout="row" fxLayoutAlign="end">
190   - <button mat-button mat-icon-button [disabled]="isLoading$ | async"
  190 + <button mat-icon-button [disabled]="isLoading$ | async"
191 191 [fxShow]="actionDescriptor.isEnabled(entity)" *ngFor="let actionDescriptor of cellActionDescriptors"
192 192 matTooltip="{{ actionDescriptor.nameFunction ? actionDescriptor.nameFunction(entity) : actionDescriptor.name }}"
193 193 matTooltipPosition="above"
... ... @@ -197,7 +197,7 @@
197 197 </button>
198 198 </div>
199 199 <div fxHide fxShow.lt-lg *ngIf="cellActionDescriptors.length">
200   - <button mat-button mat-icon-button
  200 + <button mat-icon-button
201 201 (click)="$event.stopPropagation()"
202 202 [matMenuTriggerFor]="cellActionsMenu">
203 203 <mat-icon class="material-icons">more_vert</mat-icon>
... ... @@ -220,7 +220,7 @@
220 220 'mat-selected': dataSource.selection.isSelected(entity),
221 221 'tb-current-entity': dataSource.isCurrentEntity(entity)}"
222 222 *matRowDef="let entity; columns: displayedColumns;" (click)="onRowClick($event, entity)"></mat-row>
223   - </mat-table>
  223 + </table>
224 224 <span [fxShow]="!(isLoading$ | async) && (dataSource.isEmpty() | async)"
225 225 fxLayoutAlign="center center"
226 226 class="no-data-found" translate>{{ translations.noEntities }}</span>
... ...
... ... @@ -35,17 +35,17 @@
35 35 <mat-sidenav-content>
36 36 <div fxLayout="column" role="main" style="height: 100%;">
37 37 <mat-toolbar fxLayout="row" color="primary" class="mat-elevation-z1 tb-primary-toolbar">
38   - <button [fxShow]="!forceFullscreen" mat-button mat-icon-button id="main"
  38 + <button [fxShow]="!forceFullscreen" mat-icon-button id="main"
39 39 [ngClass]="{'tb-invisible': displaySearchMode()}"
40 40 fxHide.gt-sm (click)="sidenav.toggle()">
41 41 <mat-icon class="material-icons">menu</mat-icon>
42 42 </button>
43   - <button [fxShow]="forceFullscreen" mat-button mat-icon-button
  43 + <button [fxShow]="forceFullscreen" mat-icon-button
44 44 [ngClass]="{'tb-invisible': displaySearchMode()}"
45 45 (click)="goBack()">
46 46 <mat-icon class="material-icons">arrow_back</mat-icon>
47 47 </button>
48   - <button mat-button mat-icon-button
  48 + <button mat-icon-button
49 49 [ngClass]="{'tb-invisible': !displaySearchMode()}"
50 50 (click)="closeSearch()">
51 51 <mat-icon class="material-icons">arrow_back</mat-icon>
... ... @@ -62,12 +62,11 @@
62 62 </mat-form-field>
63 63 </div>
64 64 <button [fxShow]="searchEnabled"
65   - mat-button mat-icon-button
66   - (click)="openSearch()">
  65 + mat-icon-button (click)="openSearch()">
67 66 <mat-icon class="material-icons">search</mat-icon>
68 67 </button>
69 68 <button *ngIf="fullscreenEnabled" [fxShow]="!displaySearchMode()"
70   - mat-button mat-icon-button fxHide.xs fxHide.sm (click)="toggleFullscreen()">
  69 + mat-icon-button fxHide.lt-md (click)="toggleFullscreen()">
71 70 <mat-icon class="material-icons">{{ isFullscreen() ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>
72 71 </button>
73 72 <tb-user-menu [displayUserInfo]="!displaySearchMode()"></tb-user-menu>
... ...
... ... @@ -17,24 +17,19 @@
17 17 import { AfterViewInit, Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';
18 18 import { fromEvent, Observable } from 'rxjs';
19 19 import { select, Store } from '@ngrx/store';
20   -import { debounceTime, distinctUntilChanged, map, mergeMap, take, tap } from 'rxjs/operators';
  20 +import { debounceTime, distinctUntilChanged, map, tap } from 'rxjs/operators';
21 21
22 22 import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';
23 23 import { User } from '@shared/models/user.model';
24 24 import { PageComponent } from '@shared/components/page.component';
25 25 import { AppState } from '@core/core.state';
26   -import { AuthService } from '@core/auth/auth.service';
27   -import { UserService } from '@core/http/user.service';
28   -import { MenuService } from '@core/services/menu.service';
29 26 import { getCurrentAuthState, selectAuthUser, selectUserDetails } from '@core/auth/auth.selectors';
30 27 import { MediaBreakpoints } from '@shared/models/constants';
31   -import { ActionNotificationShow } from '@core/notification/notification.actions';
32   -import { Router } from '@angular/router';
33 28 import * as _screenfull from 'screenfull';
34 29 import { MatSidenav } from '@angular/material/sidenav';
35 30 import { AuthState } from '@core/auth/auth.models';
36 31 import { WINDOW } from '@core/services/window.service';
37   -import { ISearchableComponent, instanceOfSearchableComponent } from '@home/models/searchable-component.models';
  32 +import { instanceOfSearchableComponent, ISearchableComponent } from '@home/models/searchable-component.models';
38 33
39 34 const screenfull = _screenfull as _screenfull.Screenfull;
40 35
... ... @@ -74,9 +69,6 @@ export class HomeComponent extends PageComponent implements AfterViewInit, OnIni
74 69
75 70 constructor(protected store: Store<AppState>,
76 71 @Inject(WINDOW) private window: Window,
77   - private authService: AuthService,
78   - private router: Router,
79   - private userService: UserService, private menuService: MenuService,
80 72 public breakpointObserver: BreakpointObserver) {
81 73 super(store);
82 74 }
... ...
... ... @@ -15,13 +15,13 @@
15 15 ///
16 16
17 17 import { NgModule } from '@angular/core';
18   -import { Routes, RouterModule } from '@angular/router';
  18 +import { RouterModule, Routes } from '@angular/router';
19 19
20 20 import { MailServerComponent } from '@modules/home/pages/admin/mail-server.component';
21 21 import { ConfirmOnExitGuard } from '@core/guards/confirm-on-exit.guard';
22 22 import { Authority } from '@shared/models/authority.enum';
23   -import {GeneralSettingsComponent} from '@modules/home/pages/admin/general-settings.component';
24   -import {SecuritySettingsComponent} from '@modules/home/pages/admin/security-settings.component';
  23 +import { GeneralSettingsComponent } from '@modules/home/pages/admin/general-settings.component';
  24 +import { SecuritySettingsComponent } from '@modules/home/pages/admin/security-settings.component';
25 25
26 26 const routes: Routes = [
27 27 {
... ...
... ... @@ -20,9 +20,9 @@ import { CommonModule } from '@angular/common';
20 20 import { AdminRoutingModule } from './admin-routing.module';
21 21 import { SharedModule } from '@app/shared/shared.module';
22 22 import { MailServerComponent } from '@modules/home/pages/admin/mail-server.component';
23   -import {GeneralSettingsComponent} from '@modules/home/pages/admin/general-settings.component';
24   -import {SecuritySettingsComponent} from '@modules/home/pages/admin/security-settings.component';
25   -import {HomeComponentsModule} from '@modules/home/components/home-components.module';
  23 +import { GeneralSettingsComponent } from '@modules/home/pages/admin/general-settings.component';
  24 +import { SecuritySettingsComponent } from '@modules/home/pages/admin/security-settings.component';
  25 +import { HomeComponentsModule } from '@modules/home/components/home-components.module';
26 26
27 27 @NgModule({
28 28 declarations:
... ...
... ... @@ -20,10 +20,8 @@ import { AppState } from '@core/core.state';
20 20 import { PageComponent } from '@shared/components/page.component';
21 21 import { Router } from '@angular/router';
22 22 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
23   -import {AdminSettings, GeneralSettings} from '@shared/models/settings.models';
  23 +import { AdminSettings, GeneralSettings } from '@shared/models/settings.models';
24 24 import { AdminService } from '@core/http/admin.service';
25   -import { ActionNotificationShow } from '@core/notification/notification.actions';
26   -import { TranslateService } from '@ngx-translate/core';
27 25 import { HasConfirmForm } from '@core/guards/confirm-on-exit.guard';
28 26
29 27 @Component({
... ... @@ -39,7 +37,6 @@ export class GeneralSettingsComponent extends PageComponent implements OnInit, H
39 37 constructor(protected store: Store<AppState>,
40 38 private router: Router,
41 39 private adminService: AdminService,
42   - private translate: TranslateService,
43 40 public fb: FormBuilder) {
44 41 super(store);
45 42 }
... ...
... ... @@ -95,13 +95,12 @@
95 95 <mat-label translate>common.password</mat-label>
96 96 <input matInput formControlName="password" type="password" placeholder="{{ 'common.enter-password' | translate }}"/>
97 97 </mat-form-field>
98   - <div fxLayout="row" fxLayoutAlign="end center" style="width: 100%;" class="layout-wrap">
99   - <button mat-button mat-raised-button
100   - type="button" style="margin-right: 16px;"
  98 + <div fxLayout="row" fxLayoutAlign="end center" fxLayout.xs="column" fxLayoutAlign.xs="end" fxLayoutGap="16px">
  99 + <button mat-raised-button type="button"
101 100 [disabled]="(isLoading$ | async) || mailSettingsForm.invalid" (click)="sendTestMail()">
102 101 {{'admin.send-test-mail' | translate}}
103 102 </button>
104   - <button mat-button mat-raised-button color="primary" [disabled]="(isLoading$ | async) || mailSettingsForm.invalid || !mailSettingsForm.dirty"
  103 + <button mat-raised-button color="primary" [disabled]="(isLoading$ | async) || mailSettingsForm.invalid || !mailSettingsForm.dirty"
105 104 type="submit">{{'action.save' | translate}}
106 105 </button>
107 106 </div>
... ...
... ... @@ -20,10 +20,8 @@ import { AppState } from '@core/core.state';
20 20 import { PageComponent } from '@shared/components/page.component';
21 21 import { Router } from '@angular/router';
22 22 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
23   -import { SecuritySettings} from '@shared/models/settings.models';
  23 +import { SecuritySettings } from '@shared/models/settings.models';
24 24 import { AdminService } from '@core/http/admin.service';
25   -import { ActionNotificationShow } from '@core/notification/notification.actions';
26   -import { TranslateService } from '@ngx-translate/core';
27 25 import { HasConfirmForm } from '@core/guards/confirm-on-exit.guard';
28 26
29 27 @Component({
... ... @@ -39,7 +37,6 @@ export class SecuritySettingsComponent extends PageComponent implements OnInit,
39 37 constructor(protected store: Store<AppState>,
40 38 private router: Router,
41 39 private adminService: AdminService,
42   - private translate: TranslateService,
43 40 public fb: FormBuilder) {
44 41 super(store);
45 42 }
... ...
... ... @@ -14,16 +14,16 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {NgModule} from '@angular/core';
18   -import {RouterModule, Routes} from '@angular/router';
  17 +import { NgModule } from '@angular/core';
  18 +import { RouterModule, Routes } from '@angular/router';
19 19
20   -import {EntitiesTableComponent} from '../../components/entity/entities-table.component';
21   -import {Authority} from '@shared/models/authority.enum';
22   -import {UsersTableConfigResolver} from '../user/users-table-config.resolver';
23   -import {CustomersTableConfigResolver} from './customers-table-config.resolver';
24   -import {DevicesTableConfigResolver} from '@modules/home/pages/device/devices-table-config.resolver';
25   -import {AssetsTableConfigResolver} from '../asset/assets-table-config.resolver';
26   -import {DashboardsTableConfigResolver} from '@modules/home/pages/dashboard/dashboards-table-config.resolver';
  20 +import { EntitiesTableComponent } from '../../components/entity/entities-table.component';
  21 +import { Authority } from '@shared/models/authority.enum';
  22 +import { UsersTableConfigResolver } from '../user/users-table-config.resolver';
  23 +import { CustomersTableConfigResolver } from './customers-table-config.resolver';
  24 +import { DevicesTableConfigResolver } from '@modules/home/pages/device/devices-table-config.resolver';
  25 +import { AssetsTableConfigResolver } from '../asset/assets-table-config.resolver';
  26 +import { DashboardsTableConfigResolver } from '@modules/home/pages/dashboard/dashboards-table-config.resolver';
27 27 import { DashboardPageComponent } from '@home/pages/dashboard/dashboard-page.component';
28 28 import { BreadCrumbConfig } from '@shared/components/breadcrumb';
29 29 import { dashboardBreadcumbLabelFunction, DashboardResolver } from '@home/pages/dashboard/dashboard-routing.module';
... ...
... ... @@ -17,9 +17,9 @@
17 17 import { NgModule } from '@angular/core';
18 18 import { CommonModule } from '@angular/common';
19 19 import { SharedModule } from '@shared/shared.module';
20   -import {CustomerComponent} from '@modules/home/pages/customer/customer.component';
21   -import {CustomerRoutingModule} from './customer-routing.module';
22   -import {HomeComponentsModule} from '@modules/home/components/home-components.module';
  20 +import { CustomerComponent } from '@modules/home/pages/customer/customer.component';
  21 +import { CustomerRoutingModule } from './customer-routing.module';
  22 +import { HomeComponentsModule } from '@modules/home/components/home-components.module';
23 23 import { CustomerTabsComponent } from '@home/pages/customer/customer-tabs.component';
24 24
25 25 @NgModule({
... ...
... ... @@ -18,7 +18,6 @@ import { Injectable } from '@angular/core';
18 18
19 19 import { Resolve, Router } from '@angular/router';
20 20
21   -import { Tenant } from '@shared/models/tenant.model';
22 21 import {
23 22 DateEntityTableColumn,
24 23 EntityTableColumn,
... ... @@ -26,15 +25,11 @@ import {
26 25 } from '@home/models/entity/entities-table-config.models';
27 26 import { TranslateService } from '@ngx-translate/core';
28 27 import { DatePipe } from '@angular/common';
29   -import {
30   - EntityType,
31   - entityTypeResources,
32   - entityTypeTranslations
33   -} from '@shared/models/entity-type.models';
  28 +import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
34 29 import { EntityAction } from '@home/models/entity/entity-component.models';
35   -import {Customer} from '@app/shared/models/customer.model';
36   -import {CustomerService} from '@app/core/http/customer.service';
37   -import {CustomerComponent} from '@modules/home/pages/customer/customer.component';
  30 +import { Customer } from '@app/shared/models/customer.model';
  31 +import { CustomerService } from '@app/core/http/customer.service';
  32 +import { CustomerComponent } from '@modules/home/pages/customer/customer.component';
38 33 import { CustomerTabsComponent } from '@home/pages/customer/customer-tabs.component';
39 34
40 35 @Injectable()
... ... @@ -54,7 +49,7 @@ export class CustomersTableConfigResolver implements Resolve<EntityTableConfig<C
54 49 this.config.entityResources = entityTypeResources.get(EntityType.CUSTOMER);
55 50
56 51 this.config.columns.push(
57   - new DateEntityTableColumn<Customer>('createdTime', 'customer.created-time', this.datePipe, '150px'),
  52 + new DateEntityTableColumn<Customer>('createdTime', 'common.created-time', this.datePipe, '150px'),
58 53 new EntityTableColumn<Customer>('title', 'customer.title', '25%'),
59 54 new EntityTableColumn<Customer>('email', 'contact.email', '25%'),
60 55 new EntityTableColumn<Customer>('country', 'contact.country', '25%'),
... ...
... ... @@ -45,7 +45,7 @@ import {
45 45 import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';
46 46 import { MediaBreakpoints } from '@shared/models/constants';
47 47 import { AuthUser } from '@shared/models/user.model';
48   -import { getCurrentAuthState, getCurrentAuthUser } from '@core/auth/auth.selectors';
  48 +import { getCurrentAuthState } from '@core/auth/auth.selectors';
49 49 import { Widget, WidgetConfig, WidgetPosition, widgetTypesData } from '@app/shared/models/widget.models';
50 50 import { environment as env } from '@env/environment';
51 51 import { Authority } from '@shared/models/authority.enum';
... ...
... ... @@ -14,17 +14,12 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import { DashboardLayoutId, GridSettings, WidgetLayout, Dashboard, WidgetLayouts } from '@app/shared/models/dashboard.models';
  17 +import { Dashboard, DashboardLayoutId, GridSettings, WidgetLayouts } from '@app/shared/models/dashboard.models';
18 18 import { Widget, WidgetPosition } from '@app/shared/models/widget.models';
19 19 import { Timewindow } from '@shared/models/time/time.models';
20 20 import { IAliasController, IStateController } from '@core/api/widget-api.models';
21 21 import { ILayoutController } from './layout/layout.models';
22   -import {
23   - DashboardContextMenuItem,
24   - WidgetContextMenuItem
25   -} from '@home/models/dashboard-component.models';
26   -import { Observable } from 'rxjs';
27   -import { ChangeDetectorRef } from '@angular/core';
  22 +import { DashboardContextMenuItem, WidgetContextMenuItem } from '@home/models/dashboard-component.models';
28 23
29 24 export declare type DashboardPageScope = 'tenant' | 'customer';
30 25
... ...
... ... @@ -17,14 +17,11 @@
17 17 import { Injectable, NgModule } from '@angular/core';
18 18 import { ActivatedRouteSnapshot, Resolve, RouterModule, Routes } from '@angular/router';
19 19
20   -import {EntitiesTableComponent} from '../../components/entity/entities-table.component';
21   -import {Authority} from '@shared/models/authority.enum';
22   -import {DashboardsTableConfigResolver} from './dashboards-table-config.resolver';
  20 +import { EntitiesTableComponent } from '../../components/entity/entities-table.component';
  21 +import { Authority } from '@shared/models/authority.enum';
  22 +import { DashboardsTableConfigResolver } from './dashboards-table-config.resolver';
23 23 import { DashboardPageComponent } from '@home/pages/dashboard/dashboard-page.component';
24 24 import { BreadCrumbConfig, BreadCrumbLabelFunction } from '@shared/components/breadcrumb';
25   -import { widgetTypesBreadcumbLabelFunction } from '@home/pages/widget/widget-library-routing.module';
26   -import { WidgetsBundle } from '@shared/models/widgets-bundle.model';
27   -import { WidgetService } from '@core/http/widget.service';
28 25 import { Observable } from 'rxjs';
29 26 import { Dashboard } from '@app/shared/models/dashboard.models';
30 27 import { DashboardService } from '@core/http/dashboard.service';
... ...
... ... @@ -14,9 +14,9 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Injectable} from '@angular/core';
  17 +import { Injectable } from '@angular/core';
18 18
19   -import {ActivatedRouteSnapshot, Resolve, Router} from '@angular/router';
  19 +import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router';
20 20 import {
21 21 CellActionDescriptor,
22 22 checkBoxCell,
... ... @@ -26,20 +26,20 @@ import {
26 26 GroupActionDescriptor,
27 27 HeaderActionDescriptor
28 28 } from '@home/models/entity/entities-table-config.models';
29   -import {TranslateService} from '@ngx-translate/core';
30   -import {DatePipe} from '@angular/common';
31   -import {EntityType, entityTypeResources, entityTypeTranslations} from '@shared/models/entity-type.models';
32   -import {EntityAction} from '@home/models/entity/entity-component.models';
33   -import {forkJoin, Observable, of} from 'rxjs';
34   -import {select, Store} from '@ngrx/store';
35   -import {selectAuthUser} from '@core/auth/auth.selectors';
36   -import {map, mergeMap, take, tap} from 'rxjs/operators';
37   -import {AppState} from '@core/core.state';
38   -import {Authority} from '@app/shared/models/authority.enum';
39   -import {CustomerService} from '@core/http/customer.service';
40   -import {Customer} from '@app/shared/models/customer.model';
  29 +import { TranslateService } from '@ngx-translate/core';
  30 +import { DatePipe } from '@angular/common';
  31 +import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
  32 +import { EntityAction } from '@home/models/entity/entity-component.models';
  33 +import { forkJoin, Observable, of } from 'rxjs';
  34 +import { select, Store } from '@ngrx/store';
  35 +import { selectAuthUser } from '@core/auth/auth.selectors';
  36 +import { map, mergeMap, take, tap } from 'rxjs/operators';
  37 +import { AppState } from '@core/core.state';
  38 +import { Authority } from '@app/shared/models/authority.enum';
  39 +import { CustomerService } from '@core/http/customer.service';
  40 +import { Customer } from '@app/shared/models/customer.model';
41 41 import { MatDialog } from '@angular/material/dialog';
42   -import {DialogService} from '@core/services/dialog.service';
  42 +import { DialogService } from '@core/services/dialog.service';
43 43 import {
44 44 AddEntitiesToCustomerDialogComponent,
45 45 AddEntitiesToCustomerDialogData
... ... @@ -51,8 +51,8 @@ import {
51 51 isCurrentPublicDashboardCustomer,
52 52 isPublicDashboard
53 53 } from '@app/shared/models/dashboard.models';
54   -import {DashboardService} from '@app/core/http/dashboard.service';
55   -import {DashboardFormComponent} from '@modules/home/pages/dashboard/dashboard-form.component';
  54 +import { DashboardService } from '@app/core/http/dashboard.service';
  55 +import { DashboardFormComponent } from '@modules/home/pages/dashboard/dashboard-form.component';
56 56 import {
57 57 ManageDashboardCustomersActionType,
58 58 ManageDashboardCustomersDialogComponent,
... ... @@ -142,7 +142,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
142 142
143 143 configureColumns(dashboardScope: string): Array<EntityTableColumn<DashboardInfo>> {
144 144 const columns: Array<EntityTableColumn<DashboardInfo>> = [
145   - new DateEntityTableColumn<DashboardInfo>('createdTime', 'dashboard.created-time', this.datePipe, '150px'),
  145 + new DateEntityTableColumn<DashboardInfo>('createdTime', 'common.created-time', this.datePipe, '150px'),
146 146 new EntityTableColumn<DashboardInfo>('title', 'dashboard.title', '50%')
147 147 ];
148 148 if (dashboardScope === 'tenant') {
... ...
... ... @@ -14,12 +14,12 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {NgModule} from '@angular/core';
18   -import {RouterModule, Routes} from '@angular/router';
  17 +import { NgModule } from '@angular/core';
  18 +import { RouterModule, Routes } from '@angular/router';
19 19
20   -import {EntitiesTableComponent} from '../../components/entity/entities-table.component';
21   -import {Authority} from '@shared/models/authority.enum';
22   -import {DevicesTableConfigResolver} from '@modules/home/pages/device/devices-table-config.resolver';
  20 +import { EntitiesTableComponent } from '../../components/entity/entities-table.component';
  21 +import { Authority } from '@shared/models/authority.enum';
  22 +import { DevicesTableConfigResolver } from '@modules/home/pages/device/devices-table-config.resolver';
23 23
24 24 const routes: Routes = [
25 25 {
... ...
... ... @@ -149,7 +149,7 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev
149 149
150 150 configureColumns(deviceScope: string): Array<EntityTableColumn<DeviceInfo>> {
151 151 const columns: Array<EntityTableColumn<DeviceInfo>> = [
152   - new DateEntityTableColumn<DeviceInfo>('createdTime', 'device.created-time', this.datePipe, '150px'),
  152 + new DateEntityTableColumn<DeviceInfo>('createdTime', 'common.created-time', this.datePipe, '150px'),
153 153 new EntityTableColumn<DeviceInfo>('name', 'device.name', '25%'),
154 154 new EntityTableColumn<DeviceInfo>('type', 'device.device-type', '25%'),
155 155 new EntityTableColumn<DeviceInfo>('label', 'device.label', '25%')
... ...
... ... @@ -14,12 +14,12 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {NgModule} from '@angular/core';
18   -import {RouterModule, Routes} from '@angular/router';
  17 +import { NgModule } from '@angular/core';
  18 +import { RouterModule, Routes } from '@angular/router';
19 19
20   -import {EntitiesTableComponent} from '../../components/entity/entities-table.component';
21   -import {Authority} from '@shared/models/authority.enum';
22   -import {EntityViewsTableConfigResolver} from '@modules/home/pages/entity-view/entity-views-table-config.resolver';
  20 +import { EntitiesTableComponent } from '../../components/entity/entities-table.component';
  21 +import { Authority } from '@shared/models/authority.enum';
  22 +import { EntityViewsTableConfigResolver } from '@modules/home/pages/entity-view/entity-views-table-config.resolver';
23 23
24 24 const routes: Routes = [
25 25 {
... ...
... ... @@ -14,12 +14,12 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Component} from '@angular/core';
18   -import {Store} from '@ngrx/store';
19   -import {AppState} from '@core/core.state';
20   -import {EntityTableHeaderComponent} from '../../components/entity/entity-table-header.component';
21   -import {EntityType} from '@shared/models/entity-type.models';
22   -import {EntityViewInfo} from '@app/shared/models/entity-view.models';
  17 +import { Component } from '@angular/core';
  18 +import { Store } from '@ngrx/store';
  19 +import { AppState } from '@core/core.state';
  20 +import { EntityTableHeaderComponent } from '../../components/entity/entity-table-header.component';
  21 +import { EntityType } from '@shared/models/entity-type.models';
  22 +import { EntityViewInfo } from '@app/shared/models/entity-view.models';
23 23
24 24 @Component({
25 25 selector: 'tb-entity-view-table-header',
... ...
... ... @@ -14,20 +14,19 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Component} from '@angular/core';
18   -import {Store} from '@ngrx/store';
19   -import {AppState} from '@core/core.state';
20   -import {EntityComponent} from '../../components/entity/entity.component';
21   -import {FormBuilder, FormGroup, Validators} from '@angular/forms';
22   -import {EntityType} from '@shared/models/entity-type.models';
23   -import {NULL_UUID} from '@shared/models/id/has-uuid';
24   -import {ActionNotificationShow} from '@core/notification/notification.actions';
25   -import {TranslateService} from '@ngx-translate/core';
26   -import {EntityViewInfo} from '@app/shared/models/entity-view.models';
27   -import {Observable} from 'rxjs';
28   -import {map} from 'rxjs/operators';
29   -import {DataKeyType} from '@shared/models/telemetry/telemetry.models';
30   -import {EntityId} from '@app/shared/models/id/entity-id';
  17 +import { Component } from '@angular/core';
  18 +import { Store } from '@ngrx/store';
  19 +import { AppState } from '@core/core.state';
  20 +import { EntityComponent } from '../../components/entity/entity.component';
  21 +import { FormBuilder, FormGroup, Validators } from '@angular/forms';
  22 +import { EntityType } from '@shared/models/entity-type.models';
  23 +import { NULL_UUID } from '@shared/models/id/has-uuid';
  24 +import { ActionNotificationShow } from '@core/notification/notification.actions';
  25 +import { TranslateService } from '@ngx-translate/core';
  26 +import { EntityViewInfo } from '@app/shared/models/entity-view.models';
  27 +import { Observable } from 'rxjs';
  28 +import { DataKeyType } from '@shared/models/telemetry/telemetry.models';
  29 +import { EntityId } from '@app/shared/models/id/entity-id';
31 30
32 31 @Component({
33 32 selector: 'tb-entity-view',
... ...
... ... @@ -14,14 +14,14 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {NgModule} from '@angular/core';
18   -import {CommonModule} from '@angular/common';
19   -import {SharedModule} from '@shared/shared.module';
20   -import {HomeDialogsModule} from '../../dialogs/home-dialogs.module';
21   -import {EntityViewComponent} from '@modules/home/pages/entity-view/entity-view.component';
22   -import {EntityViewTableHeaderComponent} from './entity-view-table-header.component';
23   -import {EntityViewRoutingModule} from './entity-view-routing.module';
24   -import {HomeComponentsModule} from '@modules/home/components/home-components.module';
  17 +import { NgModule } from '@angular/core';
  18 +import { CommonModule } from '@angular/common';
  19 +import { SharedModule } from '@shared/shared.module';
  20 +import { HomeDialogsModule } from '../../dialogs/home-dialogs.module';
  21 +import { EntityViewComponent } from '@modules/home/pages/entity-view/entity-view.component';
  22 +import { EntityViewTableHeaderComponent } from './entity-view-table-header.component';
  23 +import { EntityViewRoutingModule } from './entity-view-routing.module';
  24 +import { HomeComponentsModule } from '@modules/home/components/home-components.module';
25 25 import { EntityViewTabsComponent } from '@home/pages/entity-view/entity-view-tabs.component';
26 26
27 27 @NgModule({
... ...
... ... @@ -14,9 +14,9 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Injectable} from '@angular/core';
  17 +import { Injectable } from '@angular/core';
18 18
19   -import {ActivatedRouteSnapshot, Resolve, Router} from '@angular/router';
  19 +import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router';
20 20 import {
21 21 CellActionDescriptor,
22 22 checkBoxCell,
... ... @@ -26,22 +26,22 @@ import {
26 26 GroupActionDescriptor,
27 27 HeaderActionDescriptor
28 28 } from '@home/models/entity/entities-table-config.models';
29   -import {TranslateService} from '@ngx-translate/core';
30   -import {DatePipe} from '@angular/common';
31   -import {EntityType, entityTypeResources, entityTypeTranslations} from '@shared/models/entity-type.models';
32   -import {EntityAction} from '@home/models/entity/entity-component.models';
33   -import {forkJoin, Observable, of} from 'rxjs';
34   -import {select, Store} from '@ngrx/store';
35   -import {selectAuthUser} from '@core/auth/auth.selectors';
36   -import {map, mergeMap, take, tap} from 'rxjs/operators';
37   -import {AppState} from '@core/core.state';
38   -import {Authority} from '@app/shared/models/authority.enum';
39   -import {CustomerService} from '@core/http/customer.service';
40   -import {Customer} from '@app/shared/models/customer.model';
41   -import {NULL_UUID} from '@shared/models/id/has-uuid';
42   -import {BroadcastService} from '@core/services/broadcast.service';
  29 +import { TranslateService } from '@ngx-translate/core';
  30 +import { DatePipe } from '@angular/common';
  31 +import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
  32 +import { EntityAction } from '@home/models/entity/entity-component.models';
  33 +import { forkJoin, Observable, of } from 'rxjs';
  34 +import { select, Store } from '@ngrx/store';
  35 +import { selectAuthUser } from '@core/auth/auth.selectors';
  36 +import { map, mergeMap, take, tap } from 'rxjs/operators';
  37 +import { AppState } from '@core/core.state';
  38 +import { Authority } from '@app/shared/models/authority.enum';
  39 +import { CustomerService } from '@core/http/customer.service';
  40 +import { Customer } from '@app/shared/models/customer.model';
  41 +import { NULL_UUID } from '@shared/models/id/has-uuid';
  42 +import { BroadcastService } from '@core/services/broadcast.service';
43 43 import { MatDialog } from '@angular/material/dialog';
44   -import {DialogService} from '@core/services/dialog.service';
  44 +import { DialogService } from '@core/services/dialog.service';
45 45 import {
46 46 AssignToCustomerDialogComponent,
47 47 AssignToCustomerDialogData
... ... @@ -50,11 +50,11 @@ import {
50 50 AddEntitiesToCustomerDialogComponent,
51 51 AddEntitiesToCustomerDialogData
52 52 } from '../../dialogs/add-entities-to-customer-dialog.component';
53   -import {EntityView, EntityViewInfo} from '@app/shared/models/entity-view.models';
54   -import {EntityViewService} from '@core/http/entity-view.service';
55   -import {EntityViewComponent} from '@modules/home/pages/entity-view/entity-view.component';
56   -import {EntityViewTableHeaderComponent} from '@modules/home/pages/entity-view/entity-view-table-header.component';
57   -import {EntityViewId} from '@shared/models/id/entity-view-id';
  53 +import { EntityView, EntityViewInfo } from '@app/shared/models/entity-view.models';
  54 +import { EntityViewService } from '@core/http/entity-view.service';
  55 +import { EntityViewComponent } from '@modules/home/pages/entity-view/entity-view.component';
  56 +import { EntityViewTableHeaderComponent } from '@modules/home/pages/entity-view/entity-view-table-header.component';
  57 +import { EntityViewId } from '@shared/models/id/entity-view-id';
58 58 import { EntityViewTabsComponent } from '@home/pages/entity-view/entity-view-tabs.component';
59 59
60 60 @Injectable()
... ... @@ -146,7 +146,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig
146 146
147 147 configureColumns(entityViewScope: string): Array<EntityTableColumn<EntityViewInfo>> {
148 148 const columns: Array<EntityTableColumn<EntityViewInfo>> = [
149   - new DateEntityTableColumn<EntityViewInfo>('createdTime', 'entity-view.created-time', this.datePipe, '150px'),
  149 + new DateEntityTableColumn<EntityViewInfo>('createdTime', 'common.created-time', this.datePipe, '150px'),
150 150 new EntityTableColumn<EntityViewInfo>('name', 'entity-view.name', '33%'),
151 151 new EntityTableColumn<EntityViewInfo>('type', 'entity-view.entity-view-type', '33%'),
152 152 ];
... ...
... ... @@ -19,7 +19,7 @@
19 19 <mat-toolbar fxLayout="row" color="primary">
20 20 <h2 translate>profile.change-password</h2>
21 21 <span fxFlex></span>
22   - <button mat-button mat-icon-button
  22 + <button mat-icon-button
23 23 [mat-dialog-close]="false"
24 24 type="button">
25 25 <mat-icon class="material-icons">close</mat-icon>
... ... @@ -45,15 +45,13 @@
45 45 <mat-icon class="material-icons" matPrefix>lock</mat-icon>
46 46 </mat-form-field>
47 47 </div>
48   - <div mat-dialog-actions fxLayout="row">
49   - <span fxFlex></span>
50   - <button mat-button mat-raised-button color="primary"
  48 + <div mat-dialog-actions fxLayout="row" fxLayoutAlign="end center">
  49 + <button mat-raised-button color="primary"
51 50 type="submit"
52 51 [disabled]="(isLoading$ | async) || changePasswordForm.invalid">
53 52 {{ 'profile.change-password' | translate }}
54 53 </button>
55 54 <button mat-button color="primary"
56   - style="margin-right: 20px;"
57 55 type="button"
58 56 [disabled]="(isLoading$ | async)"
59 57 [mat-dialog-close]="false" cdkFocusInitial>
... ...
... ... @@ -16,10 +16,9 @@
16 16
17 17 import { Component, OnInit } from '@angular/core';
18 18 import { MatDialogRef } from '@angular/material/dialog';
19   -import { PageComponent } from '@shared/components/page.component';
20 19 import { Store } from '@ngrx/store';
21 20 import { AppState } from '@core/core.state';
22   -import { FormBuilder, FormGroup, Validators } from '@angular/forms';
  21 +import { FormBuilder, FormGroup } from '@angular/forms';
23 22 import { ActionNotificationShow } from '@core/notification/notification.actions';
24 23 import { TranslateService } from '@ngx-translate/core';
25 24 import { AuthService } from '@core/auth/auth.service';
... ...
... ... @@ -14,18 +14,18 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Injectable, NgModule} from '@angular/core';
18   -import {Resolve, RouterModule, Routes} from '@angular/router';
  17 +import { Injectable, NgModule } from '@angular/core';
  18 +import { Resolve, RouterModule, Routes } from '@angular/router';
19 19
20   -import {ProfileComponent} from './profile.component';
21   -import {ConfirmOnExitGuard} from '@core/guards/confirm-on-exit.guard';
22   -import {Authority} from '@shared/models/authority.enum';
23   -import {User} from '@shared/models/user.model';
24   -import {Store} from '@ngrx/store';
25   -import {AppState} from '@core/core.state';
26   -import {UserService} from '@core/http/user.service';
27   -import {getCurrentAuthUser} from '@core/auth/auth.selectors';
28   -import {Observable} from 'rxjs';
  20 +import { ProfileComponent } from './profile.component';
  21 +import { ConfirmOnExitGuard } from '@core/guards/confirm-on-exit.guard';
  22 +import { Authority } from '@shared/models/authority.enum';
  23 +import { User } from '@shared/models/user.model';
  24 +import { Store } from '@ngrx/store';
  25 +import { AppState } from '@core/core.state';
  26 +import { UserService } from '@core/http/user.service';
  27 +import { getCurrentAuthUser } from '@core/auth/auth.selectors';
  28 +import { Observable } from 'rxjs';
29 29
30 30 @Injectable()
31 31 export class UserProfileResolver implements Resolve<User> {
... ...
... ... @@ -18,7 +18,7 @@
18 18 <div>
19 19 <mat-card class="profile-card">
20 20 <mat-card-title>
21   - <div fxLayout="row">
  21 + <div fxLayout="row" fxLayout.xs="column" fxLayoutGap.xs="8px">
22 22 <div fxFlex fxLayout="column">
23 23 <span class="mat-headline" translate>profile.profile</span>
24 24 <span class="profile-email" style='opacity: 0.7;'>{{ profile ? profile.get('email').value : '' }}</span>
... ...
... ... @@ -14,24 +14,24 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Component, OnInit} from '@angular/core';
18   -import {UserService} from '@core/http/user.service';
19   -import {User} from '@shared/models/user.model';
20   -import {Authority} from '@shared/models/authority.enum';
21   -import {PageComponent} from '@shared/components/page.component';
22   -import {Store} from '@ngrx/store';
23   -import {AppState} from '@core/core.state';
24   -import {FormBuilder, FormGroup, Validators} from '@angular/forms';
25   -import {HasConfirmForm} from '@core/guards/confirm-on-exit.guard';
26   -import {ActionAuthUpdateUserDetails} from '@core/auth/auth.actions';
27   -import {environment as env} from '@env/environment';
28   -import {TranslateService} from '@ngx-translate/core';
29   -import {ActionSettingsChangeLanguage} from '@core/settings/settings.actions';
30   -import {ChangePasswordDialogComponent} from '@modules/home/pages/profile/change-password-dialog.component';
  17 +import { Component, OnInit } from '@angular/core';
  18 +import { UserService } from '@core/http/user.service';
  19 +import { User } from '@shared/models/user.model';
  20 +import { Authority } from '@shared/models/authority.enum';
  21 +import { PageComponent } from '@shared/components/page.component';
  22 +import { Store } from '@ngrx/store';
  23 +import { AppState } from '@core/core.state';
  24 +import { FormBuilder, FormGroup, Validators } from '@angular/forms';
  25 +import { HasConfirmForm } from '@core/guards/confirm-on-exit.guard';
  26 +import { ActionAuthUpdateUserDetails } from '@core/auth/auth.actions';
  27 +import { environment as env } from '@env/environment';
  28 +import { TranslateService } from '@ngx-translate/core';
  29 +import { ActionSettingsChangeLanguage } from '@core/settings/settings.actions';
  30 +import { ChangePasswordDialogComponent } from '@modules/home/pages/profile/change-password-dialog.component';
31 31 import { MatDialog } from '@angular/material/dialog';
32   -import {DialogService} from '@core/services/dialog.service';
33   -import {AuthService} from '@core/auth/auth.service';
34   -import {ActivatedRoute} from '@angular/router';
  32 +import { DialogService } from '@core/services/dialog.service';
  33 +import { AuthService } from '@core/auth/auth.service';
  34 +import { ActivatedRoute } from '@angular/router';
35 35
36 36 @Component({
37 37 selector: 'tb-profile',
... ...
... ... @@ -14,17 +14,14 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Component} from '@angular/core';
18   -import {Store} from '@ngrx/store';
19   -import {AppState} from '@core/core.state';
20   -import {EntityComponent} from '../../components/entity/entity.component';
21   -import {FormBuilder, FormGroup, Validators} from '@angular/forms';
22   -import {EntityType} from '@shared/models/entity-type.models';
23   -import {NULL_UUID} from '@shared/models/id/has-uuid';
24   -import {ActionNotificationShow} from '@core/notification/notification.actions';
25   -import {TranslateService} from '@ngx-translate/core';
26   -import {AssetInfo} from '@app/shared/models/asset.models';
27   -import {RuleChain} from '@shared/models/rule-chain.models';
  17 +import { Component } from '@angular/core';
  18 +import { Store } from '@ngrx/store';
  19 +import { AppState } from '@core/core.state';
  20 +import { EntityComponent } from '../../components/entity/entity.component';
  21 +import { FormBuilder, FormGroup, Validators } from '@angular/forms';
  22 +import { ActionNotificationShow } from '@core/notification/notification.actions';
  23 +import { TranslateService } from '@ngx-translate/core';
  24 +import { RuleChain } from '@shared/models/rule-chain.models';
28 25
29 26 @Component({
30 27 selector: 'tb-rulechain',
... ...
... ... @@ -14,14 +14,18 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {NgModule} from '@angular/core';
18   -import {CommonModule} from '@angular/common';
19   -import {SharedModule} from '@shared/shared.module';
20   -import {RuleChainComponent} from '@modules/home/pages/rulechain/rulechain.component';
21   -import {RuleChainRoutingModule} from '@modules/home/pages/rulechain/rulechain-routing.module';
22   -import {HomeComponentsModule} from '@modules/home/components/home-components.module';
  17 +import { NgModule } from '@angular/core';
  18 +import { CommonModule } from '@angular/common';
  19 +import { SharedModule } from '@shared/shared.module';
  20 +import { RuleChainComponent } from '@modules/home/pages/rulechain/rulechain.component';
  21 +import { RuleChainRoutingModule } from '@modules/home/pages/rulechain/rulechain-routing.module';
  22 +import { HomeComponentsModule } from '@modules/home/components/home-components.module';
23 23 import { RuleChainTabsComponent } from '@home/pages/rulechain/rulechain-tabs.component';
24   -import { RuleChainPageComponent, AddRuleNodeLinkDialogComponent, AddRuleNodeDialogComponent } from './rulechain-page.component';
  24 +import {
  25 + AddRuleNodeDialogComponent,
  26 + AddRuleNodeLinkDialogComponent,
  27 + RuleChainPageComponent
  28 +} from './rulechain-page.component';
25 29 import { RuleNodeComponent } from '@home/pages/rulechain/rulenode.component';
26 30 import { FC_NODE_COMPONENT_CONFIG } from 'ngx-flowchart/dist/ngx-flowchart';
27 31 import { RuleNodeDetailsComponent } from './rule-node-details.component';
... ...
... ... @@ -14,23 +14,23 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Injectable} from '@angular/core';
  17 +import { Injectable } from '@angular/core';
18 18
19   -import {Resolve, Router} from '@angular/router';
  19 +import { Resolve, Router } from '@angular/router';
20 20 import {
21 21 checkBoxCell,
22 22 DateEntityTableColumn,
23 23 EntityTableColumn,
24 24 EntityTableConfig
25 25 } from '@home/models/entity/entities-table-config.models';
26   -import {TranslateService} from '@ngx-translate/core';
27   -import {DatePipe} from '@angular/common';
28   -import {EntityType, entityTypeResources, entityTypeTranslations} from '@shared/models/entity-type.models';
29   -import {EntityAction} from '@home/models/entity/entity-component.models';
30   -import {RuleChain} from '@shared/models/rule-chain.models';
31   -import {RuleChainService} from '@core/http/rule-chain.service';
32   -import {RuleChainComponent} from '@modules/home/pages/rulechain/rulechain.component';
33   -import {DialogService} from '@core/services/dialog.service';
  26 +import { TranslateService } from '@ngx-translate/core';
  27 +import { DatePipe } from '@angular/common';
  28 +import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
  29 +import { EntityAction } from '@home/models/entity/entity-component.models';
  30 +import { RuleChain } from '@shared/models/rule-chain.models';
  31 +import { RuleChainService } from '@core/http/rule-chain.service';
  32 +import { RuleChainComponent } from '@modules/home/pages/rulechain/rulechain.component';
  33 +import { DialogService } from '@core/services/dialog.service';
34 34 import { RuleChainTabsComponent } from '@home/pages/rulechain/rulechain-tabs.component';
35 35 import { ImportExportService } from '@home/components/import-export/import-export.service';
36 36 import { ItemBufferService } from '@core/services/item-buffer.service';
... ... @@ -55,7 +55,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
55 55 this.config.entityResources = entityTypeResources.get(EntityType.RULE_CHAIN);
56 56
57 57 this.config.columns.push(
58   - new DateEntityTableColumn<RuleChain>('createdTime', 'rulechain.created-time', this.datePipe, '150px'),
  58 + new DateEntityTableColumn<RuleChain>('createdTime', 'common.created-time', this.datePipe, '150px'),
59 59 new EntityTableColumn<RuleChain>('name', 'rulechain.name', '100%'),
60 60 new EntityTableColumn<RuleChain>('root', 'rulechain.root', '60px',
61 61 entity => {
... ...
... ... @@ -14,21 +14,13 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import { Injectable, NgModule } from '@angular/core';
18   -import { Resolve, RouterModule, Routes } from '@angular/router';
  17 +import { NgModule } from '@angular/core';
  18 +import { RouterModule, Routes } from '@angular/router';
19 19
20 20 import { EntitiesTableComponent } from '../../components/entity/entities-table.component';
21 21 import { Authority } from '@shared/models/authority.enum';
22 22 import { TenantsTableConfigResolver } from '@modules/home/pages/tenant/tenants-table-config.resolver';
23   -import { ProfileComponent } from '@modules/home/pages/profile/profile.component';
24   -import { ConfirmOnExitGuard } from '@core/guards/confirm-on-exit.guard';
25   -import { Customer } from '@shared/models/customer.model';
26   -import { Store } from '@ngrx/store';
27   -import { AppState } from '@core/core.state';
28   -import { forkJoin, Observable, throwError } from 'rxjs';
29   -import { getCurrentAuthUser } from '@core/auth/auth.selectors';
30   -import { catchError, finalize, map, tap } from 'rxjs/operators';
31   -import {UsersTableConfigResolver} from '../user/users-table-config.resolver';
  23 +import { UsersTableConfigResolver } from '../user/users-table-config.resolver';
32 24
33 25 const routes: Routes = [
34 26 {
... ...
... ... @@ -54,7 +54,7 @@ export class TenantsTableConfigResolver implements Resolve<EntityTableConfig<Ten
54 54 this.config.entityResources = entityTypeResources.get(EntityType.TENANT);
55 55
56 56 this.config.columns.push(
57   - new DateEntityTableColumn<Tenant>('createdTime', 'tenant.created-time', this.datePipe, '150px'),
  57 + new DateEntityTableColumn<Tenant>('createdTime', 'common.created-time', this.datePipe, '150px'),
58 58 new EntityTableColumn<Tenant>('title', 'tenant.title', '25%'),
59 59 new EntityTableColumn<Tenant>('email', 'contact.email', '25%'),
60 60 new EntityTableColumn<Tenant>('country', 'contact.country', '25%'),
... ...
... ... @@ -15,7 +15,7 @@
15 15 ///
16 16
17 17 import { NgModule } from '@angular/core';
18   -import { RouterModule, Routes } from '@angular/router';
  18 +import { RouterModule } from '@angular/router';
19 19 import { UsersTableConfigResolver } from '@modules/home/pages/user/users-table-config.resolver';
20 20
21 21 @NgModule({
... ...
... ... @@ -24,25 +24,18 @@ import {
24 24 } from '@home/models/entity/entities-table-config.models';
25 25 import { TranslateService } from '@ngx-translate/core';
26 26 import { DatePipe } from '@angular/common';
27   -import {
28   - EntityType,
29   - entityTypeResources,
30   - entityTypeTranslations
31   -} from '@shared/models/entity-type.models';
  27 +import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
32 28 import { User } from '@shared/models/user.model';
33 29 import { UserService } from '@core/http/user.service';
34 30 import { UserComponent } from '@modules/home/pages/user/user.component';
35 31 import { CustomerService } from '@core/http/customer.service';
36 32 import { map, mergeMap, take, tap } from 'rxjs/operators';
37   -import { forkJoin, noop, Observable, of } from 'rxjs';
  33 +import { Observable } from 'rxjs';
38 34 import { Authority } from '@shared/models/authority.enum';
39 35 import { CustomerId } from '@shared/models/id/customer-id';
40 36 import { MatDialog } from '@angular/material/dialog';
41 37 import { EntityAction } from '@home/models/entity/entity-component.models';
42   -import {
43   - AddUserDialogComponent,
44   - AddUserDialogData
45   -} from '@modules/home/pages/user/add-user-dialog.component';
  38 +import { AddUserDialogComponent, AddUserDialogData } from '@modules/home/pages/user/add-user-dialog.component';
46 39 import { AuthState } from '@core/auth/auth.models';
47 40 import { select, Store } from '@ngrx/store';
48 41 import { AppState } from '@core/core.state';
... ... @@ -54,9 +47,8 @@ import {
54 47 } from '@modules/home/pages/user/activation-link-dialog.component';
55 48 import { ActionNotificationShow } from '@core/notification/notification.actions';
56 49 import { NULL_UUID } from '@shared/models/id/has-uuid';
57   -import { Customer } from '@shared/models/customer.model';
58   -import {TenantService} from '@app/core/http/tenant.service';
59   -import {TenantId} from '@app/shared/models/id/tenant-id';
  50 +import { TenantService } from '@app/core/http/tenant.service';
  51 +import { TenantId } from '@app/shared/models/id/tenant-id';
60 52 import { UserTabsComponent } from '@home/pages/user/user-tabs.component';
61 53
62 54 export interface UsersTableRouteData {
... ... @@ -89,7 +81,7 @@ export class UsersTableConfigResolver implements Resolve<EntityTableConfig<User>
89 81 this.config.entityResources = entityTypeResources.get(EntityType.USER);
90 82
91 83 this.config.columns.push(
92   - new DateEntityTableColumn<User>('createdTime', 'user.created-time', this.datePipe, '150px'),
  84 + new DateEntityTableColumn<User>('createdTime', 'common.created-time', this.datePipe, '150px'),
93 85 new EntityTableColumn<User>('firstName', 'user.first-name', '33%'),
94 86 new EntityTableColumn<User>('lastName', 'user.last-name', '33%'),
95 87 new EntityTableColumn<User>('email', 'user.email', '33%')
... ...
... ... @@ -14,28 +14,28 @@
14 14 /// limitations under the License.
15 15 ///
16 16
17   -import {Injectable} from '@angular/core';
  17 +import { Injectable } from '@angular/core';
18 18
19   -import {Resolve, Router} from '@angular/router';
  19 +import { Resolve, Router } from '@angular/router';
20 20 import {
21 21 checkBoxCell,
22 22 DateEntityTableColumn,
23 23 EntityTableColumn,
24 24 EntityTableConfig
25 25 } from '@home/models/entity/entities-table-config.models';
26   -import {TranslateService} from '@ngx-translate/core';
27   -import {DatePipe} from '@angular/common';
28   -import {EntityType, entityTypeResources, entityTypeTranslations} from '@shared/models/entity-type.models';
29   -import {EntityAction} from '@home/models/entity/entity-component.models';
30   -import {WidgetsBundle} from '@shared/models/widgets-bundle.model';
31   -import {WidgetService} from '@app/core/http/widget.service';
32   -import {WidgetsBundleComponent} from '@modules/home/pages/widget/widgets-bundle.component';
33   -import {NULL_UUID} from '@shared/models/id/has-uuid';
34   -import {Store} from '@ngrx/store';
35   -import {AppState} from '@core/core.state';
36   -import {getCurrentAuthUser} from '@app/core/auth/auth.selectors';
37   -import {Authority} from '@shared/models/authority.enum';
38   -import {DialogService} from '@core/services/dialog.service';
  26 +import { TranslateService } from '@ngx-translate/core';
  27 +import { DatePipe } from '@angular/common';
  28 +import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
  29 +import { EntityAction } from '@home/models/entity/entity-component.models';
  30 +import { WidgetsBundle } from '@shared/models/widgets-bundle.model';
  31 +import { WidgetService } from '@app/core/http/widget.service';
  32 +import { WidgetsBundleComponent } from '@modules/home/pages/widget/widgets-bundle.component';
  33 +import { NULL_UUID } from '@shared/models/id/has-uuid';
  34 +import { Store } from '@ngrx/store';
  35 +import { AppState } from '@core/core.state';
  36 +import { getCurrentAuthUser } from '@app/core/auth/auth.selectors';
  37 +import { Authority } from '@shared/models/authority.enum';
  38 +import { DialogService } from '@core/services/dialog.service';
39 39 import { ImportExportService } from '@home/components/import-export/import-export.service';
40 40
41 41 @Injectable()
... ... @@ -57,7 +57,7 @@ export class WidgetsBundlesTableConfigResolver implements Resolve<EntityTableCon
57 57 this.config.entityResources = entityTypeResources.get(EntityType.WIDGETS_BUNDLE);
58 58
59 59 this.config.columns.push(
60   - new DateEntityTableColumn<WidgetsBundle>('createdTime', 'widgets-bundle.created-time', this.datePipe, '150px'),
  60 + new DateEntityTableColumn<WidgetsBundle>('createdTime', 'common.created-time', this.datePipe, '150px'),
61 61 new EntityTableColumn<WidgetsBundle>('title', 'widgets-bundle.title', '100%'),
62 62 new EntityTableColumn<WidgetsBundle>('tenantId', 'widgets-bundle.system', '60px',
63 63 entity => {
... ...
... ... @@ -19,7 +19,7 @@
19 19 <h1 fxFlex fxHide.gt-sm *ngIf="lastBreadcrumb$ | async; let breadcrumb">
20 20 {{ breadcrumb.ignoreTranslate ? (breadcrumb.labelFunction ? breadcrumb.labelFunction() : breadcrumb.label) : (breadcrumb.label | translate) }}
21 21 </h1>
22   - <span fxHide.xs fxHide.sm *ngFor="let breadcrumb of breadcrumbs$ | async; last as isLast;" [ngSwitch]="isLast">
  22 + <span fxHide.lt-md fxLayout="row" *ngFor="let breadcrumb of breadcrumbs$ | async; last as isLast;" [ngSwitch]="isLast">
23 23 <a *ngSwitchCase="false" [routerLink]="breadcrumb.link" [queryParams]="breadcrumb.queryParams">
24 24 <mat-icon *ngIf="breadcrumb.isMdiIcon" [svgIcon]="breadcrumb.icon">
25 25 </mat-icon>
... ...
... ... @@ -14,28 +14,24 @@
14 14 * limitations under the License.
15 15 */
16 16 :host {
17   - display: flex;
18   - flex-direction: row;
19   - align-items: center;
20 17 min-width: 0;
21   - flex: 1;
22 18
23 19 .tb-breadcrumb {
24   - font-size: 18px !important;
25   - font-weight: 400 !important;
  20 + font-size: 18px;
  21 + font-weight: 400;
26 22 overflow: hidden;
27 23
28 24 h1,
29 25 a,
30   - span {
  26 + span:not(.divider) {
31 27 overflow: hidden;
32 28 text-overflow: ellipsis;
33 29 white-space: nowrap;
34 30 }
35 31
36 32 h1 {
37   - font-size: 24px !important;
38   - font-weight: 400 !important;
  33 + font-size: 24px;
  34 + font-weight: 400;
39 35 }
40 36
41 37 a {
... ... @@ -44,6 +40,7 @@
44 40 transition: opacity .35s;
45 41 color: inherit;
46 42 text-decoration: none;
  43 + outline: none;
47 44 }
48 45
49 46 a:hover,
... ... @@ -54,7 +51,7 @@
54 51 }
55 52
56 53 .divider {
57   - padding: 0 30px;
  54 + padding: 0 20px;
58 55 }
59 56 }
60 57 }
... ...
... ... @@ -16,7 +16,7 @@
16 16
17 17 -->
18 18 <section fxLayout="row">
19   - <div fxHide.xs fxHide.sm fxHide.md *ngIf="displayUserInfo" class="tb-user-info" fxLayout="row">
  19 + <div fxHide.lt-lg *ngIf="displayUserInfo" class="tb-user-info" fxLayout="row">
20 20 <mat-icon class="material-icons tb-mini-avatar">account_circle</mat-icon>
21 21 <div fxLayout="column" fxLayoutAlign="center">
22 22 <span *ngIf="userDisplayName$ | async; let userDisplayName" class="tb-user-display-name">{{ userDisplayName }}</span>
... ...
... ... @@ -18,7 +18,6 @@
18 18 line-height: 1.5;
19 19
20 20 span {
21   - text-align: left;
22 21 text-transform: none;
23 22 }
24 23
... ... @@ -42,6 +41,7 @@
42 41 height: 36px;
43 42 margin: auto 8px;
44 43 font-size: 36px;
  44 + cursor: default;
45 45 }
46 46 }
47 47
... ...
... ... @@ -336,7 +336,8 @@
336 336 "password": "Heslo",
337 337 "enter-username": "Zadejte uživatelské jméno",
338 338 "enter-password": "Zadejte heslo",
339   - "enter-search": "Zadejte hledaný řetězec"
  339 + "enter-search": "Zadejte hledaný řetězec",
  340 + "created-time": "Datum vytvoření"
340 341 },
341 342 "content-type": {
342 343 "json": "JSON",
... ...
... ... @@ -360,7 +360,8 @@
360 360 "password": "Passwort",
361 361 "enter-username": "Benutzername eingeben",
362 362 "enter-password": "Passwort eingeben",
363   - "enter-search": "Suche eingeben"
  363 + "enter-search": "Suche eingeben",
  364 + "created-time": "Erstellungszeit"
364 365 },
365 366 "content-type": {
366 367 "json": "Json",
... ...
... ... @@ -378,7 +378,8 @@
378 378 "password": "Κωδικός πρόσβασης",
379 379 "enter-username": "Εισάγετε Όνομα χρήστη",
380 380 "enter-password": "Εισάγετε Κωδικό πρόσβασης",
381   - "enter-search": "Αναζήτηση"
  381 + "enter-search": "Αναζήτηση",
  382 + "created-time": "Δημιουργήθηκε"
382 383 },
383 384 "converter": {
384 385 "converter": "Μετατροπέας δεδομένων",
... ...
... ... @@ -380,7 +380,8 @@
380 380 "password": "Password",
381 381 "enter-username": "Enter username",
382 382 "enter-password": "Enter password",
383   - "enter-search": "Enter search"
  383 + "enter-search": "Enter search",
  384 + "created-time": "Created time"
384 385 },
385 386 "content-type": {
386 387 "json": "Json",
... ... @@ -421,7 +422,6 @@
421 422 "manage-assets": "Manage assets",
422 423 "manage-devices": "Manage devices",
423 424 "manage-dashboards": "Manage dashboards",
424   - "created-time": "Created time",
425 425 "title": "Title",
426 426 "title-required": "Title is required.",
427 427 "description": "Description",
... ... @@ -466,7 +466,6 @@
466 466 "no-dashboards-text": "No dashboards found",
467 467 "no-widgets": "No widgets configured",
468 468 "add-widget": "Add new widget",
469   - "created-time": "Created time",
470 469 "title": "Title",
471 470 "select-widget-title": "Select widget",
472 471 "select-widget-subtitle": "List of available widget types",
... ... @@ -709,7 +708,6 @@
709 708 "no-device-types-matching": "No device types matching '{{entitySubtype}}' were found.",
710 709 "device-type-list-empty": "No device types selected.",
711 710 "device-types": "Device types",
712   - "created-time": "Created time",
713 711 "name": "Name",
714 712 "name-required": "Name is required.",
715 713 "description": "Description",
... ... @@ -1416,7 +1414,6 @@
1416 1414 "rulechains": "Rule chains",
1417 1415 "root": "Root",
1418 1416 "delete": "Delete rule chain",
1419   - "created-time": "Created time",
1420 1417 "name": "Name",
1421 1418 "name-required": "Name is required.",
1422 1419 "description": "Description",
... ... @@ -1532,7 +1529,6 @@
1532 1529 "delete-tenants-title": "Are you sure you want to delete { count, plural, 1 {1 tenant} other {# tenants} }?",
1533 1530 "delete-tenants-action-title": "Delete { count, plural, 1 {1 tenant} other {# tenants} }",
1534 1531 "delete-tenants-text": "Be careful, after the confirmation all selected tenants will be removed and all related data will become unrecoverable.",
1535   - "created-time": "Created time",
1536 1532 "title": "Title",
1537 1533 "title-required": "Title is required.",
1538 1534 "description": "Description",
... ... @@ -1593,7 +1589,6 @@
1593 1589 "delete-users-text": "Be careful, after the confirmation all selected users will be removed and all related data will become unrecoverable.",
1594 1590 "activation-email-sent-message": "Activation email was successfully sent!",
1595 1591 "resend-activation": "Resend activation",
1596   - "created-time": "Created time",
1597 1592 "email": "Email",
1598 1593 "email-required": "Email is required.",
1599 1594 "invalid-email-format": "Invalid email format.",
... ... @@ -1715,7 +1710,6 @@
1715 1710 "widgets-bundles": "Widgets Bundles",
1716 1711 "add": "Add Widgets Bundle",
1717 1712 "delete": "Delete widgets bundle",
1718   - "created-time": "Created time",
1719 1713 "title": "Title",
1720 1714 "title-required": "Title is required.",
1721 1715 "add-widgets-bundle-text": "Add new widgets bundle",
... ...
... ... @@ -364,7 +364,8 @@
364 364 "password": "Contraseña",
365 365 "enter-username": "Introduzca nombre de usuario",
366 366 "enter-password": "Introduzca contraseña",
367   - "enter-search": "Introduzca búsqueda"
  367 + "enter-search": "Introduzca búsqueda",
  368 + "created-time": "Tiempo de creación"
368 369 },
369 370 "content-type": {
370 371 "json": "Json",
... ...
... ... @@ -48,7 +48,7 @@
48 48 "paste-reference": "رونوشت مرجع",
49 49 "import": "وارد کردن",
50 50 "export": "صدور",
51   - "share-via": "{{provider}} اشتراک گذاري از طريق"
  51 + "share-via": "{{provider}} اشتراک گذاري از طريق"
52 52 },
53 53 "aggregation": {
54 54 "aggregation": "تجميع",
... ... @@ -336,7 +336,8 @@
336 336 "password": "رمز عبور",
337 337 "enter-username": "وارد کردن نام کاربري",
338 338 "enter-password": "وارد کردن رمز عبور",
339   - "enter-search": "وارد کردن جستجو"
  339 + "enter-search": "وارد کردن جستجو",
  340 + "created-time": "زمان ايجاد"
340 341 },
341 342 "content-type": {
342 343 "json": "JSON",
... ...
... ... @@ -347,7 +347,8 @@
347 347 "enter-search": "Entrez la recherche",
348 348 "enter-username": "Entrez le nom d'utilisateur",
349 349 "password": "Mot de passe",
350   - "username": "Nom d'utilisateur"
  350 + "username": "Nom d'utilisateur",
  351 + "created-time": "Heure de création"
351 352 },
352 353 "confirm-on-exit": {
353 354 "html-message": "Vous avez des modifications non enregistrées. <br/> Êtes-vous sûr de vouloir quitter cette page?",
... ...
... ... @@ -361,7 +361,8 @@
361 361 "password": "Password",
362 362 "enter-username": "Inserisci nome utente",
363 363 "enter-password": "Inserisci password",
364   - "enter-search": "Cerca ..."
  364 + "enter-search": "Cerca ...",
  365 + "created-time": "Orario di creazione"
365 366 },
366 367 "content-type": {
367 368 "json": "Json",
... ...
... ... @@ -326,8 +326,9 @@
326 326 "password": "パスワード",
327 327 "enter-username": "ユーザーネームを入力してください",
328 328 "enter-password": "パスワードを入力する",
329   - "enter-search": "検索を入力"
330   - },
  329 + "enter-search": "検索を入力",
  330 + "created-time": "作成時刻"
  331 + },
331 332 "content-type": {
332 333 "json": "Json",
333 334 "text": "テキスト",
... ...
... ... @@ -337,7 +337,8 @@
337 337 "password": "Parole",
338 338 "enter-username": "Ievadiet lietotājvārdu",
339 339 "enter-password": "Ievadiet paroli",
340   - "enter-search": "Ievadiet meklēt"
  340 + "enter-search": "Ievadiet meklēt",
  341 + "created-time": "Izveidošanas laiks"
341 342 },
342 343 "content-type": {
343 344 "json": "Json",
... ...
... ... @@ -369,7 +369,8 @@
369 369 "password": "Parola",
370 370 "enter-username": "Introdu nume utilizator",
371 371 "enter-password": "Introdu parola",
372   - "enter-search": "Definește căutarea"
  372 + "enter-search": "Definește căutarea",
  373 + "created-time": "Data Creării"
373 374 },
374 375 "content-type": {
375 376 "json": "Json",
... ...
... ... @@ -371,7 +371,8 @@
371 371 "password": "Пароль",
372 372 "enter-username": "Введите имя пользователя",
373 373 "enter-password": "Введите пароль",
374   - "enter-search": "Введите условие поиска"
  374 + "enter-search": "Введите условие поиска",
  375 + "created-time": "Время создания"
375 376 },
376 377 "content-type": {
377 378 "json": "Json",
... ...
... ... @@ -326,7 +326,8 @@
326 326 "password": "Parola",
327 327 "enter-username": "Kullanıcı adı gir",
328 328 "enter-password": "Parola gir",
329   - "enter-search": "Arama gir"
  329 + "enter-search": "Arama gir",
  330 + "created-time": "Oluşma zamanı"
330 331 },
331 332 "content-type": {
332 333 "json": "Json",
... ...
... ... @@ -405,7 +405,8 @@
405 405 "password": "Пароль",
406 406 "enter-username": "Введіть ім'я користувача",
407 407 "enter-password": "Введіть пароль",
408   - "enter-search": "Введіть пошук"
  408 + "enter-search": "Введіть пошук",
  409 + "created-time": "Час створення"
409 410 },
410 411 "converter": {
411 412 "converter": "Перетворювач даних",
... ...
... ... @@ -326,7 +326,8 @@
326 326 "password": "密码",
327 327 "enter-username": "输入用户名",
328 328 "enter-password": "输入密码",
329   - "enter-search": "输入检索条件"
  329 + "enter-search": "输入检索条件",
  330 + "created-time": "创建时间"
330 331 },
331 332 "content-type": {
332 333 "json": "Json",
... ...
... ... @@ -326,7 +326,8 @@
326 326 "password": "密碼",
327 327 "enter-username": "輸入用戶名",
328 328 "enter-password": "輸入密碼",
329   - "enter-search": "輸入檢索條件"
  329 + "enter-search": "輸入檢索條件",
  330 + "created-time": "建立時間"
330 331 },
331 332 "content-type": {
332 333 "json": "Json",
... ...
... ... @@ -477,7 +477,6 @@ mat-label {
477 477
478 478 .mat-form-field{
479 479 .mat-icon {
480   - vertical-align: bottom;
481 480 margin-right: 4px;
482 481 margin-left: 4px;
483 482 }
... ... @@ -486,7 +485,6 @@ mat-label {
486 485 button.mat-menu-item {
487 486 overflow: hidden;
488 487 fill: #737373;
489   - display: block;
490 488 .tb-alt-text {
491 489 float: right;
492 490 }
... ... @@ -618,7 +616,7 @@ mat-label {
618 616 display: table-cell;
619 617 box-sizing: content-box;
620 618 line-break: unset;
621   - width: 0px;
  619 + width: 0;
622 620 overflow: hidden;
623 621 vertical-align: middle;
624 622 border-width: 0;
... ... @@ -626,6 +624,7 @@ mat-label {
626 624 border-bottom-color: rgba(0, 0, 0, 0.12);
627 625 border-style: solid;
628 626 text-overflow: ellipsis;
  627 + touch-action: auto !important;
629 628 &:last-child {
630 629 padding: 0 12px 0 0;
631 630 }
... ... @@ -645,6 +644,7 @@ mat-label {
645 644 .mat-header-cell {
646 645 white-space: nowrap;
647 646 button.mat-sort-header-button {
  647 + display: block;
648 648 text-overflow: ellipsis;
649 649 overflow: hidden;
650 650 white-space: nowrap;
... ... @@ -694,7 +694,7 @@ mat-label {
694 694 }
695 695
696 696 .mat-icon {
697   - vertical-align: middle;
  697 + vertical-align: bottom;
698 698 box-sizing: content-box;
699 699 &.tb-mat-16 {
700 700 @include tb-mat-icon-size(16);
... ...