storybook-addon-styled-components-themes
Version:
Storybook addon for styled components with theme provider
59 lines (58 loc) • 3.04 kB
JavaScript
;
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;