【仅供内部供应商使用,不提供对外解答和培训】
...
| Code Block | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
import { BIPluginAction, BIPluginMessage } from '@webui/bi/plugin/bi.plugin.constant';
export class BIPluginClient {
private connID: string | null = null;
/**
* data:如果是保存过的,这里直接填入开发者保存的信息,新建的话这里为null
* config:配置信息,比如提供所在模板等环境类信息,未来属性拓展也主要会放在这里
* saveSessionCallback(data: Object): Promise保存回调函数,入参为保存的json对象,返回值为Promise对象,返回保存成功或失败状态
* closeSessionCallback:调用该接口会结束当前页面会话,把主动权交给BI
* @param render
*/
public init(
render: (
data: any,
config: any,
saveSessionCallback: (data: any) => Promise<any>,
closeSessionCallBack: () => void,
extensionCallback?: (action: string, value: any) => void
) => void
): void {
addEventListener('message', (event: MessageEvent) => {
if (event.source === window.parent && event.data) {
const eventData = JSON.parse(event.data);
if (!this.connID && eventData.action === BIPluginAction.INIT) {
this.connID = eventData.connID;
} else {
if (this.connID === eventData.connID && eventData.action === BIPluginAction.RENDER) {
const { data, config } = eventData;
render(
data,
config,
this.saveSessionCallback.bind(this),
this.closeSessionCallback.bind(this),
this.extensionCallback.bind(this)
);
}
}
}
});
}
private sendMessage(action: BIPluginAction, data: any, config?: any) {
if (this.connID) {
const message: BIPluginMessage = { connID: this.connID, action, data, config };
parent.postMessage(JSON.stringify(message), '*');
}
}
private saveSessionCallback(data: any): Promise<any> {
return new Promise(resolve => {
const saveListener = (event: MessageEvent) => {
if (event.source === window.parent && event.data) {
const eventData = JSON.parse(event.data);
if (this.connID === eventData.connID && eventData.action === BIPluginAction.SAVE_COMPLETE) {
removeEventListener('message', saveListener);
resolve(eventData.data);
}
}
};
this.sendMessage(BIPluginAction.SAVE, data);
addEventListener('message', saveListener);
});
}
private closeSessionCallback(): void {
this.sendMessage(BIPluginAction.CLOSE, null);
}
private extensionCallback(action: string, value: any) {
this.sendMessage(action, value);
}
}
// @ts-ignore
window.BIPlugin = BIPluginClient; |
...