Skip to content

Commit

Permalink
fixup! feat(angular): use new targetDOMNode to render docs
Browse files Browse the repository at this point in the history
  • Loading branch information
ThibaudAV committed May 31, 2021
1 parent 9dda9a5 commit dc6cf48
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 146 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/t
import { addSerializer } from 'jest-specific-snapshot';
import { getStorybookModuleMetadata } from '@storybook/angular/renderer';
import { BehaviorSubject } from 'rxjs';
import { getPlatform } from '@angular/core';

addSerializer(HTMLCommentSerializer);
addSerializer(AngularSnapshotSerializer);
Expand Down
24 changes: 12 additions & 12 deletions app/angular/src/client/preview/angular-beta/AbstractRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,8 @@ export abstract class AbstractRenderer {
/**
* Wait and destroy the platform
*/
protected static resetPlatformBrowserDynamic() {
public static resetPlatformBrowserDynamic() {
return new Promise<void>((resolve) => {
resolve();
if (platformRef && !platformRef.destroyed) {
platformRef.onDestroy(async () => {
await AbstractRenderer.resetCompiledComponents();
Expand Down Expand Up @@ -70,7 +69,7 @@ export abstract class AbstractRenderer {
// Observable to change the properties dynamically without reloading angular module&component
protected storyProps$: Subject<ICollection | undefined>;

constructor(public storyId: string, public targetDOMNode: HTMLElement) {
constructor(public storyId: string) {
if (typeof NODE_ENV === 'string' && NODE_ENV !== 'development') {
try {
// platform should be set after enableProdMode()
Expand All @@ -84,10 +83,6 @@ export abstract class AbstractRenderer {

protected abstract beforeFullRender(): Promise<void>;

protected get targetSelector(): string {
return `${this.targetDOMNode.id}`;
}

/**
* Bootstrap main angular module with main component or send only new `props` with storyProps$
*
Expand All @@ -101,14 +96,18 @@ export abstract class AbstractRenderer {
storyFnAngular,
forced,
parameters,
targetDOMNode,
}: {
storyFnAngular: StoryFnAngularReturnType;
forced: boolean;
parameters: Parameters;
targetDOMNode: HTMLElement;
}) {
const targetSelector = `${this.storyId}`;

const newStoryProps$ = new BehaviorSubject<ICollection>(storyFnAngular.props);
const moduleMetadata = getStorybookModuleMetadata(
{ storyFnAngular, parameters, targetSelector: this.targetSelector },
{ storyFnAngular, parameters, targetSelector },
newStoryProps$
);

Expand All @@ -131,15 +130,16 @@ export abstract class AbstractRenderer {
}
this.storyProps$ = newStoryProps$;

this.initAngularRootElement();
this.initAngularRootElement(targetDOMNode, targetSelector);

await getPlatform().bootstrapModule(createStorybookModule(moduleMetadata));
}

protected initAngularRootElement() {
protected initAngularRootElement(targetDOMNode: HTMLElement, targetSelector: string) {
// Adds DOM element that angular will use as bootstrap component
this.targetDOMNode.innerHTML = '';
this.targetDOMNode.appendChild(document.createElement(this.targetSelector));
// eslint-disable-next-line no-param-reassign
targetDOMNode.innerHTML = '';
targetDOMNode.appendChild(document.createElement(targetSelector));
}

protected reset(): void {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export class CanvasRenderer extends AbstractRenderer {
storyFnAngular: StoryFnAngularReturnType;
forced: boolean;
parameters: Parameters;
targetDOMNode: HTMLElement;
}) {
await super.render(options).then(async () => {
await CanvasRenderer.resetCompiledComponents();
Expand Down
3 changes: 2 additions & 1 deletion app/angular/src/client/preview/angular-beta/DocsRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export class DocsRenderer extends AbstractRenderer {
storyFnAngular: StoryFnAngularReturnType;
forced: boolean;
parameters: Parameters;
targetDOMNode: HTMLElement;
}) {
// Note : no optimization on rendering when only args change
// the doc empties the html container every time, so we have to reset renderer
Expand All @@ -30,7 +31,7 @@ export class DocsRenderer extends AbstractRenderer {
await DocsRenderer.resetPlatformBrowserDynamic();
});

await super.render(options);
await super.render({ ...options, forced: false });
}

async beforeFullRender(): Promise<void> {
Expand Down

0 comments on commit dc6cf48

Please sign in to comment.