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
JavaScript
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==