Skip to content

Commit 7248122

Browse files
committed
fix: aaron provided workaround
1 parent 8ca1cab commit 7248122

File tree

2 files changed

+23
-20
lines changed

2 files changed

+23
-20
lines changed

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

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -146,33 +146,25 @@ export class TableWidgetRendererComponent
146146
label: capitalize(viewOption),
147147
value: viewOption
148148
}));
149-
150-
this.populateStaticControls();
151-
}
152-
153-
private populateStaticControls(): void {
154-
/*
155-
* CAUTION: If TableWidgetViewToggleModel is used, this.model is not hydrated until after setView() is called,
156-
* which is triggered by onViewChange().
157-
*/
158-
this.filterItems = this.model.getFilterOptions().map(filterOption => ({
159-
label: capitalize(filterOption.label),
160-
value: filterOption
161-
}));
162-
163-
this.maybeEmitInitialCheckboxFilterChange();
164149
}
165150

166151
public getChildModel = (row: TableRow): object | undefined => this.model.getChildModel(row);
167152

168153
protected fetchData(): Observable<TableDataSource<TableRow> | undefined> {
169154
return this.model.getData().pipe(
170155
startWith(undefined),
171-
tap(() => this.fetchAndPopulateDynamicControls())
156+
tap(() => this.fetchAndPopulateControlFilters())
172157
);
173158
}
174159

175-
protected fetchAndPopulateDynamicControls(): void {
160+
protected fetchAndPopulateControlFilters(): void {
161+
this.maybeEmitInitialCheckboxFilterChange();
162+
163+
this.filterItems = this.model.getFilterOptions().map(filterOption => ({
164+
label: capitalize(filterOption.label),
165+
value: filterOption
166+
}));
167+
176168
this.selectFilterItems$ = forkJoinSafeEmpty(
177169
this.model.getSelectFilterOptions().map(selectFilterModel =>
178170
// Fetch the values for the selectFilter dropdown
@@ -334,7 +326,6 @@ export class TableWidgetRendererComponent
334326

335327
public onViewChange(view: string): void {
336328
this.model.setView(view);
337-
this.populateStaticControls();
338329
this.columnConfigs$ = this.getColumnConfigs();
339330
}
340331

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { TableDataSource, TableRow } from '@hypertrace/components';
22
import { ArrayPropertyTypeInstance } from '@hypertrace/dashboards';
3-
import { ARRAY_PROPERTY, Model, ModelApi, ModelProperty, ModelPropertyType } from '@hypertrace/hyperdash';
3+
import { ARRAY_PROPERTY, Model, ModelApi, ModelOnInit, ModelProperty, ModelPropertyType } from '@hypertrace/hyperdash';
44
import { ModelInject, MODEL_API } from '@hypertrace/hyperdash-angular';
55
import { NEVER, Observable } from 'rxjs';
66
import { TableWidgetRowSelectionModel } from './selections/table-widget-row-selection.model';
@@ -14,7 +14,7 @@ import { TableWidgetModel } from './table-widget.model';
1414
@Model({
1515
type: 'table-widget-view-toggle'
1616
})
17-
export class TableWidgetViewToggleModel extends TableWidgetBaseModel {
17+
export class TableWidgetViewToggleModel extends TableWidgetBaseModel implements ModelOnInit {
1818
@ModelProperty({
1919
key: 'views',
2020
// tslint:disable-next-line: no-object-literal-type-assertion
@@ -32,8 +32,20 @@ export class TableWidgetViewToggleModel extends TableWidgetBaseModel {
3232
protected readonly api!: ModelApi;
3333

3434
private delegateModel?: TableWidgetModel;
35+
private currentView?: string;
36+
37+
public modelOnInit(): void {
38+
if (this.views.length > 0) {
39+
this.setView(this.views[0].label);
40+
}
41+
}
3542

3643
public setView(view: string): void {
44+
if (this.currentView === view) {
45+
return;
46+
}
47+
this.currentView = view;
48+
3749
if (this.delegateModel) {
3850
this.api.destroyChild(this.delegateModel);
3951
}

0 commit comments

Comments
 (0)