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