UNPKG

2.95 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 return new (P || (P = Promise))(function (resolve, reject) {
5 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 step((generator = generator.apply(thisArg, _arguments || [])).next());
9 });
10};
11Object.defineProperty(exports, "__esModule", { value: true });
12exports.clearRootHTMLElement = exports.getRenderType = exports.RendererFactory = void 0;
13const AbstractRenderer_1 = require("./AbstractRenderer");
14const DocsRenderer_1 = require("./DocsRenderer");
15const CanvasRenderer_1 = require("./CanvasRenderer");
16class RendererFactory {
17 constructor() {
18 this.rendererMap = new Map();
19 }
20 getRendererInstance(storyId, targetDOMNode) {
21 return __awaiter(this, void 0, void 0, function* () {
22 // do nothing if the target node is null
23 // fix a problem when the docs asks 2 times the same component at the same time
24 // the 1st targetDOMNode of the 1st requested rendering becomes null 🤷‍♂️
25 if (targetDOMNode === null) {
26 return null;
27 }
28 const renderType = exports.getRenderType(targetDOMNode);
29 // keep only instances of the same type
30 if (this.lastRenderType && this.lastRenderType !== renderType) {
31 yield AbstractRenderer_1.AbstractRenderer.resetPlatformBrowserDynamic();
32 clearRootHTMLElement(renderType);
33 this.rendererMap.clear();
34 }
35 if (!this.rendererMap.has(storyId)) {
36 this.rendererMap.set(storyId, this.buildRenderer(storyId, renderType));
37 }
38 this.lastRenderType = renderType;
39 return this.rendererMap.get(storyId);
40 });
41 }
42 buildRenderer(storyId, renderType) {
43 if (renderType === 'docs') {
44 return new DocsRenderer_1.DocsRenderer(storyId);
45 }
46 return new CanvasRenderer_1.CanvasRenderer(storyId);
47 }
48}
49exports.RendererFactory = RendererFactory;
50exports.getRenderType = (targetDOMNode) => {
51 return targetDOMNode.id === 'root' ? 'canvas' : 'docs';
52};
53function clearRootHTMLElement(renderType) {
54 switch (renderType) {
55 case 'canvas':
56 global.document.getElementById('docs-root').innerHTML = '';
57 break;
58 case 'docs':
59 global.document.getElementById('root').innerHTML = '';
60 break;
61 default:
62 break;
63 }
64}
65exports.clearRootHTMLElement = clearRootHTMLElement;