@stories-js/angular
Version:
Angular Stories renderer and wrapper for custom elements of Stories to be used as first-class Angular components
98 lines • 14.6 kB
JavaScript
import { Component, Input, EventEmitter } from '@angular/core';
import * as i0 from "@angular/core";
export class StoriesAngularRendererComponent {
constructor(vcRef, resolver) {
this.vcRef = vcRef;
this.resolver = resolver;
this.mountTarget = 'story-frame-root';
this.initialContent = `<!DOCTYPE html><html><title>Story</title><head></head><body style='height:100%;width: 100%'><div id="story-frame-root"></div></body></html>`;
this.subscriptions = [];
}
set story(value) {
this._story = value;
if (this.doc) {
// Create component
this.createComponent();
}
}
get story() {
return this._story;
}
onLoad(iframe) {
var _a;
this.doc = iframe.contentDocument || ((_a = iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.document);
if (this.doc) {
// Create component
this.createComponent();
}
}
// Get target for rendening
getTarget() {
if (this.doc) {
return this.doc.querySelector(this.mountTarget || '') || this.doc.body;
}
return undefined;
}
removeChildren(parent) {
while (parent.lastChild) {
parent.removeChild(parent.lastChild);
}
}
createComponent() {
// Remove old content
const target = this.getTarget();
if (target) {
this.removeChildren(target);
this.subscriptions.forEach(subscription => subscription.unsubscribe);
this.subscriptions.splice(0, this.subscriptions.length);
// Create component from story
if (this.story) {
const compFactory = this.resolver.resolveComponentFactory(this.story.component);
this.compRef = this.vcRef.createComponent(compFactory);
this.compRef.location.nativeElement.id = 'innerComp';
console.log('StoriesAngularRendererComponent.story', this.story);
const res = this.story.storyFn.apply(this.compRef.instance);
console.log('StoriesAngularRendererComponent.res', res);
if (res.props) {
Object.keys(res.props).forEach(prop => {
var _a, _b;
const field = ((_a = this.compRef) === null || _a === void 0 ? void 0 : _a.instance)[prop];
console.log('StoriesAngularRendererComponent.field', field);
if (field instanceof EventEmitter) {
const subscription = field.subscribe((response) => res.props[prop](response));
this.subscriptions.push(subscription);
}
else {
((_b = this.compRef) === null || _b === void 0 ? void 0 : _b.instance)[prop] = res.props[prop];
}
});
}
if (this.story.args) {
Object.keys(this.story.args).forEach(arg => {
var _a, _b;
((_a = this.compRef) === null || _a === void 0 ? void 0 : _a.instance)[arg] = ((_b = this.story) === null || _b === void 0 ? void 0 : _b.args)[arg];
});
}
// Find component to mountTarget in frame or its body
target.appendChild(this.compRef.location.nativeElement);
}
}
}
}
StoriesAngularRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: StoriesAngularRendererComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component });
StoriesAngularRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: StoriesAngularRendererComponent, selector: "stories-angular-renderer", inputs: { story: "story", mountTarget: "mountTarget", initialContent: "initialContent" }, ngImport: i0, template: "<ng-container>\n <iframe style=\"height: 100%; width: 100%;\" #iframe (load)=\"onLoad(iframe)\" [attr.srcDoc]=\"initialContent\"></iframe>\n</ng-container>\n", styles: [""] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: StoriesAngularRendererComponent, decorators: [{
type: Component,
args: [{
selector: 'stories-angular-renderer',
templateUrl: './stories-angular-renderer.component.html',
styleUrls: ['./stories-angular-renderer.component.css']
}]
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { story: [{
type: Input
}], mountTarget: [{
type: Input
}], initialContent: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rvcmllcy1hbmd1bGFyLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yaWVzLWFuZ3VsYXIvc3Rvcmllcy1hbmd1bGFyLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9zdG9yaWVzLWFuZ3VsYXIvc3Rvcmllcy1hbmd1bGFyLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVL0QsTUFBTSxPQUFPLCtCQUErQjtJQW9CMUMsWUFBb0IsS0FBdUIsRUFBVSxRQUFrQztRQUFuRSxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQTBCO1FBTDlFLGdCQUFXLEdBQXVCLGtCQUFrQixDQUFDO1FBQ3JELG1CQUFjLEdBQUcsNklBQTZJLENBQUM7UUFFeEssa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBRXdELENBQUM7SUFmNUYsSUFBYSxLQUFLLENBQUMsS0FBaUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQVFELE1BQU0sQ0FBQyxNQUF5Qjs7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsZUFBZSxLQUFJLE1BQUEsTUFBTSxDQUFDLGFBQWEsMENBQUUsUUFBUSxDQUFBLENBQUM7UUFDcEUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxlQUFlLEVB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SyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTs7d0JBQ3pDLENBQUMsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxRQUFnQixDQUFBLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLElBQVksQ0FBQSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4RSxDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxxREFBcUQ7Z0JBQ3JELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDekQ7U0FDRjtJQUNILENBQUM7OzRIQWxGVSwrQkFBK0I7Z0hBQS9CLCtCQUErQiwwSkNkNUMsZ0tBR0E7MkZEV2EsK0JBQStCO2tCQUwzQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFdBQVcsRUFBRSwyQ0FBMkM7b0JBQ3hELFNBQVMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDO2lCQUN4RDs4SUFNYyxLQUFLO3NCQUFqQixLQUFLO2dCQVVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50UmVmLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWltcG9ydHNcbmltcG9ydCB7IFZpZXdDb250YWluZXJSZWYsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB0eXBlIHsgU3RvcnlDb21wb25lbnQgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3Rvcmllcy1hbmd1bGFyLXJlbmRlcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0b3JpZXMtYW5ndWxhci1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0b3JpZXMtYW5ndWxhci1yZW5kZXJlci5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3Rvcmllc0FuZ3VsYXJSZW5kZXJlckNvbXBvbmVudCB7XG4gIGRvYzogRG9jdW1lbnQgfCB1bmRlZmluZWQ7XG4gIGNvbXBSZWY6IENvbXBvbmVudFJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBfc3Rvcnk6IFN0b3J5Q29tcG9uZW50IHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzZXQgc3RvcnkodmFsdWU6IFN0b3J5Q29tcG9uZW50IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc3RvcnkgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5kb2MpIHtcbiAgICAgIC8vIENyZWF0ZSBjb21wb25lbnRcbiAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XG4gICAgfVxuICB9XG4gIGdldCBzdG9yeSgpOiBTdG9yeUNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3J5O1xuICB9XG4gIEBJbnB1dCgpIG1vdW50VGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnc3RvcnktZnJhbWUtcm9vdCc7XG4gIEBJbnB1dCgpIGluaXRpYWxDb250ZW50ID0gYDwhRE9DVFlQRSBodG1sPjxodG1sPjx0aXRsZT5TdG9yeTwvdGl0bGU+PGhlYWQ+PC9oZWFkPjxib2R5IHN0eWxlPSdoZWlnaHQ6MTAwJTt3aWR0aDogMTAwJSc+PGRpdiBpZD1cInN0b3J5LWZyYW1lLXJvb3RcIj48L2Rpdj48L2JvZHk+PC9odG1sPmA7XG5cbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZjUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHsgfVxuXG4gIG9uTG9hZChpZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50KTp2b2lkIHtcbiAgICB0aGlzLmRvYyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xuICAgIGlmICh0aGlzLmRvYykge1xuICAgICAgLy8gQ3JlYXRlIGNvbXBvbmVudFxuICAgICAgdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgdGFyZ2V0IGZvciByZW5kZW5pbmdcbiAgZ2V0VGFyZ2V0KCk6IEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmRvYykge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jLnF1ZXJ5U2VsZWN0b3IodGhpcy5tb3VudFRhcmdldCB8fCAnJykgfHwgdGhpcy5kb2MuYm9keTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbW92ZUNoaWxkcmVuKHBhcmVudDogRWxlbWVudCk6IHZvaWQge1xuICAgIHdoaWxlIChwYXJlbnQubGFzdENoaWxkKSB7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50Lmxhc3RDaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQ29tcG9uZW50KCk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSBvbGQgY29udGVudFxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZ2V0VGFyZ2V0KCk7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbih0YXJnZXQpO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc3BsaWNlKDAsIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGgpO1xuICAgICAgLy8gQ3JlYXRlIGNvbXBvbmVudCBmcm9tIHN0b3J5XG4gICAgICBpZiAodGhpcy5zdG9yeSkge1xuICAgICAgICBjb25zdCBjb21wRmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5zdG9yeS5jb21wb25lbnQgYXMgVHlwZTx1bmtub3duPik7XG4gICAgICAgIHRoaXMuY29tcFJlZiA9IHRoaXMudmNSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5jb21wUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuaWQgPSAnaW5uZXJDb21wJztcbiAgICAgICAgY29uc29sZS5sb2coJ1N0b3JpZXNBbmd1bGFyUmVuZGVyZXJDb21wb25lbnQuc3RvcnknLCB0aGlzLnN0b3J5KTtcblxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnN0b3J5LnN0b3J5Rm4uYXBwbHkodGhpcy5jb21wUmVmLmluc3RhbmNlKSBhcyBhbnk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTdG9yaWVzQW5ndWxhclJlbmRlcmVyQ29tcG9uZW50LnJlcycsIHJlcyk7XG4gICAgICAgIGlmIChyZXMucHJvcHMpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhyZXMucHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9ICh0aGlzLmNvbXBSZWY/Lmluc3RhbmNlIGFzIGFueSlbcHJvcF0gYXMgdW5rbm93bjtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdG9yaWVzQW5ndWxhclJlbmRlcmVyQ29tcG9uZW50LmZpZWxkJywgZmllbGQpXG4gICAgICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gKGZpZWxkIGFzIEV2ZW50RW1pdHRlcjxhbnk+KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHJlcy5wcm9wc1twcm9wXShyZXNwb25zZSkpO1xuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgKHRoaXMuY29tcFJlZj8uaW5zdGFuY2UgYXMgYW55KVtwcm9wXSA9IHJlcy5wcm9wc1twcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0b3J5LmFyZ3MpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN0b3J5LmFyZ3MpLmZvckVhY2goYXJnID0+IHtcbiAgICAgICAgICAgICh0aGlzLmNvbXBSZWY/Lmluc3RhbmNlIGFzIGFueSlbYXJnXSA9ICh0aGlzLnN0b3J5Py5hcmdzIGFzIGFueSlbYXJnXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaW5kIGNvbXBvbmVudCB0byBtb3VudFRhcmdldCBpbiBmcmFtZSBvciBpdHMgYm9keVxuICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQodGhpcy5jb21wUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPGlmcmFtZSBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7XCIgI2lmcmFtZSAobG9hZCk9XCJvbkxvYWQoaWZyYW1lKVwiIFthdHRyLnNyY0RvY109XCJpbml0aWFsQ29udGVudFwiPjwvaWZyYW1lPlxuPC9uZy1jb250YWluZXI+XG4iXX0=