Skip to content

Commit 41e011d

Browse files
authored
fix: edit columns uses displayName when title not provided (#362)
* fix: edit columns uses displayName when title not provided * fix: linting and test
1 parent eb0a901 commit 41e011d

File tree

9 files changed

+44
-27
lines changed

9 files changed

+44
-27
lines changed

projects/components/src/table/table.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ import { TableColumnConfigExtended, TableService } from './table.service';
8888
[editable]="!this.isTreeType()"
8989
[metadata]="this.metadata"
9090
[columnConfig]="columnDef"
91-
[availableColumns]="this.visibleColumnConfigs$ | async"
91+
[availableColumns]="this.columnConfigs$ | async"
9292
[index]="index"
9393
[sort]="columnDef.sort"
9494
(sortChange)="this.onSortChange($event, columnDef)"
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
import { ChangeDetectionStrategy, Component } from '@angular/core';
22
import { Renderer } from '@hypertrace/hyperdash';
33
import { Observable } from 'rxjs';
4-
import { takeUntil } from 'rxjs/operators';
54
import { WidgetRenderer } from '../widget-renderer';
65
import { ConditionalModel } from './conditional.model';
76

87
@Renderer({ modelClass: ConditionalModel })
98
@Component({
109
selector: 'ht-conditional-widget',
1110
changeDetection: ChangeDetectionStrategy.OnPush,
12-
template: ` <ng-container [hdaDashboardModel]="this.getChildModel() | async"> </ng-container> `
11+
template: ` <ng-container [hdaDashboardModel]="this.data$ | async"> </ng-container> `
1312
})
1413
export class ConditionalWidgetRendererComponent extends WidgetRenderer<ConditionalModel> {
15-
public getChildModel(): Observable<object> {
16-
return this.model.getChildModel().pipe(takeUntil(this.destroyed$));
17-
}
18-
1914
protected fetchData(): Observable<object> {
20-
return this.getChildModel();
15+
return this.model.getChildModel();
2116
}
2217
}
Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import { fakeAsync } from '@angular/core/testing';
12
import { CoreTableCellRendererType } from '@hypertrace/components';
3+
import { runFakeRxjs } from '@hypertrace/test-utils';
24
import { SpecificationBuilder } from '../../../graphql/request/builders/specification/specification-builder';
35
import { TableWidgetColumnModel } from './table-widget-column.model';
46

@@ -11,20 +13,21 @@ describe('Table widget column model', () => {
1113
};
1214
const specBuilder = new SpecificationBuilder();
1315

14-
test('builds a column def for an attribute specification', () => {
16+
test('builds a column def for an attribute specification', fakeAsync(() => {
1517
const model = buildModel({
1618
value: specBuilder.attributeSpecificationForKey('name'),
1719
title: 'Name column',
1820
display: CoreTableCellRendererType.Text
1921
});
2022

21-
const columnDef = model.asTableColumnDef();
22-
expect(columnDef).toEqual(
23-
expect.objectContaining({
24-
id: 'name',
25-
title: 'Name column',
26-
display: CoreTableCellRendererType.Text
27-
})
28-
);
29-
});
23+
runFakeRxjs(({ expectObservable }) => {
24+
expectObservable(model.asTableColumnDef()).toBe('(x|)', {
25+
x: expect.objectContaining({
26+
id: 'name',
27+
title: 'Name column',
28+
display: CoreTableCellRendererType.Text
29+
})
30+
});
31+
});
32+
}));
3033
});

projects/distributed-tracing/src/shared/dashboard/widgets/table/table-widget-column.model.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import {
77
} from '@hypertrace/components';
88
import { EnumPropertyTypeInstance, ENUM_TYPE } from '@hypertrace/dashboards';
99
import { BOOLEAN_PROPERTY, Model, ModelProperty, ModelPropertyType, STRING_PROPERTY } from '@hypertrace/hyperdash';
10+
import { ModelInject } from '@hypertrace/hyperdash-angular';
11+
import { Observable, of } from 'rxjs';
12+
import { map } from 'rxjs/operators';
1013
import { Specification } from '../../../graphql/model/schema/specifier/specification';
14+
import { MetadataService } from '../../../services/metadata/metadata.service';
1115
import { InteractionHandler } from '../../interaction/interaction-handler';
1216

