UNPKG

ngx-powerbi

Version:

TypeScript library for embedding Power BI assets (reports/dashboards/tiles) in your application. This TypeScript library is built on top of the official powerbi-client library provided by Microsoft.

1 lines 18 kB
{"version":3,"file":"ngx-powerbi.mjs","sources":["../../../projects/ngx-powerbi/src/lib/ngx-powerbi.service.ts","../../../projects/ngx-powerbi/src/lib/ngx-powerbi.component.ts","../../../projects/ngx-powerbi/src/lib/ngx-powerbi.module.ts","../../../projects/ngx-powerbi/src/public-api.ts","../../../projects/ngx-powerbi/src/ngx-powerbi.ts"],"sourcesContent":["import { Injectable, Optional } from '@angular/core';\r\nimport {\r\n Embed,\r\n factories,\r\n IEmbedConfiguration,\r\n Report,\r\n service as pbiService,\r\n Tile\r\n} from 'powerbi-client';\r\n\r\nexport function powerBiServiceFactory() {\r\n return new pbiService.Service(\r\n factories.hpmFactory,\r\n factories.wpmpFactory,\r\n factories.routerFactory\r\n );\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n useFactory: powerBiServiceFactory\r\n})\r\nexport class NgxPowerBiService {\r\n private powerBiCoreService: pbiService.Service;\r\n\r\n constructor(@Optional() private service?: pbiService.Service) {\r\n if (!service) {\r\n this.powerBiCoreService = new pbiService.Service(\r\n factories.hpmFactory,\r\n factories.wpmpFactory,\r\n factories.routerFactory\r\n );\r\n } else {\r\n this.powerBiCoreService = service;\r\n }\r\n }\r\n\r\n /**\r\n * Creates new report\r\n * @param HTMLElement Parent HTML element\r\n * @param IEmbedConfiguration Embed configuration\r\n * @returns Embed Embedded object\r\n */\r\n createReport(element: HTMLElement, config: IEmbedConfiguration): Embed {\r\n return this.powerBiCoreService.createReport(element, config);\r\n }\r\n\r\n /**\r\n * Given a configuration based on an HTML element,\r\n * if the component has already been created and attached to the element, reuses the component instance and existing iframe,\r\n * otherwise creates a new component instance.\r\n *\r\n * @param HTMLElement Parent HTML element\r\n * @param IEmbedConfiguration Embed configuration\r\n * @returns Embed Embedded object\r\n */\r\n embed(element: HTMLElement, config: IEmbedConfiguration): Embed {\r\n return this.powerBiCoreService.embed(element, config);\r\n }\r\n\r\n /**\r\n * Given a configuration based on an HTML element,\r\n * if the component has already been created and attached to the element, reuses the component instance and existing iframe,\r\n * otherwise creates a new component instance.\r\n * This is used for the phased embedding API, once element is loaded successfully, one can call 'render' on it.\r\n *\r\n * @param HTMLElement} Parent HTML element\r\n * @param IEmbedConfiguration Embed configuration\r\n * @returns Embed Embedded object\r\n */\r\n load(element: HTMLElement, config: IEmbedConfiguration): Embed {\r\n return this.powerBiCoreService.load(element, config);\r\n }\r\n\r\n /**\r\n * Adds an event handler for DOMContentLoaded, which searches the DOM for elements that have the 'powerbi-embed-url' attribute,\r\n * and automatically attempts to embed a Power BI component based on information from other powerbi-* attributes.\r\n *\r\n * Note: Only runs if `config.autoEmbedOnContentLoaded` is true when the service is created.\r\n * This handler is typically useful only for applications that are rendered on the server so that all\r\n * required data is available when the handler is called.\r\n */\r\n enableAutoEmbed(): void {\r\n return this.powerBiCoreService.enableAutoEmbed();\r\n }\r\n\r\n /**\r\n * Returns an instance of the component associated with the element.\r\n *\r\n * @param HTMLElement Parent HTML element\r\n * @returns (Report | Tile) Embedded report/tile object\r\n */\r\n get(element: HTMLElement): Embed {\r\n return this.powerBiCoreService.get(element);\r\n }\r\n\r\n /**\r\n * Finds an embed instance by the name or unique ID that is provided.\r\n *\r\n * @param string} uniqueId or name of the report/tile\r\n * @returns (Report | Tile) Embedded report/tile object\r\n */\r\n findById(uniqueId: string): Report | Tile {\r\n return this.powerBiCoreService.find(uniqueId);\r\n }\r\n\r\n /**\r\n * Given an HTML element that has a component embedded within it,\r\n * removes the component from the list of embedded components,\r\n * removes the association between the element and the component, and removes the iframe.\r\n *\r\n * @param HTMLElement Parent HTML element\r\n * @returns void\r\n */\r\n reset(element: HTMLElement): void {\r\n return this.powerBiCoreService.reset(element);\r\n }\r\n\r\n /**\r\n * handles tile events\r\n *\r\n * @param IEvent<any> event\r\n */\r\n handleTileEvents(event: pbiService.IEvent<any>): void {\r\n return this.powerBiCoreService.handleTileEvents(event);\r\n }\r\n\r\n /**\r\n * API for warm starting Power BI embedded endpoints.\r\n * Use this API to preload Power BI Embedded in the background.\r\n *\r\n * @param embed.IEmbedConfiguration Embed configuration\r\n * @param HTMLElement [element=undefined]\r\n */\r\n preload(\r\n config: IEmbedConfiguration,\r\n element: HTMLElement\r\n ): HTMLIFrameElement {\r\n return this.powerBiCoreService.preload(config, element);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n AfterViewInit,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport * as pbi from 'powerbi-client';\r\nimport * as models from 'powerbi-models';\r\n\r\nimport { NgxPowerBiService } from './ngx-powerbi.service';\r\n\r\nexport const enum TokenType {\r\n Aad = 'Aad',\r\n Embed = 'Embed'\r\n}\r\n\r\nexport const enum ReportType {\r\n Dashboard = 'Dashboard',\r\n Report = 'Report',\r\n Tile = 'Tile'\r\n}\r\n\r\n@Component({\r\n selector: 'ngx-powerbi-component',\r\n template: '<div #ngxPowerBiIFrame style=\"height:100%; width: 100%;\"></div>',\r\n styles: []\r\n})\r\nexport class NgxPowerBiComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n // Public properties\r\n @Input() accessToken: string;\r\n @Input() tokenType: TokenType;\r\n @Input() embedUrl: string;\r\n @Input() id: string;\r\n @Input() type: ReportType;\r\n @Input() name: string;\r\n @Input() options: models.ISettings;\r\n @Output() embedded = new EventEmitter<number>();\r\n @ViewChild('ngxPowerBiIFrame', {static: true}) ngxPowerBiIFrameRef: ElementRef;\r\n\r\n // Private fields\r\n private component: pbi.Embed;\r\n private powerBiService: NgxPowerBiService;\r\n\r\n constructor(private ngxPowerBiService: NgxPowerBiService) {\r\n this.powerBiService = ngxPowerBiService;\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Embed the report inside the view child that we have fetched from the DOM\r\n if (\r\n this.ngxPowerBiIFrameRef.nativeElement &&\r\n this.validateRequiredAttributes()\r\n ) {\r\n this.embed(this.ngxPowerBiIFrameRef.nativeElement, this.getConfig());\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.ngxPowerBiIFrameRef) {\r\n return;\r\n }\r\n const {\r\n accessToken,\r\n tokenType,\r\n embedUrl,\r\n id,\r\n type,\r\n name,\r\n options\r\n } = changes;\r\n\r\n // TODO: Validate these conditions\r\n /*if (\r\n (accessToken.previousValue !== undefined || accessToken.previousValue === accessToken.currentValue) &&\r\n embedUrl.previousValue === embedUrl.currentValue\r\n ) {\r\n return;\r\n }*/\r\n\r\n if (this.validateRequiredAttributes()) {\r\n const config = this.getConfig(\r\n accessToken && accessToken.currentValue,\r\n tokenType && tokenType.currentValue,\r\n embedUrl && embedUrl.currentValue,\r\n id && id.currentValue,\r\n type && type.currentValue,\r\n name && name.currentValue,\r\n options && options.currentValue\r\n );\r\n this.embed(this.ngxPowerBiIFrameRef.nativeElement, config);\r\n } else if (this.component) {\r\n this.reset(this.ngxPowerBiIFrameRef.nativeElement);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.component) {\r\n this.reset(this.ngxPowerBiIFrameRef.nativeElement);\r\n }\r\n }\r\n\r\n /**\r\n * Ensure required attributes (embedUrl and accessToken are valid before attempting to embed)\r\n */\r\n private validateRequiredAttributes(): boolean {\r\n return (\r\n typeof this.embedUrl === 'string' &&\r\n this.embedUrl.length > 0 &&\r\n (typeof this.accessToken === 'string' && this.accessToken.length > 0)\r\n );\r\n }\r\n\r\n /**\r\n * Get the model class compatible token enum from our token type enum\r\n * @param tokenType - Token type in our custom enum format\r\n * @returns Token type in powerbi-models.TokenType enum format\r\n */\r\n private getTokenType(tokenType: TokenType): models.TokenType {\r\n if (tokenType) {\r\n switch (tokenType) {\r\n case TokenType.Aad:\r\n return models.TokenType.Aad;\r\n case TokenType.Embed:\r\n return models.TokenType.Embed;\r\n default:\r\n return models.TokenType.Aad;\r\n }\r\n } else {\r\n // default is AAD\r\n return models.TokenType.Aad;\r\n }\r\n }\r\n\r\n /**\r\n * Returns an embed configuration object.\r\n * @param accessToken - Access token required to embed a component\r\n * @param tokenType - type of accessToken: Aad or Embed\r\n * @param embedUrl - Embed URL obtained through Power BI REST API or Portal\r\n * @param id - component/element GUID\r\n * @param type - type of embedded component e.g. 'dashboard, report or tile'\r\n * @param name - name of the embedded component\r\n * @param options - Embed configuration options\r\n * @returns Embed configuration object\r\n */\r\n private getConfig(\r\n accessToken?: string,\r\n tokenType?: TokenType,\r\n embedUrl?: string,\r\n id?: string,\r\n type?: ReportType,\r\n name?: string,\r\n options?: models.ISettings\r\n ): pbi.IEmbedConfiguration {\r\n // For null arguments - use the initial value\r\n // For specified arguments - use the current value\r\n return {\r\n type: type ? type : this.type ? this.type : ReportType.Report,\r\n embedUrl: embedUrl ? embedUrl : this.embedUrl,\r\n accessToken: accessToken ? accessToken : this.accessToken,\r\n tokenType: tokenType\r\n ? this.getTokenType(tokenType)\r\n : this.getTokenType(this.tokenType),\r\n id: id ? id : this.id,\r\n uniqueId: name ? name : this.name,\r\n settings: options ? options : this.options\r\n };\r\n }\r\n\r\n /**\r\n * Given an HTMLElement, construct an embed configuration based on attributes and pass to service.\r\n * @param element - native element where the embedding needs to be done\r\n * @param config - configuration to be embedded\r\n */\r\n private embed(element: HTMLElement, config: pbi.IEmbedConfiguration) {\r\n /*if (this.options) {\r\n const newConfig = { config, ...this.options };\r\n }*/\r\n\r\n this.component = this.powerBiService.embed(element, config);\r\n this.embedded.emit(this.component as any);\r\n }\r\n\r\n /**\r\n * Reset the component that has been removed from DOM.\r\n * @param element - native element where the embedded was made\r\n */\r\n reset(element: HTMLElement) {\r\n this.powerBiService.reset(element);\r\n this.component = null;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { NgxPowerBiComponent } from './ngx-powerbi.component';\r\n\r\n@NgModule({\r\n imports: [],\r\n declarations: [NgxPowerBiComponent],\r\n exports: [NgxPowerBiComponent]\r\n})\r\nexport class NgxPowerBiModule {}\r\n","/*\r\n * Public API Surface of ngx-powerbi\r\n */\r\n\r\nexport * from './lib/ngx-powerbi.service';\r\nexport * from './lib/ngx-powerbi.component';\r\nexport * from './lib/ngx-powerbi.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["pbiService","service","i1.NgxPowerBiService"],"mappings":"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"}