UNPKG

@skbkontur/storybook-addon-live-examples

Version:

Storybook live examples plugin

39 lines (38 loc) 2.28 kB
import { addons } from '@storybook/manager-api'; import React from 'react'; import { CanvasReplacer, Example } from './components'; import { extractLanguageFromFilename } from './components/utils'; import { LIVE_EXAMPLES_ADDON_ID } from './config'; export function storyBookLiveExampleDecorator(storyFn, context) { var _docs$source, _context$globals$them, _context$globals$them2, _addonConfig$decorato; var story = storyFn(); var addonConfig = addons.getConfig()[LIVE_EXAMPLES_ADDON_ID]; if (context.viewMode !== 'docs' || context.parameters.defaultCanvas || addonConfig.defaultCanvas) return story; var _context$parameters = context.parameters, _context$parameters$l = _context$parameters.live, live = _context$parameters$l === void 0 ? true : _context$parameters$l, _context$parameters$e = _context$parameters.expanded, expanded = _context$parameters$e === void 0 ? false : _context$parameters$e, docs = _context$parameters.docs, scope = _context$parameters.scope; var code = docs !== null && docs !== void 0 && (_docs$source = docs.source) !== null && _docs$source !== void 0 && _docs$source.originalSource ? "render(".concat(docs.source.originalSource, ")") : 'No code available'; var isDarkTheme = Boolean((_context$globals$them = context.globals["theme"]) === null || _context$globals$them === void 0 ? void 0 : (_context$globals$them2 = _context$globals$them.match(/dark/gi)) === null || _context$globals$them2 === void 0 ? void 0 : _context$globals$them2.length); // todo вынести в конфиг var example = /*#__PURE__*/React.createElement(Example, { code: code, live: live, expanded: expanded, scope: scope, isDarkTheme: isDarkTheme, language: typeof context.parameters.fileName === 'string' ? extractLanguageFromFilename(context.parameters.fileName) : undefined }); var decorators = (_addonConfig$decorato = addonConfig.decorators) !== null && _addonConfig$decorato !== void 0 ? _addonConfig$decorato : []; var result = decorators.reduce(function (acc, decorator) { return decorator(function () { return acc; }, context); }, example); return /*#__PURE__*/React.createElement(CanvasReplacer, { id: context.id }, result); } export default storyBookLiveExampleDecorator;