UNPKG

ngx-gem-spaas

Version:

This library contains services, components, images and styles to provide a unified look and way-of-working throughout GEM SPaaS.

78 lines 11.5 kB
import { Injectable } from '@angular/core'; import { fromEvent } from 'rxjs'; import { map } from 'rxjs/operators'; import { PostMessageEnum, PostMessageModel } from "../_models/post-message.model"; import * as i0 from "@angular/core"; import * as i1 from "./embed-mode.service"; import * as i2 from "./settings.service"; import * as i3 from "./theme.service"; export class PostMessageService { constructor(embedModeService, settingsService, themeService) { this.embedModeService = embedModeService; this.settingsService = settingsService; this.themeService = themeService; this.onEmbedMode(); this.startListening(); } onEmbedMode() { this.embedModeService.onNewEmbedMode() .subscribe((mode) => { if (mode?.isIframe()) { // ask for theme from parent this.postMessage(window.parent, new PostMessageModel(PostMessageEnum.getTheme)); } }); } startListening() { this.listenToPostMessages() .subscribe((msg) => { // ************************************** // MESSAGES TO BE PROCESSED BY PARENT // request for theme if (msg.msgType === PostMessageEnum.getTheme) { console.log('parent received request for theme'); this.postMessage(this.embedModeService.embeddedWindow, new PostMessageModel(PostMessageEnum.setTheme, this.themeService.getActiveTheme().name)); } // ************************************** // MESSAGES TO BE PROCESSED BY CHILD // set theme received from parent if (msg.msgType === PostMessageEnum.setTheme) { console.log('child received theme from parent: ' + msg.msgData); const settings = this.settingsService.getSettings(); settings.dark = msg.msgData === 'dark'; this.settingsService.newSettings(settings); this.themeService.setActiveTheme(msg.msgData); } }); } /** * When you've embedded a SPaaS app using an iframe, you can use this method to listen to * the messages it will post. Some messages are automatically processed, check the doc. */ listenToPostMessages() { return fromEvent(window, 'message') .pipe(map((m) => new PostMessageModel(m?.data?.msgType || '', m?.data?.msgData || ''))); } /** * When you've embedded a SPaaS app in an iframe and want to reply to some messages it will post, * you can use this method to do so. * * @param source the MessageEventSource of the iframe. You can retrieve its source by using * '@ViewChild('your_iframe_div') iframeDiv: ElementRef;' and then get 'this.iframeDiv.nativeElement.contentWindow' * @param msg the actual message to send to the child app in the iframe */ postMessage(source, msg) { if (source) { source.postMessage(msg, { targetOrigin: '*' }); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PostMessageService, deps: [{ token: i1.EmbedModeService }, { token: i2.SettingsService }, { token: i3.ThemeService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PostMessageService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PostMessageService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.EmbedModeService }, { type: i2.SettingsService }, { type: i3.ThemeService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1tZXNzYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZ2VtLXNwYWFzL3NyYy9fc2VydmljZXMvcG9zdC1tZXNzYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsU0FBUyxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7O0FBUWhGLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFDVSxnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsWUFBMEI7UUFGMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFFbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO2FBQ25DLFNBQVMsQ0FDUixDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1AsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDckIsNEJBQTRCO2dCQUM1QixJQUFJLENBQUMsV0FBVyxDQUNkLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsSUFBSSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQy9DLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQUU7YUFDeEIsU0FBUyxDQUNSLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFFTix5Q0FBeUM7WUFDekMscUNBQXFDO1lBRXJDLG9CQUFvQjtZQUNwQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxXQUFXLENBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFDcEMsSUFBSSxnQkFBZ0IsQ0FDbEIsZUFBZSxDQUFDLFFBQVEsRUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQ3hDLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFFRCx5Q0FBeUM7WUFDekMsb0NBQW9DO1lBRXBDLGlDQUFpQztZQUNqQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEQsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBRUgsQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CO1FBQ2xCLE9BQU8sU0FBUyxDQUFlLE1BQU0sRUFBRSxTQUFTLENBQUM7YUFDOUMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1IsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQ3JFLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsV0FBVyxDQUFDLE1BQTBDLEVBQUUsR0FBcUI7UUFDM0UsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7K0dBdkZVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2Zyb21FdmVudCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7UG9zdE1lc3NhZ2VFbnVtLCBQb3N0TWVzc2FnZU1vZGVsfSBmcm9tIFwiLi4vX21vZGVscy9wb3N0LW1lc3NhZ2UubW9kZWxcIjtcclxuaW1wb3J0IHtUaGVtZVNlcnZpY2V9IGZyb20gXCIuL3RoZW1lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuL3NldHRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtFbWJlZE1vZGVTZXJ2aWNlfSBmcm9tIFwiLi9lbWJlZC1tb2RlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBvc3RNZXNzYWdlU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbWJlZE1vZGVTZXJ2aWNlOiBFbWJlZE1vZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLm9uRW1iZWRNb2RlKCk7XHJcbiAgICB0aGlzLnN0YXJ0TGlzdGVuaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRW1iZWRNb2RlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbWJlZE1vZGVTZXJ2aWNlLm9uTmV3RW1iZWRNb2RlKClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAobW9kZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG1vZGU/LmlzSWZyYW1lKCkpIHtcclxuICAgICAgICAgICAgLy8gYXNrIGZvciB0aGVtZSBmcm9tIHBhcmVudFxyXG4gICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKFxyXG4gICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgbmV3IFBvc3RNZXNzYWdlTW9kZWwoUG9zdE1lc3NhZ2VFbnVtLmdldFRoZW1lKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRMaXN0ZW5pbmcoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3RlblRvUG9zdE1lc3NhZ2VzKClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAobXNnKSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAgIC8vIE1FU1NBR0VTIFRPIEJFIFBST0NFU1NFRCBCWSBQQVJFTlRcclxuXHJcbiAgICAgICAgICAvLyByZXF1ZXN0IGZvciB0aGVtZVxyXG4gICAgICAgICAgaWYgKG1zZy5tc2dUeXBlID09PSBQb3N0TWVzc2FnZUVudW0uZ2V0VGhlbWUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3BhcmVudCByZWNlaXZlZCByZXF1ZXN0IGZvciB0aGVtZScpO1xyXG4gICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW1iZWRNb2RlU2VydmljZS5lbWJlZGRlZFdpbmRvdyxcclxuICAgICAgICAgICAgICBuZXcgUG9zdE1lc3NhZ2VNb2RlbChcclxuICAgICAgICAgICAgICAgIFBvc3RNZXNzYWdlRW51bS5zZXRUaGVtZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGhlbWVTZXJ2aWNlLmdldEFjdGl2ZVRoZW1lKCkubmFtZVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgICAgLy8gTUVTU0FHRVMgVE8gQkUgUFJPQ0VTU0VEIEJZIENISUxEXHJcblxyXG4gICAgICAgICAgLy8gc2V0IHRoZW1lIHJlY2VpdmVkIGZyb20gcGFyZW50XHJcbiAgICAgICAgICBpZiAobXNnLm1zZ1R5cGUgPT09IFBvc3RNZXNzYWdlRW51bS5zZXRUaGVtZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY2hpbGQgcmVjZWl2ZWQgdGhlbWUgZnJvbSBwYXJlbnQ6ICcgKyBtc2cubXNnRGF0YSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0U2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgc2V0dGluZ3MuZGFyayA9IG1zZy5tc2dEYXRhID09PSAnZGFyayc7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLm5ld1NldHRpbmdzKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy50aGVtZVNlcnZpY2Uuc2V0QWN0aXZlVGhlbWUobXNnLm1zZ0RhdGEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHlvdSd2ZSBlbWJlZGRlZCBhIFNQYWFTIGFwcCB1c2luZyBhbiBpZnJhbWUsIHlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIGxpc3RlbiB0b1xyXG4gICAqIHRoZSBtZXNzYWdlcyBpdCB3aWxsIHBvc3QuIFNvbWUgbWVzc2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgcHJvY2Vzc2VkLCBjaGVjayB0aGUgZG9jLlxyXG4gICAqL1xyXG4gIGxpc3RlblRvUG9zdE1lc3NhZ2VzKCk6IE9ic2VydmFibGU8UG9zdE1lc3NhZ2VNb2RlbD4ge1xyXG4gICAgcmV0dXJuIGZyb21FdmVudDxNZXNzYWdlRXZlbnQ+KHdpbmRvdywgJ21lc3NhZ2UnKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKG0pID0+XHJcbiAgICAgICAgICBuZXcgUG9zdE1lc3NhZ2VNb2RlbChtPy5kYXRhPy5tc2dUeXBlIHx8ICcnLCBtPy5kYXRhPy5tc2dEYXRhIHx8ICcnKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4geW91J3ZlIGVtYmVkZGVkIGEgU1BhYVMgYXBwIGluIGFuIGlmcmFtZSBhbmQgd2FudCB0byByZXBseSB0byBzb21lIG1lc3NhZ2VzIGl0IHdpbGwgcG9zdCxcclxuICAgKiB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBkbyBzby5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3VyY2UgdGhlIE1lc3NhZ2VFdmVudFNvdXJjZSBvZiB0aGUgaWZyYW1lLiBZb3UgY2FuIHJldHJpZXZlIGl0cyBzb3VyY2UgYnkgdXNpbmdcclxuICAgKiAnQFZpZXdDaGlsZCgneW91cl9pZnJhbWVfZGl2JykgaWZyYW1lRGl2OiBFbGVtZW50UmVmOycgYW5kIHRoZW4gZ2V0ICd0aGlzLmlmcmFtZURpdi5uYXRpdmVFbGVtZW50LmNvbnRlbnRXaW5kb3cnXHJcbiAgICogQHBhcmFtIG1zZyB0aGUgYWN0dWFsIG1lc3NhZ2UgdG8gc2VuZCB0byB0aGUgY2hpbGQgYXBwIGluIHRoZSBpZnJhbWVcclxuICAgKi9cclxuICBwb3N0TWVzc2FnZShzb3VyY2U6IE1lc3NhZ2VFdmVudFNvdXJjZSB8IFdpbmRvdyB8IG51bGwsIG1zZzogUG9zdE1lc3NhZ2VNb2RlbCk6IHZvaWQge1xyXG4gICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICBzb3VyY2UucG9zdE1lc3NhZ2UobXNnLCB7dGFyZ2V0T3JpZ2luOiAnKid9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==