1 | "use strict";
|
2 | var __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 | };
|
11 | Object.defineProperty(exports, "__esModule", { value: true });
|
12 | exports.clearRootHTMLElement = exports.getRenderType = exports.RendererFactory = void 0;
|
13 | const AbstractRenderer_1 = require("./AbstractRenderer");
|
14 | const DocsRenderer_1 = require("./DocsRenderer");
|
15 | const CanvasRenderer_1 = require("./CanvasRenderer");
|
16 | class RendererFactory {
|
17 | constructor() {
|
18 | this.rendererMap = new Map();
|
19 | }
|
20 | getRendererInstance(storyId, targetDOMNode) {
|
21 | return __awaiter(this, void 0, void 0, function* () {
|
22 |
|
23 |
|
24 |
|
25 | if (targetDOMNode === null) {
|
26 | return null;
|
27 | }
|
28 | const renderType = exports.getRenderType(targetDOMNode);
|
29 |
|
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 | }
|
49 | exports.RendererFactory = RendererFactory;
|
50 | exports.getRenderType = (targetDOMNode) => {
|
51 | return targetDOMNode.id === 'root' ? 'canvas' : 'docs';
|
52 | };
|
53 | function 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 | }
|
65 | exports.clearRootHTMLElement = clearRootHTMLElement;
|