UNPKG

storybook-addon-styled-components-themes

Version:
59 lines (58 loc) 3.04 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var addons_1 = require("@storybook/addons"); var api_1 = require("@storybook/api"); var components_1 = require("@storybook/components"); var theming_1 = require("@storybook/theming"); var react_1 = __importDefault(require("react")); var constants_1 = require("./constants"); var models_1 = require("./models"); var Tool = theming_1.withTheme(function (_a) { var themeStorybook = _a.theme; var channel = addons_1.addons.getChannel(); var _b = api_1.useParameter(constants_1.PARAM_KEY, { themes: [], }), themes = _b.themes, indexStarted = _b.initialTheme, labelToShowName = _b.label; var _c = __read(api_1.useAddonState(constants_1.ADDON_ID, indexStarted || 0), 2), indexThemeSelected = _c[0], setIndexThemeSelected = _c[1]; var handleRequestThemes = function () { channel.emit(models_1.CHANNEL.LOAD_THEMES, themes); channel.emit(models_1.CHANNEL.CHANGE_THEME, indexThemeSelected); }; react_1.default.useEffect(function () { channel.on(models_1.CHANNEL.REQUEST_THEMES, handleRequestThemes); channel.emit(models_1.CHANNEL.LOAD_THEMES, themes); channel.emit(models_1.CHANNEL.CHANGE_THEME, indexThemeSelected); return function () { channel.removeListener(models_1.CHANNEL.REQUEST_THEMES, handleRequestThemes); }; }, [themeStorybook, themes, indexThemeSelected]); var menu = function () { return (react_1.default.createElement(components_1.WithTooltip, { placement: 'top', trigger: 'click', tooltip: function () { return (react_1.default.createElement(components_1.TooltipLinkList, { links: themes.map(function (theme, index) { return ({ id: "" + index, title: "" + (theme["" + labelToShowName] || theme['name'] || index), onClick: function () { return setIndexThemeSelected(index); }, }); }) })); }, closeOnClick: true }, react_1.default.createElement(components_1.IconButton, { title: "" + constants_1.TITLE }, themes[indexThemeSelected]["" + labelToShowName] || themes[indexThemeSelected]['name'] || indexThemeSelected))); }; return (react_1.default.createElement(react_1.default.Fragment, null, themes && themes.length ? menu() : react_1.default.createElement(react_1.default.Fragment, null))); }); exports.default = Tool;