/// /// Copyright © 2016-2020 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/dialog'; 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 { 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('createdTime', 'alarm.created-time', this.datePipe, '150px')); this.columns.push( new EntityTableColumn('originatorName', 'alarm.originator', '25%', (entity) => entity.originatorName, entity => ({}), false)); this.columns.push( new EntityTableColumn('type', 'alarm.type', '25%')); this.columns.push( new EntityTableColumn('severity', 'alarm.severity', '25%', (entity) => this.translate.instant(alarmSeverityTranslations.get(entity.severity)), entity => ({ fontWeight: 'bold', color: alarmSeverityColors.get(entity.severity) }))); this.columns.push( new EntityTableColumn('status', 'alarm.status', '25%', (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> { const query = new AlarmQuery(this.entityId, pageLink, this.searchStatus, null, true, null); return this.alarmService.getAlarms(query); } showAlarmDetails(entity: AlarmInfo) { this.dialog.open (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(); } } ); } }