Skip to content

Commit e1886ff

Browse files
May HartovMay Hartov
May Hartov
authored and
May Hartov
committed
Merged PR 101003: Added custom methods to support playground sandbox
Currently playground sandbox overrides element.createNode and powerbi JS service.handleEvent methods to allow safe evaluation of user code. Instead of overriding these general methods, added 2 custom methods to js SDK service.ts
1 parent db95e18 commit e1886ff

File tree

5 files changed

+47
-2
lines changed

5 files changed

+47
-2
lines changed

dist/powerbi-client.d.ts

+10
Original file line numberDiff line numberDiff line change
@@ -1608,6 +1608,8 @@ declare module "service" {
16081608
}
16091609
export interface IService {
16101610
hpm: hpm.HttpPostMessage;
1611+
preComponentCreation: (frame: HTMLIFrameElement) => void;
1612+
customEventHandler: (event: IEvent<any>) => void;
16111613
}
16121614
/**
16131615
* The Power BI Service embed component, which is the entry point to embed all other Power BI components into your application
@@ -1644,6 +1646,14 @@ declare module "service" {
16441646
* @hidden
16451647
*/
16461648
wpmp: wpmp.WindowPostMessageProxy;
1649+
/** An external function used to add custom functionality to embed setIframe. Used in playground safe-eval.
1650+
* @hidden
1651+
*/
1652+
preComponentCreation: (frame: HTMLIFrameElement) => void;
1653+
/** A custom event handler used to override the SDK default event handler. Used in playground safe-eval.
1654+
* @hidden
1655+
*/
1656+
customEventHandler: (event: IEvent<any>) => void;
16471657
private router;
16481658
private uniqueSessionId;
16491659
/**

dist/powerbi.js

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/powerbi.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/embed.ts

+5
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,11 @@ export abstract class Embed {
723723
while (node.firstChild) {
724724
node.removeChild(node.firstChild);
725725
}
726+
727+
if (this.service.preComponentCreation != null) {
728+
this.service.preComponentCreation(iframeContent);
729+
}
730+
726731
node.appendChild(iframeContent);
727732
this.iframe = <HTMLIFrameElement>node.firstChild;
728733
}

src/service.ts

+15
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ export interface IServiceConfiguration extends IDebugOptions {
7272

7373
export interface IService {
7474
hpm: hpm.HttpPostMessage;
75+
preComponentCreation: (frame: HTMLIFrameElement) => void;
76+
customEventHandler: (event: IEvent<any>) => void;
7577
}
7678

7779
/**
@@ -124,6 +126,14 @@ export class Service implements IService {
124126
* @hidden
125127
*/
126128
wpmp: wpmp.WindowPostMessageProxy;
129+
/** An external function used to add custom functionality to embed setIframe. Used in playground safe-eval.
130+
* @hidden
131+
*/
132+
public preComponentCreation: (frame: HTMLIFrameElement) => void = null;
133+
/** A custom event handler used to override the SDK default event handler. Used in playground safe-eval.
134+
* @hidden
135+
*/
136+
public customEventHandler: (event: IEvent<any>) => void = null;
127137
private router: router.Router;
128138
private uniqueSessionId: string;
129139

@@ -532,6 +542,11 @@ export class Service implements IService {
532542
* @hidden
533543
*/
534544
private handleEvent(event: IEvent<any>): void {
545+
if (this.customEventHandler != null) {
546+
this.customEventHandler(event);
547+
return;
548+
}
549+
535550
let embed = utils.find(embed => {
536551
return (embed.config.uniqueId === event.id);
537552
}, this.embeds);

0 commit comments

Comments
 (0)