Skip to content

Commit edcced1

Browse files
feat: i-frame component created (#1408)
* feat: iframe widget created * feat: iframe widget - updated test cases * feat: iframe widget - lint errors fixed * feat: iframe widget - lint errors fixed * feat: iframe widget - comments * feat: iframe widget - lint errors fixed * feat: iframe widget - lint errors fixed * feat: iframe widget - comments
1 parent 5084896 commit edcced1

File tree

7 files changed

+86
-1
lines changed

7 files changed

+86
-1
lines changed

projects/observability/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"@angular/common": "^12.2.1",
66
"@angular/core": "^12.2.1",
77
"@angular/material": "^12.2.1",
8+
"@angular/platform-browser": "^12.2.1",
89
"@angular/cdk": "^12.2.1",
910
"lodash-es": "^4.17.15",
1011
"@angular/router": "^12.2.1",

projects/observability/src/shared/dashboard/widgets/iframe/iframe-widget-renderer.component.scss

Whitespace-only changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { mockDashboardWidgetProviders } from '@hypertrace/dashboards/testing';
2+
import { createComponentFactory, Spectator } from '@ngneat/spectator/jest';
3+
4+
import { IframeWidgetRendererComponent } from './iframe-widget-renderer.component';
5+
6+
describe('IFrame Widget Renderer Component', () => {
7+
let spectator: Spectator<IframeWidgetRendererComponent>;
8+
9+
const createComponent = createComponentFactory<IframeWidgetRendererComponent>({
10+
component: IframeWidgetRendererComponent,
11+
providers: [...mockDashboardWidgetProviders({})],
12+
shallow: true
13+
});
14+
15+
test('should use iframe', () => {
16+
spectator = createComponent();
17+
expect(spectator.query('iframe')).toExist();
18+
});
19+
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';
2+
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
3+
import { WidgetRenderer } from '@hypertrace/dashboards';
4+
import { Renderer } from '@hypertrace/hyperdash';
5+
import { RendererApi, RENDERER_API } from '@hypertrace/hyperdash-angular';
6+
import { EMPTY, Observable } from 'rxjs';
7+
8+
import { IFrameWidgetModel } from './iframe-widget.model';
9+
10+
@Renderer({ modelClass: IFrameWidgetModel })
11+
@Component({
12+
selector: 'ht-iframe-widget-renderer',
13+
template: ` <iframe width="100%" height="100%" frameBorder="0" [src]="urlSafe"></iframe> `,
14+
changeDetection: ChangeDetectionStrategy.OnPush,
15+
styleUrls: ['./iframe-widget-renderer.component.scss']
16+
})
17+
export class IframeWidgetRendererComponent extends WidgetRenderer<IFrameWidgetModel> implements OnInit {
18+
public urlSafe?: SafeResourceUrl;
19+
20+
public constructor(
21+
public sanitizer: DomSanitizer,
22+
@Inject(RENDERER_API) api: RendererApi<IFrameWidgetModel>,
23+
changeDetector: ChangeDetectorRef
24+
) {
25+
super(api, changeDetector);
26+
}
27+
public ngOnInit(): void {
28+
this.urlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(this.model.source);
29+
}
30+
protected fetchData(): Observable<unknown> {
31+
return EMPTY;
32+
}
33+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Model, ModelProperty, STRING_PROPERTY } from '@hypertrace/hyperdash';
2+
3+
@Model({
4+
type: 'iframe-widget'
5+
})
6+
export class IFrameWidgetModel {
7+
@ModelProperty({
8+
key: 'source',
9+
type: STRING_PROPERTY.type
10+
})
11+
public source: string = '';
12+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { CommonModule } from '@angular/common';
2+
import { NgModule } from '@angular/core';
3+
import { DashboardCoreModule } from '@hypertrace/hyperdash-angular';
4+
import { IframeWidgetRendererComponent } from './iframe-widget-renderer.component';
5+
import { IFrameWidgetModel } from './iframe-widget.model';
6+
7+
@NgModule({
8+
declarations: [IframeWidgetRendererComponent],
9+
imports: [
10+
CommonModule,
11+
12+
DashboardCoreModule.with({
13+
models: [IFrameWidgetModel],
14+
renderers: [IframeWidgetRendererComponent]
15+
})
16+
]
17+
})
18+
export class IframeWidgetModule {}

projects/observability/src/shared/dashboard/widgets/observability-dashboard-widgets.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { ObservabilityTableCellRendererModule } from '../../components/table/obs
33
import { CartesianWidgetModule } from './charts/cartesian-widget/cartesian-widget.module';
44
import { DonutWidgetModule } from './donut/donut-widget.module';
55
import { GaugeWidgetModule } from './gauge/gauge-widget.module';
6+
import { IframeWidgetModule } from './iframe/iframe-widget.module';
67
import { MetricDisplayWidgetModule } from './metric-display/metric-display-widget.module';
78
import { RadarWidgetModule } from './radar/radar-widget.module';
89
import { TopNWidgetModule } from './top-n/top-n-widget.module';
@@ -17,7 +18,8 @@ import { TopologyWidgetModule } from './topology/topology-widget.module';
1718
ObservabilityTableCellRendererModule,
1819
DonutWidgetModule,
1920
CartesianWidgetModule,
20-
GaugeWidgetModule
21+
GaugeWidgetModule,
22+
IframeWidgetModule
2123
]
2224
})
2325
export class ObservabilityDashboardWidgetsModule {}

0 commit comments

Comments
 (0)