Merge pull request #9650 from rusikv/enhancement/alarm-table-entity-links

Added entity links to alarm table originator column
This commit is contained in:
Igor Kulikov 2023-12-05 17:46:45 +02:00 committed by GitHub
commit d689bab1b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 8 deletions

View File

@ -17,6 +17,7 @@
import {
CellActionDescriptorType,
DateEntityTableColumn,
EntityLinkTableColumn,
EntityTableColumn,
EntityTableConfig
} from '@home/models/entity/entities-table-config.models';
@ -59,7 +60,7 @@ import {
AlarmAssigneePanelData
} from '@home/components/alarm/alarm-assignee-panel.component';
import { ComponentPortal } from '@angular/cdk/portal';
import { isDefinedAndNotNull } from '@core/utils';
import { getEntityDetailsPageURL, isDefinedAndNotNull } from '@core/utils';
import { UtilsService } from '@core/services/utils.service';
import { AlarmFilterConfig } from '@shared/models/query/query.models';
import { EntityService } from '@core/http/entity.service';
@ -113,8 +114,9 @@ export class AlarmTableConfig extends EntityTableConfig<AlarmInfo, TimePageLink>
this.columns.push(
new DateEntityTableColumn<AlarmInfo>('createdTime', 'alarm.created-time', this.datePipe, '150px'));
this.columns.push(
new EntityTableColumn<AlarmInfo>('originatorName', 'alarm.originator', '25%',
(entity) => entity.originatorName, entity => ({}), false));
new EntityLinkTableColumn<AlarmInfo>('originatorName', 'alarm.originator', '25%',
(entity) => entity.originatorName,
(entity) => getEntityDetailsPageURL(entity.originator.id, entity.originator.entityType as EntityType)));
this.columns.push(
new EntityTableColumn<AlarmInfo>('type', 'alarm.type', '25%',
entity => this.utilsService.customTranslation(entity.type, entity.type)));

View File

@ -165,7 +165,12 @@
[matTooltip]="cellTooltip(entity, column, row)"
matTooltipPosition="above"
[ngStyle]="cellStyle(entity, column, row)">
<ng-container *ngIf="column.type == 'link'; else defaultContent">
<a [routerLink]="column.entityURL(entity)" [innerHTML]="cellContent(entity, column, row)" (click)="$event.stopPropagation();"></a>
</ng-container>
<ng-template #defaultContent>
<span [innerHTML]="cellContent(entity, column, row)"></span>
</ng-template>
<ng-template [ngIf]="column.actionCell">
<ng-container [ngSwitch]="column.actionCell.type">
<ng-template [ngSwitchCase]="cellActionType.COPY_BUTTON">

View File

@ -48,6 +48,7 @@ import {
CellActionDescriptorType,
EntityActionTableColumn,
EntityColumn,
EntityLinkTableColumn,
EntityTableColumn,
EntityTableConfig,
GroupActionDescriptor,
@ -613,7 +614,7 @@ export class EntitiesTableComponent extends PageComponent implements IEntitiesTa
columnsUpdated(resetData: boolean = false) {
this.entityColumns = this.entitiesTableConfig.columns.filter(
(column) => column instanceof EntityTableColumn)
(column) => column instanceof EntityTableColumn || column instanceof EntityLinkTableColumn)
.map(column => column as EntityTableColumn<BaseData<HasId>>);
this.actionColumns = this.entitiesTableConfig.columns.filter(
(column) => column instanceof EntityActionTableColumn)
@ -670,7 +671,7 @@ export class EntitiesTableComponent extends PageComponent implements IEntitiesTa
}
cellContent(entity: BaseData<HasId>, column: EntityColumn<BaseData<HasId>>, row: number) {
if (column instanceof EntityTableColumn) {
if (column instanceof EntityTableColumn || column instanceof EntityLinkTableColumn) {
const col = this.entitiesTableConfig.columns.indexOf(column);
const index = row * this.entitiesTableConfig.columns.length + col;
let res = this.cellContentCache[index];

View File

@ -79,7 +79,7 @@ export interface HeaderActionDescriptor {
onAction: ($event: MouseEvent) => void;
}
export type EntityTableColumnType = 'content' | 'action';
export type EntityTableColumnType = 'content' | 'action' | 'link';
export class BaseEntityTableColumn<T extends BaseData<HasId>> {
constructor(public type: EntityTableColumnType,
@ -116,6 +116,16 @@ export class EntityActionTableColumn<T extends BaseData<HasId>> extends BaseEnti
}
}
export class EntityLinkTableColumn<T extends BaseData<HasId>> extends BaseEntityTableColumn<T> {
constructor(public key: string,
public title: string,
public width: string = '0px',
public cellContentFunction: CellContentFunction<T> = (entity, property) => entity[property] ? entity[property] : '',
public entityURL: (entity) => string) {
super('link', key, title, width, false);
}
}
export class DateEntityTableColumn<T extends BaseData<HasId>> extends EntityTableColumn<T> {
constructor(key: string,
title: string,
@ -131,7 +141,7 @@ export class DateEntityTableColumn<T extends BaseData<HasId>> extends EntityTabl
}
}
export type EntityColumn<T extends BaseData<HasId>> = EntityTableColumn<T> | EntityActionTableColumn<T>;
export type EntityColumn<T extends BaseData<HasId>> = EntityTableColumn<T> | EntityActionTableColumn<T> | EntityLinkTableColumn<T>;
export class EntityTableConfig<T extends BaseData<HasId>, P extends PageLink = PageLink, L extends BaseData<HasId> = T> {