2019-08-29 12:08:49 +03:00
|
|
|
///
|
|
|
|
|
/// Copyright © 2016-2019 The Thingsboard Authors
|
|
|
|
|
///
|
|
|
|
|
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
/// you may not use this file except in compliance with the License.
|
|
|
|
|
/// You may obtain a copy of the License at
|
|
|
|
|
///
|
|
|
|
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
///
|
|
|
|
|
/// Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
/// See the License for the specific language governing permissions and
|
|
|
|
|
/// limitations under the License.
|
|
|
|
|
///
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
DateEntityTableColumn,
|
|
|
|
|
EntityTableColumn,
|
|
|
|
|
EntityTableConfig
|
|
|
|
|
} from '@home/models/entity/entities-table-config.models';
|
|
|
|
|
import { EntityType, EntityTypeResource, entityTypeTranslations } from '@shared/models/entity-type.models';
|
|
|
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
|
|
|
import { DatePipe } from '@angular/common';
|
|
|
|
|
import { Direction } from '@shared/models/page/sort-order';
|
|
|
|
|
import { MatDialog } from '@angular/material';
|
|
|
|
|
import { TimePageLink } from '@shared/models/page/page-link';
|
|
|
|
|
import { Observable } from 'rxjs';
|
|
|
|
|
import { PageData } from '@shared/models/page/page-data';
|
|
|
|
|
import { EntityId } from '@shared/models/id/entity-id';
|
|
|
|
|
import {
|
|
|
|
|
AlarmInfo,
|
|
|
|
|
AlarmQuery,
|
|
|
|
|
AlarmSearchStatus,
|
|
|
|
|
alarmSeverityColors,
|
|
|
|
|
alarmSeverityTranslations,
|
|
|
|
|
alarmStatusTranslations
|
|
|
|
|
} from '@app/shared/models/alarm.models';
|
|
|
|
|
import { AlarmService } from '@app/core/http/alarm.service';
|
|
|
|
|
import { DialogService } from '@core/services/dialog.service';
|
|
|
|
|
import { AlarmTableHeaderComponent } from '@home/components/alarm/alarm-table-header.component';
|
|
|
|
|
import {
|
|
|
|
|
AuditLogDetailsDialogComponent,
|
|
|
|
|
AuditLogDetailsDialogData
|
|
|
|
|
} from '@home/components/audit-log/audit-log-details-dialog.component';
|
|
|
|
|
import {
|
|
|
|
|
AlarmDetailsDialogComponent,
|
|
|
|
|
AlarmDetailsDialogData
|
|
|
|
|
} from '@home/components/alarm/alarm-details-dialog.component';
|
|
|
|
|
|
|
|
|
|
export class AlarmTableConfig extends EntityTableConfig<AlarmInfo, TimePageLink> {
|
|
|
|
|
|
|
|
|
|
searchStatus: AlarmSearchStatus;
|
|
|
|
|
|
|
|
|
|
constructor(private alarmService: AlarmService,
|
|
|
|
|
private dialogService: DialogService,
|
|
|
|
|
private translate: TranslateService,
|
|
|
|
|
private datePipe: DatePipe,
|
|
|
|
|
private dialog: MatDialog,
|
|
|
|
|
public entityId: EntityId = null,
|
|
|
|
|
private defaultSearchStatus: AlarmSearchStatus = AlarmSearchStatus.ANY) {
|
|
|
|
|
super();
|
|
|
|
|
this.loadDataOnInit = false;
|
|
|
|
|
this.tableTitle = '';
|
|
|
|
|
this.useTimePageLink = true;
|
|
|
|
|
this.detailsPanelEnabled = false;
|
|
|
|
|
this.selectionEnabled = false;
|
|
|
|
|
this.searchEnabled = true;
|
|
|
|
|
this.addEnabled = false;
|
|
|
|
|
this.entitiesDeleteEnabled = false;
|
|
|
|
|
this.actionsColumnTitle = 'alarm.details';
|
|
|
|
|
this.entityType = EntityType.ALARM;
|
|
|
|
|
this.entityTranslations = entityTypeTranslations.get(EntityType.ALARM);
|
|
|
|
|
this.entityResources = {
|
|
|
|
|
} as EntityTypeResource;
|
|
|
|
|
this.searchStatus = defaultSearchStatus;
|
|
|
|
|
|
|
|
|
|
this.headerComponent = AlarmTableHeaderComponent;
|
|
|
|
|
|
|
|
|
|
this.entitiesFetchFunction = pageLink => this.fetchAlarms(pageLink);
|
|
|
|
|
|
|
|
|
|
this.defaultSortOrder = {property: 'createdTime', direction: Direction.DESC};
|
|
|
|
|
|
|
|
|
|
this.columns.push(
|
|
|
|
|
new DateEntityTableColumn<AlarmInfo>('createdTime', 'alarm.created-time', this.datePipe, '150px'));
|
|
|
|
|
this.columns.push(
|
2020-01-24 19:05:41 +02:00
|
|
|
new EntityTableColumn<AlarmInfo>('originatorName', 'alarm.originator', '25%',
|
2019-08-29 12:08:49 +03:00
|
|
|
(entity) => entity.originatorName, entity => ({}), false));
|
|
|
|
|
this.columns.push(
|
2020-01-24 19:05:41 +02:00
|
|
|
new EntityTableColumn<AlarmInfo>('type', 'alarm.type', '25%'));
|
2019-08-29 12:08:49 +03:00
|
|
|
this.columns.push(
|
2020-01-24 19:05:41 +02:00
|
|
|
new EntityTableColumn<AlarmInfo>('severity', 'alarm.severity', '25%',
|
2019-08-29 12:08:49 +03:00
|
|
|
(entity) => this.translate.instant(alarmSeverityTranslations.get(entity.severity)),
|
|
|
|
|
entity => ({
|
|
|
|
|
fontWeight: 'bold',
|
|
|
|
|
color: alarmSeverityColors.get(entity.severity)
|
|
|
|
|
})));
|
|
|
|
|
this.columns.push(
|
2020-01-24 19:05:41 +02:00
|
|
|
new EntityTableColumn<AlarmInfo>('status', 'alarm.status', '25%',
|
2019-08-29 12:08:49 +03:00
|
|
|
(entity) => this.translate.instant(alarmStatusTranslations.get(entity.status))));
|
|
|
|
|
|
|
|
|
|
this.cellActionDescriptors.push(
|
|
|
|
|
{
|
|
|
|
|
name: this.translate.instant('alarm.details'),
|
|
|
|
|
icon: 'more_horiz',
|
|
|
|
|
isEnabled: () => true,
|
|
|
|
|
onAction: ($event, entity) => this.showAlarmDetails(entity)
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fetchAlarms(pageLink: TimePageLink): Observable<PageData<AlarmInfo>> {
|
|
|
|
|
const query = new AlarmQuery(this.entityId, pageLink, this.searchStatus, null, true);
|
|
|
|
|
return this.alarmService.getAlarms(query);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
showAlarmDetails(entity: AlarmInfo) {
|
|
|
|
|
this.dialog.open<AlarmDetailsDialogComponent, AlarmDetailsDialogData, boolean>
|
|
|
|
|
(AlarmDetailsDialogComponent,
|
|
|
|
|
{
|
|
|
|
|
disableClose: true,
|
|
|
|
|
panelClass: ['tb-dialog', 'tb-fullscreen-dialog'],
|
|
|
|
|
data: {
|
|
|
|
|
alarmId: entity.id.id,
|
|
|
|
|
allowAcknowledgment: true,
|
|
|
|
|
allowClear: true,
|
|
|
|
|
displayDetails: true
|
|
|
|
|
}
|
|
|
|
|
}).afterClosed().subscribe(
|
|
|
|
|
(res) => {
|
|
|
|
|
if (res) {
|
|
|
|
|
this.table.updateData();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|