1317
@Model({
@@ -91,12 +95,23 @@ export class TableWidgetColumnModel {
9195
})
9296
public sort?: TableSortDirection;
9397

94-
public asTableColumnDef(): SpecificationBackedTableColumnDef {
98+
@ModelInject(MetadataService)
99+
private readonly metadataService!: MetadataService;
100+
101+
public asTableColumnDef(scope?: string): Observable<SpecificationBackedTableColumnDef> {
102+
return scope !== undefined
103+
? this.metadataService
104+
.getAttributeKeyDisplayName(scope, this.value.name)
105+
.pipe(map(displayName => this.toSpecificationBackedColumnDef(displayName)))
106+
: of(this.toSpecificationBackedColumnDef());
107+
}
108+
109+
private toSpecificationBackedColumnDef(displayName?: string): SpecificationBackedTableColumnDef {
95110
return {
96111
id: this.value.resultAlias(),
97112
name: this.value.name,
98113
display: this.display,
99-
title: this.title ?? this.value.name,
114+
title: this.title ?? displayName ?? this.value.name,
100115
titleTooltip: this.titleTooltip,
101116
alignment: this.alignment,
102117
width: this.width,

projects/distributed-tracing/src/shared/dashboard/widgets/table/table-widget.model.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { forkJoinSafeEmpty } from '@hypertrace/common';
12
import { TableDataSource, TableMode, TableRow, TableSelectionMode, TableStyle } from '@hypertrace/components';
23
import {
34
ArrayPropertyTypeInstance,
@@ -18,7 +19,8 @@ import {
1819
STRING_PROPERTY
1920
} from '@hypertrace/hyperdash';
2021
import { ModelInject, MODEL_API } from '@hypertrace/hyperdash-angular';
21-
import { Observable, of } from 'rxjs';
22+
import { Observable } from 'rxjs';
23+
import { switchMap } from 'rxjs/operators';
2224
import { InteractionHandler } from '../../interaction/interaction-handler';
2325
import { TableWidgetRowSelectionModel } from './selections/table-widget-row-selection.model';
2426
import { TableWidgetColumnsService } from './services/table-widget-columns.service';
@@ -185,13 +187,15 @@ export class TableWidgetModel {
185187
}
186188

187189
public getColumns(scope?: string): Observable<SpecificationBackedTableColumnDef[]> {
188-
const modelColumns = this.columns.map(column => column.asTableColumnDef());
190+
const modelColumns: Observable<SpecificationBackedTableColumnDef[]> = forkJoinSafeEmpty(
191+
this.columns.map(column => column.asTableColumnDef(scope))
192+
);
189193

190194
if (scope === undefined || !this.fetchEditableColumns) {
191-
return of(modelColumns);
195+
return modelColumns;
192196
}
193197

194-
return this.tableWidgetColumnsService.fetchColumn(scope, modelColumns);
198+
return modelColumns.pipe(switchMap(columns => this.tableWidgetColumnsService.fetchColumn(scope, columns)));
195199
}
196200

197201
public getChildModel(row: TableRow): object | undefined {

projects/observability/src/pages/apis/services/service-list.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ChangeDetectionStrategy, Component } from '@angular/core';
2-
import { servicesListDashboard } from './services-list-dashboard';
2+
import { servicesListDashboard } from './services-list.dashboard';
33

44
@Component({
55
changeDetection: ChangeDetectionStrategy.OnPush,

projects/observability/src/pages/apis/services/service-list.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { PageHeaderModule } from '@hypertrace/components';
33
import { NavigableDashboardModule } from '@hypertrace/distributed-tracing';
44
import { ObservabilityDashboardModule } from '../../../shared/dashboard/observability-dashboard.module';
55
import { ServiceListComponent } from './service-list.component';
6-
import { servicesListDashboard } from './services-list-dashboard';
6+
import { servicesListDashboard } from './services-list.dashboard';
77

88
@NgModule({
99
imports: [
File renamed without changes.

projects/observability/src/public-api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export * from './shared/components/donut/donut';
6767
export * from './pages/apis/backends/backend-list.module';
6868
export * from './pages/apis/backends/backend-list.component';
6969
export * from './pages/apis/services/service-list.component';
70-
export * from './pages/apis/services/services-list-dashboard';
70+
export * from './pages/apis/services/services-list.dashboard';
7171
export * from './pages/apis/topology/application-flow.component';
7272
export * from './pages/apis/topology/application-flow.module';
7373

0 commit comments

Comments
 (0)