Amendments due to backend changes, added ability to search users by name and email, added setting to disable reassignment of alarm to alarm widget
This commit is contained in:
		
							parent
							
								
									7f642f5415
								
							
						
					
					
						commit
						80ec4d85e2
					
				@ -16,7 +16,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { Injectable } from '@angular/core';
 | 
					import { Injectable } from '@angular/core';
 | 
				
			||||||
import { defaultHttpOptionsFromConfig, RequestConfig } from './http-utils';
 | 
					import { defaultHttpOptionsFromConfig, RequestConfig } from './http-utils';
 | 
				
			||||||
import { User } from '@shared/models/user.model';
 | 
					import { User, UserEmailInfo } from '@shared/models/user.model';
 | 
				
			||||||
import { Observable } from 'rxjs';
 | 
					import { Observable } from 'rxjs';
 | 
				
			||||||
import { HttpClient, HttpParams } from '@angular/common/http';
 | 
					import { HttpClient, HttpParams } from '@angular/common/http';
 | 
				
			||||||
import { PageLink } from '@shared/models/page/page-link';
 | 
					import { PageLink } from '@shared/models/page/page-link';
 | 
				
			||||||
@ -84,4 +84,8 @@ export class UserService {
 | 
				
			|||||||
    return this.http.post<User>(url, null, defaultHttpOptionsFromConfig(config));
 | 
					    return this.http.post<User>(url, null, defaultHttpOptionsFromConfig(config));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public findUsersByQuery(pageLink: PageLink, config?: RequestConfig) : Observable<PageData<UserEmailInfo>> {
 | 
				
			||||||
 | 
					    return this.http.get<PageData<UserEmailInfo>>(`/api/users/info${pageLink.toQuery()}`, defaultHttpOptionsFromConfig(config));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -36,9 +36,10 @@
 | 
				
			|||||||
      <span class="user-avatar" [innerHTML]="getUserInitials(user)"
 | 
					      <span class="user-avatar" [innerHTML]="getUserInitials(user)"
 | 
				
			||||||
            [style.background-color]="getAvatarBgColor(user)">
 | 
					            [style.background-color]="getAvatarBgColor(user)">
 | 
				
			||||||
      </span>
 | 
					      </span>
 | 
				
			||||||
      <div fxLayout="column" fxLayoutGap="2px">
 | 
					      <div class="user-display-name" fxLayout="column" fxLayoutGap="2px">
 | 
				
			||||||
        <span class="user-email" [innerHTML]="user.email | highlight:searchText"></span>
 | 
					        <span *ngIf="user.firstName || user.lastName"
 | 
				
			||||||
        <span class="user-name" *ngIf="user.firstName || user.lastName" [innerHTML]="getFullName(user)"></span>
 | 
					              [innerHTML]="getFullName(user) | highlight:searchText"></span>
 | 
				
			||||||
 | 
					        <span [innerHTML]="user.email | highlight:searchText"></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </mat-option>
 | 
					    </mat-option>
 | 
				
			||||||
    <mat-option *ngIf="!(filteredUsers | async)?.length" [value]="null">
 | 
					    <mat-option *ngIf="!(filteredUsers | async)?.length" [value]="null">
 | 
				
			||||||
 | 
				
			|||||||
@ -76,19 +76,22 @@
 | 
				
			|||||||
        background-color: #5cb445;
 | 
					        background-color: #5cb445;
 | 
				
			||||||
        width: 28px;
 | 
					        width: 28px;
 | 
				
			||||||
        height: 28px;
 | 
					        height: 28px;
 | 
				
			||||||
 | 
					        min-width: 28px;
 | 
				
			||||||
 | 
					        min-height: 28px;
 | 
				
			||||||
        color: white;
 | 
					        color: white;
 | 
				
			||||||
        font-size: 13px;
 | 
					        font-size: 13px;
 | 
				
			||||||
        font-weight: 700
 | 
					        font-weight: 700
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      .user-email {
 | 
					      .user-display-name {
 | 
				
			||||||
        color: rgba(0, 0, 0, 0.76);
 | 
					        max-width: 180px;
 | 
				
			||||||
        overflow: hidden;
 | 
					        span {
 | 
				
			||||||
        text-overflow: ellipsis;
 | 
					          white-space: nowrap;
 | 
				
			||||||
        max-width: 185px
 | 
					          overflow: hidden;
 | 
				
			||||||
      }
 | 
					          text-overflow: ellipsis;
 | 
				
			||||||
      .user-name {
 | 
					        }
 | 
				
			||||||
        color: rgba(0, 0, 0, 0.38);
 | 
					        span + span {
 | 
				
			||||||
        font-size: 13px;
 | 
					          color: rgba(0, 0, 0, 0.38);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      .mat-option-text {
 | 
					      .mat-option-text {
 | 
				
			||||||
        display: flex;
 | 
					        display: flex;
 | 
				
			||||||
 | 
				
			|||||||
@ -34,7 +34,7 @@ import {
 | 
				
			|||||||
  switchMap,
 | 
					  switchMap,
 | 
				
			||||||
  takeUntil,
 | 
					  takeUntil,
 | 
				
			||||||
} from 'rxjs/operators';
 | 
					} from 'rxjs/operators';
 | 
				
			||||||
import { User } from '@shared/models/user.model';
 | 
					import { User, UserEmailInfo } from '@shared/models/user.model';
 | 
				
			||||||
import { TranslateService } from '@ngx-translate/core';
 | 
					import { TranslateService } from '@ngx-translate/core';
 | 
				
			||||||
import { UserService } from '@core/http/user.service';
 | 
					import { UserService } from '@core/http/user.service';
 | 
				
			||||||
import { PageLink } from '@shared/models/page/page-link';
 | 
					import { PageLink } from '@shared/models/page/page-link';
 | 
				
			||||||
@ -69,7 +69,7 @@ export class AlarmAssigneePanelComponent implements  OnInit, AfterViewInit, OnDe
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @ViewChild('userInput', {static: true}) userInput: ElementRef;
 | 
					  @ViewChild('userInput', {static: true}) userInput: ElementRef;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  filteredUsers: Observable<Array<User>>;
 | 
					  filteredUsers: Observable<Array<UserEmailInfo>>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  searchText = '';
 | 
					  searchText = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -138,15 +138,15 @@ export class AlarmAssigneePanelComponent implements  OnInit, AfterViewInit, OnDe
 | 
				
			|||||||
      () => this.overlayRef.dispose());
 | 
					      () => this.overlayRef.dispose());
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fetchUsers(searchText?: string): Observable<Array<User>> {
 | 
					  fetchUsers(searchText?: string): Observable<Array<UserEmailInfo>> {
 | 
				
			||||||
    this.searchText = searchText;
 | 
					    this.searchText = searchText;
 | 
				
			||||||
    const pageLink = new PageLink(50, 0, searchText, {
 | 
					    const pageLink = new PageLink(50, 0, searchText, {
 | 
				
			||||||
      property: 'email',
 | 
					      property: 'email',
 | 
				
			||||||
      direction: Direction.ASC
 | 
					      direction: Direction.ASC
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    return this.userService.getUsers(pageLink, {ignoreLoading: true})
 | 
					    return this.userService.findUsersByQuery(pageLink, {ignoreLoading: true})
 | 
				
			||||||
      .pipe(
 | 
					      .pipe(
 | 
				
			||||||
      catchError(() => of(emptyPageData<User>())),
 | 
					      catchError(() => of(emptyPageData<UserEmailInfo>())),
 | 
				
			||||||
      map(pageData => {
 | 
					      map(pageData => {
 | 
				
			||||||
        return pageData.data;
 | 
					        return pageData.data;
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
				
			|||||||
@ -88,9 +88,6 @@ export class AlarmDetailsDialogComponent extends DialogComponent<AlarmDetailsDia
 | 
				
			|||||||
      {
 | 
					      {
 | 
				
			||||||
        createdTime: [''],
 | 
					        createdTime: [''],
 | 
				
			||||||
        originatorName: [''],
 | 
					        originatorName: [''],
 | 
				
			||||||
        assigneeFirstName: [''],
 | 
					 | 
				
			||||||
        assigneeLastName: [''],
 | 
					 | 
				
			||||||
        assigneeEmail: [''],
 | 
					 | 
				
			||||||
        assigneeId: [''],
 | 
					        assigneeId: [''],
 | 
				
			||||||
        startTime: [''],
 | 
					        startTime: [''],
 | 
				
			||||||
        endTime: [''],
 | 
					        endTime: [''],
 | 
				
			||||||
@ -125,18 +122,6 @@ export class AlarmDetailsDialogComponent extends DialogComponent<AlarmDetailsDia
 | 
				
			|||||||
      .patchValue(this.datePipe.transform(alarm.createdTime, 'yyyy-MM-dd HH:mm:ss'));
 | 
					      .patchValue(this.datePipe.transform(alarm.createdTime, 'yyyy-MM-dd HH:mm:ss'));
 | 
				
			||||||
    this.alarmFormGroup.get('originatorName')
 | 
					    this.alarmFormGroup.get('originatorName')
 | 
				
			||||||
      .patchValue(alarm.originatorName);
 | 
					      .patchValue(alarm.originatorName);
 | 
				
			||||||
    if(alarm.assigneeFirstName) {
 | 
					 | 
				
			||||||
      this.alarmFormGroup.get('assigneeFirstName')
 | 
					 | 
				
			||||||
        .patchValue(alarm.assigneeFirstName);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(alarm.assigneeLastName) {
 | 
					 | 
				
			||||||
      this.alarmFormGroup.get('assigneeLastName')
 | 
					 | 
				
			||||||
        .patchValue(alarm.assigneeLastName);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(alarm.assigneeEmail) {
 | 
					 | 
				
			||||||
      this.alarmFormGroup.get('assigneeEmail')
 | 
					 | 
				
			||||||
        .patchValue(alarm.assigneeEmail);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(alarm.assigneeId) {
 | 
					    if(alarm.assigneeId) {
 | 
				
			||||||
      this.alarmFormGroup.get('assigneeId')
 | 
					      this.alarmFormGroup.get('assigneeId')
 | 
				
			||||||
        .patchValue(alarm.assigneeId.id);
 | 
					        .patchValue(alarm.assigneeId.id);
 | 
				
			||||||
@ -209,35 +194,35 @@ export class AlarmDetailsDialogComponent extends DialogComponent<AlarmDetailsDia
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  getUserDisplayName(entity: AlarmInfo) {
 | 
					  getUserDisplayName(entity: AlarmInfo) {
 | 
				
			||||||
    let displayName = '';
 | 
					    let displayName = '';
 | 
				
			||||||
    if ((entity.assigneeFirstName && entity.assigneeFirstName.length > 0) ||
 | 
					    if ((entity.assignee.firstName && entity.assignee.firstName.length > 0) ||
 | 
				
			||||||
      (entity.assigneeLastName && entity.assigneeLastName.length > 0)) {
 | 
					      (entity.assignee.lastName && entity.assignee.lastName.length > 0)) {
 | 
				
			||||||
      if (entity.assigneeFirstName) {
 | 
					      if (entity.assignee.firstName) {
 | 
				
			||||||
        displayName += entity.assigneeFirstName;
 | 
					        displayName += entity.assignee.firstName;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (entity.assigneeLastName) {
 | 
					      if (entity.assignee.lastName) {
 | 
				
			||||||
        if (displayName.length > 0) {
 | 
					        if (displayName.length > 0) {
 | 
				
			||||||
          displayName += ' ';
 | 
					          displayName += ' ';
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        displayName += entity.assigneeLastName;
 | 
					        displayName += entity.assignee.lastName;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      displayName = entity.assigneeEmail;
 | 
					      displayName = entity.assignee.email;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return displayName;
 | 
					    return displayName;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getUserInitials(entity: AlarmInfo): string {
 | 
					  getUserInitials(entity: AlarmInfo): string {
 | 
				
			||||||
    let initials = '';
 | 
					    let initials = '';
 | 
				
			||||||
    if (entity.assigneeFirstName && entity.assigneeFirstName.length ||
 | 
					    if (entity.assignee.firstName && entity.assignee.firstName.length ||
 | 
				
			||||||
      entity.assigneeLastName && entity.assigneeLastName.length) {
 | 
					      entity.assignee.lastName && entity.assignee.lastName.length) {
 | 
				
			||||||
      if (entity.assigneeFirstName) {
 | 
					      if (entity.assignee.firstName) {
 | 
				
			||||||
        initials += entity.assigneeFirstName.charAt(0);
 | 
					        initials += entity.assignee.firstName.charAt(0);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (entity.assigneeLastName) {
 | 
					      if (entity.assignee.lastName) {
 | 
				
			||||||
        initials += entity.assigneeLastName.charAt(0);
 | 
					        initials += entity.assignee.lastName.charAt(0);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      initials += entity.assigneeEmail.charAt(0);
 | 
					      initials += entity.assignee.email.charAt(0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return initials.toUpperCase();
 | 
					    return initials.toUpperCase();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -116,7 +116,7 @@ export class AlarmTableConfig extends EntityTableConfig<AlarmInfo, TimePageLink>
 | 
				
			|||||||
          color: alarmSeverityColors.get(entity.severity)
 | 
					          color: alarmSeverityColors.get(entity.severity)
 | 
				
			||||||
        })));
 | 
					        })));
 | 
				
			||||||
    this.columns.push(
 | 
					    this.columns.push(
 | 
				
			||||||
      new EntityTableColumn<AlarmInfo>('assigneeEmail', 'alarm.assignee', '200px',
 | 
					      new EntityTableColumn<AlarmInfo>('assignee', 'alarm.assignee', '200px',
 | 
				
			||||||
        (entity) => {
 | 
					        (entity) => {
 | 
				
			||||||
          return this.getAssigneeTemplate(entity)
 | 
					          return this.getAssigneeTemplate(entity)
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@ -190,7 +190,7 @@ export class AlarmTableConfig extends EntityTableConfig<AlarmInfo, TimePageLink>
 | 
				
			|||||||
          <span class="user-avatar" style="background-color: ${this.getAvatarBgColor(entity)}">
 | 
					          <span class="user-avatar" style="background-color: ${this.getAvatarBgColor(entity)}">
 | 
				
			||||||
            ${this.getUserInitials(entity)}
 | 
					            ${this.getUserInitials(entity)}
 | 
				
			||||||
          </span>
 | 
					          </span>
 | 
				
			||||||
          <span>${this.getUserDisplayName(entity)}</span>
 | 
					          <span class="user-display-name">${this.getUserDisplayName(entity)}</span>
 | 
				
			||||||
        </span>`
 | 
					        </span>`
 | 
				
			||||||
        :
 | 
					        :
 | 
				
			||||||
        `<mat-icon class="material-icons unassigned-icon">account_circle</mat-icon>
 | 
					        `<mat-icon class="material-icons unassigned-icon">account_circle</mat-icon>
 | 
				
			||||||
@ -201,35 +201,35 @@ export class AlarmTableConfig extends EntityTableConfig<AlarmInfo, TimePageLink>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  getUserDisplayName(entity: AlarmInfo) {
 | 
					  getUserDisplayName(entity: AlarmInfo) {
 | 
				
			||||||
    let displayName = '';
 | 
					    let displayName = '';
 | 
				
			||||||
    if ((entity.assigneeFirstName && entity.assigneeFirstName.length > 0) ||
 | 
					    if ((entity.assignee.firstName && entity.assignee.firstName.length > 0) ||
 | 
				
			||||||
      (entity.assigneeLastName && entity.assigneeLastName.length > 0)) {
 | 
					      (entity.assignee.lastName && entity.assignee.lastName.length > 0)) {
 | 
				
			||||||
      if (entity.assigneeFirstName) {
 | 
					      if (entity.assignee.firstName) {
 | 
				
			||||||
        displayName += entity.assigneeFirstName;
 | 
					        displayName += entity.assignee.firstName;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (entity.assigneeLastName) {
 | 
					      if (entity.assignee.lastName) {
 | 
				
			||||||
        if (displayName.length > 0) {
 | 
					        if (displayName.length > 0) {
 | 
				
			||||||
          displayName += ' ';
 | 
					          displayName += ' ';
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        displayName += entity.assigneeLastName;
 | 
					        displayName += entity.assignee.lastName;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      displayName = entity.assigneeEmail;
 | 
					      displayName = entity.assignee.email;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return displayName;
 | 
					    return displayName;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getUserInitials(entity: AlarmInfo): string {
 | 
					  getUserInitials(entity: AlarmInfo): string {
 | 
				
			||||||
    let initials = '';
 | 
					    let initials = '';
 | 
				
			||||||
    if (entity.assigneeFirstName && entity.assigneeFirstName.length ||
 | 
					    if (entity.assignee.firstName && entity.assignee.firstName.length ||
 | 
				
			||||||
      entity.assigneeLastName && entity.assigneeLastName.length) {
 | 
					      entity.assignee.lastName && entity.assignee.lastName.length) {
 | 
				
			||||||
      if (entity.assigneeFirstName) {
 | 
					      if (entity.assignee.firstName) {
 | 
				
			||||||
        initials += entity.assigneeFirstName.charAt(0);
 | 
					        initials += entity.assignee.firstName.charAt(0);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (entity.assigneeLastName) {
 | 
					      if (entity.assignee.lastName) {
 | 
				
			||||||
        initials += entity.assigneeLastName.charAt(0);
 | 
					        initials += entity.assignee.lastName.charAt(0);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      initials += entity.assigneeEmail.charAt(0);
 | 
					      initials += entity.assignee.email.charAt(0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return initials.toUpperCase();
 | 
					    return initials.toUpperCase();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,10 @@
 | 
				
			|||||||
        justify-content: flex-start;
 | 
					        justify-content: flex-start;
 | 
				
			||||||
        align-items: center;
 | 
					        align-items: center;
 | 
				
			||||||
        .assigned-container {
 | 
					        .assigned-container {
 | 
				
			||||||
 | 
					          max-width: 180px;
 | 
				
			||||||
 | 
					          overflow: hidden;
 | 
				
			||||||
 | 
					          white-space: nowrap;
 | 
				
			||||||
 | 
					          text-overflow: ellipsis;
 | 
				
			||||||
          .user-avatar {
 | 
					          .user-avatar {
 | 
				
			||||||
            display: inline-flex;
 | 
					            display: inline-flex;
 | 
				
			||||||
            justify-content: center;
 | 
					            justify-content: center;
 | 
				
			||||||
@ -30,6 +34,8 @@
 | 
				
			|||||||
            border-radius: 50%;
 | 
					            border-radius: 50%;
 | 
				
			||||||
            width: 28px;
 | 
					            width: 28px;
 | 
				
			||||||
            height: 28px;
 | 
					            height: 28px;
 | 
				
			||||||
 | 
					            min-width: 28px;
 | 
				
			||||||
 | 
					            min-height: 28px;
 | 
				
			||||||
            color: white;
 | 
					            color: white;
 | 
				
			||||||
            font-size: 13px;
 | 
					            font-size: 13px;
 | 
				
			||||||
            font-weight: 700;
 | 
					            font-weight: 700;
 | 
				
			||||||
 | 
				
			|||||||
@ -84,20 +84,23 @@
 | 
				
			|||||||
          <mat-cell *matCellDef="let alarm; let row = index"
 | 
					          <mat-cell *matCellDef="let alarm; let row = index"
 | 
				
			||||||
                    [ngStyle]="cellStyle(alarm, column, row)">
 | 
					                    [ngStyle]="cellStyle(alarm, column, row)">
 | 
				
			||||||
            <span [innerHTML]="cellContent(alarm, column, row)"></span>
 | 
					            <span [innerHTML]="cellContent(alarm, column, row)"></span>
 | 
				
			||||||
            <ng-container *ngIf="column.entityKey.key === 'assigneeEmail'">
 | 
					            <ng-container *ngIf="column.entityKey.key === 'assignee'">
 | 
				
			||||||
              <span class="assignee-cell" fxLayout="row" fxLayoutAlign="start center">
 | 
					              <span class="assignee-cell" fxLayout="row" fxLayoutAlign="start center">
 | 
				
			||||||
                <span *ngIf="alarm.assigneeId" class="assigned-container">
 | 
					                <span *ngIf="alarm.assigneeId" class="assigned-container">
 | 
				
			||||||
                  <span class="user-avatar" [style.backgroundColor]="getAvatarBgColor(alarm)">
 | 
					                  <span class="user-avatar" [style.backgroundColor]="getAvatarBgColor(alarm)">
 | 
				
			||||||
                    {{ getUserInitials(alarm) }}
 | 
					                    {{ getUserInitials(alarm) }}
 | 
				
			||||||
                  </span>
 | 
					                  </span>
 | 
				
			||||||
                  <span style="text-overflow: ellipsis">{{ getUserDisplayName(alarm) }}</span>
 | 
					                  <span [matTooltip]="getUserDisplayName(alarm)"
 | 
				
			||||||
 | 
					                        matTooltipPosition="above"
 | 
				
			||||||
 | 
					                        style="text-overflow: ellipsis">{{ getUserDisplayName(alarm) }}</span>
 | 
				
			||||||
                </span>
 | 
					                </span>
 | 
				
			||||||
                <span *ngIf="!alarm.assigneeId" class="unassigned-container" fxLayout="row" fxLayoutAlign="start center">
 | 
					                <span *ngIf="!alarm.assigneeId" class="unassigned-container" fxLayout="row" fxLayoutAlign="start center">
 | 
				
			||||||
                  <mat-icon class="material-icons unassigned-icon">account_circle</mat-icon>
 | 
					                  <mat-icon class="material-icons unassigned-icon">account_circle</mat-icon>
 | 
				
			||||||
                  <span translate>alarm.unassigned</span>
 | 
					                  <span translate>alarm.unassigned</span>
 | 
				
			||||||
                </span>
 | 
					                </span>
 | 
				
			||||||
                <button mat-icon-button [disabled]="isLoading$ | async"
 | 
					                <button *ngIf="allowAssign"
 | 
				
			||||||
                        matTooltip="{{ alarm.assign | translate }}"
 | 
					                        mat-icon-button [disabled]="isLoading$ | async"
 | 
				
			||||||
 | 
					                        matTooltip="{{ 'alarm.assign' | translate }}"
 | 
				
			||||||
                        matTooltipPosition="above"
 | 
					                        matTooltipPosition="above"
 | 
				
			||||||
                        (click)="openAlarmAssigneePanel($event, alarm)">
 | 
					                        (click)="openAlarmAssigneePanel($event, alarm)">
 | 
				
			||||||
                  <mat-icon>
 | 
					                  <mat-icon>
 | 
				
			||||||
 | 
				
			|||||||
@ -40,6 +40,8 @@
 | 
				
			|||||||
                border-radius: 50%;
 | 
					                border-radius: 50%;
 | 
				
			||||||
                width: 28px;
 | 
					                width: 28px;
 | 
				
			||||||
                height: 28px;
 | 
					                height: 28px;
 | 
				
			||||||
 | 
					                min-width: 28px;
 | 
				
			||||||
 | 
					                min-height: 28px;
 | 
				
			||||||
                color: white;
 | 
					                color: white;
 | 
				
			||||||
                font-size: 13px;
 | 
					                font-size: 13px;
 | 
				
			||||||
                font-weight: 700;
 | 
					                font-weight: 700;
 | 
				
			||||||
 | 
				
			|||||||
@ -142,6 +142,7 @@ interface AlarmsTableWidgetSettings extends TableWidgetSettings {
 | 
				
			|||||||
  displayDetails: boolean;
 | 
					  displayDetails: boolean;
 | 
				
			||||||
  allowAcknowledgment: boolean;
 | 
					  allowAcknowledgment: boolean;
 | 
				
			||||||
  allowClear: boolean;
 | 
					  allowClear: boolean;
 | 
				
			||||||
 | 
					  allowAssign: boolean;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface AlarmWidgetActionDescriptor extends TableCellButtonActionDescriptor {
 | 
					interface AlarmWidgetActionDescriptor extends TableCellButtonActionDescriptor {
 | 
				
			||||||
@ -193,6 +194,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
 | 
				
			|||||||
  private displayDetails = true;
 | 
					  private displayDetails = true;
 | 
				
			||||||
  public allowAcknowledgment = true;
 | 
					  public allowAcknowledgment = true;
 | 
				
			||||||
  private allowClear = true;
 | 
					  private allowClear = true;
 | 
				
			||||||
 | 
					  public allowAssign = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private defaultPageSize = 10;
 | 
					  private defaultPageSize = 10;
 | 
				
			||||||
  private defaultSortOrder = '-' + alarmFields.createdTime.value;
 | 
					  private defaultSortOrder = '-' + alarmFields.createdTime.value;
 | 
				
			||||||
@ -329,6 +331,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
 | 
				
			|||||||
    this.displayDetails = isDefined(this.settings.displayDetails) ? this.settings.displayDetails : true;
 | 
					    this.displayDetails = isDefined(this.settings.displayDetails) ? this.settings.displayDetails : true;
 | 
				
			||||||
    this.allowAcknowledgment = isDefined(this.settings.allowAcknowledgment) ? this.settings.allowAcknowledgment : true;
 | 
					    this.allowAcknowledgment = isDefined(this.settings.allowAcknowledgment) ? this.settings.allowAcknowledgment : true;
 | 
				
			||||||
    this.allowClear = isDefined(this.settings.allowClear) ? this.settings.allowClear : true;
 | 
					    this.allowClear = isDefined(this.settings.allowClear) ? this.settings.allowClear : true;
 | 
				
			||||||
 | 
					    this.allowAssign = isDefined(this.settings.allowAssign) ? this.settings.allowAssign : true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (this.settings.alarmsTitle && this.settings.alarmsTitle.length) {
 | 
					    if (this.settings.alarmsTitle && this.settings.alarmsTitle.length) {
 | 
				
			||||||
      this.alarmsTitlePattern = this.utils.customTranslation(this.settings.alarmsTitle, this.settings.alarmsTitle);
 | 
					      this.alarmsTitlePattern = this.utils.customTranslation(this.settings.alarmsTitle, this.settings.alarmsTitle);
 | 
				
			||||||
@ -422,7 +425,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
 | 
				
			|||||||
          if (alarmField && alarmField.time) {
 | 
					          if (alarmField && alarmField.time) {
 | 
				
			||||||
            keySettings.columnWidth = '120px';
 | 
					            keySettings.columnWidth = '120px';
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          if (alarmField && alarmField.keyName  === alarmFields.assigneeEmail.keyName) {
 | 
					          if (alarmField && alarmField.keyName  === alarmFields.assignee.keyName) {
 | 
				
			||||||
            keySettings.columnWidth = '120px'
 | 
					            keySettings.columnWidth = '120px'
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -973,7 +976,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
 | 
				
			|||||||
          return alarmStatusTranslations.get(value) ? this.translate.instant(alarmStatusTranslations.get(value)) : value;
 | 
					          return alarmStatusTranslations.get(value) ? this.translate.instant(alarmStatusTranslations.get(value)) : value;
 | 
				
			||||||
        } else if (alarmField.value === alarmFields.originatorType.value) {
 | 
					        } else if (alarmField.value === alarmFields.originatorType.value) {
 | 
				
			||||||
          return this.translate.instant(entityTypeTranslations.get(value).type);
 | 
					          return this.translate.instant(entityTypeTranslations.get(value).type);
 | 
				
			||||||
        } else if (alarmField.value === alarmFields.assigneeEmail.value) {
 | 
					        } else if (alarmField.value === alarmFields.assignee.value) {
 | 
				
			||||||
          return '';
 | 
					          return '';
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else {
 | 
					        else {
 | 
				
			||||||
@ -1026,35 +1029,35 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  getUserDisplayName(entity: AlarmInfo) {
 | 
					  getUserDisplayName(entity: AlarmInfo) {
 | 
				
			||||||
    let displayName = '';
 | 
					    let displayName = '';
 | 
				
			||||||
    if ((entity.assigneeFirstName && entity.assigneeFirstName.length > 0) ||
 | 
					    if ((entity.assignee.firstName && entity.assignee.firstName.length > 0) ||
 | 
				
			||||||
      (entity.assigneeLastName && entity.assigneeLastName.length > 0)) {
 | 
					      (entity.assignee.lastName && entity.assignee.lastName.length > 0)) {
 | 
				
			||||||
      if (entity.assigneeFirstName) {
 | 
					      if (entity.assignee.firstName) {
 | 
				
			||||||
        displayName += entity.assigneeFirstName;
 | 
					        displayName += entity.assignee.firstName;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (entity.assigneeLastName) {
 | 
					      if (entity.assignee.lastName) {
 | 
				
			||||||
        if (displayName.length > 0) {
 | 
					        if (displayName.length > 0) {
 | 
				
			||||||
          displayName += ' ';
 | 
					          displayName += ' ';
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        displayName += entity.assigneeLastName;
 | 
					        displayName += entity.assignee.lastName;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      displayName = entity.assigneeEmail;
 | 
					      displayName = entity.assignee.email;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return displayName;
 | 
					    return displayName;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getUserInitials(entity: AlarmInfo): string {
 | 
					  getUserInitials(entity: AlarmInfo): string {
 | 
				
			||||||
    let initials = '';
 | 
					    let initials = '';
 | 
				
			||||||
    if (entity.assigneeFirstName && entity.assigneeFirstName.length ||
 | 
					    if (entity.assignee.firstName && entity.assignee.firstName.length ||
 | 
				
			||||||
      entity.assigneeLastName && entity.assigneeLastName.length) {
 | 
					      entity.assignee.lastName && entity.assignee.lastName.length) {
 | 
				
			||||||
      if (entity.assigneeFirstName) {
 | 
					      if (entity.assignee.firstName) {
 | 
				
			||||||
        initials += entity.assigneeFirstName.charAt(0);
 | 
					        initials += entity.assignee.firstName.charAt(0);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (entity.assigneeLastName) {
 | 
					      if (entity.assignee.lastName) {
 | 
				
			||||||
        initials += entity.assigneeLastName.charAt(0);
 | 
					        initials += entity.assignee.lastName.charAt(0);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      initials += entity.assigneeEmail.charAt(0);
 | 
					      initials += entity.assignee.email.charAt(0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return initials.toUpperCase();
 | 
					    return initials.toUpperCase();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -67,6 +67,9 @@
 | 
				
			|||||||
      <mat-slide-toggle formControlName="allowClear">
 | 
					      <mat-slide-toggle formControlName="allowClear">
 | 
				
			||||||
        {{ 'widgets.table.allow-alarms-clear' | translate }}
 | 
					        {{ 'widgets.table.allow-alarms-clear' | translate }}
 | 
				
			||||||
      </mat-slide-toggle>
 | 
					      </mat-slide-toggle>
 | 
				
			||||||
 | 
					      <mat-slide-toggle formControlName="allowAssign">
 | 
				
			||||||
 | 
					        {{ 'widgets.table.allow-alarms-assign' | translate }}
 | 
				
			||||||
 | 
					      </mat-slide-toggle>
 | 
				
			||||||
      <section fxLayout="column" fxLayout.gt-xs="row" fxLayoutGap="8px" fxLayoutAlign.gt-xs="start center">
 | 
					      <section fxLayout="column" fxLayout.gt-xs="row" fxLayoutGap="8px" fxLayoutAlign.gt-xs="start center">
 | 
				
			||||||
        <mat-slide-toggle fxFlex formControlName="displayPagination">
 | 
					        <mat-slide-toggle fxFlex formControlName="displayPagination">
 | 
				
			||||||
          {{ 'widgets.table.display-pagination' | translate }}
 | 
					          {{ 'widgets.table.display-pagination' | translate }}
 | 
				
			||||||
 | 
				
			|||||||
@ -51,6 +51,7 @@ export class AlarmsTableWidgetSettingsComponent extends WidgetSettingsComponent
 | 
				
			|||||||
      displayDetails: true,
 | 
					      displayDetails: true,
 | 
				
			||||||
      allowAcknowledgment: true,
 | 
					      allowAcknowledgment: true,
 | 
				
			||||||
      allowClear: true,
 | 
					      allowClear: true,
 | 
				
			||||||
 | 
					      allowAssign: true,
 | 
				
			||||||
      displayPagination: true,
 | 
					      displayPagination: true,
 | 
				
			||||||
      defaultPageSize: 10,
 | 
					      defaultPageSize: 10,
 | 
				
			||||||
      defaultSortOrder: '-createdTime',
 | 
					      defaultSortOrder: '-createdTime',
 | 
				
			||||||
@ -72,6 +73,7 @@ export class AlarmsTableWidgetSettingsComponent extends WidgetSettingsComponent
 | 
				
			|||||||
      displayDetails: [settings.displayDetails, []],
 | 
					      displayDetails: [settings.displayDetails, []],
 | 
				
			||||||
      allowAcknowledgment: [settings.allowAcknowledgment, []],
 | 
					      allowAcknowledgment: [settings.allowAcknowledgment, []],
 | 
				
			||||||
      allowClear: [settings.allowClear, []],
 | 
					      allowClear: [settings.allowClear, []],
 | 
				
			||||||
 | 
					      allowAssign: [settings.allowAssign, []],
 | 
				
			||||||
      displayPagination: [settings.displayPagination, []],
 | 
					      displayPagination: [settings.displayPagination, []],
 | 
				
			||||||
      defaultPageSize: [settings.defaultPageSize, [Validators.min(1)]],
 | 
					      defaultPageSize: [settings.defaultPageSize, [Validators.min(1)]],
 | 
				
			||||||
      defaultSortOrder: [settings.defaultSortOrder, []],
 | 
					      defaultSortOrder: [settings.defaultSortOrder, []],
 | 
				
			||||||
 | 
				
			|||||||
@ -107,9 +107,13 @@ export interface Alarm extends BaseData<AlarmId> {
 | 
				
			|||||||
export interface AlarmInfo extends Alarm {
 | 
					export interface AlarmInfo extends Alarm {
 | 
				
			||||||
  originatorName: string;
 | 
					  originatorName: string;
 | 
				
			||||||
  originatorLabel: string;
 | 
					  originatorLabel: string;
 | 
				
			||||||
  assigneeFirstName: string;
 | 
					  assignee: AlarmAssignee;
 | 
				
			||||||
  assigneeLastName: string;
 | 
					}
 | 
				
			||||||
  assigneeEmail: string;
 | 
					
 | 
				
			||||||
 | 
					export interface AlarmAssignee {
 | 
				
			||||||
 | 
					  firstName: string;
 | 
				
			||||||
 | 
					  lastName: string;
 | 
				
			||||||
 | 
					  email: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface AlarmDataInfo extends AlarmInfo {
 | 
					export interface AlarmDataInfo extends AlarmInfo {
 | 
				
			||||||
@ -131,9 +135,11 @@ export const simulatedAlarm: AlarmInfo = {
 | 
				
			|||||||
  assignTs: 0,
 | 
					  assignTs: 0,
 | 
				
			||||||
  originatorName: 'Simulated',
 | 
					  originatorName: 'Simulated',
 | 
				
			||||||
  originatorLabel: 'Simulated',
 | 
					  originatorLabel: 'Simulated',
 | 
				
			||||||
  assigneeFirstName: "",
 | 
					  assignee: {
 | 
				
			||||||
  assigneeLastName: "",
 | 
					    firstName: "",
 | 
				
			||||||
  assigneeEmail: "test@example.com",
 | 
					    lastName: "",
 | 
				
			||||||
 | 
					    email: "test@example.com",
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  originator: {
 | 
					  originator: {
 | 
				
			||||||
    entityType: EntityType.DEVICE,
 | 
					    entityType: EntityType.DEVICE,
 | 
				
			||||||
    id: '1'
 | 
					    id: '1'
 | 
				
			||||||
@ -221,25 +227,10 @@ export const alarmFields: {[fieldName: string]: AlarmField} = {
 | 
				
			|||||||
    value: 'status',
 | 
					    value: 'status',
 | 
				
			||||||
    name: 'alarm.status'
 | 
					    name: 'alarm.status'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  assigneeId: {
 | 
					  assignee: {
 | 
				
			||||||
    keyName: 'assigneeId',
 | 
					    keyName: 'assignee',
 | 
				
			||||||
    value: 'assigneeId.id',
 | 
					    value: 'assignee',
 | 
				
			||||||
    name: 'alarm.assignee-id'
 | 
					    name: 'alarm.assignee'
 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  assigneeFirstName: {
 | 
					 | 
				
			||||||
    keyName: 'assigneeFirstName',
 | 
					 | 
				
			||||||
    value: 'assigneeFirstName',
 | 
					 | 
				
			||||||
    name: 'alarm.assignee-first-name'
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  assigneeLastName: {
 | 
					 | 
				
			||||||
    keyName: 'assigneeLastName',
 | 
					 | 
				
			||||||
    value: 'assigneeLastName',
 | 
					 | 
				
			||||||
    name: 'alarm.assignee-last-name'
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  assigneeEmail: {
 | 
					 | 
				
			||||||
    keyName: 'assigneeEmail',
 | 
					 | 
				
			||||||
    value: 'assigneeEmail',
 | 
					 | 
				
			||||||
    name: 'alarm.assignee-email'
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -54,3 +54,10 @@ export interface AuthUser {
 | 
				
			|||||||
  isPublic: boolean;
 | 
					  isPublic: boolean;
 | 
				
			||||||
  authority: Authority;
 | 
					  authority: Authority;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface UserEmailInfo {
 | 
				
			||||||
 | 
					  id: UserId;
 | 
				
			||||||
 | 
					  email: string;
 | 
				
			||||||
 | 
					  firstName: string;
 | 
				
			||||||
 | 
					  lastName: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -433,12 +433,7 @@
 | 
				
			|||||||
        "type": "Type",
 | 
					        "type": "Type",
 | 
				
			||||||
        "severity": "Severity",
 | 
					        "severity": "Severity",
 | 
				
			||||||
        "originator": "Originator",
 | 
					        "originator": "Originator",
 | 
				
			||||||
        "originator-label": "Originator label",
 | 
					 | 
				
			||||||
        "originator-type": "Originator type",
 | 
					        "originator-type": "Originator type",
 | 
				
			||||||
        "assignee-id": "Assignee id",
 | 
					 | 
				
			||||||
        "assignee-first-name": "Assignee first name",
 | 
					 | 
				
			||||||
        "assignee-last-name": "Assignee last name",
 | 
					 | 
				
			||||||
        "assignee-email": "Assignee email",
 | 
					 | 
				
			||||||
        "details": "Details",
 | 
					        "details": "Details",
 | 
				
			||||||
        "originator-label": "Originator label",
 | 
					        "originator-label": "Originator label",
 | 
				
			||||||
        "assign": "Assign",
 | 
					        "assign": "Assign",
 | 
				
			||||||
@ -4752,7 +4747,8 @@
 | 
				
			|||||||
            "enable-alarm-filter": "Enable alarm filter",
 | 
					            "enable-alarm-filter": "Enable alarm filter",
 | 
				
			||||||
            "display-alarm-details": "Display alarm details",
 | 
					            "display-alarm-details": "Display alarm details",
 | 
				
			||||||
            "allow-alarms-ack": "Allow alarms acknowledgment",
 | 
					            "allow-alarms-ack": "Allow alarms acknowledgment",
 | 
				
			||||||
            "allow-alarms-clear": "Allow alarms clear"
 | 
					            "allow-alarms-clear": "Allow alarms clear",
 | 
				
			||||||
 | 
					            "allow-alarms-assign": "Allow alarms assignment"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "value-source": {
 | 
					        "value-source": {
 | 
				
			||||||
            "value-source": "Value source",
 | 
					            "value-source": "Value source",
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user